From 08e9776a4ac507d931e8f3e282b2778cd7640af0 Mon Sep 17 00:00:00 2001 From: parrt Date: Tue, 15 Nov 2016 11:08:19 -0800 Subject: [PATCH] shift template-based runtime test to legacy, new mechanism uses annotation to get multi-line strings into java. all tests pass minus about 15 in C# --- .travis.yml | 3 +- antlr4-maven-plugin/pom.xml | 10 +- pom.xml | 7 +- runtime-testsuite-legacy/pom.xml | 114 + .../org/antlr/v4/test/runtime/TestInfo.stg | 111 + .../antlr/v4/test/runtime/cpp/Cpp.test.stg | 173 +- .../runtime/csharp/Antlr4.Test.mono.csproj | 0 .../runtime/csharp/Antlr4.Test.vs2013.csproj | 0 .../antlr/v4/test/runtime/csharp/App.config | 0 .../v4/test/runtime/csharp/AssemblyInfo.cs | 0 .../v4/test/runtime/csharp/CSharp.test.stg | 161 - .../org/antlr/v4/test/runtime/go/Go.test.stg | 162 - .../antlr/v4/test/runtime/java/Java.test.stg | 170 - .../runtime/javascript/chrome/Chrome.test.stg | 165 +- .../javascript/explorer/Explorer.test.stg | 294 + .../javascript/firefox/Firefox.test.stg | 160 - .../runtime/javascript/node/Node.test.stg | 160 - .../runtime/javascript/safari/Safari.test.stg | 160 - .../v4/test/runtime/python2/Python2.test.stg | 171 - .../v4/test/runtime/python3/Python3.test.stg | 171 - .../LexerDelegatorInvokesDelegateRule.stg | 2 +- .../LexerDelegatorRuleOverridesDelegate.stg | 2 +- .../BringInLiteralsFromDelegate.stg | 0 .../CombinedImportsCombined.stg | 0 .../DelegatesSeeSameTokenType.stg | 0 .../DelegatorAccessesDelegateMembers.stg | 0 .../DelegatorInvokesDelegateRule.stg | 0 .../DelegatorInvokesDelegateRuleWithArgs.stg | 0 ...torInvokesDelegateRuleWithReturnStruct.stg | 0 ...gatorInvokesFirstVersionOfDelegateRule.stg | 0 .../DelegatorRuleOverridesDelegate.stg | 0 .../DelegatorRuleOverridesDelegates.stg | 0 ...egatorRuleOverridesLookaheadInDelegate.stg | 0 .../ImportLexerWithOnlyFragmentRules.stg | 2 +- .../ImportedGrammarWithEmptyOptions.stg | 0 .../ImportedRuleWithAction.stg | 0 .../CompositeParsers/KeywordVSIDOrder.stg | 0 .../AmbigYieldsCtxSensitiveDFA.stg | 0 .../FullContextParsing/AmbiguityNoLoop.stg | 0 .../FullContextParsing/CtxSensitiveDFA.stg | 0 .../CtxSensitiveDFATwoDiffInput.stg | 0 .../FullContextParsing/CtxSensitiveDFA_1.stg | 0 .../FullContextParsing/CtxSensitiveDFA_2.stg | 0 .../FullContextParsing/ExprAmbiguity.stg | 0 .../FullContextParsing/ExprAmbiguity_1.stg | 0 .../FullContextParsing/ExprAmbiguity_2.stg | 0 .../FullContextIF_THEN_ELSEParse.stg | 0 .../FullContextIF_THEN_ELSEParse_1.stg | 0 .../FullContextIF_THEN_ELSEParse_2.stg | 0 .../FullContextIF_THEN_ELSEParse_3.stg | 0 .../FullContextIF_THEN_ELSEParse_4.stg | 0 .../FullContextIF_THEN_ELSEParse_5.stg | 0 .../FullContextIF_THEN_ELSEParse_6.stg | 0 .../LoopsSimulateTailRecursion.stg | 0 .../SLLSeesEOFInLLGrammar.stg | 0 .../v4/test/runtime/templates/JUnitGen.stg | 156 + .../templates/LeftRecursion/AmbigLR.stg | 0 .../templates/LeftRecursion/AmbigLR_1.stg | 0 .../templates/LeftRecursion/AmbigLR_2.stg | 0 .../templates/LeftRecursion/AmbigLR_3.stg | 0 .../templates/LeftRecursion/AmbigLR_4.stg | 0 .../templates/LeftRecursion/AmbigLR_5.stg | 0 .../templates/LeftRecursion/Declarations.stg | 0 .../LeftRecursion/Declarations_1.stg | 0 .../LeftRecursion/Declarations_10.stg | 0 .../LeftRecursion/Declarations_2.stg | 0 .../LeftRecursion/Declarations_3.stg | 0 .../LeftRecursion/Declarations_4.stg | 0 .../LeftRecursion/Declarations_5.stg | 0 .../LeftRecursion/Declarations_6.stg | 0 .../LeftRecursion/Declarations_7.stg | 0 .../LeftRecursion/Declarations_8.stg | 0 .../LeftRecursion/Declarations_9.stg | 0 .../DirectCallToLeftRecursiveRule.stg | 0 .../DirectCallToLeftRecursiveRule_1.stg | 0 .../DirectCallToLeftRecursiveRule_2.stg | 0 .../DirectCallToLeftRecursiveRule_3.stg | 0 .../templates/LeftRecursion/Expressions.stg | 0 .../templates/LeftRecursion/Expressions_1.stg | 0 .../templates/LeftRecursion/Expressions_2.stg | 0 .../templates/LeftRecursion/Expressions_3.stg | 0 .../templates/LeftRecursion/Expressions_4.stg | 0 .../templates/LeftRecursion/Expressions_5.stg | 0 .../templates/LeftRecursion/Expressions_6.stg | 0 .../templates/LeftRecursion/Expressions_7.stg | 0 .../LeftRecursion/JavaExpressions.stg | 0 .../LeftRecursion/JavaExpressions_1.stg | 0 .../LeftRecursion/JavaExpressions_10.stg | 0 .../LeftRecursion/JavaExpressions_11.stg | 0 .../LeftRecursion/JavaExpressions_12.stg | 0 .../LeftRecursion/JavaExpressions_2.stg | 0 .../LeftRecursion/JavaExpressions_3.stg | 0 .../LeftRecursion/JavaExpressions_4.stg | 0 .../LeftRecursion/JavaExpressions_5.stg | 0 .../LeftRecursion/JavaExpressions_6.stg | 0 .../LeftRecursion/JavaExpressions_7.stg | 0 .../LeftRecursion/JavaExpressions_8.stg | 0 .../LeftRecursion/JavaExpressions_9.stg | 0 .../LeftRecursion/LabelsOnOpSubrule.stg | 0 .../LeftRecursion/LabelsOnOpSubrule_1.stg | 0 .../LeftRecursion/LabelsOnOpSubrule_2.stg | 0 .../LeftRecursion/LabelsOnOpSubrule_3.stg | 0 .../LeftRecursion/MultipleActions.stg | 0 .../MultipleActionsPredicatesOptions.stg | 0 .../MultipleActionsPredicatesOptions_1.stg | 0 .../MultipleActionsPredicatesOptions_2.stg | 0 .../MultipleActionsPredicatesOptions_3.stg | 0 .../LeftRecursion/MultipleActions_1.stg | 0 .../LeftRecursion/MultipleActions_2.stg | 0 .../LeftRecursion/MultipleActions_3.stg | 0 .../MultipleAlternativesWithCommonLabel.stg | 0 .../MultipleAlternativesWithCommonLabel_1.stg | 0 .../MultipleAlternativesWithCommonLabel_2.stg | 0 .../MultipleAlternativesWithCommonLabel_3.stg | 0 .../MultipleAlternativesWithCommonLabel_4.stg | 0 .../PrecedenceFilterConsidersContext.stg | 0 .../LeftRecursion/PrefixAndOtherAlt.stg | 0 .../LeftRecursion/PrefixAndOtherAlt_1.stg | 0 .../LeftRecursion/PrefixAndOtherAlt_2.stg | 0 .../PrefixOpWithActionAndLabel.stg | 0 .../PrefixOpWithActionAndLabel_1.stg | 0 .../PrefixOpWithActionAndLabel_2.stg | 0 .../PrefixOpWithActionAndLabel_3.stg | 0 .../LeftRecursion/ReturnValueAndActions.stg | 0 .../ReturnValueAndActionsAndLabels.stg | 0 .../ReturnValueAndActionsAndLabels_1.stg | 0 .../ReturnValueAndActionsAndLabels_2.stg | 0 .../ReturnValueAndActionsAndLabels_3.stg | 0 .../ReturnValueAndActionsAndLabels_4.stg | 0 .../ReturnValueAndActionsList1.stg | 0 .../ReturnValueAndActionsList1_1.stg | 0 .../ReturnValueAndActionsList1_2.stg | 0 .../ReturnValueAndActionsList1_3.stg | 0 .../ReturnValueAndActionsList1_4.stg | 0 .../ReturnValueAndActionsList2.stg | 0 .../ReturnValueAndActionsList2_1.stg | 0 .../ReturnValueAndActionsList2_2.stg | 0 .../ReturnValueAndActionsList2_3.stg | 0 .../ReturnValueAndActionsList2_4.stg | 0 .../LeftRecursion/ReturnValueAndActions_1.stg | 0 .../LeftRecursion/ReturnValueAndActions_2.stg | 0 .../LeftRecursion/ReturnValueAndActions_3.stg | 0 .../LeftRecursion/ReturnValueAndActions_4.stg | 0 .../templates/LeftRecursion/SemPred.stg | 0 .../LeftRecursion/SemPredFailOption.stg | 0 .../templates/LeftRecursion/Simple.stg | 0 .../templates/LeftRecursion/Simple_1.stg | 0 .../templates/LeftRecursion/Simple_2.stg | 0 .../templates/LeftRecursion/Simple_3.stg | 0 .../templates/LeftRecursion/TernaryExpr.stg | 0 .../TernaryExprExplicitAssociativity.stg | 0 .../TernaryExprExplicitAssociativity_1.stg | 0 .../TernaryExprExplicitAssociativity_2.stg | 0 .../TernaryExprExplicitAssociativity_3.stg | 0 .../TernaryExprExplicitAssociativity_4.stg | 0 .../TernaryExprExplicitAssociativity_5.stg | 0 .../TernaryExprExplicitAssociativity_6.stg | 0 .../TernaryExprExplicitAssociativity_7.stg | 0 .../TernaryExprExplicitAssociativity_8.stg | 0 .../TernaryExprExplicitAssociativity_9.stg | 0 .../templates/LeftRecursion/TernaryExpr_1.stg | 0 .../templates/LeftRecursion/TernaryExpr_2.stg | 0 .../templates/LeftRecursion/TernaryExpr_3.stg | 0 .../templates/LeftRecursion/TernaryExpr_4.stg | 0 .../templates/LeftRecursion/TernaryExpr_5.stg | 0 .../templates/LeftRecursion/TernaryExpr_6.stg | 0 .../templates/LeftRecursion/TernaryExpr_7.stg | 0 .../templates/LeftRecursion/TernaryExpr_8.stg | 0 .../templates/LeftRecursion/TernaryExpr_9.stg | 0 .../LeftRecursion/WhitespaceInfluence.stg | 0 .../LeftRecursion/WhitespaceInfluence_1.stg | 0 .../LeftRecursion/WhitespaceInfluence_2.stg | 0 .../DFAToATNThatFailsBackToDFA.stg | 0 .../DFAToATNThatMatchesThenFailsInATN.stg | 0 .../EnforcedGreedyNestedBrances.stg | 0 .../EnforcedGreedyNestedBrances_1.stg | 0 .../EnforcedGreedyNestedBrances_2.stg | 0 .../templates/LexerErrors/ErrorInMiddle.stg | 0 .../LexerErrors/InvalidCharAtStart.stg | 0 .../InvalidCharAtStartAfterDFACache.stg | 0 .../LexerErrors/InvalidCharInToken.stg | 0 .../InvalidCharInTokenAfterDFACache.stg | 0 .../templates/LexerErrors/LexerExecDFA.stg | 0 .../LexerErrors/StringsEmbeddedInActions.stg | 0 .../StringsEmbeddedInActions_1.stg | 0 .../StringsEmbeddedInActions_2.stg | 0 .../templates/LexerExec/ActionPlacement.stg | 0 .../runtime/templates/LexerExec/CharSet.stg | 0 .../templates/LexerExec/CharSetInSet.stg | 0 .../templates/LexerExec/CharSetNot.stg | 0 .../templates/LexerExec/CharSetPlus.stg | 0 .../templates/LexerExec/CharSetRange.stg | 0 .../LexerExec/CharSetWithEscapedChar.stg | 2 +- .../LexerExec/CharSetWithMissingEndRange.stg | 0 .../CharSetWithMissingEscapeChar.stg | 2 +- .../templates/LexerExec/CharSetWithQuote1.stg | 0 .../templates/LexerExec/CharSetWithQuote2.stg | 0 .../LexerExec/CharSetWithReversedRange.stg | 2 +- .../templates/LexerExec/EOFByItself.stg | 0 .../LexerExec/EOFSuffixInFirstRule.stg | 0 .../LexerExec/EOFSuffixInFirstRule_1.stg | 0 .../LexerExec/EOFSuffixInFirstRule_2.stg | 0 .../templates/LexerExec/GreedyClosure.stg | 0 .../templates/LexerExec/GreedyConfigs.stg | 0 .../templates/LexerExec/GreedyOptional.stg | 0 .../LexerExec/GreedyPositiveClosure.stg | 0 .../runtime/templates/LexerExec/HexVsID.stg | 0 .../runtime/templates/LexerExec/KeywordID.stg | 0 .../templates/LexerExec/LargeLexer.stg | 0 .../templates/LexerExec/NonGreedyClosure.stg | 0 .../templates/LexerExec/NonGreedyConfigs.stg | 0 .../templates/LexerExec/NonGreedyOptional.stg | 0 .../LexerExec/NonGreedyPositiveClosure.stg | 0 .../LexerExec/NonGreedyTermination1.stg | 0 .../LexerExec/NonGreedyTermination2.stg | 0 .../templates/LexerExec/Parentheses.stg | 0 .../LexerExec/PositionAdjustingLexer.stg | 0 .../templates/LexerExec/QuoteTranslation.stg | 0 .../RecursiveLexerRuleRefWithWildcardPlus.stg | 0 ...ecursiveLexerRuleRefWithWildcardPlus_1.stg | 0 ...ecursiveLexerRuleRefWithWildcardPlus_2.stg | 0 .../RecursiveLexerRuleRefWithWildcardStar.stg | 0 ...ecursiveLexerRuleRefWithWildcardStar_1.stg | 0 ...ecursiveLexerRuleRefWithWildcardStar_2.stg | 0 ...RefToRuleDoesNotSetTokenNorEmitAnother.stg | 0 .../runtime/templates/LexerExec/Slashes.stg | 0 .../templates/LexerExec/ZeroLengthToken.stg | 0 .../runtime/templates/Listeners/Basic.stg | 0 .../test/runtime/templates/Listeners/LR.stg | 0 .../templates/Listeners/LRWithLabels.stg | 0 .../templates/Listeners/RuleGetters.stg | 0 .../templates/Listeners/RuleGetters_1.stg | 0 .../templates/Listeners/RuleGetters_2.stg | 0 .../templates/Listeners/TokenGetters.stg | 0 .../templates/Listeners/TokenGetters_1.stg | 0 .../templates/Listeners/TokenGetters_2.stg | 0 .../runtime/templates/ParseTrees/AltNum.stg | 0 .../templates/ParseTrees/ExtraToken.stg | 0 .../templates/ParseTrees/NoViableAlt.stg | 0 .../runtime/templates/ParseTrees/RuleRef.stg | 0 .../runtime/templates/ParseTrees/Sync.stg | 0 .../runtime/templates/ParseTrees/Token2.stg | 0 .../ParseTrees/TokenAndRuleContextString.stg | 0 .../templates/ParseTrees/TwoAltLoop.stg | 0 .../runtime/templates/ParseTrees/TwoAlts.stg | 0 .../ParserErrors/ConjuringUpToken.stg | 0 .../ParserErrors/ConjuringUpTokenFromSet.stg | 0 .../ParserErrors/ContextListGetters.stg | 0 .../DuplicatedLeftRecursiveCall.stg | 0 .../DuplicatedLeftRecursiveCall_1.stg | 0 .../DuplicatedLeftRecursiveCall_2.stg | 0 .../DuplicatedLeftRecursiveCall_3.stg | 0 .../DuplicatedLeftRecursiveCall_4.stg | 0 .../ParserErrors/InvalidATNStateRemoval.stg | 0 .../ParserErrors/InvalidEmptyInput.stg | 0 .../templates/ParserErrors/LL1ErrorInfo.stg | 0 .../runtime/templates/ParserErrors/LL2.stg | 0 .../runtime/templates/ParserErrors/LL3.stg | 0 .../runtime/templates/ParserErrors/LLStar.stg | 0 .../MultiTokenDeletionBeforeLoop.stg | 0 .../MultiTokenDeletionBeforeLoop2.stg | 0 .../MultiTokenDeletionDuringLoop.stg | 0 .../MultiTokenDeletionDuringLoop2.stg | 0 .../ParserErrors/NoViableAltAvoidance.stg | 0 .../ParserErrors/SingleSetInsertion.stg | 0 .../SingleSetInsertionConsumption.stg | 0 .../ParserErrors/SingleTokenDeletion.stg | 0 .../SingleTokenDeletionBeforeAlt.stg | 0 .../SingleTokenDeletionBeforeLoop.stg | 0 .../SingleTokenDeletionBeforeLoop2.stg | 0 .../SingleTokenDeletionBeforePredict.stg | 0 .../SingleTokenDeletionConsumption.stg | 0 .../SingleTokenDeletionDuringLoop.stg | 0 .../SingleTokenDeletionDuringLoop2.stg | 0 .../SingleTokenDeletionExpectingSet.stg | 0 .../ParserErrors/SingleTokenInsertion.stg | 0 .../templates/ParserErrors/TokenMismatch.stg | 0 .../templates/ParserErrors/TokenMismatch2.stg | 0 .../runtime/templates/ParserExec/APlus.stg | 0 .../runtime/templates/ParserExec/AStar.stg | 0 .../runtime/templates/ParserExec/AStar_1.stg | 0 .../runtime/templates/ParserExec/AStar_2.stg | 0 .../runtime/templates/ParserExec/AorAPlus.stg | 0 .../runtime/templates/ParserExec/AorAStar.stg | 4 - .../templates/ParserExec/AorAStar_1.stg | 0 .../templates/ParserExec/AorAStar_2.stg | 0 .../runtime/templates/ParserExec/AorB.stg | 0 .../runtime/templates/ParserExec/AorBPlus.stg | 0 .../runtime/templates/ParserExec/AorBStar.stg | 0 .../templates/ParserExec/AorBStar_1.stg | 0 .../templates/ParserExec/AorBStar_2.stg | 0 .../runtime/templates/ParserExec/Basic.stg | 0 .../templates/ParserExec/EOFInClosure.stg | 0 .../ParserExec/IfIfElseGreedyBinding1.stg | 0 .../ParserExec/IfIfElseGreedyBinding2.stg | 0 .../ParserExec/IfIfElseNonGreedyBinding1.stg | 0 .../ParserExec/IfIfElseNonGreedyBinding2.stg | 0 .../templates/ParserExec/LL1OptionalBlock.stg | 6 - .../ParserExec/LL1OptionalBlock_1.stg | 0 .../ParserExec/LL1OptionalBlock_2.stg | 0 ...LabelAliasingAcrossLabeledAlternatives.stg | 0 .../runtime/templates/ParserExec/Labels.stg | 0 .../ParserExec/ListLabelForClosureContext.stg | 0 .../templates/ParserExec/ListLabelsOnSet.stg | 0 .../ParserExec/MultipleEOFHandling.stg | 0 .../runtime/templates/ParserExec/Optional.stg | 0 .../templates/ParserExec/Optional_1.stg | 0 .../templates/ParserExec/Optional_2.stg | 0 .../templates/ParserExec/Optional_3.stg | 0 .../templates/ParserExec/Optional_4.stg | 0 .../templates/ParserExec/ParserProperty.stg | 0 .../ParserExec/PredicatedIfIfElse.stg | 0 .../ParserExec/PredictionIssue334.stg | 0 .../templates/ParserExec/ReferenceToATN.stg | 0 .../templates/ParserExec/ReferenceToATN_1.stg | 0 .../templates/ParserExec/ReferenceToATN_2.stg | 0 .../Performance/ExpressionGrammar.stg | 0 .../Performance/ExpressionGrammar_1.stg | 17 + .../Performance/ExpressionGrammar_2.stg | 14 + .../SemPredEvalLexer/DisableRule.stg | 0 .../templates/SemPredEvalLexer/EnumNotID.stg | 0 .../templates/SemPredEvalLexer/IDnotEnum.stg | 0 .../templates/SemPredEvalLexer/IDvsEnum.stg | 0 .../templates/SemPredEvalLexer/Indent.stg | 0 .../LexerInputPositionSensitivePredicates.stg | 0 .../SemPredEvalLexer/PredicatedKeywords.stg | 0 .../SemPredEvalParser/ActionHidesPreds.stg | 0 .../ActionsHidePredsInGlobalFOLLOW.stg | 0 .../AtomWithClosureInTranslatedLRRule.stg | 0 .../DepedentPredsInGlobalFOLLOW.stg | 0 ...endentPredNotInOuterCtxShouldBeIgnored.stg | 0 .../SemPredEvalParser/DisabledAlternative.stg | 0 ...dNotPassedOuterCtxToAvoidCastException.stg | 0 .../NoTruePredsThrowsNoViableAlt.stg | 0 .../templates/SemPredEvalParser/Order.stg | 0 .../PredFromAltTestedInLoopBack.stg | 0 .../PredFromAltTestedInLoopBack_1.stg | 0 .../PredFromAltTestedInLoopBack_2.stg | 0 .../PredTestedEvenWhenUnAmbig.stg | 0 .../PredTestedEvenWhenUnAmbig_1.stg | 0 .../PredTestedEvenWhenUnAmbig_2.stg | 0 .../PredicateDependentOnArg.stg | 0 .../PredicateDependentOnArg2.stg | 0 .../SemPredEvalParser/PredsInGlobalFOLLOW.stg | 0 .../RewindBeforePredEval.stg | 0 .../templates/SemPredEvalParser/Simple.stg | 0 .../SemPredEvalParser/SimpleValidate.stg | 0 .../SemPredEvalParser/SimpleValidate2.stg | 0 .../templates/SemPredEvalParser/ToLeft.stg | 0 .../ToLeftWithVaryingPredicate.stg | 0 .../SemPredEvalParser/TwoUnpredicatedAlts.stg | 0 ...TwoUnpredicatedAltsAndOneOrthogonalAlt.stg | 0 .../UnpredicatedPathsInAlt.stg | 0 .../SemPredEvalParser/ValidateInDFA.stg | 0 .../runtime/templates/Sets/CharSetLiteral.stg | 0 .../runtime/templates/Sets/ComplementSet.stg | 0 .../templates/Sets/LexerOptionalSet.stg | 0 .../runtime/templates/Sets/LexerPlusSet.stg | 0 .../runtime/templates/Sets/LexerStarSet.stg | 0 .../test/runtime/templates/Sets/NotChar.stg | 0 .../runtime/templates/Sets/NotCharSet.stg | 0 .../templates/Sets/NotCharSetWithLabel.stg | 0 .../templates/Sets/NotCharSetWithRuleRef3.stg | 0 .../Sets/OptionalLexerSingleElement.stg | 0 .../runtime/templates/Sets/OptionalSet.stg | 0 .../templates/Sets/OptionalSingleElement.stg | 0 .../runtime/templates/Sets/ParserNotSet.stg | 0 .../runtime/templates/Sets/ParserNotToken.stg | 0 .../Sets/ParserNotTokenWithLabel.stg | 0 .../test/runtime/templates/Sets/ParserSet.stg | 0 .../templates/Sets/PlusLexerSingleElement.stg | 0 .../test/runtime/templates/Sets/PlusSet.stg | 0 .../test/runtime/templates/Sets/RuleAsSet.stg | 0 .../templates/Sets/SeqDoesNotBecomeSet.stg | 0 .../templates/Sets/StarLexerSingleElement.stg | 0 .../Sets/StarLexerSingleElement_1.stg | 0 .../Sets/StarLexerSingleElement_2.stg | 0 .../test/runtime/templates/Sets/StarSet.stg | 0 .../test/runtime/templates/Visitors/Basic.stg | 0 .../v4/test/runtime/templates/Visitors/LR.stg | 0 .../templates/Visitors/LRWithLabels.stg | 0 .../templates/Visitors/RuleGetters.stg | 0 .../templates/Visitors/RuleGetters_1.stg | 0 .../templates/Visitors/RuleGetters_2.stg | 0 .../templates/Visitors/TokenGetters.stg | 0 .../templates/Visitors/TokenGetters_1.stg | 0 .../templates/Visitors/TokenGetters_2.stg | 0 .../org/antlr/v4/testgen/DescrGenerator.java | 437 ++ .../antlr/v4/testgen/JavaEscapeStringMap.java | 0 .../org/antlr/v4/testgen/LinesStringMap.java | 0 .../antlr/v4/testgen/STGroupModelAdaptor.java | 0 .../org/antlr/v4/testgen/StrlenStringMap.java | 0 .../org/antlr/v4/testgen/TestGenerator.java | 469 ++ .../test/runtime/legacy/cpp/BaseCppTest.java | 1226 ++++ .../legacy/cpp/TestCompositeLexers.java | 71 + .../legacy/cpp/TestCompositeParsers.java | 504 ++ .../legacy/cpp/TestFullContextParsing.java | 522 ++ .../runtime/legacy/cpp/TestLeftRecursion.java | 3502 ++++++++++++ .../runtime/legacy/cpp/TestLexerErrors.java | 259 + .../runtime/legacy/cpp/TestLexerExec.java | 5028 ++++++++++++++++ .../runtime/legacy/cpp/TestListeners.java | 377 ++ .../runtime/legacy/cpp/TestParseTrees.java | 311 + .../runtime/legacy/cpp/TestParserErrors.java | 752 +++ .../runtime/legacy/cpp/TestParserExec.java | 823 +++ .../runtime/legacy/cpp/TestPerformance.java | 220 + .../legacy/cpp/TestSemPredEvalLexer.java | 218 + .../legacy/cpp/TestSemPredEvalParser.java | 789 +++ .../v4/test/runtime/legacy/cpp/TestSets.java | 500 ++ .../test/runtime/legacy/cpp/TestVisitors.java | 53 + .../runtime/legacy/csharp/BaseCSharpTest.java | 11 +- .../legacy/csharp/TestCompositeLexers.java | 68 + .../legacy/csharp/TestCompositeParsers.java | 499 ++ .../legacy/csharp/TestFullContextParsing.java | 519 ++ .../legacy/csharp/TestLeftRecursion.java | 3499 ++++++++++++ .../legacy/csharp/TestLexerErrors.java | 256 + .../runtime/legacy/csharp/TestLexerExec.java | 5023 ++++++++++++++++ .../runtime/legacy/csharp/TestListeners.java | 378 ++ .../runtime/legacy/csharp/TestParseTrees.java | 307 + .../legacy/csharp/TestParserErrors.java | 749 +++ .../runtime/legacy/csharp/TestParserExec.java | 820 +++ .../legacy/csharp/TestPerformance.java | 217 + .../legacy/csharp/TestSemPredEvalLexer.java | 215 + .../legacy/csharp/TestSemPredEvalParser.java | 786 +++ .../test/runtime/legacy/csharp/TestSets.java | 497 ++ .../runtime/legacy/csharp/TestVisitors.java | 53 + .../v4/test/runtime/legacy/go/BaseGoTest.java | 64 +- .../legacy/go/TestCompositeLexers.java | 71 + .../legacy/go/TestCompositeParsers.java | 504 ++ .../legacy/go/TestFullContextParsing.java | 522 ++ .../runtime/legacy/go/TestLeftRecursion.java | 3502 ++++++++++++ .../runtime/legacy/go/TestLexerErrors.java | 259 + .../test/runtime/legacy/go/TestLexerExec.java | 5024 ++++++++++++++++ .../test/runtime/legacy/go/TestListeners.java | 413 ++ .../runtime/legacy/go/TestParseTrees.java | 323 ++ .../runtime/legacy/go/TestParserErrors.java | 753 +++ .../runtime/legacy/go/TestParserExec.java | 822 +++ .../runtime/legacy/go/TestPerformance.java | 220 + .../legacy/go/TestSemPredEvalLexer.java | 218 + .../legacy/go/TestSemPredEvalParser.java | 792 +++ .../v4/test/runtime/legacy/go/TestSets.java | 500 ++ .../test/runtime/legacy/go/TestVisitors.java | 53 + .../test/runtime/legacy/java/ErrorQueue.java | 108 + .../legacy/java/LegacyBaseJavaTest.java | 14 +- .../legacy/java/TestCompositeLexers.java | 71 + .../legacy/java/TestCompositeParsers.java | 501 ++ .../legacy/java/TestFullContextParsing.java | 522 ++ .../legacy/java/TestLeftRecursion.java | 3502 ++++++++++++ .../runtime/legacy/java/TestLexerErrors.java | 259 + .../runtime/legacy/java/TestLexerExec.java | 5031 ++++++++++++++++ .../runtime/legacy/java/TestListeners.java | 363 ++ .../runtime/legacy/java/TestParseTrees.java | 310 + .../runtime/legacy/java/TestParserErrors.java | 752 +++ .../runtime/legacy/java/TestParserExec.java | 823 +++ .../runtime/legacy/java/TestPerformance.java | 220 + .../legacy/java/TestSemPredEvalLexer.java | 218 + .../legacy/java/TestSemPredEvalParser.java | 789 +++ .../v4/test/runtime/legacy/java/TestSets.java | 500 ++ .../runtime/legacy/java/TestVisitors.java | 53 + .../javascript/browser/BaseBrowserTest.java | 1081 ++++ .../javascript/chrome/BaseChromeTest.java | 48 + .../javascript/chrome/SharedWebDriver.java | 50 + .../javascript/chrome/chromedriver.bin | Bin .../javascript/explorer/BaseExplorerTest.java | 52 + .../javascript/firefox/BaseFirefoxTest.java | 48 + .../javascript/firefox/SharedWebDriver.java | 41 + .../legacy/javascript/node/BaseNodeTest.java | 6 +- .../javascript/node/TestCompositeLexers.java | 71 + .../javascript/node/TestCompositeParsers.java | 502 ++ .../node/TestFullContextParsing.java | 522 ++ .../javascript/node/TestLeftRecursion.java | 3502 ++++++++++++ .../javascript/node/TestLexerErrors.java | 259 + .../legacy/javascript/node/TestLexerExec.java | 5011 ++++++++++++++++ .../legacy/javascript/node/TestListeners.java | 417 ++ .../javascript/node/TestParseTrees.java | 314 + .../javascript/node/TestParserErrors.java | 752 +++ .../javascript/node/TestParserExec.java | 823 +++ .../javascript/node/TestPerformance.java | 220 + .../javascript/node/TestSemPredEvalLexer.java | 218 + .../node/TestSemPredEvalParser.java | 789 +++ .../legacy/javascript/node/TestSets.java | 500 ++ .../legacy/javascript/node/TestVisitors.java | 53 + .../javascript/safari/BaseSafariTest.java | 49 + .../javascript/safari/SharedWebDriver.java | 42 + .../runtime/legacy/python/BasePythonTest.java | 1079 ++++ .../legacy/python2/BasePython2Test.java | 94 + .../legacy/python2/TestCompositeLexers.java | 71 + .../legacy/python2/TestCompositeParsers.java | 503 ++ .../python2/TestFullContextParsing.java | 522 ++ .../legacy/python2/TestLeftRecursion.java | 3502 ++++++++++++ .../legacy/python2/TestLexerErrors.java | 259 + .../runtime/legacy/python2/TestLexerExec.java | 4997 ++++++++++++++++ .../runtime/legacy/python2/TestListeners.java | 378 ++ .../legacy/python2/TestParseTrees.java | 310 + .../legacy/python2/TestParserErrors.java | 751 +++ .../legacy/python2/TestParserExec.java | 823 +++ .../legacy/python2/TestPerformance.java | 220 + .../legacy/python2/TestSemPredEvalLexer.java | 218 + .../legacy/python2/TestSemPredEvalParser.java | 789 +++ .../test/runtime/legacy/python2/TestSets.java | 500 ++ .../runtime/legacy/python2/TestVisitors.java | 53 + .../legacy/python3/BasePython3Test.java | 122 + .../legacy/python3/TestCompositeLexers.java | 71 + .../legacy/python3/TestCompositeParsers.java | 503 ++ .../python3/TestFullContextParsing.java | 522 ++ .../legacy/python3/TestLeftRecursion.java | 3502 ++++++++++++ .../legacy/python3/TestLexerErrors.java | 259 + .../runtime/legacy/python3/TestLexerExec.java | 4997 ++++++++++++++++ .../runtime/legacy/python3/TestListeners.java | 406 ++ .../legacy/python3/TestParseTrees.java | 310 + .../legacy/python3/TestParserErrors.java | 751 +++ .../legacy/python3/TestParserExec.java | 823 +++ .../legacy/python3/TestPerformance.java | 220 + .../legacy/python3/TestSemPredEvalLexer.java | 218 + .../legacy/python3/TestSemPredEvalParser.java | 789 +++ .../test/runtime/legacy/python3/TestSets.java | 500 ++ .../runtime/legacy/python3/TestVisitors.java | 53 + runtime-testsuite/README.md | 9 - runtime-testsuite/annotations/pom.xml | 61 + .../test/runtime/CommentHasStringValue.java | 14 + runtime-testsuite/pom.xml | 239 +- runtime-testsuite/processors/pom.xml | 54 + .../javax.annotation.processing.Processor | 1 + .../CommentHasStringValueProcessor.java | 74 + .../org/antlr/v4/test/runtime/LargeLexer.g4 | 4003 +++++++++++++ .../v4/test/runtime/templates/CSharp.test.stg | 299 + .../v4/test/runtime/templates/Chrome.test.stg | 285 + .../templates/CompositeLexers/Index.stg | 4 - .../templates/CompositeParsers/Index.stg | 22 - .../v4/test/runtime/templates/Cpp.test.stg | 280 + .../test/runtime/templates/Explorer.test.stg | 294 + .../test/runtime/templates/Firefox.test.stg | 296 + .../templates/FullContextParsing/Index.stg | 17 - .../v4/test/runtime/templates/Go.test.stg | 338 ++ .../antlr/v4/test/runtime/templates/Index.stg | 17 - .../v4/test/runtime/templates/Java.test.stg | 298 + .../runtime/templates/LeftRecursion/Index.stg | 99 - .../runtime/templates/LexerErrors/Index.stg | 14 - .../runtime/templates/LexerExec/Index.stg | 40 - .../runtime/templates/Listeners/Index.stg | 9 - .../v4/test/runtime/templates/Node.test.stg | 389 ++ .../runtime/templates/ParseTrees/Index.stg | 11 - .../runtime/templates/ParserErrors/Index.stg | 34 - .../templates/ParserExec/AlternateQuotes.stg | 42 - .../runtime/templates/ParserExec/Index.stg | 36 - .../ParserExec/StartRuleWithoutEOF.stg | 31 - .../Performance/ExpressionGrammar_1.stg | 5 - .../Performance/ExpressionGrammar_2.stg | 14 - .../runtime/templates/Performance/Index.stg | 4 - .../test/runtime/templates/Python2.test.stg | 273 + .../test/runtime/templates/Python3.test.stg | 258 + .../Safari.test.stg} | 161 +- .../templates/SemPredEvalLexer/Index.stg | 9 - .../templates/SemPredEvalParser/Index.stg | 28 - .../v4/test/runtime/templates/Sets/Index.stg | 25 - .../test/runtime/templates/Visitors/Index.stg | 9 - .../org/antlr/v4/testgen/TestGenerator.java | 324 -- .../BaseCompositeLexerTestDescriptor.java | 8 + .../BaseCompositeParserTestDescriptor.java | 8 + .../BaseDebugParserTestDescriptor.java | 8 + .../test/runtime/BaseLexerTestDescriptor.java | 8 + .../runtime/BaseParserTestDescriptor.java | 8 + .../v4/test/runtime/BaseRuntimeTest.java | 195 + .../runtime/BaseRuntimeTestDescriptor.java | 177 + .../test/runtime/{java => }/ErrorQueue.java | 2 +- .../test/runtime/RuntimeTestDescriptor.java | 26 + .../org/antlr/v4/test/runtime/SingleTest.java | 29 + .../org/antlr/v4/test/runtime/TestRunner.java | 18 + .../v4/test/runtime/cpp/BaseCppTest.java | 736 +-- .../test/runtime/cpp/TestCompositeLexers.java | 76 +- .../runtime/cpp/TestCompositeParsers.java | 494 +- .../runtime/cpp/TestFullContextParsing.java | 512 +- .../test/runtime/cpp/TestLeftRecursion.java | 3410 +---------- .../v4/test/runtime/cpp/TestLexerErrors.java | 264 +- .../v4/test/runtime/cpp/TestLexerExec.java | 5033 +--------------- .../v4/test/runtime/cpp/TestListeners.java | 375 +- .../v4/test/runtime/cpp/TestParseTrees.java | 307 +- .../v4/test/runtime/cpp/TestParserErrors.java | 725 +-- .../v4/test/runtime/cpp/TestParserExec.java | 796 +-- .../v4/test/runtime/cpp/TestPerformance.java | 223 +- .../runtime/cpp/TestSemPredEvalLexer.java | 223 +- .../runtime/cpp/TestSemPredEvalParser.java | 768 +-- .../antlr/v4/test/runtime/cpp/TestSets.java | 482 +- .../v4/test/runtime/cpp/TestVisitors.java | 303 +- .../runtime/csharp/Antlr4.Test.mono.csproj | 51 + .../runtime/csharp/Antlr4.Test.vs2013.csproj | 44 + .../antlr/v4/test/runtime/csharp/App.config | 7 + .../v4/test/runtime/csharp/AssemblyInfo.cs | 28 + .../test/runtime/csharp/BaseCSharpTest.java | 952 ++++ .../runtime/csharp/TestCompositeLexers.java | 71 +- .../runtime/csharp/TestCompositeParsers.java | 398 +- .../csharp/TestFullContextParsing.java | 436 +- .../runtime/csharp/TestLeftRecursion.java | 2922 +--------- .../test/runtime/csharp/TestLexerErrors.java | 239 +- .../v4/test/runtime/csharp/TestLexerExec.java | 4956 +--------------- .../v4/test/runtime/csharp/TestListeners.java | 343 +- .../test/runtime/csharp/TestParseTrees.java | 260 +- .../test/runtime/csharp/TestParserErrors.java | 564 +- .../test/runtime/csharp/TestParserExec.java | 635 +-- .../test/runtime/csharp/TestPerformance.java | 212 +- .../runtime/csharp/TestSemPredEvalLexer.java | 208 +- .../runtime/csharp/TestSemPredEvalParser.java | 637 +-- .../v4/test/runtime/csharp/TestSets.java | 366 +- .../v4/test/runtime/csharp/TestVisitors.java | 267 +- .../CompositeLexersDescriptors.java | 92 + .../CompositeParsersDescriptors.java | 605 ++ .../FullContextParsingDescriptors.java | 419 ++ .../descriptors/LeftRecursionDescriptors.java | 1139 ++++ .../descriptors/LexerErrorsDescriptors.java | 245 + .../descriptors/LexerExecDescriptors.java | 1075 ++++ .../descriptors/ListenersDescriptors.java | 236 + .../descriptors/ParseTreesDescriptors.java | 259 + .../descriptors/ParserErrorsDescriptors.java | 578 ++ .../descriptors/ParserExecDescriptors.java | 752 +++ .../descriptors/PerformanceDescriptors.java | 75 + .../SemPredEvalLexerDescriptors.java | 242 + .../SemPredEvalParserDescriptors.java | 740 +++ .../runtime/descriptors/SetsDescriptors.java | 399 ++ .../descriptors/VisitorsDescriptors.java | 267 + .../antlr/v4/test/runtime/go/BaseGoTest.java | 1157 ++++ .../test/runtime/go/TestCompositeLexers.java | 81 +- .../test/runtime/go/TestCompositeParsers.java | 425 +- .../runtime/go/TestFullContextParsing.java | 461 +- .../v4/test/runtime/go/TestLeftRecursion.java | 3025 +--------- .../v4/test/runtime/go/TestLexerErrors.java | 249 +- .../v4/test/runtime/go/TestLexerExec.java | 4964 +--------------- .../v4/test/runtime/go/TestListeners.java | 392 +- .../v4/test/runtime/go/TestParseTrees.java | 292 +- .../v4/test/runtime/go/TestParserErrors.java | 607 +- .../v4/test/runtime/go/TestParserExec.java | 676 +-- .../v4/test/runtime/go/TestPerformance.java | 224 +- .../test/runtime/go/TestSemPredEvalLexer.java | 218 +- .../runtime/go/TestSemPredEvalParser.java | 676 +-- .../antlr/v4/test/runtime/go/TestSets.java | 399 +- .../v4/test/runtime/go/TestVisitors.java | 284 +- .../v4/test/runtime/java/BaseJavaTest.java | 1378 +++++ .../runtime/java/TestCompositeLexers.java | 75 +- .../runtime/java/TestCompositeParsers.java | 475 +- .../runtime/java/TestFullContextParsing.java | 496 +- .../test/runtime/java/TestLeftRecursion.java | 3312 +---------- .../v4/test/runtime/java/TestLexerErrors.java | 263 +- .../v4/test/runtime/java/TestLexerExec.java | 5035 +---------------- .../v4/test/runtime/java/TestListeners.java | 353 +- .../v4/test/runtime/java/TestParseTrees.java | 296 +- .../test/runtime/java/TestParserErrors.java | 692 +-- .../v4/test/runtime/java/TestParserExec.java | 763 +-- .../v4/test/runtime/java/TestPerformance.java | 220 +- .../runtime/java/TestSemPredEvalLexer.java | 222 +- .../runtime/java/TestSemPredEvalParser.java | 741 +-- .../antlr/v4/test/runtime/java/TestSets.java | 458 +- .../v4/test/runtime/java/TestVisitors.java | 295 +- .../javascript/browser/BaseBrowserTest.java | 645 ++- .../{BaseTest.java => BaseChromeTest.java} | 3 +- .../chrome/TestCompositeLexers.java | 19 + .../chrome/TestCompositeParsers.java | 19 + .../chrome/TestFullContextParsing.java | 19 + .../javascript/chrome/TestLeftRecursion.java | 19 + .../javascript/chrome/TestLexerErrors.java | 19 + .../javascript/chrome/TestLexerExec.java | 19 + .../javascript/chrome/TestListeners.java | 19 + .../javascript/chrome/TestParseTrees.java | 19 + .../javascript/chrome/TestParserErrors.java | 19 + .../javascript/chrome/TestParserExec.java | 19 + .../javascript/chrome/TestPerformance.java | 19 + .../chrome/TestSemPredEvalLexer.java | 19 + .../chrome/TestSemPredEvalParser.java | 19 + .../runtime/javascript/chrome/TestSets.java | 19 + .../javascript/chrome/TestVisitors.java | 19 + .../{BaseTest.java => BaseExplorerTest.java} | 2 +- .../explorer/TestCompositeLexers.java | 19 + .../explorer/TestCompositeParsers.java | 19 + .../explorer/TestFullContextParsing.java | 19 + .../explorer/TestLeftRecursion.java | 19 + .../javascript/explorer/TestLexerErrors.java | 19 + .../javascript/explorer/TestLexerExec.java | 19 + .../javascript/explorer/TestListeners.java | 19 + .../javascript/explorer/TestParseTrees.java | 19 + .../javascript/explorer/TestParserErrors.java | 19 + .../javascript/explorer/TestParserExec.java | 19 + .../javascript/explorer/TestPerformance.java | 19 + .../explorer/TestSemPredEvalLexer.java | 19 + .../explorer/TestSemPredEvalParser.java | 19 + .../runtime/javascript/explorer/TestSets.java | 19 + .../javascript/explorer/TestVisitors.java | 19 + .../{BaseTest.java => BaseFirefoxTest.java} | 3 +- .../firefox/TestCompositeLexers.java | 19 + .../firefox/TestCompositeParsers.java | 19 + .../firefox/TestFullContextParsing.java | 19 + .../javascript/firefox/TestLeftRecursion.java | 19 + .../javascript/firefox/TestLexerErrors.java | 19 + .../javascript/firefox/TestLexerExec.java | 19 + .../javascript/firefox/TestListeners.java | 19 + .../javascript/firefox/TestParseTrees.java | 19 + .../javascript/firefox/TestParserErrors.java | 19 + .../javascript/firefox/TestParserExec.java | 19 + .../javascript/firefox/TestPerformance.java | 19 + .../firefox/TestSemPredEvalLexer.java | 19 + .../firefox/TestSemPredEvalParser.java | 19 + .../runtime/javascript/firefox/TestSets.java | 19 + .../javascript/firefox/TestVisitors.java | 19 + .../runtime/javascript/node/BaseNodeTest.java | 1067 ++++ .../javascript/node/TestCompositeLexers.java | 74 +- .../javascript/node/TestCompositeParsers.java | 431 +- .../node/TestFullContextParsing.java | 469 +- .../javascript/node/TestLeftRecursion.java | 3119 +--------- .../javascript/node/TestLexerErrors.java | 242 +- .../javascript/node/TestLexerExec.java | 4944 +--------------- .../javascript/node/TestListeners.java | 396 +- .../javascript/node/TestParseTrees.java | 285 +- .../javascript/node/TestParserErrors.java | 631 +-- .../javascript/node/TestParserExec.java | 702 +-- .../javascript/node/TestPerformance.java | 219 +- .../javascript/node/TestSemPredEvalLexer.java | 211 +- .../node/TestSemPredEvalParser.java | 692 +-- .../runtime/javascript/node/TestSets.java | 415 +- .../runtime/javascript/node/TestVisitors.java | 395 +- .../{BaseTest.java => BaseSafariTest.java} | 3 +- .../safari/TestCompositeLexers.java | 19 + .../safari/TestCompositeParsers.java | 19 + .../safari/TestFullContextParsing.java | 19 + .../javascript/safari/TestLeftRecursion.java | 19 + .../javascript/safari/TestLexerErrors.java | 19 + .../javascript/safari/TestLexerExec.java | 19 + .../javascript/safari/TestListeners.java | 19 + .../javascript/safari/TestParseTrees.java | 19 + .../javascript/safari/TestParserErrors.java | 19 + .../javascript/safari/TestParserExec.java | 19 + .../javascript/safari/TestPerformance.java | 19 + .../safari/TestSemPredEvalLexer.java | 19 + .../safari/TestSemPredEvalParser.java | 19 + .../runtime/javascript/safari/TestSets.java | 19 + .../javascript/safari/TestVisitors.java | 19 + .../test/runtime/python/BasePythonTest.java | 421 +- .../test/runtime/python2/BasePython2Test.java | 2 +- .../runtime/python2/TestCompositeLexers.java | 76 +- .../runtime/python2/TestCompositeParsers.java | 493 +- .../python2/TestFullContextParsing.java | 512 +- .../runtime/python2/TestLeftRecursion.java | 3410 +---------- .../test/runtime/python2/TestLexerErrors.java | 264 +- .../test/runtime/python2/TestLexerExec.java | 5002 +--------------- .../test/runtime/python2/TestListeners.java | 376 +- .../test/runtime/python2/TestParseTrees.java | 306 +- .../runtime/python2/TestParserErrors.java | 724 +-- .../test/runtime/python2/TestParserExec.java | 796 +-- .../test/runtime/python2/TestPerformance.java | 223 +- .../runtime/python2/TestSemPredEvalLexer.java | 223 +- .../python2/TestSemPredEvalParser.java | 768 +-- .../v4/test/runtime/python2/TestSets.java | 482 +- .../v4/test/runtime/python2/TestVisitors.java | 303 +- .../test/runtime/python3/BasePython3Test.java | 2 +- .../runtime/python3/TestCompositeLexers.java | 76 +- .../runtime/python3/TestCompositeParsers.java | 493 +- .../python3/TestFullContextParsing.java | 512 +- .../runtime/python3/TestLeftRecursion.java | 3410 +---------- .../test/runtime/python3/TestLexerErrors.java | 264 +- .../test/runtime/python3/TestLexerExec.java | 5002 +--------------- .../test/runtime/python3/TestListeners.java | 404 +- .../test/runtime/python3/TestParseTrees.java | 306 +- .../runtime/python3/TestParserErrors.java | 724 +-- .../test/runtime/python3/TestParserExec.java | 796 +-- .../test/runtime/python3/TestPerformance.java | 223 +- .../runtime/python3/TestSemPredEvalLexer.java | 223 +- .../python3/TestSemPredEvalParser.java | 768 +-- .../v4/test/runtime/python3/TestSets.java | 482 +- .../v4/test/runtime/python3/TestVisitors.java | 303 +- runtime/Cpp/runtime/src/antlr4-common.h | 2 +- .../src/org/antlr/v4/runtime/misc/Utils.java | 54 + tool-testsuite/pom.xml | 17 +- .../v4/test/tool/TestATNConstruction.java | 13 +- .../v4/test/tool/TestATNDeserialization.java | 11 +- .../v4/test/tool/TestATNInterpreter.java | 19 +- .../v4/test/tool/TestATNLexerInterpreter.java | 15 +- .../v4/test/tool/TestATNParserPrediction.java | 25 +- .../v4/test/tool/TestATNSerialization.java | 12 +- .../v4/test/tool/TestActionSplitter.java | 11 +- .../v4/test/tool/TestActionTranslation.java | 11 +- .../v4/test/tool/TestAmbigParseTrees.java | 2 +- .../v4/test/tool/TestAttributeChecks.java | 17 +- .../v4/test/tool/TestBasicSemanticErrors.java | 11 +- .../v4/test/tool/TestBufferedTokenStream.java | 10 +- .../v4/test/tool/TestCodeGeneration.java | 13 +- .../v4/test/tool/TestCommonTokenStream.java | 6 + .../v4/test/tool/TestCompositeGrammars.java | 25 +- .../antlr/v4/test/tool/TestDollarParser.java | 13 +- .../org/antlr/v4/test/tool/TestErrorSets.java | 11 +- .../tool/TestGrammarParserInterpreter.java | 4 +- .../antlr/v4/test/tool/TestGraphNodes.java | 76 +- .../antlr/v4/test/tool/TestIntervalSet.java | 11 +- .../tool/TestLeftRecursionToolIssues.java | 11 +- .../antlr/v4/test/tool/TestLexerActions.java | 12 +- .../v4/test/tool/TestParseTreeMatcher.java | 11 +- .../antlr/v4/test/tool/TestParserExec.java | 26 +- .../v4/test/tool/TestParserInterpreter.java | 12 +- .../v4/test/tool/TestParserProfiler.java | 12 +- .../antlr/v4/test/tool/TestPerformance.java | 16 +- .../antlr/v4/test/tool/TestScopeParsing.java | 11 +- .../antlr/v4/test/tool/TestSymbolIssues.java | 11 +- .../test/tool/TestTokenPositionOptions.java | 11 +- .../v4/test/tool/TestTokenStreamRewriter.java | 11 +- .../v4/test/tool/TestTokenTypeAssignment.java | 4 +- .../v4/test/tool/TestToolSyntaxErrors.java | 11 +- .../v4/test/tool/TestTopologicalSort.java | 11 +- .../test/tool/TestUnbufferedCharStream.java | 11 +- .../test/tool/TestUnbufferedTokenStream.java | 11 +- .../antlr/v4/test/tool/TestVocabulary.java | 10 +- .../org/antlr/v4/test/tool/TestXPath.java | 11 +- tool/pom.xml | 1 - tool/src/org/antlr/v4/tool/Grammar.java | 9 + 807 files changed, 126787 insertions(+), 96759 deletions(-) create mode 100644 runtime-testsuite-legacy/pom.xml create mode 100644 runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/TestInfo.stg rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/cpp/Cpp.test.stg (61%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/csharp/App.config (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/csharp/CSharp.test.stg (58%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/go/Go.test.stg (62%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/java/Java.test.stg (60%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/javascript/chrome/Chrome.test.stg (60%) create mode 100644 runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/explorer/Explorer.test.stg rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/javascript/firefox/Firefox.test.stg (61%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/javascript/node/Node.test.stg (67%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/javascript/safari/Safari.test.stg (61%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/python2/Python2.test.stg (56%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/python3/Python3.test.stg (55%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorInvokesDelegateRule.stg (95%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorRuleOverridesDelegate.stg (95%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/BringInLiteralsFromDelegate.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/CombinedImportsCombined.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatesSeeSameTokenType.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorAccessesDelegateMembers.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRule.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithArgs.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithReturnStruct.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesFirstVersionOfDelegateRule.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegate.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegates.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesLookaheadInDelegate.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportLexerWithOnlyFragmentRules.stg (94%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedGrammarWithEmptyOptions.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedRuleWithAction.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/KeywordVSIDOrder.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbigYieldsCtxSensitiveDFA.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbiguityNoLoop.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFATwoDiffInput.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_5.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_6.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/LoopsSimulateTailRecursion.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/SLLSeesEOFInLLGrammar.stg (100%) create mode 100644 runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/JUnitGen.stg rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_5.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_10.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_5.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_6.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_7.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_8.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_9.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_5.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_6.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_7.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_10.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_11.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_12.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_5.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_6.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_7.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_8.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_9.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrecedenceFilterConsidersContext.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPred.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPredFailOption.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_5.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_6.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_7.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_8.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_9.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_5.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_6.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_7.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_8.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_9.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatFailsBackToDFA.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatMatchesThenFailsInATN.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/ErrorInMiddle.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStart.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStartAfterDFACache.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInToken.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInTokenAfterDFACache.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/LexerExecDFA.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/ActionPlacement.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetInSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetNot.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetPlus.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetRange.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithEscapedChar.stg (93%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEndRange.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEscapeChar.stg (92%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithReversedRange.stg (92%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFByItself.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyClosure.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyConfigs.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyOptional.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyPositiveClosure.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/HexVsID.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/KeywordID.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/LargeLexer.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyClosure.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyConfigs.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyOptional.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyPositiveClosure.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/Parentheses.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/PositionAdjustingLexer.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/QuoteTranslation.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/RefToRuleDoesNotSetTokenNorEmitAnother.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/Slashes.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/LexerExec/ZeroLengthToken.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/Basic.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/LR.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/LRWithLabels.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParseTrees/AltNum.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParseTrees/ExtraToken.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParseTrees/NoViableAlt.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParseTrees/RuleRef.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Sync.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Token2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TokenAndRuleContextString.stg (100%) rename runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/2AltLoop.stg => runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TwoAltLoop.stg (100%) rename runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/2Alts.stg => runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TwoAlts.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpToken.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpTokenFromSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ContextListGetters.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidATNStateRemoval.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidEmptyInput.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL1ErrorInfo.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LLStar.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/NoViableAltAvoidance.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertion.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertionConsumption.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletion.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeAlt.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforePredict.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionConsumption.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionExpectingSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenInsertion.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/APlus.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAPlus.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar.stg (89%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorB.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBPlus.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/Basic.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/EOFInClosure.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock.stg (84%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/LabelAliasingAcrossLabeledAlternatives.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/Labels.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelForClosureContext.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelsOnSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/MultipleEOFHandling.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_4.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/ParserProperty.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredicatedIfIfElse.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredictionIssue334.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar.stg (100%) create mode 100644 runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg create mode 100644 runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/DisableRule.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/EnumNotID.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDnotEnum.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDvsEnum.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Indent.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/LexerInputPositionSensitivePredicates.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/PredicatedKeywords.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionHidesPreds.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionsHidePredsInGlobalFOLLOW.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/AtomWithClosureInTranslatedLRRule.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DepedentPredsInGlobalFOLLOW.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DependentPredNotInOuterCtxShouldBeIgnored.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DisabledAlternative.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/IndependentPredNotPassedOuterCtxToAvoidCastException.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/NoTruePredsThrowsNoViableAlt.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Order.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredsInGlobalFOLLOW.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/RewindBeforePredEval.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Simple.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeft.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeftWithVaryingPredicate.stg (100%) rename runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/2UnpredicatedAlts.stg => runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/TwoUnpredicatedAlts.stg (100%) rename runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/2UnpredicatedAltsAndOneOrthogonalAlt.stg => runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/TwoUnpredicatedAltsAndOneOrthogonalAlt.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/UnpredicatedPathsInAlt.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ValidateInDFA.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/CharSetLiteral.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/ComplementSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/LexerOptionalSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/LexerPlusSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/LexerStarSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/NotChar.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithLabel.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithRuleRef3.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalLexerSingleElement.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSingleElement.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotToken.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotTokenWithLabel.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/ParserSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/PlusLexerSingleElement.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/PlusSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/RuleAsSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/SeqDoesNotBecomeSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Sets/StarSet.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/Basic.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/LR.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/LRWithLabels.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_2.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_1.stg (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_2.stg (100%) create mode 100644 runtime-testsuite-legacy/src/org/antlr/v4/testgen/DescrGenerator.java rename {runtime-testsuite => runtime-testsuite-legacy}/src/org/antlr/v4/testgen/JavaEscapeStringMap.java (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/src/org/antlr/v4/testgen/LinesStringMap.java (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/src/org/antlr/v4/testgen/STGroupModelAdaptor.java (100%) rename {runtime-testsuite => runtime-testsuite-legacy}/src/org/antlr/v4/testgen/StrlenStringMap.java (100%) create mode 100644 runtime-testsuite-legacy/src/org/antlr/v4/testgen/TestGenerator.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/BaseCppTest.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeLexers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeParsers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestFullContextParsing.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLeftRecursion.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestListeners.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParseTrees.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestPerformance.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalParser.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSets.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestVisitors.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseTest.java => runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/BaseCSharpTest.java (98%) create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeLexers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeParsers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestFullContextParsing.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLeftRecursion.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestListeners.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParseTrees.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestPerformance.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalParser.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSets.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestVisitors.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseTest.java => runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/BaseGoTest.java (95%) create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeLexers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeParsers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestFullContextParsing.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLeftRecursion.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestListeners.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParseTrees.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestPerformance.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalParser.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSets.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestVisitors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/ErrorQueue.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseTest.java => runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/LegacyBaseJavaTest.java (98%) create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeLexers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeParsers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestFullContextParsing.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLeftRecursion.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestListeners.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParseTrees.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestPerformance.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalParser.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSets.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestVisitors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/browser/BaseBrowserTest.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/BaseChromeTest.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/SharedWebDriver.java rename {runtime-testsuite/test/org/antlr/v4/test/runtime => runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy}/javascript/chrome/chromedriver.bin (100%) create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/explorer/BaseExplorerTest.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/BaseFirefoxTest.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/SharedWebDriver.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseTest.java => runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/BaseNodeTest.java (99%) create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeLexers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeParsers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestFullContextParsing.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLeftRecursion.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestListeners.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParseTrees.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestPerformance.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalParser.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSets.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestVisitors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/BaseSafariTest.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/SharedWebDriver.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python/BasePythonTest.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/BasePython2Test.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeLexers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeParsers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestFullContextParsing.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLeftRecursion.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestListeners.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParseTrees.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestPerformance.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalParser.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSets.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestVisitors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/BasePython3Test.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeLexers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeParsers.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestFullContextParsing.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLeftRecursion.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestListeners.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParseTrees.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserErrors.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserExec.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestPerformance.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalParser.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSets.java create mode 100644 runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestVisitors.java delete mode 100644 runtime-testsuite/README.md create mode 100644 runtime-testsuite/annotations/pom.xml create mode 100644 runtime-testsuite/annotations/src/org/antlr/v4/test/runtime/CommentHasStringValue.java create mode 100644 runtime-testsuite/processors/pom.xml create mode 100644 runtime-testsuite/processors/resources/META-INF/services/javax.annotation.processing.Processor create mode 100644 runtime-testsuite/processors/src/org/antlr/v4/test/runtime/CommentHasStringValueProcessor.java create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/LargeLexer.g4 create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CSharp.test.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Chrome.test.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/Index.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Cpp.test.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Explorer.test.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Firefox.test.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/Index.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Go.test.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Index.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Java.test.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/Index.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Node.test.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AlternateQuotes.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/StartRuleWithoutEOF.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/Index.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Python2.test.stg create mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Python3.test.stg rename runtime-testsuite/resources/org/antlr/v4/test/runtime/{javascript/explorer/Explorer.test.stg => templates/Safari.test.stg} (61%) delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/Index.stg delete mode 100644 runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/Index.stg delete mode 100644 runtime-testsuite/src/org/antlr/v4/testgen/TestGenerator.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeLexerTestDescriptor.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeParserTestDescriptor.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/BaseDebugParserTestDescriptor.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/BaseLexerTestDescriptor.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/BaseParserTestDescriptor.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTest.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTestDescriptor.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/{java => }/ErrorQueue.java (98%) create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/SingleTest.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/TestRunner.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/App.config create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeLexersDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeParsersDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/FullContextParsingDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LeftRecursionDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerErrorsDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerExecDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ListenersDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParseTreesDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserErrorsDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserExecDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/PerformanceDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalLexerDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalParserDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SetsDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/VisitorsDescriptors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseGoTest.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseJavaTest.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/{BaseTest.java => BaseChromeTest.java} (97%) create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeLexers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeParsers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestFullContextParsing.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLeftRecursion.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestListeners.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParseTrees.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestPerformance.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalParser.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSets.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestVisitors.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/{BaseTest.java => BaseExplorerTest.java} (97%) create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeLexers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeParsers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestFullContextParsing.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLeftRecursion.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestListeners.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParseTrees.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestPerformance.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalParser.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSets.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestVisitors.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/{BaseTest.java => BaseFirefoxTest.java} (93%) create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeLexers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeParsers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestFullContextParsing.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLeftRecursion.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestListeners.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParseTrees.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestPerformance.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalParser.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSets.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestVisitors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseNodeTest.java rename runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/{BaseTest.java => BaseSafariTest.java} (93%) create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeLexers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeParsers.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestFullContextParsing.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLeftRecursion.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestListeners.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParseTrees.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserErrors.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserExec.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestPerformance.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalLexer.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalParser.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSets.java create mode 100644 runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestVisitors.java diff --git a/.travis.yml b/.travis.yml index 8336b9a29..cfd619aae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,6 @@ script: - mvn install jdk: - - openjdk6 - oraclejdk7 - oraclejdk8 @@ -32,6 +31,8 @@ addons: apt: sources: - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.7 packages: - g++-5 - uuid-dev + - clang-3.7 diff --git a/antlr4-maven-plugin/pom.xml b/antlr4-maven-plugin/pom.xml index b3dfd37e9..5a2616ba1 100644 --- a/antlr4-maven-plugin/pom.xml +++ b/antlr4-maven-plugin/pom.xml @@ -50,9 +50,9 @@ - @@ -78,8 +78,8 @@ plexus-build-api 0.0.7 - org.antlr diff --git a/pom.xml b/pom.xml index 3759abcbc..679c5a20d 100644 --- a/pom.xml +++ b/pom.xml @@ -75,6 +75,9 @@ tool antlr4-maven-plugin tool-testsuite + runtime-testsuite/annotations + runtime-testsuite/processors + runtime-testsuite-legacy runtime-testsuite @@ -82,8 +85,8 @@ UTF-8 UTF-8 true - 1.6 - 1.6 + 1.7 + 1.7 diff --git a/runtime-testsuite-legacy/pom.xml b/runtime-testsuite-legacy/pom.xml new file mode 100644 index 000000000..c5366fc85 --- /dev/null +++ b/runtime-testsuite-legacy/pom.xml @@ -0,0 +1,114 @@ + + + 4.0.0 + + org.antlr + antlr4-master + 4.6-SNAPSHOT + + antlr4-runtime-testsuite-legacy + ANTLR 4 Legacy Runtime Test Generator + Legacy collection of tests for ANTLR 4 Runtime libraries. + + + 3.0 + + + 2009 + + + + org.antlr + ST4 + 4.0.8 + + + org.antlr + antlr4 + ${project.version} + + + org.antlr + antlr4-runtime + ${project.version} + + + junit + junit + 4.11 + test + + + org.seleniumhq.selenium + selenium-java + 2.46.0 + test + + + org.eclipse.jetty + jetty-server + 8.1.16.v20140903 + test + + + + + src + + + + resources + + + ../runtime + + + + + + + gen + + + + org.codehaus.mojo + exec-maven-plugin + 1.4.0 + + + generate-test-sources + + java + + + org.antlr.v4.testgen.TestGenerator + + ${basedir}/.. + + + + + + + + + + tests + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/Test*.java + + + + + + + + diff --git a/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/TestInfo.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/TestInfo.stg new file mode 100644 index 000000000..16c98b4d0 --- /dev/null +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/TestInfo.stg @@ -0,0 +1,111 @@ +file(className, descriptors) ::= << +package org.antlr.v4.test.runtime.xxx.tests.junk; + +import org.antlr.v4.runtime.misc.Pair; +import org.antlr.v4.test.runtime.CommentHasStringValue; +import org.antlr.v4.test.runtime.xxx.*; +import org.antlr.v4.test.runtime.xxx.tests.*; + +import java.util.ArrayList; +import java.util.List; + +public class { + +} +>> + +rig(targetName, groupName, go, subdir) ::= << +package org.antlr.v4.test.runtime.xxx.tests..}>; + +import org.antlr.v4.test.runtime.xxx.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.xxx.XXXBaseTest; +import org.antlr.v4.test.runtime.xxx.descriptors.*; +import org.junit.*; +import org.junit.runner.*; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class Test extends XXXBaseTest { + public Test(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseTest()); + } + + + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return XXXBaseTest.getRuntimeTestDescriptors(Descriptors.class, ""); + } +} +>> + +descriptor(testName, TestType, Input, LongInput, Errors, LongErrors, Rule, Output, LongOutput, + grammar, slaveGrammars, grammarName, LongAfterGrammar) ::= << +public static class extends BaseTestDescriptor { + + /** + + */ + @CommentHasStringValue + public String input;<\n> + + public String input = ""; + + + /** + + */ + @CommentHasStringValue + public String output;<\n> + + public String output = ""; + + + /** + + */ + @CommentHasStringValue + public String errors;<\n> + + public String errors = ""; + + public String startRule = ""; + public String grammarName = ""; + + + /** + + */ + @CommentHasStringValue + public String afterGrammar; + + + /** + + */ + @CommentHasStringValue + public String grammar; + + + + */ +@CommentHasStringValue +public String slaveGrammar; + }> + @Override + public List\\> getSlaveGrammars() { + List\\> slaves = new ArrayList\\>(); + ("",slaveGrammar));<\n>}> + return slaves; + \} + +} +>> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/cpp/Cpp.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/cpp/Cpp.test.stg similarity index 61% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/cpp/Cpp.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/cpp/Cpp.test.stg index a10122f71..c28f8ca2c 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/cpp/Cpp.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/cpp/Cpp.test.stg @@ -1,169 +1,3 @@ -IgnoredTests ::= [ - "Visitors.Basic": true, - "Visitors.LR": true, - "Visitors.LRWithLabels": true, - "Visitors.RuleGetters_1": true, - "Visitors.RuleGetters_2": true, - "Visitors.TokenGetters_1": true, - "Visitors.TokenGetters_2": true, - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.cpp; - -import org.junit.Ignore; -import org.junit.Test; -import static org.junit.Assert.*; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BaseCppTest { - - }; separator="\n", wrap, anchor> - -} ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - = ; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", "Listener", "Visitor", "", input, ); - - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= "std::cout \<\< \<\< std::endl;" write(s) ::= "std::cout \<\< ;" writeList(s) ::= << std::cout \<\< \<\< std::endl;>> @@ -251,7 +85,7 @@ protected: } }; - + public: virtual std::unique_ptr\ nextToken() override { if (dynamic_cast\(_interpreter) == nullptr) { @@ -444,8 +278,3 @@ Invoke_pred(v) ::= <)>> ContextRuleFunction(ctx, rule) ::= "->" StringType() ::= "std::string" ContextMember(ctx, subctx, member) ::= "->->" - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/App.config b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/App.config similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/App.config rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/App.config diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/CSharp.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/CSharp.test.stg similarity index 58% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/CSharp.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/CSharp.test.stg index 00f53e924..3de3b50a7 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/csharp/CSharp.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/csharp/CSharp.test.stg @@ -1,159 +1,3 @@ -IgnoredTests ::= [ - "Visitors.Basic": true, - "Visitors.LR": true, - "Visitors.LRWithLabels": true, - "Visitors.RuleGetters_1": true, - "Visitors.RuleGetters_2": true, - "Visitors.TokenGetters_1": true, - "Visitors.TokenGetters_2": true, - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.csharp; - -import org.junit.Test; -import org.junit.Ignore; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BaseTest { - - }; separator="\n", wrap, anchor> - -}<\n> ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", "", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= <);>> write(s) ::= <);>> writeList(s) ::= <);>> @@ -453,8 +297,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/go/Go.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/go/Go.test.stg similarity index 62% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/go/Go.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/go/Go.test.stg index b7d8712e5..410f20881 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/go/Go.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/go/Go.test.stg @@ -1,160 +1,3 @@ -IgnoredTests ::= [ - "Visitors.Basic": true, - "Visitors.LR": true, - "Visitors.LRWithLabels": true, - "Visitors.RuleGetters_1": true, - "Visitors.RuleGetters_2": true, - "Visitors.TokenGetters_1": true, - "Visitors.TokenGetters_2": true, - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.go; - -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.*; - - -import org.antlr.v4.tool.Grammar; - - -public class Test extends BaseTest { - - }; separator="\n", wrap, anchor> - -}<\n> ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(parserpkgdir); - =; - writeFile(parserpkgdir, ".g4", slave_); - }; separator="\n"> - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(parserpkgdir); - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(parserpkgdir, ".g4", slave_); - - }; separator="\n"> - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", - "Listener", "Visitor", "", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << - -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -(timeout = ) - - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= <)>> write(s) ::= <)>> writeList(s) ::= <);>> @@ -493,8 +336,3 @@ Invoke_pred(v) ::= <)>> ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/java/Java.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/java/Java.test.stg similarity index 60% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/java/Java.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/java/Java.test.stg index 73e43f19e..b781e5efe 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/java/Java.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/java/Java.test.stg @@ -1,169 +1,3 @@ -IgnoredTests ::= [ - "Visitors.Basic": true, - "Visitors.LR": true, - "Visitors.LRWithLabels": true, - "Visitors.RuleGetters_1": true, - "Visitors.RuleGetters_2": true, - "Visitors.TokenGetters_1": true, - "Visitors.TokenGetters_2": true, - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.java; - -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.*; - - -import org.antlr.v4.tool.Grammar; - - -public class Test extends BaseTest { - - }; separator="\n", wrap, anchor> - -}<\n> ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", "", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << - -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -(timeout = ) - - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - - - - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= <);>> write(s) ::= <);>> writeList(s) ::= <);>> @@ -462,7 +296,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/chrome/Chrome.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/chrome/Chrome.test.stg similarity index 60% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/chrome/Chrome.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/chrome/Chrome.test.stg index d9b4bdd48..e5c87b8e6 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/chrome/Chrome.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/chrome/Chrome.test.stg @@ -1,158 +1,3 @@ -IgnoredTests ::= [ - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.javascript.chrome; - -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.*; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BaseTest { - - }; separator="\n", wrap, anchor> - -}<\n> ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", - "Listener", "Visitor", - "", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", - "Listener", "Visitor", - "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= < + '\\n';>> write(s) ::= <;>> @@ -434,9 +279,7 @@ Declare_pred() ::= <)>> -ParserToken(t) ::= "Parser." - -isEmpty ::= [ - "": true, - default: false -] +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." +ParserPropertyCall(p, call) ::= "

." diff --git a/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/explorer/Explorer.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/explorer/Explorer.test.stg new file mode 100644 index 000000000..6cfe9ba27 --- /dev/null +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/explorer/Explorer.test.stg @@ -0,0 +1,294 @@ +writeln(s) ::= < + '\\n';>> +write(s) ::= <;>> +writeList(s) ::= <;>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= "" + +Cast(t,v) ::= "" + +Append(a,b) ::= " + " + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= "var = ;" + +AssertIsList(v) ::= <> + +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= <%this. = ;%> + +InitBooleanMember(n,v) ::= <%this. = ;%> + +GetMember(n) ::= <%this.%> + +SetMember(n,v) ::= <%this. = ;%> + +AddMember(n,v) ::= <%this. += ;%> + +PlusMember(v,n) ::= <% + this.%> + +MemberEquals(n,v) ::= <%this. === %> + +ModMemberEquals(n,m,v) ::= <%this. % === %> + +ModMemberNotEquals(n,m,v) ::= <%this. % != %> + +DumpDFA() ::= "this.dumpDFA();" + +Pass() ::= "" + +StringList() ::= "list" + +BuildParseTrees() ::= "this.buildParseTrees = true;" + +BailErrorStrategy() ::= <%this._errHandler = new antlr4.error.BailErrorStrategy();%> + +ToStringTree(s) ::= <%.toStringTree(null, this)%> + +Column() ::= "this.column" + +Text() ::= "this.text" + +ValEquals(a,b) ::= <%===%> + +TextEquals(a) ::= <%this.text===""%> + +PlusText(a) ::= <%"" + this.text%> + +InputText() ::= "this._input.getText()" + +LTEquals(i, v) ::= <%this._input.LT().text===%> + +LANotEquals(i, v) ::= <%this._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%this._tokenStartColumn===%> + +ImportListener(X) ::= << +@parser::header { +var Listener = require('./Listener').Listener; +} +>> + +GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.literalNames)" + +RuleInvocationStack() ::= "antlr4.Utils.arrayToString(this.getRuleInvocationStack())" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +this.Property = function() { + return true; +} +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +PositionAdjustingLexer.prototype.resetAcceptPosition = function(index, line, column) { + this._input.seek(index); + this.line = line; + this.column = column; + this._interp.consume(this._input); +}; + +PositionAdjustingLexer.prototype.nextToken = function() { + if (!("resetAcceptPosition" in this._interp)) { + var lexer = this; + this._interp.resetAcceptPosition = function(index, line, column) { lexer.resetAcceptPosition(index, line, column); }; + } + return antlr4.Lexer.prototype.nextToken.call(this); +}; + +PositionAdjustingLexer.prototype.emit = function() { + switch(this._type) { + case PositionAdjustingLexer.TOKENS: + this.handleAcceptPositionForKeyword("tokens"); + break; + case PositionAdjustingLexer.LABEL: + this.handleAcceptPositionForIdentifier(); + break; + } + return antlr4.Lexer.prototype.emit.call(this); +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForIdentifier = function() { + var tokenText = this.text; + var identifierLength = 0; + while (identifierLength \< tokenText.length && + PositionAdjustingLexer.isIdentifierChar(tokenText[identifierLength]) + ) { + identifierLength += 1; + } + if (this._input.index > this._tokenStartCharIndex + identifierLength) { + var offset = identifierLength - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForKeyword = function(keyword) { + if (this._input.index > this._tokenStartCharIndex + keyword.length) { + var offset = keyword.length - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.isIdentifierChar = function(c) { + return c.match(/^[0-9a-zA-Z_]+$/); +} + +>> + +BasicListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.visitTerminal = function(node) { + document.getElementById('output').value += node.symbol.text + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +WalkListener(s) ::= << +var walker = new antlr4.tree.ParseTreeWalker(); +walker.walk(new this.LeafListener(), ); +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::header { +MyRuleNode = function(parent, invokingState) { + antlr4.ParserRuleContext.call(this, parent, invokingState); + this.altNum = 0; + return this; +}; + +MyRuleNode.prototype = Object.create(antlr4.ParserRuleContext.prototype); +MyRuleNode.prototype.constructor = MyRuleNode; +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT()); + } else { + str = ctx.ID().symbol.toString(); + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +RuleGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text; + } else { + str = ctx.b(0).start.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + + +LRListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitE = function(ctx) { + var str; + if(ctx.getChildCount()===3) { + str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text; + } else { + str = ctx.INT().symbol.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitCall = function(ctx) { + var str = ctx.e().start.text + ' ' + ctx.eList(); + document.getElementById('output').value += str + '\\n'; + }; + this.exitInt = function(ctx) { + var str = ctx.INT().symbol.text; + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +DeclareContextListGettersFunction() ::= << + function foo() { + var s = new SContext(); + var a = s.a(); + var b = s.b(); + }; +>> + +Declare_foo() ::= "this.foo = function() {document.getElementById('output').value += 'foo' + '\\n';};" + +Invoke_foo() ::= "this.foo();" + +Declare_pred() ::= <> + +Invoke_pred(v) ::= <)>> +ParserTokenType(t) ::= "Parser." +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/firefox/Firefox.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/firefox/Firefox.test.stg similarity index 61% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/firefox/Firefox.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/firefox/Firefox.test.stg index 51550009d..c94be90e8 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/firefox/Firefox.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/firefox/Firefox.test.stg @@ -1,158 +1,3 @@ -IgnoredTests ::= [ - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.javascript.firefox; - -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.*; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BaseTest { - - }; separator="\n", wrap, anchor> - -}<\n> ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", - "Listener", "Visitor", - "", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", - "Listener", "Visitor", - "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= < + '\\n';>> write(s) ::= <;>> writeList(s) ::= <;>> @@ -449,8 +294,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/node/Node.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/node/Node.test.stg similarity index 67% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/node/Node.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/node/Node.test.stg index 13d2648ec..174c79610 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/node/Node.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/node/Node.test.stg @@ -1,158 +1,3 @@ -IgnoredTests ::= [ - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.javascript.node; - -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.*; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BaseTest { - - }; separator="\n", wrap, anchor> - -}<\n> ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", - "Listener", "Visitor", - "", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", - "Listener", "Visitor", - "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= <);>> write(s) ::= <);>> writeList(s) ::= <);>> @@ -542,8 +387,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/safari/Safari.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/safari/Safari.test.stg similarity index 61% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/safari/Safari.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/safari/Safari.test.stg index 163611e32..71254e0f2 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/javascript/safari/Safari.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/javascript/safari/Safari.test.stg @@ -1,158 +1,3 @@ -IgnoredTests ::= [ - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.javascript.safari; - -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.*; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BaseTest { - - }; separator="\n", wrap, anchor> - -}<\n> ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", - "Listener", "Visitor", - "", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", - "Listener", "Visitor", - "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= < + '\\n';>> write(s) ::= <;>> writeList(s) ::= <;>> @@ -448,8 +293,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/python2/Python2.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/python2/Python2.test.stg similarity index 56% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/python2/Python2.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/python2/Python2.test.stg index aabbbaa75..09a77f486 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/python2/Python2.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/python2/Python2.test.stg @@ -1,169 +1,3 @@ -IgnoredTests ::= [ - "Visitors.Basic": true, - "Visitors.LR": true, - "Visitors.LRWithLabels": true, - "Visitors.RuleGetters_1": true, - "Visitors.RuleGetters_2": true, - "Visitors.TokenGetters_1": true, - "Visitors.TokenGetters_2": true, - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.python2; - -import org.junit.Ignore; -import org.junit.Test; -import static org.junit.Assert.*; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BasePython2Test { - - }; separator="\n", wrap, anchor> - -} ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", "Listener", "Visitor", "", input, ); - - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= <)>> write(s) ::= <,end='')>> writeList(s) ::= <)}; separator="+">)>> @@ -437,8 +271,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/python3/Python3.test.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/python3/Python3.test.stg similarity index 55% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/python3/Python3.test.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/python3/Python3.test.stg index 452290e5c..06599f397 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/python3/Python3.test.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/python3/Python3.test.stg @@ -1,169 +1,3 @@ -IgnoredTests ::= [ - "Visitors.Basic": true, - "Visitors.LR": true, - "Visitors.LRWithLabels": true, - "Visitors.RuleGetters_1": true, - "Visitors.RuleGetters_2": true, - "Visitors.TokenGetters_1": true, - "Visitors.TokenGetters_2": true, - default: false -] - -TestFile(file) ::= << -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ -package org.antlr.v4.test.runtime.python3; - -import org.junit.Ignore; -import org.junit.Test; -import static org.junit.Assert.*; - - -import org.antlr.v4.test.runtime.java.ErrorQueue; - - -import org.antlr.v4.tool.Grammar; - - -@SuppressWarnings("unused") -public class Test extends BasePython3Test { - - }; separator="\n", wrap, anchor> - -} ->> - -LexerTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - =; - writeFile(tmpdir, ".g4", slave_); - }; separator="\n"> - - - - - - String input =; - String found = execLexer(".g4", grammar, "Lexer", input, ); - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeLexerTestMethod(test) ::= << - ->> - -ParserTestMethod(test) ::= << -/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - -public void test() throws Exception { - mkdir(tmpdir); - - =; - - rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); - - writeFile(tmpdir, ".g4", slave_); - - }; separator="\n"> - - - - - String input =; - String found = execParser(".g4", grammar, "Parser", "Lexer", "Listener", "Visitor", "", input, ); - - assertEquals(, found); - - assertEquals(, this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - - }> -} - ->> - -CompositeParserTestMethod(test) ::= << - ->> - -AbstractParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -String test(String input) throws Exception { - String grammar = };separator="\\n\" +\n", wrap, anchor>"; - return execParser(".g4", grammar, "Parser", "Lexer", "", input, ); -} - ->> - -ConcreteParserTestMethod(test) ::= << -/* this file and method are generated, any edit will be overwritten by the next generation */ -@Test -public void test() throws Exception { - String found = test(""); - assertEquals("", found); - - assertEquals("", this.stderrDuringParse); - - assertNull(this.stderrDuringParse); - -} - ->> - -testAnnotations(test) ::= <% -@Test - -<\n>@Ignore() -.})))> -<\n>@Ignore(.})))>) - -%> - -buildStringLiteral(text, variable) ::= << -StringBuilder Builder = new StringBuilder(); -Builder.append("");}; separator="\n"> -String = Builder.toString(); ->> - -writeStringLiteral(text) ::= <% - -"" - - - -%> - -writeLines(textLines) ::= <% - - "}; separator="\" +">" - -"" - -%> - -string(text) ::= << -"" ->> - -writeBoolean(o) ::= "truefalse" - writeln(s) ::= <)>> write(s) ::= <,end='')>> writeList(s) ::= <)}; separator="+">)>> @@ -422,8 +256,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorInvokesDelegateRule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorInvokesDelegateRule.stg similarity index 95% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorInvokesDelegateRule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorInvokesDelegateRule.stg index c893372e9..e90062bdf 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorInvokesDelegateRule.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorInvokesDelegateRule.stg @@ -22,7 +22,7 @@ Errors() ::= "" masterGrammar(grammarName, slaveGrammarName) ::= << lexer grammar ; -import ; +import S; B : 'b'; WS : (' '|'\n') -> skip ; >> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorRuleOverridesDelegate.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorRuleOverridesDelegate.stg similarity index 95% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorRuleOverridesDelegate.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorRuleOverridesDelegate.stg index af6b003bc..fbb9b4f5d 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorRuleOverridesDelegate.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/LexerDelegatorRuleOverridesDelegate.stg @@ -20,7 +20,7 @@ Errors() ::= "" masterGrammar(grammarName, slaveGrammarName) ::= << lexer grammar ; -import ; +import S; A : 'a' B {} ; WS : (' '|'\n') -> skip ; >> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/BringInLiteralsFromDelegate.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/BringInLiteralsFromDelegate.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/BringInLiteralsFromDelegate.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/BringInLiteralsFromDelegate.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/CombinedImportsCombined.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/CombinedImportsCombined.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/CombinedImportsCombined.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/CombinedImportsCombined.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatesSeeSameTokenType.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatesSeeSameTokenType.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatesSeeSameTokenType.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatesSeeSameTokenType.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorAccessesDelegateMembers.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorAccessesDelegateMembers.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorAccessesDelegateMembers.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorAccessesDelegateMembers.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRule.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRule.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithArgs.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithArgs.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithArgs.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithArgs.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithReturnStruct.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithReturnStruct.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithReturnStruct.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesDelegateRuleWithReturnStruct.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesFirstVersionOfDelegateRule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesFirstVersionOfDelegateRule.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesFirstVersionOfDelegateRule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorInvokesFirstVersionOfDelegateRule.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegate.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegate.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegate.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegate.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegates.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegates.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegates.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesDelegates.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesLookaheadInDelegate.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesLookaheadInDelegate.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesLookaheadInDelegate.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/DelegatorRuleOverridesLookaheadInDelegate.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportLexerWithOnlyFragmentRules.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportLexerWithOnlyFragmentRules.stg similarity index 94% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportLexerWithOnlyFragmentRules.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportLexerWithOnlyFragmentRules.stg index f13656d97..99ae2fce9 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportLexerWithOnlyFragmentRules.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportLexerWithOnlyFragmentRules.stg @@ -25,7 +25,7 @@ Errors() ::= "" masterGrammar(grammarName, slaveGrammarName) ::= << grammar ; -import ; +import Unicode; program : 'test' 'test'; diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedGrammarWithEmptyOptions.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedGrammarWithEmptyOptions.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedGrammarWithEmptyOptions.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedGrammarWithEmptyOptions.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedRuleWithAction.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedRuleWithAction.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedRuleWithAction.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/ImportedRuleWithAction.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/KeywordVSIDOrder.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/KeywordVSIDOrder.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/KeywordVSIDOrder.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/KeywordVSIDOrder.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbigYieldsCtxSensitiveDFA.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbigYieldsCtxSensitiveDFA.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbigYieldsCtxSensitiveDFA.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbigYieldsCtxSensitiveDFA.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbiguityNoLoop.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbiguityNoLoop.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbiguityNoLoop.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/AmbiguityNoLoop.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFATwoDiffInput.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFATwoDiffInput.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFATwoDiffInput.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFATwoDiffInput.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/CtxSensitiveDFA_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/ExprAmbiguity_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_5.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_5.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_5.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_5.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_6.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_6.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_6.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/FullContextIF_THEN_ELSEParse_6.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/LoopsSimulateTailRecursion.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/LoopsSimulateTailRecursion.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/LoopsSimulateTailRecursion.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/LoopsSimulateTailRecursion.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/SLLSeesEOFInLLGrammar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/SLLSeesEOFInLLGrammar.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/SLLSeesEOFInLLGrammar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/SLLSeesEOFInLLGrammar.stg diff --git a/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/JUnitGen.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/JUnitGen.stg new file mode 100644 index 000000000..279c8544a --- /dev/null +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/JUnitGen.stg @@ -0,0 +1,156 @@ +TestFile(file) ::= << +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime..; + +import org.junit.Ignore; +import org.junit.Test; +import static org.junit.Assert.*; + +import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.tool.Grammar; + +@SuppressWarnings("unused") +public class Test extends BaseTest { + + }; separator="\n", wrap, anchor> + +} +>> + +LexerTestMethod(test) ::= << +/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ +@Test +public void test() throws Exception { + mkdir(tmpdir); + + = ; + writeFile(tmpdir, ".g4", slave_); + }; separator="\n"> + + + + + + String input =; + String found = execLexer(".g4", grammar, "Lexer", input, ); + assertEquals(, found); + + assertEquals(, this.stderrDuringParse); + + assertNull(this.stderrDuringParse); + +}> +} + +>> + +CompositeLexerTestMethod(test) ::= << + +>> + +ParserTestMethod(test) ::= << +/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ +@Test +public void test() throws Exception { + mkdir(tmpdir); + + =; + + rawGenerateAndBuildRecognizer(".g4", slave_, null, ""); + + writeFile(tmpdir, ".g4", slave_); + + }; separator="\n"> + + + + + + String input =; + String found = execParser(".g4", grammar, "Parser", "Lexer", "Listener", "Visitor", "", input, ); + + assertEquals(, found); + + assertEquals(, this.stderrDuringParse); + + assertNull(this.stderrDuringParse); + +}> +} + +>> + +IgnoredTestMethod(test) ::= << +/* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ +@Test +@Ignore("true") +public void test() throws Exception { +} + +>> + +CompositeParserTestMethod(test) ::= << + +>> + +AbstractParserTestMethod(test) ::= << +/* this file and method are generated, any edit will be overwritten by the next generation */ +String test(String input) throws Exception { + String grammar = };separator="\\n\" +\n", wrap, anchor>"; + return execParser(".g4", grammar, "Parser", "Lexer", "", input, ); +} + +>> + +ConcreteParserTestMethod(test) ::= << +/* this file and method are generated, any edit will be overwritten by the next generation */ +@Test +public void test() throws Exception { + String found = test(""); + assertEquals("", found); + + assertEquals("", this.stderrDuringParse); + + assertNull(this.stderrDuringParse); + +} + +>> + +buildStringLiteral(text, variable) ::= << +StringBuilder Builder = new StringBuilder(); +Builder.append("");}; separator="\n"> +String = Builder.toString(); +>> + +writeStringLiteral(text) ::= <% + +"" + + + +%> + +writeLines(textLines) ::= <% + + "}; separator="\" +">" + +"" + +%> + +writeBoolean(o) ::= "truefalse" + +string(text) ::= << +"" +>> + +isEmpty ::= [ + "": true, + default: false +] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_5.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_5.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_5.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/AmbigLR_5.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_10.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_10.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_10.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_10.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_5.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_5.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_5.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_5.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_6.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_6.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_6.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_6.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_7.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_7.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_7.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_7.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_8.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_8.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_8.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_8.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_9.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_9.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_9.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Declarations_9.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/DirectCallToLeftRecursiveRule_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_5.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_5.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_5.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_5.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_6.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_6.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_6.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_6.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_7.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_7.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_7.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Expressions_7.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_10.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_10.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_10.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_10.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_11.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_11.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_11.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_11.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_12.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_12.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_12.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_12.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_5.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_5.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_5.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_5.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_6.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_6.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_6.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_6.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_7.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_7.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_7.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_7.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_8.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_8.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_8.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_8.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_9.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_9.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_9.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/JavaExpressions_9.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/LabelsOnOpSubrule_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActionsPredicatesOptions_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleActions_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/MultipleAlternativesWithCommonLabel_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrecedenceFilterConsidersContext.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrecedenceFilterConsidersContext.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrecedenceFilterConsidersContext.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrecedenceFilterConsidersContext.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixAndOtherAlt_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/PrefixOpWithActionAndLabel_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsAndLabels_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList1_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActionsList2_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/ReturnValueAndActions_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPred.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPred.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPred.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPred.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPredFailOption.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPredFailOption.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPredFailOption.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/SemPredFailOption.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Simple_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_5.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_5.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_5.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_5.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_6.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_6.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_6.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_6.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_7.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_7.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_7.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_7.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_8.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_8.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_8.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_8.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_9.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_9.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_9.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExprExplicitAssociativity_9.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_5.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_5.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_5.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_5.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_6.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_6.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_6.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_6.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_7.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_7.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_7.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_7.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_8.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_8.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_8.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_8.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_9.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_9.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_9.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/TernaryExpr_9.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/WhitespaceInfluence_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatFailsBackToDFA.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatFailsBackToDFA.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatFailsBackToDFA.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatFailsBackToDFA.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatMatchesThenFailsInATN.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatMatchesThenFailsInATN.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatMatchesThenFailsInATN.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/DFAToATNThatMatchesThenFailsInATN.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/EnforcedGreedyNestedBrances_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/ErrorInMiddle.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/ErrorInMiddle.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/ErrorInMiddle.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/ErrorInMiddle.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStart.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStart.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStart.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStart.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStartAfterDFACache.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStartAfterDFACache.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStartAfterDFACache.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharAtStartAfterDFACache.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInToken.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInToken.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInToken.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInToken.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInTokenAfterDFACache.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInTokenAfterDFACache.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInTokenAfterDFACache.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/InvalidCharInTokenAfterDFACache.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/LexerExecDFA.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/LexerExecDFA.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/LexerExecDFA.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/LexerExecDFA.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerErrors/StringsEmbeddedInActions_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/ActionPlacement.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/ActionPlacement.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/ActionPlacement.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/ActionPlacement.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetInSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetInSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetInSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetInSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetNot.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetNot.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetNot.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetNot.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetPlus.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetPlus.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetPlus.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetPlus.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetRange.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetRange.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetRange.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetRange.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithEscapedChar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithEscapedChar.stg similarity index 93% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithEscapedChar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithEscapedChar.stg index 04dd3c3c5..ec9133fc0 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithEscapedChar.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithEscapedChar.stg @@ -19,5 +19,5 @@ Errors() ::= "" grammar(grammarName) ::= << lexer grammar ; DASHBRACK : [\\-\]]+ {} ; -WS : [ \u]+ -> skip ; +WS : [ \n]+ -> skip ; >> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEndRange.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEndRange.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEndRange.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEndRange.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEscapeChar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEscapeChar.stg similarity index 92% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEscapeChar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEscapeChar.stg index 61d1cef90..e602783f4 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEscapeChar.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithMissingEscapeChar.stg @@ -17,5 +17,5 @@ Errors() ::= "" grammar(grammarName) ::= << lexer grammar ; I : [0-9]+ {} ; -WS : [ \u]+ -> skip ; +WS : [ \n]+ -> skip ; >> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithQuote2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithReversedRange.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithReversedRange.stg similarity index 92% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithReversedRange.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithReversedRange.stg index f2028a6c4..030c4cc08 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithReversedRange.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/CharSetWithReversedRange.stg @@ -17,5 +17,5 @@ Errors() ::= "" grammar(grammarName) ::= << lexer grammar ; A : [z-a9]+ {} ; -WS : [ \u]+ -> skip ; +WS : [ \n]+ -> skip ; >> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFByItself.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFByItself.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFByItself.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFByItself.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/EOFSuffixInFirstRule_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyClosure.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyClosure.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyClosure.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyClosure.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyConfigs.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyConfigs.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyConfigs.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyConfigs.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyOptional.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyOptional.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyOptional.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyOptional.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyPositiveClosure.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyPositiveClosure.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyPositiveClosure.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/GreedyPositiveClosure.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/HexVsID.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/HexVsID.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/HexVsID.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/HexVsID.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/KeywordID.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/KeywordID.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/KeywordID.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/KeywordID.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/LargeLexer.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/LargeLexer.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/LargeLexer.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/LargeLexer.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyClosure.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyClosure.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyClosure.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyClosure.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyConfigs.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyConfigs.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyConfigs.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyConfigs.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyOptional.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyOptional.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyOptional.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyOptional.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyPositiveClosure.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyPositiveClosure.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyPositiveClosure.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyPositiveClosure.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/NonGreedyTermination2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Parentheses.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/Parentheses.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Parentheses.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/Parentheses.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/PositionAdjustingLexer.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/PositionAdjustingLexer.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/PositionAdjustingLexer.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/PositionAdjustingLexer.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/QuoteTranslation.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/QuoteTranslation.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/QuoteTranslation.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/QuoteTranslation.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardPlus_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RecursiveLexerRuleRefWithWildcardStar_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RefToRuleDoesNotSetTokenNorEmitAnother.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RefToRuleDoesNotSetTokenNorEmitAnother.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/RefToRuleDoesNotSetTokenNorEmitAnother.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/RefToRuleDoesNotSetTokenNorEmitAnother.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Slashes.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/Slashes.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Slashes.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/Slashes.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/ZeroLengthToken.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/ZeroLengthToken.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/ZeroLengthToken.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/LexerExec/ZeroLengthToken.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/Basic.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/Basic.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/Basic.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/Basic.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/LR.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/LR.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/LR.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/LR.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/LRWithLabels.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/LRWithLabels.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/LRWithLabels.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/LRWithLabels.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/RuleGetters_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Listeners/TokenGetters_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/AltNum.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/AltNum.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/AltNum.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/AltNum.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/ExtraToken.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/ExtraToken.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/ExtraToken.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/ExtraToken.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/NoViableAlt.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/NoViableAlt.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/NoViableAlt.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/NoViableAlt.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/RuleRef.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/RuleRef.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/RuleRef.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/RuleRef.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Sync.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Sync.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Sync.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Sync.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Token2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Token2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Token2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Token2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TokenAndRuleContextString.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TokenAndRuleContextString.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TokenAndRuleContextString.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TokenAndRuleContextString.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/2AltLoop.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TwoAltLoop.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/2AltLoop.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TwoAltLoop.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/2Alts.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TwoAlts.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/2Alts.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParseTrees/TwoAlts.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpToken.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpToken.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpToken.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpToken.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpTokenFromSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpTokenFromSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpTokenFromSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ConjuringUpTokenFromSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ContextListGetters.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ContextListGetters.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ContextListGetters.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/ContextListGetters.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/DuplicatedLeftRecursiveCall_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidATNStateRemoval.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidATNStateRemoval.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidATNStateRemoval.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidATNStateRemoval.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidEmptyInput.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidEmptyInput.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidEmptyInput.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/InvalidEmptyInput.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL1ErrorInfo.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL1ErrorInfo.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL1ErrorInfo.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL1ErrorInfo.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LL3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LLStar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LLStar.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LLStar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/LLStar.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionBeforeLoop2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/MultiTokenDeletionDuringLoop2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/NoViableAltAvoidance.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/NoViableAltAvoidance.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/NoViableAltAvoidance.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/NoViableAltAvoidance.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertion.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertion.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertion.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertion.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertionConsumption.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertionConsumption.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertionConsumption.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleSetInsertionConsumption.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletion.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletion.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletion.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletion.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeAlt.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeAlt.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeAlt.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeAlt.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforeLoop2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforePredict.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforePredict.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforePredict.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionBeforePredict.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionConsumption.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionConsumption.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionConsumption.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionConsumption.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionDuringLoop2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionExpectingSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionExpectingSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionExpectingSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenDeletionExpectingSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenInsertion.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenInsertion.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenInsertion.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/SingleTokenInsertion.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserErrors/TokenMismatch2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/APlus.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/APlus.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/APlus.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/APlus.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AStar_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAPlus.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAPlus.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAPlus.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAPlus.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar.stg similarity index 89% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar.stg index a00c180cf..f1eb23722 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar.stg @@ -10,12 +10,8 @@ Grammar ::= [ "T": {} ] -Input() ::= "" - Rule() ::= "a" -Output() ::= "" - Errors() ::= "" grammar(grammarName) ::= << diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorAStar_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorB.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorB.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorB.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorB.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBPlus.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBPlus.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBPlus.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBPlus.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/AorBStar_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Basic.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Basic.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Basic.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Basic.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/EOFInClosure.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/EOFInClosure.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/EOFInClosure.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/EOFInClosure.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseGreedyBinding2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/IfIfElseNonGreedyBinding2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock.stg similarity index 84% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock.stg index aa5e0fae4..bffdd42eb 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock.stg +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock.stg @@ -8,14 +8,8 @@ Grammar ::= [ "T": {} ] -Input() ::= "" - Rule() ::= "a" -Output() ::= "" - -Errors() ::= "" - grammar(grammarName) ::= << grammar ; a : (ID|{}INT)? { diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LL1OptionalBlock_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LabelAliasingAcrossLabeledAlternatives.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LabelAliasingAcrossLabeledAlternatives.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/LabelAliasingAcrossLabeledAlternatives.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/LabelAliasingAcrossLabeledAlternatives.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Labels.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Labels.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Labels.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Labels.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelForClosureContext.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelForClosureContext.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelForClosureContext.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelForClosureContext.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelsOnSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelsOnSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelsOnSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ListLabelsOnSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/MultipleEOFHandling.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/MultipleEOFHandling.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/MultipleEOFHandling.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/MultipleEOFHandling.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_4.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_4.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_4.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/Optional_4.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ParserProperty.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ParserProperty.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ParserProperty.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ParserProperty.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredicatedIfIfElse.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredicatedIfIfElse.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredicatedIfIfElse.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredicatedIfIfElse.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredictionIssue334.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredictionIssue334.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredictionIssue334.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/PredictionIssue334.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/ParserExec/ReferenceToATN_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar.stg diff --git a/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg new file mode 100644 index 000000000..532e52163 --- /dev/null +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg @@ -0,0 +1,17 @@ +import "ExpressionGrammar.stg" + +Input() ::= << +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 +>> diff --git a/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg new file mode 100644 index 000000000..6f3c05962 --- /dev/null +++ b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg @@ -0,0 +1,14 @@ +import "ExpressionGrammar.stg" + +Input() ::= << +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or +not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 +>> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/DisableRule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/DisableRule.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/DisableRule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/DisableRule.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/EnumNotID.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/EnumNotID.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/EnumNotID.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/EnumNotID.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDnotEnum.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDnotEnum.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDnotEnum.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDnotEnum.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDvsEnum.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDvsEnum.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDvsEnum.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/IDvsEnum.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Indent.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Indent.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Indent.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Indent.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/LexerInputPositionSensitivePredicates.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/LexerInputPositionSensitivePredicates.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/LexerInputPositionSensitivePredicates.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/LexerInputPositionSensitivePredicates.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/PredicatedKeywords.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/PredicatedKeywords.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/PredicatedKeywords.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/PredicatedKeywords.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionHidesPreds.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionHidesPreds.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionHidesPreds.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionHidesPreds.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionsHidePredsInGlobalFOLLOW.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionsHidePredsInGlobalFOLLOW.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionsHidePredsInGlobalFOLLOW.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ActionsHidePredsInGlobalFOLLOW.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/AtomWithClosureInTranslatedLRRule.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/AtomWithClosureInTranslatedLRRule.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/AtomWithClosureInTranslatedLRRule.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/AtomWithClosureInTranslatedLRRule.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DepedentPredsInGlobalFOLLOW.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DepedentPredsInGlobalFOLLOW.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DepedentPredsInGlobalFOLLOW.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DepedentPredsInGlobalFOLLOW.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DependentPredNotInOuterCtxShouldBeIgnored.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DependentPredNotInOuterCtxShouldBeIgnored.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DependentPredNotInOuterCtxShouldBeIgnored.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DependentPredNotInOuterCtxShouldBeIgnored.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DisabledAlternative.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DisabledAlternative.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DisabledAlternative.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/DisabledAlternative.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/IndependentPredNotPassedOuterCtxToAvoidCastException.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/IndependentPredNotPassedOuterCtxToAvoidCastException.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/IndependentPredNotPassedOuterCtxToAvoidCastException.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/IndependentPredNotPassedOuterCtxToAvoidCastException.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/NoTruePredsThrowsNoViableAlt.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/NoTruePredsThrowsNoViableAlt.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/NoTruePredsThrowsNoViableAlt.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/NoTruePredsThrowsNoViableAlt.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Order.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Order.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Order.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Order.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredFromAltTestedInLoopBack_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredTestedEvenWhenUnAmbig_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredicateDependentOnArg2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredsInGlobalFOLLOW.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredsInGlobalFOLLOW.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredsInGlobalFOLLOW.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/PredsInGlobalFOLLOW.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/RewindBeforePredEval.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/RewindBeforePredEval.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/RewindBeforePredEval.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/RewindBeforePredEval.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Simple.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Simple.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Simple.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Simple.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/SimpleValidate2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeft.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeft.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeft.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeft.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeftWithVaryingPredicate.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeftWithVaryingPredicate.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeftWithVaryingPredicate.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ToLeftWithVaryingPredicate.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/2UnpredicatedAlts.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/TwoUnpredicatedAlts.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/2UnpredicatedAlts.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/TwoUnpredicatedAlts.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/2UnpredicatedAltsAndOneOrthogonalAlt.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/TwoUnpredicatedAltsAndOneOrthogonalAlt.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/2UnpredicatedAltsAndOneOrthogonalAlt.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/TwoUnpredicatedAltsAndOneOrthogonalAlt.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/UnpredicatedPathsInAlt.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/UnpredicatedPathsInAlt.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/UnpredicatedPathsInAlt.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/UnpredicatedPathsInAlt.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ValidateInDFA.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ValidateInDFA.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ValidateInDFA.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/ValidateInDFA.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/CharSetLiteral.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/CharSetLiteral.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/CharSetLiteral.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/CharSetLiteral.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ComplementSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ComplementSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ComplementSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ComplementSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/LexerOptionalSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/LexerOptionalSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/LexerOptionalSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/LexerOptionalSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/LexerPlusSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/LexerPlusSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/LexerPlusSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/LexerPlusSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/LexerStarSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/LexerStarSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/LexerStarSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/LexerStarSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotChar.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotChar.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotChar.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotChar.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithLabel.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithLabel.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithLabel.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithLabel.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithRuleRef3.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithRuleRef3.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithRuleRef3.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/NotCharSetWithRuleRef3.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalLexerSingleElement.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalLexerSingleElement.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalLexerSingleElement.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalLexerSingleElement.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSingleElement.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSingleElement.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSingleElement.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/OptionalSingleElement.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotToken.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotToken.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotToken.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotToken.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotTokenWithLabel.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotTokenWithLabel.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotTokenWithLabel.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserNotTokenWithLabel.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/ParserSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/ParserSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/PlusLexerSingleElement.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/PlusLexerSingleElement.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/PlusLexerSingleElement.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/PlusLexerSingleElement.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/PlusSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/PlusSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/PlusSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/PlusSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/RuleAsSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/RuleAsSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/RuleAsSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/RuleAsSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/SeqDoesNotBecomeSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/SeqDoesNotBecomeSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/SeqDoesNotBecomeSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/SeqDoesNotBecomeSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarLexerSingleElement_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarSet.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarSet.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/StarSet.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Sets/StarSet.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/Basic.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/Basic.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/Basic.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/Basic.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/LR.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/LR.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/LR.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/LR.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/LRWithLabels.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/LRWithLabels.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/LRWithLabels.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/LRWithLabels.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/RuleGetters_2.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_1.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_1.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_1.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_1.stg diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_2.stg b/runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_2.stg similarity index 100% rename from runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_2.stg rename to runtime-testsuite-legacy/resources/org/antlr/v4/test/runtime/templates/Visitors/TokenGetters_2.stg diff --git a/runtime-testsuite-legacy/src/org/antlr/v4/testgen/DescrGenerator.java b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/DescrGenerator.java new file mode 100644 index 000000000..dcbada1ba --- /dev/null +++ b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/DescrGenerator.java @@ -0,0 +1,437 @@ +/* + * [The "BSD license"] + * Copyright (c) 2015 Terence Parr + * Copyright (c) 2015 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.testgen; + +import org.antlr.v4.runtime.misc.MultiMap; +import org.antlr.v4.runtime.misc.Utils; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupFile; +import org.stringtemplate.v4.StringRenderer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DescrGenerator { + // public static final String TEST_SRC = "runtime-testsuite/test/org/antlr/v4/test/runtime"; + public static final String TEST_SRC = "/tmp/gen"; + public static final String RESOURCES = "resources/org/antlr/v4/test/runtime"; + public static final String TEMPLATES = RESOURCES+"/templates"; + public static final String JUNIT_TEMPLATES = "JUnitGen.stg"; + + public final static String[] Targets = { + "Cpp", + "Java", + "Go", + "CSharp", + "Python2", "Python3", + "Node", "Safari", "Firefox", "Explorer", "Chrome" + }; + + public final static String[] TargetSubDirs = { + null, + null, + null, + null, + null, null, + "javascript", "javascript", "javascript", "javascript", "javascript" + }; + + public final static String[] RequiredDictionariesPerTest = { + "Grammar" + }; + + public final static String[] RequiredTemplatesPerTest = { + "TestType", "Input", "Output", "Errors" + }; + + public final static Map> IgnoredTests = + new HashMap>(); + + static { + // at moment, all but js ignore visitor tests + for (String target : Targets) { + MultiMap m = new MultiMap(); + m.map("Visitors", "Basic"); + m.map("Visitors", "LR"); + m.map("Visitors", "LRWithLabels"); + m.map("Visitors", "RuleGetters_1"); + m.map("Visitors", "RuleGetters_2"); + m.map("Visitors", "TokenGetters_1"); + m.map("Visitors", "TokenGetters_2"); + IgnoredTests.put(target, m); + } + } + + protected MultiMap testGroupToTestList; + protected File antlrRootDir; + protected File resourcesDir; + protected File templatesDir; + + public DescrGenerator(File antlrRootDir) { + this.antlrRootDir = antlrRootDir; + File runtimeTestDir = new File(antlrRootDir, "runtime-testsuite/testgen"); + resourcesDir = new File(runtimeTestDir, RESOURCES); + templatesDir = new File(runtimeTestDir, TEMPLATES); + if ( !resourcesDir.exists() || !resourcesDir.isDirectory() ) { + throw new IllegalArgumentException(antlrRootDir.getPath()+" is not an antlr4 project directory; missing resources dir"); + } + if ( !templatesDir.exists() || !templatesDir.isDirectory() ) { + throw new IllegalArgumentException(antlrRootDir.getPath()+" is not an antlr4 project directory; missing templates dir"); + } + File junitTemplates = new File(templatesDir, JUNIT_TEMPLATES); + if ( !junitTemplates.exists() || junitTemplates.isDirectory() ) { + throw new IllegalArgumentException(antlrRootDir.getPath()+" is not an antlr4 project directory; missing junit templates"); + } + } + + /** $ java org.antlr.v4.testgen.DescrGenerator /Users/parrt/antlr/code/antlr4 */ + public static void main(String[] args) throws IOException { + verifyArgAndDirectory(args); + File antlrRootDir = new File(args[0]); + DescrGenerator gen = new DescrGenerator(antlrRootDir); + gen.execute(); + } + + protected void execute() throws IOException { + testGroupToTestList = buildListOfTests(); +// System.out.println(testGroupToTestList); + for (String testGroupName : testGroupToTestList.keySet()) { +// if ( !testGroupName.equals("CompositeLexers") ) continue; + + String outputDir = antlrRootDir+"/runtime-testsuite/XXXTest/test/org/antlr/v4/test/runtime/xxx/tests/junk"; +// outputDir = "/tmp/gen"; + File groupTestSrcFile = new File(outputDir, testGroupName+"Descriptors.java"); +// writeDescriptors(testGroupName, +// groupTestSrcFile, +// testGroupToTestList.get(testGroupName)); + } + + // now generate test rigs per target + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL testInfoLocation = loader.getResource("org/antlr/v4/test/runtime/TestInfo.stg"); + STGroup outputTemplateGroup = new STGroupFile(testInfoLocation.getPath()); + outputTemplateGroup.registerRenderer(String.class, new StringRenderer(), true); + + for (int i = 0; i testTemplateFileNames) + throws IOException + { + System.out.println("Generating "+groupTestSrcFile); + + String[] templatesToGet = + { + "TestType", "Input", "Output", "Errors", "Rule", + "AfterGrammar" + }; + String[] dictToGet = {"Grammar", "SlaveGrammars"}; + + final ArrayList sortedTemplateNames = new ArrayList(testTemplateFileNames); + Collections.sort(sortedTemplateNames); + + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL testInfoLocation = loader.getResource("org/antlr/v4/test/runtime/TestInfo.stg"); + STGroup outputTemplateGroup = new STGroupFile(testInfoLocation.getPath()); + outputTemplateGroup.load(); + + List descriptors = new ArrayList(); + for (String testTemplateFile : sortedTemplateNames) { + if ( testTemplateFile.endsWith("LargeLexer.stg") ) continue; // don't gen this one + + STGroup testInfo = new STGroupFile(testTemplateFile); +// testInfo.registerModelAdaptor(STGroup.class, new STGroupModelAdaptor()); + // Base template groups like AmbigLR.stg don't have input/output defined + // so it's a way to avoid considering them as tests + if ( !(testInfo.isDefined("Input") && testInfo.isDefined("Output")) ) { + continue; + } + + // extract info from group + ST st = outputTemplateGroup.getInstanceOf("descriptor"); + st.add("testName", new File(testTemplateFile).getName().replace(".stg","")); + + // do grammar stuff + String grammarName; + { + //"T": {} + Map gdict = getDict(testInfo, "Grammar"); + grammarName = gdict.keySet().iterator().next(); + ST ss = (ST)gdict.get(grammarName); + Pattern pattern = Pattern.compile("<(.*?)\\("); + Matcher matcher = pattern.matcher(ss.impl.template); + matcher.find(); + String tname = matcher.group(1); + ST ss2 = testInfo.getInstanceOf(tname); + String v = ss2.impl.template.replaceAll("", grammarName); + v = v.replace("'*/'","'*' '/'"); // if in comment, escape '*/' as '*' '/' + st.add("grammar", v); + + /* + SlaveGrammars ::= [ + "S": {} + ] + */ + Map sgdict = getDict(testInfo, "SlaveGrammars"); + if ( sgdict!=null ) { + for (String sgname : sgdict.keySet()) { + ss = (ST) sgdict.get(sgname); + pattern = Pattern.compile("<(.*?)\\("); + matcher = pattern.matcher(ss.impl.template); + matcher.find(); + tname = matcher.group(1); + ss2 = testInfo.getInstanceOf(tname); + v = ss2.impl.template.replaceAll("", sgname); + v = v.replace("'*/'","'*' '/'"); // if in comment, escape '*/' as '*' '/' + st.addAggr("slaveGrammars.{name,grammar}", sgname, v); + } + } + } + + st.add("grammarName", grammarName); + for (String elName : templatesToGet) { + ST st2 = testInfo.getInstanceOf(elName); + if ( st2==null ) continue; + + String v = st2.impl.template; + if ( Utils.count(v, '\n')>0 ) { + elName = "Long"+elName; + if ( v.contains("*/") ) { + v = v.replaceAll("\\*/", "*\\\\/"); + } + v = v.replaceAll("<\\\\n>", ""); + } + else { +// v = Util.replaceText(v, "\\","\\\\"); + v = v.replaceAll("<\\\\n>", "\\\\n"); + v = v.replace("\"","\\\""); // if in string not comment, escape " as \" + } + // if in output etc... not grammar, these are strings not templates. + v = v.replace("\\<","<"); + st.add(elName, v); + } + String output = st.render(); +// System.out.println(output); + descriptors.add(st); + } + + ST file = outputTemplateGroup.getInstanceOf("file"); + String className = testGroupName+"Descriptors"; + file.add("className", className); + file.add("descriptors", descriptors); + + writeFile(groupTestSrcFile, file.render()); + } + + public Map getDict(STGroup group, String dictName) { + if ( group.isDictionary(dictName) ) { + return group.rawGetDictionary(dictName); + } + + for (STGroup importedGroup : group.getImportedGroups()) { + Map result = getDict(importedGroup, dictName); + if (result != null) { + return result; + } + } + return null; + } + + // support + + protected MultiMap buildListOfTests() throws IOException { + MultiMap testGroupToTestList = new MultiMap(); + List testDirs = getSubdirs(templatesDir); + for (File testDir : testDirs) { + List testFilenames = getFilenames(testDir, ".*\\.stg"); + for (String testFilename : testFilenames) { + if ( !testFilename.endsWith("Index.stg") ) { + testGroupToTestList.map(testDir.getName(), testFilename); + } + } + } + return testGroupToTestList; + } + + protected static File verifyArgAndDirectory(String[] args) { + if ( args.length==0 ) { + System.err.println("java org.antlr.v4.testgen.DescrGenerator antlr4-project-root-dir"); + System.exit(1); + } + String ff = args[0]; + File antlrRootDir = new File(ff); + if ( !antlrRootDir.exists() ) { + System.err.println("antlr4-project-root-dir "+ff+" doesn't exist"); + System.exit(1); + } + if ( !antlrRootDir.isDirectory() ) { + System.err.println("antlr4-project-root-dir "+ff+" is not a directory"); + System.exit(1); + } + File runtimeTestDir = new File(antlrRootDir, "runtime-testsuite"); + if ( !runtimeTestDir.exists() || !runtimeTestDir.isDirectory() ) { + System.err.println(ff+" is not an antlr4 project directory; missing runtime-testsuite"); + System.exit(1); + } + return antlrRootDir; + } + + protected boolean testIsComplete(STGroup g) { + boolean completeTest = true; + for (String tname : RequiredTemplatesPerTest) { + if ( !g.isDefined(tname) ) { + completeTest = false; + } + } + for (String tname : RequiredDictionariesPerTest) { + if ( !g.isDictionary(tname) ) { + completeTest = false; + } + } + return completeTest; + } + + private void importLanguageTemplates(STGroup testGroup, STGroup languageGroup) { + // make sure the test group is loaded + testGroup.load(); + + if (testGroup == languageGroup) { + assert false : "Attempted to import the language group into itself."; + return; + } + + if (testGroup.getImportedGroups().isEmpty()) { + testGroup.importTemplates(languageGroup); + return; + } + + if (testGroup.getImportedGroups().contains(languageGroup)) { + return; + } + + for (STGroup importedGroup : testGroup.getImportedGroups()) { + importLanguageTemplates(importedGroup, languageGroup); + } + } + + public static List getSubdirs(File dir) { + List dirs = new ArrayList(); + String flist[] = dir.list(); + if ( flist!=null ) { + for (String fname : flist) { + File f = new File(dir, fname); + if ( f.isDirectory() ) { + dirs.add(f); + } + } + } + return dirs; + } + + public static List getFilenames(File f, String inputFilePattern) throws IOException { + List files = new ArrayList(); + getFilenames_(f, inputFilePattern, files); + return files; + } + + public static void getFilenames_(File f, String inputFilePattern, List files) { + // If this is a directory, walk each file/dir in that directory + if (f.isDirectory()) { + String flist[] = f.list(); + for (String aFlist : flist) { + getFilenames_(new File(f, aFlist), inputFilePattern, files); + } + } + + // otherwise, if this is an input file, load it! + else if ( inputFilePattern==null || f.getName().matches(inputFilePattern) ) { + files.add(f.getAbsolutePath()); + } + } + + public File getOutputDir(String targetName) { + return new File(TEST_SRC, targetName.toLowerCase()); + } + + public void writeFile(File file, String content) throws IOException { + file.getParentFile().mkdirs(); + + FileOutputStream fos = new FileOutputStream(file); + OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); + try { + osw.write(content); + } + finally { + osw.close(); + } + } + + protected void info(String message) { + System.out.println("INFO: " + message); + } + + protected void warn(String message) { + System.err.println("WARNING: " + message); + } + + protected void error(String message, Throwable throwable) { + System.err.println("ERROR: " + message); + } +} diff --git a/runtime-testsuite/src/org/antlr/v4/testgen/JavaEscapeStringMap.java b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/JavaEscapeStringMap.java similarity index 100% rename from runtime-testsuite/src/org/antlr/v4/testgen/JavaEscapeStringMap.java rename to runtime-testsuite-legacy/src/org/antlr/v4/testgen/JavaEscapeStringMap.java diff --git a/runtime-testsuite/src/org/antlr/v4/testgen/LinesStringMap.java b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/LinesStringMap.java similarity index 100% rename from runtime-testsuite/src/org/antlr/v4/testgen/LinesStringMap.java rename to runtime-testsuite-legacy/src/org/antlr/v4/testgen/LinesStringMap.java diff --git a/runtime-testsuite/src/org/antlr/v4/testgen/STGroupModelAdaptor.java b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/STGroupModelAdaptor.java similarity index 100% rename from runtime-testsuite/src/org/antlr/v4/testgen/STGroupModelAdaptor.java rename to runtime-testsuite-legacy/src/org/antlr/v4/testgen/STGroupModelAdaptor.java diff --git a/runtime-testsuite/src/org/antlr/v4/testgen/StrlenStringMap.java b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/StrlenStringMap.java similarity index 100% rename from runtime-testsuite/src/org/antlr/v4/testgen/StrlenStringMap.java rename to runtime-testsuite-legacy/src/org/antlr/v4/testgen/StrlenStringMap.java diff --git a/runtime-testsuite-legacy/src/org/antlr/v4/testgen/TestGenerator.java b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/TestGenerator.java new file mode 100644 index 000000000..3914a7675 --- /dev/null +++ b/runtime-testsuite-legacy/src/org/antlr/v4/testgen/TestGenerator.java @@ -0,0 +1,469 @@ +/* + * [The "BSD license"] + * Copyright (c) 2015 Terence Parr + * Copyright (c) 2015 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.testgen; + +import org.antlr.v4.runtime.misc.MultiMap; +import org.antlr.v4.runtime.misc.Utils; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupFile; +import org.stringtemplate.v4.StringRenderer; +import org.stringtemplate.v4.misc.ErrorBuffer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TestGenerator { + // public static final String TEST_SRC = "runtime-testsuite/test/org/antlr/v4/test/runtime"; + public static final String TEST_SRC = "/tmp/gen"; + public static final String RESOURCES = "resources/org/antlr/v4/test/runtime"; + public static final String TEMPLATES = RESOURCES+"/templates"; + public static final String JUNIT_TEMPLATES = "JUnitGen.stg"; + + public final static String[] Targets = { + "Cpp", + "Java", + "Go", + "CSharp", + "Python2", "Python3", + "Node", "Safari", "Firefox", "Explorer", "Chrome" + }; + + public final static String[] TargetSubDirs = { + null, + null, + null, + null, + null, null, + "javascript", "javascript", "javascript", "javascript", "javascript" + }; + + public final static String[] RequiredDictionariesPerTest = { + "Grammar" + }; + + public final static String[] RequiredTemplatesPerTest = { + "TestType", "Input", "Output", "Errors" + }; + + public final static Map> IgnoredTests = + new HashMap>(); + + static { + // at moment, all but js ignore visitor tests + for (String target : Targets) { + MultiMap m = new MultiMap(); + m.map("Visitors", "Basic"); + m.map("Visitors", "LR"); + m.map("Visitors", "LRWithLabels"); + m.map("Visitors", "RuleGetters_1"); + m.map("Visitors", "RuleGetters_2"); + m.map("Visitors", "TokenGetters_1"); + m.map("Visitors", "TokenGetters_2"); + IgnoredTests.put(target, m); + } + } + + protected MultiMap testGroupToTestList; + protected File antlrRootDir; + protected File resourcesDir; + protected File templatesDir; + + public TestGenerator(File antlrRootDir) { + this.antlrRootDir = antlrRootDir; + File runtimeTestDir = new File(antlrRootDir, "runtime-testsuite/testgen"); + resourcesDir = new File(runtimeTestDir, RESOURCES); + templatesDir = new File(runtimeTestDir, TEMPLATES); + if ( !resourcesDir.exists() || !resourcesDir.isDirectory() ) { + throw new IllegalArgumentException(antlrRootDir.getPath()+" is not an antlr4 project directory; missing resources dir"); + } + if ( !templatesDir.exists() || !templatesDir.isDirectory() ) { + throw new IllegalArgumentException(antlrRootDir.getPath()+" is not an antlr4 project directory; missing templates dir"); + } + File junitTemplates = new File(templatesDir, JUNIT_TEMPLATES); + if ( !junitTemplates.exists() || junitTemplates.isDirectory() ) { + throw new IllegalArgumentException(antlrRootDir.getPath()+" is not an antlr4 project directory; missing junit templates"); + } + } + + /** $ java org.antlr.v4.testgen.TestGenerator /Users/parrt/antlr/code/antlr4 */ + public static void main(String[] args) throws IOException { + verifyArgAndDirectory(args); + File antlrRootDir = new File(args[0]); + TestGenerator gen = new TestGenerator(antlrRootDir); + gen.execute(); + } + + protected void execute() throws IOException { + testGroupToTestList = buildListOfTests(); +// System.out.println(testGroupToTestList); + for (int i = 0; i<1/*Targets.length*/; i++) { + String targetName = Targets[i]; + String targetSubdir = TargetSubDirs[i]; + for (String testGroupName : testGroupToTestList.keySet()) { + if ( !testGroupName.equals("ParserExec") ) continue; + String subdir = targetSubdir==null?"":targetSubdir+"/"; + File groupTestSrcDir = getOutputDir(subdir+targetName); + File groupTestSrcFile = new File(groupTestSrcDir, "Test"+testGroupName+".java"); + File targetTemplatesDir = new File(resourcesDir, subdir+targetName.toLowerCase()); + File targetTemplates = new File(targetTemplatesDir, targetName+".test.stg"); +// generateTestGroupSrcFile(targetName, +// targetSubdir, +// testGroupName, +// targetTemplates, +// groupTestSrcFile, +// testGroupToTestList.get(testGroupName)); + newStuff(targetName, + targetSubdir, + testGroupName, + targetTemplates, + groupTestSrcFile, + testGroupToTestList.get(testGroupName)); + } + } + } + + protected void generateTestGroupSrcFile(String targetName, + String targetSubdir, + String testGroupName, + File targetTemplatesFile, + File groupTestSrcFile, + List testTemplateFileNames) + { + System.out.println("Generating "+groupTestSrcFile); +// System.out.println(groupTestSrcFile.getPath()); +// System.out.println(testTemplateFileNames); +// System.out.println(); + + File junitTemplates = new File(templatesDir, JUNIT_TEMPLATES); + STGroup junit = new STGroupFile(junitTemplates.getPath()); + STGroupFile targetTemplates = new STGroupFile(targetTemplatesFile.getPath()); + + ErrorBuffer errors = new ErrorBuffer(); + junit.setListener(errors); + + junit.registerModelAdaptor(STGroup.class, new STGroupModelAdaptor()); + junit.registerRenderer(String.class, new StringRenderer(), true); + junit.defineDictionary("escape", new JavaEscapeStringMap()); + junit.defineDictionary("lines", new LinesStringMap()); + junit.defineDictionary("strlen", new StrlenStringMap()); + + final ArrayList sortedTemplateNames = new ArrayList(testTemplateFileNames); + Collections.sort(sortedTemplateNames); + + List testMethodSrcs = new ArrayList(); + for (String testTemplateFile : sortedTemplateNames) { + STGroup testInfo = new STGroupFile(testTemplateFile); + importLanguageTemplates(testInfo, targetTemplates); + // Base template groups like AmbigLR.stg don't have input/output defined + // so it's a way to avoid considering them as tests + if ( !(testInfo.isDefined("Input") && testInfo.isDefined("Output")) ) { + continue; + } + ST testType = testInfo.getInstanceOf("TestType"); + if (testType == null) { + warn(String.format("Unable to generate tests for %s: no TestType specified.", targetName)); + continue; + } + + ST testMethodTemplate; + + List ignore = IgnoredTests.get(targetName).get(testGroupName); + if ( ignore!=null && ignore.contains(testInfo.getName()) ) { + testMethodTemplate = junit.getInstanceOf("IgnoredTestMethod"); + } + else { + testMethodTemplate = junit.getInstanceOf(testType.render()+"TestMethod"); + } + if (testMethodTemplate == null) { + warn(String.format("Unable to generate tests for %s: TestType '%s' is not supported by the current runtime.", targetName, testType.render())); + continue; + } + + testMethodTemplate.add("test", testInfo); + testMethodSrcs.add(testMethodTemplate); + } + + ST testFileTemplate = junit.getInstanceOf("TestFile"); + testFileTemplate.addAggr("file.{target,targetSubdir,name,tests}", + targetName, + targetSubdir, + testGroupName, + testMethodSrcs); + + try { + String output = testFileTemplate.render(); + if ( errors.errors.size()>0 ) { + System.err.println("errors in "+targetName+": "+errors); + } +// writeFile(new File("/tmp",groupTestSrcFile.getName()), output); + writeFile(groupTestSrcFile, output); + } + catch (IOException ex) { + error(String.format("Failed to write output file: %s", new File("/tmp",groupTestSrcFile.getName())), ex); + } + } + + protected void newStuff(String targetName, + String targetSubdir, + String testGroupName, + File targetTemplatesFile, + File groupTestSrcFile, + List testTemplateFileNames) + { + System.out.println("Generating "+groupTestSrcFile); + + String[] templatesToGet = + { + "TestType", "Input", "Output", "Errors", "Rule", + "AfterGrammar" + }; + String[] dictToGet = {"Grammar", "SlaveGrammars"}; + + final ArrayList sortedTemplateNames = new ArrayList(testTemplateFileNames); + Collections.sort(sortedTemplateNames); + + List testMethodSrcs = new ArrayList(); + for (String testTemplateFile : sortedTemplateNames) { + if ( !testTemplateFile.endsWith("Optional_1.stg") ) continue; + + STGroup testInfo = new STGroupFile(testTemplateFile); + testInfo.registerModelAdaptor(STGroup.class, new STGroupModelAdaptor()); + // Base template groups like AmbigLR.stg don't have input/output defined + // so it's a way to avoid considering them as tests + if ( !(testInfo.isDefined("Input") && testInfo.isDefined("Output")) ) { + continue; + } + + // extract info from group + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL stuff = loader.getResource("org/antlr/v4/test/runtime/TestInfo.stg"); + STGroup outputTemplateGroupg = new STGroupFile(stuff.getPath()); + outputTemplateGroupg.load(); + ST st = outputTemplateGroupg.getInstanceOf("descriptor"); + st.add("testName", new File(testTemplateFile).getName().replace(".stg","")); + Map grammarDict = testInfo.rawGetDictionary("Grammar"); + + String grammarName; + // do grammar stuff + { + //"T": {} + Map gdict = getDict(testInfo, "Grammar"); + grammarName = gdict.keySet().iterator().next(); + ST ss = (ST)gdict.get(grammarName); + String g = ss.render(); + st.add("grammar", g); + } + + st.add("grammarName", grammarName); + for (String elName : templatesToGet) { + System.out.println(elName); + ST st2 = testInfo.getInstanceOf(elName); + if ( st2==null ) continue; + + String v = st2.impl.template; + if ( Utils.count(v, '\n')>0 ) { + elName = "Long"+elName; + v = v.replaceAll("<\\\\n>", ""); + } + else { + v = v.replaceAll("<\\\\n>", "\\\\n"); + } + st.add(elName, v); + } + String output = st.render(); + System.out.println(output); + testMethodSrcs.add(output); + } + } + + public Map getDict(STGroup group, String dictName) { + if ( group.isDictionary(dictName) ) { + return group.rawGetDictionary(dictName); + } + + for (STGroup importedGroup : group.getImportedGroups()) { + Map result = getDict(importedGroup, dictName); + if (result != null) { + return result; + } + } + return null; + } + + // support + + protected MultiMap buildListOfTests() throws IOException { + MultiMap testGroupToTestList = new MultiMap(); + List testDirs = getSubdirs(templatesDir); + for (File testDir : testDirs) { + List testFilenames = getFilenames(testDir, ".*\\.stg"); + for (String testFilename : testFilenames) { + if ( !testFilename.endsWith("Index.stg") ) { + testGroupToTestList.map(testDir.getName(), testFilename); + } + } + } + return testGroupToTestList; + } + + protected static File verifyArgAndDirectory(String[] args) { + if ( args.length==0 ) { + System.err.println("java org.antlr.v4.testgen.TestGenerator antlr4-project-root-dir"); + System.exit(1); + } + String ff = args[0]; + File antlrRootDir = new File(ff); + if ( !antlrRootDir.exists() ) { + System.err.println("antlr4-project-root-dir "+ff+" doesn't exist"); + System.exit(1); + } + if ( !antlrRootDir.isDirectory() ) { + System.err.println("antlr4-project-root-dir "+ff+" is not a directory"); + System.exit(1); + } + File runtimeTestDir = new File(antlrRootDir, "runtime-testsuite"); + if ( !runtimeTestDir.exists() || !runtimeTestDir.isDirectory() ) { + System.err.println(ff+" is not an antlr4 project directory; missing runtime-testsuite"); + System.exit(1); + } + return antlrRootDir; + } + + protected boolean testIsComplete(STGroup g) { + boolean completeTest = true; + for (String tname : RequiredTemplatesPerTest) { + if ( !g.isDefined(tname) ) { + completeTest = false; + } + } + for (String tname : RequiredDictionariesPerTest) { + if ( !g.isDictionary(tname) ) { + completeTest = false; + } + } + return completeTest; + } + + private void importLanguageTemplates(STGroup testGroup, STGroup languageGroup) { + // make sure the test group is loaded + testGroup.load(); + + if (testGroup == languageGroup) { + assert false : "Attempted to import the language group into itself."; + return; + } + + if (testGroup.getImportedGroups().isEmpty()) { + testGroup.importTemplates(languageGroup); + return; + } + + if (testGroup.getImportedGroups().contains(languageGroup)) { + return; + } + + for (STGroup importedGroup : testGroup.getImportedGroups()) { + importLanguageTemplates(importedGroup, languageGroup); + } + } + + public static List getSubdirs(File dir) { + List dirs = new ArrayList(); + String flist[] = dir.list(); + if ( flist!=null ) { + for (String fname : flist) { + File f = new File(dir, fname); + if ( f.isDirectory() ) { + dirs.add(f); + } + } + } + return dirs; + } + + public static List getFilenames(File f, String inputFilePattern) throws IOException { + List files = new ArrayList(); + getFilenames_(f, inputFilePattern, files); + return files; + } + + public static void getFilenames_(File f, String inputFilePattern, List files) { + // If this is a directory, walk each file/dir in that directory + if (f.isDirectory()) { + String flist[] = f.list(); + for (String aFlist : flist) { + getFilenames_(new File(f, aFlist), inputFilePattern, files); + } + } + + // otherwise, if this is an input file, load it! + else if ( inputFilePattern==null || f.getName().matches(inputFilePattern) ) { + files.add(f.getAbsolutePath()); + } + } + + public File getOutputDir(String targetName) { + return new File(TEST_SRC, targetName.toLowerCase()); + } + + public void writeFile(File file, String content) throws IOException { + file.getParentFile().mkdirs(); + + FileOutputStream fos = new FileOutputStream(file); + OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); + try { + osw.write(content); + } + finally { + osw.close(); + } + } + + protected void info(String message) { + System.out.println("INFO: " + message); + } + + protected void warn(String message) { + System.err.println("WARNING: " + message); + } + + protected void error(String message, Throwable throwable) { + System.err.println("ERROR: " + message); + } +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/BaseCppTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/BaseCppTest.java new file mode 100644 index 000000000..96ccaddba --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/BaseCppTest.java @@ -0,0 +1,1226 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.antlr.v4.Tool; +import org.antlr.v4.automata.ATNFactory; +import org.antlr.v4.automata.ATNPrinter; +import org.antlr.v4.automata.LexerATNFactory; +import org.antlr.v4.automata.ParserATNFactory; +import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.IntStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.RuleContext; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.WritableToken; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ATNSerializer; +import org.antlr.v4.runtime.atn.ATNState; +import org.antlr.v4.runtime.atn.DecisionState; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.IntegerList; +import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.semantics.SemanticPipeline; +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.DOTGenerator; +import org.antlr.v4.tool.DefaultToolListener; +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.antlr.v4.tool.LexerGrammar; +import org.antlr.v4.tool.Rule; +import org.junit.Before; +import org.junit.rules.TestRule; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupString; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public abstract class BaseCppTest { + // -J-Dorg.antlr.v4.test.BaseTest.level=FINE + // private static final Logger LOGGER = Logger.getLogger(BaseTest.class.getName()); + public static final String newline = System.getProperty("line.separator"); + public static final String pathSep = System.getProperty("path.separator"); + + public String tmpdir = null; + + /** If error during parser execution, store stderr here; can't return + * stdout and stderr. This doesn't trap errors from running antlr. + */ + protected String stderrDuringParse; + + @org.junit.Rule + public final TestRule testWatcher = new TestWatcher() { + + @Override + protected void succeeded(Description description) { + // remove tmpdir if no error. + eraseTempDir(); + } + + protected void starting(Description description) { + System.out.println("\n>>>>> Running test: " + description.getMethodName()); + } + }; + + private String getPropertyPrefix() { + return "antlr-" + getLanguage().toLowerCase(); + } + + @Before + public void setUp() throws Exception { + // new output dir for each test + String propName = getPropertyPrefix() + "-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + tmpdir = prop; + else + tmpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { + Tool tool = new Tool(args); + return tool; + } + + protected Tool newTool() { + org.antlr.v4.Tool tool = new Tool(new String[] {"-o", tmpdir}); + return tool; + } + + protected ATN createATN(Grammar g, boolean useSerializer) { + if ( g.atn==null ) { + semanticProcess(g); + assertEquals(0, g.tool.getNumErrors()); + + ParserATNFactory f; + if ( g.isLexer() ) { + f = new LexerATNFactory((LexerGrammar)g); + } + else { + f = new ParserATNFactory(g); + } + + g.atn = f.createATN(); + assertEquals(0, g.tool.getNumErrors()); + } + + ATN atn = g.atn; + if (useSerializer) { + char[] serialized = ATNSerializer.getSerializedAsChars(atn); + return new ATNDeserializer().deserialize(serialized); + } + + return atn; + } + + protected void semanticProcess(Grammar g) { + if ( g.ast!=null && !g.ast.hasErrors ) { + System.out.println(g.ast.toStringTree()); + Tool antlr = new Tool(); + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + if ( g.getImportedGrammars()!=null ) { // process imported grammars (if any) + for (Grammar imp : g.getImportedGrammars()) { + antlr.processNonCombinedGrammar(imp, false); + } + } + } + } + + public DFA createDFA(Grammar g, DecisionState s) { +// PredictionDFAFactory conv = new PredictionDFAFactory(g, s); +// DFA dfa = conv.createDFA(); +// conv.issueAmbiguityWarnings(); +// System.out.print("DFA="+dfa); +// return dfa; + return null; + } + +// public void minimizeDFA(DFA dfa) { +// DFAMinimizer dmin = new DFAMinimizer(dfa); +// dfa.minimized = dmin.minimize(); +// } + + IntegerList getTypesFromString(Grammar g, String expecting) { + IntegerList expectingTokenTypes = new IntegerList(); + if ( expecting!=null && !expecting.trim().isEmpty() ) { + for (String tname : expecting.replace(" ", "").split(",")) { + int ttype = g.getTokenType(tname); + expectingTokenTypes.add(ttype); + } + } + return expectingTokenTypes; + } + + public IntegerList getTokenTypesViaATN(String input, LexerATNSimulator lexerATN) { + ANTLRInputStream in = new ANTLRInputStream(input); + IntegerList tokenTypes = new IntegerList(); + int ttype; + do { + ttype = lexerATN.match(in, Lexer.DEFAULT_MODE); + tokenTypes.add(ttype); + } while ( ttype!= Token.EOF ); + return tokenTypes; + } + + public List getTokenTypes(LexerGrammar lg, + ATN atn, + CharStream input) + { + LexerATNSimulator interp = new LexerATNSimulator(atn,new DFA[] { new DFA(atn.modeToStartState.get(Lexer.DEFAULT_MODE)) },null); + List tokenTypes = new ArrayList(); + int ttype; + boolean hitEOF = false; + do { + if ( hitEOF ) { + tokenTypes.add("EOF"); + break; + } + int t = input.LA(1); + ttype = interp.match(input, Lexer.DEFAULT_MODE); + if ( ttype == Token.EOF ) { + tokenTypes.add("EOF"); + } + else { + tokenTypes.add(lg.typeToTokenList.get(ttype)); + } + + if ( t== IntStream.EOF ) { + hitEOF = true; + } + } while ( ttype!=Token.EOF ); + return tokenTypes; + } + + List checkRuleDFA(String gtext, String ruleName, String expecting) + throws Exception + { + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(gtext, equeue); + ATN atn = createATN(g, false); + ATNState s = atn.ruleToStartState[g.getRule(ruleName).index]; + if ( s==null ) { + System.err.println("no such rule: "+ruleName); + return null; + } + ATNState t = s.transition(0).target; + if ( !(t instanceof DecisionState) ) { + System.out.println(ruleName+" has no decision"); + return null; + } + DecisionState blk = (DecisionState)t; + checkRuleDFA(g, blk, expecting); + return equeue.all; + } + + List checkRuleDFA(String gtext, int decision, String expecting) + throws Exception + { + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(gtext, equeue); + ATN atn = createATN(g, false); + DecisionState blk = atn.decisionToState.get(decision); + checkRuleDFA(g, blk, expecting); + return equeue.all; + } + + void checkRuleDFA(Grammar g, DecisionState blk, String expecting) + throws Exception + { + DFA dfa = createDFA(g, blk); + String result = null; + if ( dfa!=null ) result = dfa.toString(); + assertEquals(expecting, result); + } + + List checkLexerDFA(String gtext, String expecting) + throws Exception + { + return checkLexerDFA(gtext, LexerGrammar.DEFAULT_MODE_NAME, expecting); + } + + List checkLexerDFA(String gtext, String modeName, String expecting) + throws Exception + { + ErrorQueue equeue = new ErrorQueue(); + LexerGrammar g = new LexerGrammar(gtext, equeue); + g.atn = createATN(g, false); +// LexerATNToDFAConverter conv = new LexerATNToDFAConverter(g); +// DFA dfa = conv.createDFA(modeName); +// g.setLookaheadDFA(0, dfa); // only one decision to worry about +// +// String result = null; +// if ( dfa!=null ) result = dfa.toString(); +// assertEquals(expecting, result); +// +// return equeue.all; + return null; + } + + protected String getLanguage() { + return "Cpp"; + } + + /** Return true if all is ok, no errors */ + protected ErrorQueue antlr(String fileName, String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { + System.out.println("dir "+tmpdir); + mkdir(tmpdir); + writeFile(tmpdir, fileName, grammarStr); + final List options = new ArrayList(); + Collections.addAll(options, extraOptions); + options.add("-Dlanguage=" + getLanguage()); + options.add("-o"); + options.add(tmpdir); + options.add("-lib"); + options.add(tmpdir); + options.add(new File(tmpdir,grammarFileName).toString()); + + final String[] optionsA = new String[options.size()]; + options.toArray(optionsA); + Tool antlr = newTool(optionsA); + ErrorQueue equeue = new ErrorQueue(antlr); + antlr.addListener(equeue); + if (defaultListener) { + antlr.addListener(new DefaultToolListener(antlr)); + } + antlr.processGrammarsOnCommandLine(); + + if ( !defaultListener && !equeue.errors.isEmpty() ) { + System.err.println("antlr reports errors from "+options); + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage msg = equeue.errors.get(i); + System.err.println(msg); + } + System.out.println("!!!\ngrammar:"); + System.out.println(grammarStr); + System.out.println("###"); + } + if ( !defaultListener && !equeue.warnings.isEmpty() ) { + System.err.println("antlr reports warnings from "+options); + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage msg = equeue.warnings.get(i); + System.err.println(msg); + } + } + + return equeue; + } + + protected String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input) + { + return execLexer(grammarFileName, grammarStr, lexerName, input, false); + } + + protected String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, + boolean showDFA) + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, + null, + lexerName,"-no-listener"); + assertTrue(success); + writeFile(tmpdir, "input", input); + writeLexerTestFile(lexerName, showDFA); + String output = execModule("Test.cpp"); + if ( stderrDuringParse!=null && stderrDuringParse.length()>0 ) { + System.err.println(stderrDuringParse); + } + return output; + } + + public ParseTree execStartRule(String startRuleName, Parser parser) + throws IllegalAccessException, InvocationTargetException, + NoSuchMethodException + { + Method startRule = null; + Object[] args = null; + try { + startRule = parser.getClass().getMethod(startRuleName); + } + catch (NoSuchMethodException nsme) { + // try with int _p arg for recursive func + startRule = parser.getClass().getMethod(startRuleName, int.class); + args = new Integer[] {0}; + } + ParseTree result = (ParseTree)startRule.invoke(parser, args); +// System.out.println("parse tree = "+result.toStringTree(parser)); + return result; + } + + protected String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean debug) { + return execParser(grammarFileName, grammarStr, parserName, lexerName, + listenerName, visitorName, startRuleName, input, debug, false); + } + + protected String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean debug, + boolean trace) + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, + parserName, + lexerName, + "-visitor"); + assertTrue(success); + writeFile(tmpdir, "input", input); + rawBuildRecognizerTestFile(parserName, + lexerName, + listenerName, + visitorName, + startRuleName, + debug, + trace); + return execRecognizer(); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) + { + return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) + { + ErrorQueue equeue = + antlr(grammarFileName, grammarFileName, grammarStr, defaultListener, extraOptions); + if (!equeue.errors.isEmpty()) { + return false; + } + + List files = new ArrayList(); + if ( lexerName!=null ) { + files.add(lexerName+".cpp"); + files.add(lexerName+".h"); + } + if ( parserName!=null ) { + files.add(parserName+".cpp"); + files.add(parserName+".h"); + Set optionsSet = new HashSet(Arrays.asList(extraOptions)); + if (!optionsSet.contains("-no-listener")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Listener.cpp"); + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Listener.h"); + } + if (optionsSet.contains("-visitor")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Visitor.cpp"); + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Visitor.h"); + } + } + return true; // allIsWell: no compile + } + + protected void rawBuildRecognizerTestFile(String parserName, + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, + boolean debug, + boolean trace) + { + this.stderrDuringParse = null; + if ( parserName==null ) { + writeLexerTestFile(lexerName, false); + } + else { + writeParserTestFile(parserName, + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, trace); + } + } + + public String execRecognizer() { + return execModule("Test.cpp"); + } + + public List allCppFiles(String path) { + ArrayList files = new ArrayList(); + File folder = new File(path); + File[] listOfFiles = folder.listFiles(); + for (int i = 0; i < listOfFiles.length; i++) { + String file = listOfFiles[i].getAbsolutePath(); + if (file.endsWith(".cpp")) { + files.add(file); + } + } + return files; + } + + private String runProcess(ProcessBuilder builder, String description) throws Exception { + Process process = builder.start(); + StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + int errcode = process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + String output = stdoutVacuum.toString(); + if (stderrVacuum.toString().length() > 0) { + this.stderrDuringParse = stderrVacuum.toString(); + System.err.println("exec stderrVacuum: "+ stderrVacuum); + } + if (errcode != 0) { + this.stderrDuringParse = "execution failed with error code: " + errcode; + System.err.println(description + " exited with error code: " + errcode); + } + + return output; + } + + // TODO: add a buildRuntimeOnWindows variant. + private boolean buildRuntime() { + String runtimePath = locateRuntime(); + System.out.println("Building ANTLR4 C++ runtime (if necessary) at "+ runtimePath); + + try { + ArrayList args = new ArrayList(); + args.add("cmake"); + args.add("."); + args.add("-DCMAKE_BUILD_TYPE=release"); + ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); + builder.directory(new File(runtimePath)); + if (runProcess(builder, "antlr runtime cmake") == null) + return false; + } + catch (Exception e) { + System.err.println("can't configure antlr cpp runtime cmake file"); + e.printStackTrace(System.err); + } + + try { + ArrayList args = new ArrayList(); + args.add("make"); + args.add("-j"); + args.add("8"); // Assuming a reasonable amount of available CPU cores. + ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); + builder.directory(new File(runtimePath)); + if (runProcess(builder, "building antlr runtime") == null) + return false; + } + catch (Exception e) { + System.err.println("can't compile antlr cpp runtime"); + //e.printStackTrace(System.err); + } + + return true; + } + + static boolean runtimeBuiltOnce = false; + + public String execModule(String fileName) { + String compilerPath = locateCompiler(); + String runtimePath = locateRuntime(); + String includePath = runtimePath + "/runtime/src"; + String binPath = new File(new File(tmpdir), "a.out").getAbsolutePath(); + String inputPath = new File(new File(tmpdir), "input").getAbsolutePath(); + + // Build runtime using cmake once. + if (!runtimeBuiltOnce) { + runtimeBuiltOnce = true; + if (!buildRuntime()) { + return null; + } + } + + // Create symlink to the runtime. + // TODO: make this platform neutral. + try { + ArrayList args = new ArrayList(); + args.add("ln"); + args.add("-s"); + args.add(runtimePath + "/dist/libantlr4-runtime.dylib"); // TODO: make this platform neutral + ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); + builder.directory(new File(tmpdir)); + String output = runProcess(builder, "sym linking C++ runtime"); + if (output == null) + return null; + } + catch (Exception e) { + System.err.println("can't exec module: " + fileName); + //e.printStackTrace(System.err); + } + + // Compile the test code. + try { + ArrayList args = new ArrayList(); + args.add(compilerPath); + args.add("-std=c++11"); + args.add("-I"); + args.add(includePath); + args.add("-L"); + args.add("."); + args.add("-lantlr4-runtime"); + args.addAll(allCppFiles(tmpdir)); + ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); + builder.directory(new File(tmpdir)); + String output = runProcess(builder, "building test binary"); + if (output == null) { + return null; + } + } + catch (Exception e) { + System.err.println("can't compile module: " + fileName); + //e.printStackTrace(System.err); + return null; + } + + // Now run the newly minted binary. + try { + ProcessBuilder builder = new ProcessBuilder(binPath, inputPath); + builder.directory(new File(tmpdir)); + String output = runProcess(builder, "running test binary"); + + return output; + } + catch (Exception e) { + System.err.println("can't exec module: " + fileName); + //e.printStackTrace(System.err); + } + + return null; + } + + private String locateTool(String tool) { + String[] roots = { "/usr/bin/", "/usr/local/bin/" }; + for(String root : roots) { + if(new File(root + tool).exists()) + return root + tool; + } + throw new RuntimeException("Could not locate " + tool); + } + + protected String locateCompiler() { + String propName = getPropertyPrefix() + "-compiler"; + String prop = System.getProperty(propName); + if(prop==null || prop.length()==0) + prop = locateTool("g++"); // Also try cc + File file = new File(prop); + if(!file.exists()) + throw new RuntimeException("Missing system property:" + propName); + return file.getAbsolutePath(); + } + + protected String locateRuntime() { + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL runtimeSrc = loader.getResource("Cpp"); + if (runtimeSrc == null) { + throw new RuntimeException("Cannot find runtime"); + } + return runtimeSrc.getPath(); + } + + public void testErrors(String[] pairs, boolean printTree) { + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; + + String[] lines = input.split("\n"); + String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); + ErrorQueue equeue = antlr(fileName, fileName, input, false); + + String actual = equeue.toString(true); + actual = actual.replace(tmpdir + File.separator, ""); + System.err.println(actual); + String msg = input; + msg = msg.replace("\n","\\n"); + msg = msg.replace("\r","\\r"); + msg = msg.replace("\t","\\t"); + + assertEquals("error in: "+msg,expect,actual); + } + } + + public String getFilenameFromFirstLineOfGrammar(String line) { + String fileName = "A" + Tool.GRAMMAR_EXTENSION; + int grIndex = line.lastIndexOf("grammar"); + int semi = line.lastIndexOf(';'); + if ( grIndex>=0 && semi>=0 ) { + int space = line.indexOf(' ', grIndex); + fileName = line.substring(space+1, semi)+Tool.GRAMMAR_EXTENSION; + } + if ( fileName.length()==Tool.GRAMMAR_EXTENSION.length() ) fileName = "A" + Tool.GRAMMAR_EXTENSION; + return fileName; + } + + List getMessagesOfType(List msgs, Class c) { + List filtered = new ArrayList(); + for (ANTLRMessage m : msgs) { + if ( m.getClass() == c ) filtered.add(m); + } + return filtered; + } + + void checkRuleATN(Grammar g, String ruleName, String expecting) { + ParserATNFactory f = new ParserATNFactory(g); + ATN atn = f.createATN(); + + DOTGenerator dot = new DOTGenerator(g); + System.out.println(dot.getDOT(atn.ruleToStartState[g.getRule(ruleName).index])); + + Rule r = g.getRule(ruleName); + ATNState startState = atn.ruleToStartState[r.index]; + ATNPrinter serializer = new ATNPrinter(g, startState); + String result = serializer.asString(); + + //System.out.print(result); + assertEquals(expecting, result); + } + + public void testActions(String templates, String actionName, String action, String expected) throws org.antlr.runtime.RecognitionException { + int lp = templates.indexOf('('); + String name = templates.substring(0, lp); + STGroup group = new STGroupString(templates); + ST st = group.getInstanceOf(name); + st.add(actionName, action); + String grammar = st.render(); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(grammar, equeue); + if ( g.ast!=null && !g.ast.hasErrors ) { + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + + ATNFactory factory = new ParserATNFactory(g); + if ( g.isLexer() ) factory = new LexerATNFactory((LexerGrammar)g); + g.atn = factory.createATN(); + + CodeGenerator gen = new CodeGenerator(g); + ST outputFileST = gen.generateParser(); + String output = outputFileST.render(); + //System.out.println(output); + String b = "#" + actionName + "#"; + int start = output.indexOf(b); + String e = "#end-" + actionName + "#"; + int end = output.indexOf(e); + String snippet = output.substring(start+b.length(),end); + assertEquals(expected, snippet); + } + if ( equeue.size()>0 ) { + System.err.println(equeue.toString()); + } + } + + public static class StreamVacuum implements Runnable { + StringBuilder buf = new StringBuilder(); + BufferedReader in; + Thread sucker; + public StreamVacuum(InputStream in) { + this.in = new BufferedReader( new InputStreamReader(in) ); + } + public void start() { + sucker = new Thread(this); + sucker.start(); + } + @Override + public void run() { + try { + String line = in.readLine(); + while (line!=null) { + buf.append(line); + buf.append('\n'); + line = in.readLine(); + } + } + catch (IOException ioe) { + System.err.println("can't read output from process"); + } + } + /** wait for the thread to finish */ + public void join() throws InterruptedException { + sucker.join(); + } + @Override + public String toString() { + return buf.toString(); + } + } + + protected void checkGrammarSemanticsError(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkGrammarSemanticsWarning(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage m = equeue.warnings.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkError(ErrorQueue equeue, + ANTLRMessage expectedMessage) + throws Exception + { + //System.out.println("errors="+equeue); + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertTrue("no error; "+expectedMessage.getErrorType()+" expected", !equeue.errors.isEmpty()); + assertTrue("too many errors; "+equeue.errors, equeue.errors.size()<=1); + assertNotNull("couldn't find expected error: "+expectedMessage.getErrorType(), foundMsg); + /* + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + */ + assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); + } + + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { + return false; + } + + Token t = get(i); + if ( hide.contains(t.getType()) ) { + ((WritableToken)t).setChannel(Token.HIDDEN_CHANNEL); + } + + return true; + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } + + public static void writeFile(String dir, String fileName, String content) { + try { + File f = new File(dir, fileName); + FileWriter w = new FileWriter(f); + BufferedWriter bw = new BufferedWriter(w); + bw.write(content); + bw.close(); + w.close(); + } + catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + protected void mkdir(String dir) { + File f = new File(dir); + f.mkdirs(); + } + + protected void writeParserTestFile(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { + if(!parserStartRuleName.endsWith(")")) + parserStartRuleName += "()"; + ST outputFileST = new ST( + "#include \\\n" + + "\n" + + "#include \"antlr4-runtime.h\"\n" + + "#include \".h\"\n" + + "#include \".h\"\n" + + "\n" + + "using namespace antlr4;\n" + + "\n" + + "class TreeShapeListener : public tree::ParseTreeListener {\n" + + "public:\n" + + " void visitTerminal(tree::TerminalNode *) override {}\n" + + " void visitErrorNode(tree::ErrorNode *) override {}\n" + + " void exitEveryRule(ParserRuleContext *) override {}\n" + + " void enterEveryRule(ParserRuleContext *ctx) override {\n" + + " for (auto child : ctx->children) {\n" + + " tree::ParseTree *parent = child->parent;\n" + + " ParserRuleContext *rule = dynamic_cast\\(parent);\n" + + " if (rule != ctx) {\n" + + " throw \"Invalid parse tree shape detected.\";\n" + + " }\n" + + + " }\n" + + " }\n" + + "};\n" + + "\n" + + "\n" + + "int main(int argc, const char* argv[]) {\n" + + " ANTLRFileStream input(argv[1]);\n" + + " lexer(&input);\n" + + " CommonTokenStream tokens(&lexer);\n" + + "" + + "\n" + + " tree::ParseTree *tree = parser.;\n" + + " TreeShapeListener listener;\n" + + " tree::ParseTreeWalker::DEFAULT.walk(&listener, tree);\n" + + "\n" + + " return 0;\n" + + "}\n" + ); + + String stSource = " parser(&tokens);\n"; + if(debug) { + stSource += " DiagnosticErrorListener errorListener;\n"; + stSource += " parser.addErrorListener(&errorListener);\n"; + } + if(trace) + stSource += " parser.setTrace(true);\n"; + ST createParserST = new ST(stSource); + outputFileST.add("createParser", createParserST); + outputFileST.add("parserName", parserName); + outputFileST.add("lexerName", lexerName); + outputFileST.add("listenerName", listenerName); + outputFileST.add("visitorName", visitorName); + outputFileST.add("parserStartRuleName", parserStartRuleName); + writeFile(tmpdir, "Test.cpp", outputFileST.render()); + } + + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + ST outputFileST = new ST( + "#include \\\n" + + "\n" + + "#include \"antlr4-runtime.h\"\n" + + "#include \".h\"\n" + + "\n" + + "#include \"support/StringUtils.h\"\n" + + "\n" + + "using namespace antlr4;\n" + + "\n" + + "int main(int argc, const char* argv[]) {\n" + + " ANTLRFileStream input(argv[1]);\n" + + " lexer(&input);\n" + + " CommonTokenStream tokens(&lexer);\n" + + " tokens.fill();\n" + + " for (auto token : tokens.getTokens())\n" + + " std::cout \\<\\< token->toString() \\<\\< std::endl;\n" + + (showDFA ? " std::cout \\<\\< lexer.getInterpreter\\()->getDFA(Lexer::DEFAULT_MODE).toLexerString();\n" : "\n") + + " return 0;\n" + + "}\n"); + outputFileST.add("lexerName", lexerName); + writeFile(tmpdir, "Test.cpp", outputFileST.render()); + } + + public void writeRecognizer(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { + if ( parserName==null ) { + writeLexerTestFile(lexerName, debug); + } + else { + writeParserTestFile(parserName, + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, + trace); + } + } + + + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(tmpdir+"/"+files[i]).delete(); + } + } + } + + protected void eraseFiles(File dir) { + String[] files = dir.list(); + for(int i = 0; files!=null && i < files.length; i++) { + new File(dir,files[i]).delete(); + } + } + + protected void eraseTempDir() { + boolean doErase = true; + String propName = getPropertyPrefix() + "-erase-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + doErase = Boolean.getBoolean(prop); + if(doErase) { + File tmpdirF = new File(tmpdir); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + } + + public String getFirstLineOfException() { + if ( this.stderrDuringParse ==null ) { + return null; + } + String[] lines = this.stderrDuringParse.split("\n"); + String prefix="Exception in thread \"main\" "; + return lines[0].substring(prefix.length(),lines[0].length()); + } + + /** + * When looking at a result set that consists of a Map/HashTable + * we cannot rely on the output order, as the hashing algorithm or other aspects + * of the implementation may be different on different JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a + * bit of a hack, but guarantees that we get the same order on all systems. We assume that + * the keys are strings. + * + * @param m The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } + + System.out.println("Map toString looks like: " + m.toString()); + + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); + + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } + + public List realElements(List elements) { + return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); + } + + public void assertNotNullOrEmpty(String message, String text) { + assertNotNull(message, text); + assertFalse(message, text.isEmpty()); + } + + public void assertNotNullOrEmpty(String text) { + assertNotNull(text); + assertFalse(text.isEmpty()); + } + + public static class IntTokenStream implements TokenStream { + IntegerList types; + int p=0; + public IntTokenStream(IntegerList types) { this.types = types; } + + @Override + public void consume() { p++; } + + @Override + public int LA(int i) { return LT(i).getType(); } + + @Override + public int mark() { + return index(); + } + + @Override + public int index() { return p; } + + @Override + public void release(int marker) { + seek(marker); + } + + @Override + public void seek(int index) { + p = index; + } + + @Override + public int size() { + return types.size(); + } + + @Override + public String getSourceName() { + return null; + } + + @Override + public Token LT(int i) { + CommonToken t; + int rawIndex = p + i - 1; + if ( rawIndex>=types.size() ) t = new CommonToken(Token.EOF); + else t = new CommonToken(types.get(rawIndex)); + t.setTokenIndex(rawIndex); + return t; + } + + @Override + public Token get(int i) { + return new org.antlr.v4.runtime.CommonToken(types.get(i)); + } + + @Override + public TokenSource getTokenSource() { + return null; + } + + @Override + public String getText() { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Interval interval) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(RuleContext ctx) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Token start, Token stop) { + throw new UnsupportedOperationException("can't give strings"); + } + } + + /** Sort a list */ + public > List sort(List data) { + List dup = new ArrayList(); + dup.addAll(data); + Collections.sort(dup); + return dup; + } + + /** Return map sorted by key */ + public ,V> LinkedHashMap sort(Map data) { + LinkedHashMap dup = new LinkedHashMap(); + List keys = new ArrayList(); + keys.addAll(data.keySet()); + Collections.sort(keys); + for (K k : keys) { + dup.put(k, data.get(k)); + } + return dup; + } +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeLexers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeLexers.java new file mode 100644 index 000000000..bd209f543 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeLexers.java @@ -0,0 +1,71 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeLexers extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {std::cout << \"S.A\" << std::endl;};\n" + + "C : 'c' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="abc"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "S.A\n" + + "[@0,0:0='a',<3>,1:0]\n" + + "[@1,1:1='b',<1>,1:1]\n" + + "[@2,2:2='c',<4>,1:2]\n" + + "[@3,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {std::cout << \"S.A\" << std::endl;} ;\n" + + "B : 'b' {std::cout << \"S.B\" << std::endl;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(99); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("A : 'a' B {std::cout << \"M.A\" << std::endl;} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "M.A\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeParsers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeParsers.java new file mode 100644 index 000000000..935cbdef6 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestCompositeParsers.java @@ -0,0 +1,504 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.Grammar; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeParsers extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBringInLiteralsFromDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : '=' 'a' {std::cout << \"S.a\";};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="=a"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCombinedImportsCombined() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : 'x' INT {std::cout << \"S.x\" << std::endl;};\n" + + "INT : '0'..'9'+ ;\n" + + "WS : (' '|'\\n') -> skip ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(31); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : x INT;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + + + String input ="x 34 9"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatesSeeSameTokenType() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { C, B, A } // reverse order\n" + + "y : A {std::cout << \"T.y\" << std::endl;};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : A {std::cout << \"S.x\" << std::endl;};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(598); + grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); + grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); + grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); + grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); + grammarBuilder.append("// mapping in each parser:\n"); + grammarBuilder.append("// public static final int C=6;\n"); + grammarBuilder.append("// public static final int EOF=-1;\n"); + grammarBuilder.append("// public static final int B=5;\n"); + grammarBuilder.append("// public static final int WS=7;\n"); + grammarBuilder.append("// public static final int A=4;\n"); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); + grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); + grammarBuilder.append("A : 'a' ; \n"); + grammarBuilder.append("C : 'c' ; \n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + + + String input ="aa"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals( + "S.x\n" + + "T.y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorAccessesDelegateMembers() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "@parser::members {\n" + + "void foo() {\n" + + " std::cout << \"foo\";\n" + + "}\n" + + "}\n" + + "a : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(122); + grammarBuilder.append("grammar M; // uses no rules from the import\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : 'b' {foo();} ; // gS is import pointer\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("foo\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {std::cout << \"S.a\" << std::endl;};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a[int x] returns [int y] : B {std::cout << \"S.a\";} {$y=1000;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(151); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : label=a[3] {std::cout << $label.y << std::endl;} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a1000\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {std::cout << \"S.a\";} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(128); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a {std::cout << $a.text;} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.ab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "a : B {std::cout << \"T.a\" << std::endl;};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {std::cout << \"S.a\" << std::endl;};\n" + + "b : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : b {std::cout << \"S.a\";};\n" + + "b : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("b : 'b'|'c';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegates() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { A }\n" + + "b : 'b' {std::cout << \"T.b\" << std::endl;};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {std::cout << \"S.a\" << std::endl;};\n" + + "b : 'b' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(101); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S, T;\n"); + grammarBuilder.append("b : 'b'|'c' {std::cout << \"M.b\" << std::endl;}|B|A;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.b\n" + + "S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "type_ : 'int' ;\n" + + "decl : type_ ID ';'\n" + + " | type_ ID init ';' {std::cout << \"JavaDecl: \" + $text;};\n" + + "init : '=' INT;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("prog : decl ;\n"); + grammarBuilder.append("type_ : 'int' | 'float' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="float x = 3;"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); + + assertEquals("JavaDecl: floatx=3;\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportLexerWithOnlyFragmentRules() throws Exception { + mkdir(tmpdir); + + String slave_Unicode = + "lexer grammar Unicode;\n" + + "\n" + + "fragment\n" + + "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + + " | '\\u2000'..'\\u200A'\n" + + " | '\\u202F' | '\\u205F' | '\\u3000'\n" + + " ;\n"; + writeFile(tmpdir, "Unicode.g4", slave_Unicode); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar Test;\n"); + grammarBuilder.append("import Unicode;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program : 'test' 'test';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="test test"; + String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedGrammarWithEmptyOptions() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "options {}\n" + + "a : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedRuleWithAction() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a @after {int x = 0;} : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordVSIDOrder() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "ID : 'a'..'z'+;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(153); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("a : A {std::cout << \"M.a: \" + $A->toString() << std::endl;};\n"); + grammarBuilder.append("A : 'abc' {std::cout << \"M.A\" << std::endl;};\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.A\n" + + "M.a: [@0,0:2='abc',<1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestFullContextParsing.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestFullContextParsing.java new file mode 100644 index 000000000..7c1602289 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestFullContextParsing.java @@ -0,0 +1,522 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestFullContextParsing extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigYieldsCtxSensitiveDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(96); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {dumpDFA();}\n"); + grammarBuilder.append(" : ID | ID {} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-ID->:s1^=>1\n", found); + + assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbiguityNoLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(264); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(" : expr expr {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: '@'\n"); + grammarBuilder.append(" | ID '@'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a@"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("alt 1\n", found); + + assertEquals( + "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + + "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + + "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFATwoDiffInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(160); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {dumpDFA();}\n"); + grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc @ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 2:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + + "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {dumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {dumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="@ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(339); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(": expr[0] {std::cout << $expr.ctx->toStringTree(this) << std::endl;};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(339); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(": expr[0] {std::cout << $expr.ctx->toStringTree(this) << std::endl;};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b * (expr c)))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + + "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + + "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(274); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s1=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(274); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(274); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(274); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo else bar }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + + "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(274); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(274); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLoopsSimulateTailRecursion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(377); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(" : expr_or_assign*;\n"); + grammarBuilder.append("expr_or_assign\n"); + grammarBuilder.append(" : expr '++' {std::cout << \"fail.\" << std::endl;}\n"); + grammarBuilder.append(" | expr {std::cout << \"pass: \"+$expr.text << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); + grammarBuilder.append("expr_primary\n"); + grammarBuilder.append(" : '(' ID ')'\n"); + grammarBuilder.append(" | ID '(' ID ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a(i)<-x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("pass: a(i)<-x\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + + "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSLLSeesEOFInLLGrammar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(144); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {dumpDFA();}\n"); + grammarBuilder.append(" : a;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + + "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLeftRecursion.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLeftRecursion.java new file mode 100644 index 000000000..da3077b7d --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLeftRecursion.java @@ -0,0 +1,3502 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLeftRecursion extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="1\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a = 5\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="b = 6\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*2\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(*a)[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="**a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[3]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator b) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator ( (declarator a) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[]()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[][]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(406); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a x) y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a (a x) y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 1) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) - (e 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.this"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . this) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e - (e a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a|b&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f(x)==T.c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_11() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f().g(x,1)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_12() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new T[((n-1) * x) + 1]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a|b)&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a > b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) > (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a >> b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) >> (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a^b^c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new A().b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1262); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)t.f()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(253); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(253); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(253); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(713); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(713); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(713); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(713); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrecedenceFilterConsidersContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog \n"); + grammarBuilder.append("@after {std::cout << $ctx->toStringTree(this) << std::endl;}\n"); + grammarBuilder.append(": statement* EOF {};\n"); + grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); + grammarBuilder.append("letterA: 'a';"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(231); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (literal - 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(231); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1 + -1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(354); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.result << std::endl;} ;\n"); + grammarBuilder.append("e returns [std::string result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(354); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.result << std::endl;} ;\n"); + grammarBuilder.append("e returns [std::string result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a+b)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(354); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.result << std::endl;} ;\n"); + grammarBuilder.append("e returns [std::string result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b+c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("((a=b)+c)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(467); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(467); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(467); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(467); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(315); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(315); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(315); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(315); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(332); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(332); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(332); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(332); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(279); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v, std::vector ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(279); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v, std::vector ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(279); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v, std::vector ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(279); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); + grammarBuilder.append("e returns [int v, std::vector ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("9\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPred() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); + grammarBuilder.append("a : a {true}? ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPredFailOption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(174); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); + grammarBuilder.append("a : a ID {false}?\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y z))\n", found); + + assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a x))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(298); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1,3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1, 3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerErrors.java new file mode 100644 index 000000000..fe483634a --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerErrors.java @@ -0,0 +1,259 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerErrors extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatFailsBackToDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(39); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:3='ab',<1>,1:2]\n" + + "[@2,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;\n"); + grammarBuilder.append("C : 'abcd' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababcx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:4='abc',<2>,1:2]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { } }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='{ { } }',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testErrorInMiddle() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStart() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,1:0='',<-1>,1:1]\n", found); + + assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStartAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,2:1='',<-1>,1:2]\n", found); + + assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInTokenAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + + assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerExecDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar L;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + String input ="x : x"; + String found = execLexer("L.g4", grammar, "LLexer", input, false); + assertEquals( + "[@0,0:0='x',<3>,1:0]\n" + + "[@1,2:2=':',<1>,1:2]\n" + + "[@2,4:4='x',<3>,1:4]\n" + + "[@3,5:4='',<-1>,1:5]\n", found); + + assertEquals( + "line 1:1 token recognition error at: ' '\n" + + "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo\"]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerExec.java new file mode 100644 index 000000000..e0ae09f01 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestLexerExec.java @@ -0,0 +1,5028 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerExec extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionPlacement() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(328); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ({std::cout << \"stuff fail: \" + getText() << std::endl;} 'a'\n"); + grammarBuilder.append("| {std::cout << \"stuff0: \" + getText() << std::endl;}\n"); + grammarBuilder.append(" 'a' {std::cout << \"stuff1: \" + getText() << std::endl;}\n"); + grammarBuilder.append(" 'b' {std::cout << \"stuff2: \" + getText() << std::endl;})\n"); + grammarBuilder.append(" {std::cout << getText() << std::endl;} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "stuff0: \n" + + "stuff1: a\n" + + "stuff2: ab\n" + + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(92); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {std::cout << \"I\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetInSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(99); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : (~[ab \\n]|'a') {std::cout << \"I\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="a x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:2='x',<1>,1:2]\n" + + "[@2,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetNot() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(102); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {std::cout << \"I\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="xaf"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:2='xaf',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetPlus() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(93); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {std::cout << \"I\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(155); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {std::cout << \"I\" << std::endl;} ;\n"); + grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {std::cout << \"ID\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34 a2 abc \n" + + " "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "ID\n" + + "ID\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,7:8='a2',<2>,2:4]\n" + + "[@3,10:12='abc',<2>,2:7]\n" + + "[@4,18:17='',<-1>,3:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithEscapedChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(101); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DASHBRACK : [\\-\\]]+ {std::cout << \"DASHBRACK\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="- ] "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "DASHBRACK\n" + + "DASHBRACK\n" + + "[@0,0:0='-',<1>,1:0]\n" + + "[@1,2:2=']',<1>,1:2]\n" + + "[@2,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEndRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(89); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-]+ {std::cout << \"I\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="00\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='00',<1>,1:0]\n" + + "[@1,3:2='',<-1>,2:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEscapeChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {std::cout << \"I\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(87); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"a-z]+ {std::cout << \"A\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:2='b\"a',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"\\\\ab]+ {std::cout << \"A\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"\\a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:3='b\"\\a',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithReversedRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [z-a9]+ {std::cout << \"A\" << std::endl;} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="9"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:0='9',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFByItself() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DONE : EOF ;\n"); + grammarBuilder.append("A : 'a';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:-1='',<1>,1:0]\n" + + "[@1,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input ="a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(107); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ('a' | 'ab') {std::cout << getText() << std::endl;} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testHexVsID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); + grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); + grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="x 0 1 a.b a.l"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='x',<5>,1:0]\n" + + "[@1,1:1=' ',<6>,1:1]\n" + + "[@2,2:2='0',<2>,1:2]\n" + + "[@3,3:3=' ',<6>,1:3]\n" + + "[@4,4:4='1',<2>,1:4]\n" + + "[@5,5:5=' ',<6>,1:5]\n" + + "[@6,6:6='a',<5>,1:6]\n" + + "[@7,7:7='.',<4>,1:7]\n" + + "[@8,8:8='b',<5>,1:8]\n" + + "[@9,9:9=' ',<6>,1:9]\n" + + "[@10,10:10='a',<5>,1:10]\n" + + "[@11,11:11='.',<4>,1:11]\n" + + "[@12,12:12='l',<5>,1:12]\n" + + "[@13,13:12='',<-1>,1:13]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("KEND : 'end' ; // has priority\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="end eend ending a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:2='end',<1>,1:0]\n" + + "[@1,3:3=' ',<3>,1:3]\n" + + "[@2,4:7='eend',<2>,1:4]\n" + + "[@3,8:8=' ',<3>,1:8]\n" + + "[@4,9:14='ending',<2>,1:9]\n" + + "[@5,15:15=' ',<3>,1:15]\n" + + "[@6,16:16='a',<2>,1:16]\n" + + "[@7,17:16='',<-1>,1:17]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLargeLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85821); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); + grammarBuilder.append("KW0 : 'KW' '0';\n"); + grammarBuilder.append("KW1 : 'KW' '1';\n"); + grammarBuilder.append("KW2 : 'KW' '2';\n"); + grammarBuilder.append("KW3 : 'KW' '3';\n"); + grammarBuilder.append("KW4 : 'KW' '4';\n"); + grammarBuilder.append("KW5 : 'KW' '5';\n"); + grammarBuilder.append("KW6 : 'KW' '6';\n"); + grammarBuilder.append("KW7 : 'KW' '7';\n"); + grammarBuilder.append("KW8 : 'KW' '8';\n"); + grammarBuilder.append("KW9 : 'KW' '9';\n"); + grammarBuilder.append("KW10 : 'KW' '10';\n"); + grammarBuilder.append("KW11 : 'KW' '11';\n"); + grammarBuilder.append("KW12 : 'KW' '12';\n"); + grammarBuilder.append("KW13 : 'KW' '13';\n"); + grammarBuilder.append("KW14 : 'KW' '14';\n"); + grammarBuilder.append("KW15 : 'KW' '15';\n"); + grammarBuilder.append("KW16 : 'KW' '16';\n"); + grammarBuilder.append("KW17 : 'KW' '17';\n"); + grammarBuilder.append("KW18 : 'KW' '18';\n"); + grammarBuilder.append("KW19 : 'KW' '19';\n"); + grammarBuilder.append("KW20 : 'KW' '20';\n"); + grammarBuilder.append("KW21 : 'KW' '21';\n"); + grammarBuilder.append("KW22 : 'KW' '22';\n"); + grammarBuilder.append("KW23 : 'KW' '23';\n"); + grammarBuilder.append("KW24 : 'KW' '24';\n"); + grammarBuilder.append("KW25 : 'KW' '25';\n"); + grammarBuilder.append("KW26 : 'KW' '26';\n"); + grammarBuilder.append("KW27 : 'KW' '27';\n"); + grammarBuilder.append("KW28 : 'KW' '28';\n"); + grammarBuilder.append("KW29 : 'KW' '29';\n"); + grammarBuilder.append("KW30 : 'KW' '30';\n"); + grammarBuilder.append("KW31 : 'KW' '31';\n"); + grammarBuilder.append("KW32 : 'KW' '32';\n"); + grammarBuilder.append("KW33 : 'KW' '33';\n"); + grammarBuilder.append("KW34 : 'KW' '34';\n"); + grammarBuilder.append("KW35 : 'KW' '35';\n"); + grammarBuilder.append("KW36 : 'KW' '36';\n"); + grammarBuilder.append("KW37 : 'KW' '37';\n"); + grammarBuilder.append("KW38 : 'KW' '38';\n"); + grammarBuilder.append("KW39 : 'KW' '39';\n"); + grammarBuilder.append("KW40 : 'KW' '40';\n"); + grammarBuilder.append("KW41 : 'KW' '41';\n"); + grammarBuilder.append("KW42 : 'KW' '42';\n"); + grammarBuilder.append("KW43 : 'KW' '43';\n"); + grammarBuilder.append("KW44 : 'KW' '44';\n"); + grammarBuilder.append("KW45 : 'KW' '45';\n"); + grammarBuilder.append("KW46 : 'KW' '46';\n"); + grammarBuilder.append("KW47 : 'KW' '47';\n"); + grammarBuilder.append("KW48 : 'KW' '48';\n"); + grammarBuilder.append("KW49 : 'KW' '49';\n"); + grammarBuilder.append("KW50 : 'KW' '50';\n"); + grammarBuilder.append("KW51 : 'KW' '51';\n"); + grammarBuilder.append("KW52 : 'KW' '52';\n"); + grammarBuilder.append("KW53 : 'KW' '53';\n"); + grammarBuilder.append("KW54 : 'KW' '54';\n"); + grammarBuilder.append("KW55 : 'KW' '55';\n"); + grammarBuilder.append("KW56 : 'KW' '56';\n"); + grammarBuilder.append("KW57 : 'KW' '57';\n"); + grammarBuilder.append("KW58 : 'KW' '58';\n"); + grammarBuilder.append("KW59 : 'KW' '59';\n"); + grammarBuilder.append("KW60 : 'KW' '60';\n"); + grammarBuilder.append("KW61 : 'KW' '61';\n"); + grammarBuilder.append("KW62 : 'KW' '62';\n"); + grammarBuilder.append("KW63 : 'KW' '63';\n"); + grammarBuilder.append("KW64 : 'KW' '64';\n"); + grammarBuilder.append("KW65 : 'KW' '65';\n"); + grammarBuilder.append("KW66 : 'KW' '66';\n"); + grammarBuilder.append("KW67 : 'KW' '67';\n"); + grammarBuilder.append("KW68 : 'KW' '68';\n"); + grammarBuilder.append("KW69 : 'KW' '69';\n"); + grammarBuilder.append("KW70 : 'KW' '70';\n"); + grammarBuilder.append("KW71 : 'KW' '71';\n"); + grammarBuilder.append("KW72 : 'KW' '72';\n"); + grammarBuilder.append("KW73 : 'KW' '73';\n"); + grammarBuilder.append("KW74 : 'KW' '74';\n"); + grammarBuilder.append("KW75 : 'KW' '75';\n"); + grammarBuilder.append("KW76 : 'KW' '76';\n"); + grammarBuilder.append("KW77 : 'KW' '77';\n"); + grammarBuilder.append("KW78 : 'KW' '78';\n"); + grammarBuilder.append("KW79 : 'KW' '79';\n"); + grammarBuilder.append("KW80 : 'KW' '80';\n"); + grammarBuilder.append("KW81 : 'KW' '81';\n"); + grammarBuilder.append("KW82 : 'KW' '82';\n"); + grammarBuilder.append("KW83 : 'KW' '83';\n"); + grammarBuilder.append("KW84 : 'KW' '84';\n"); + grammarBuilder.append("KW85 : 'KW' '85';\n"); + grammarBuilder.append("KW86 : 'KW' '86';\n"); + grammarBuilder.append("KW87 : 'KW' '87';\n"); + grammarBuilder.append("KW88 : 'KW' '88';\n"); + grammarBuilder.append("KW89 : 'KW' '89';\n"); + grammarBuilder.append("KW90 : 'KW' '90';\n"); + grammarBuilder.append("KW91 : 'KW' '91';\n"); + grammarBuilder.append("KW92 : 'KW' '92';\n"); + grammarBuilder.append("KW93 : 'KW' '93';\n"); + grammarBuilder.append("KW94 : 'KW' '94';\n"); + grammarBuilder.append("KW95 : 'KW' '95';\n"); + grammarBuilder.append("KW96 : 'KW' '96';\n"); + grammarBuilder.append("KW97 : 'KW' '97';\n"); + grammarBuilder.append("KW98 : 'KW' '98';\n"); + grammarBuilder.append("KW99 : 'KW' '99';\n"); + grammarBuilder.append("KW100 : 'KW' '100';\n"); + grammarBuilder.append("KW101 : 'KW' '101';\n"); + grammarBuilder.append("KW102 : 'KW' '102';\n"); + grammarBuilder.append("KW103 : 'KW' '103';\n"); + grammarBuilder.append("KW104 : 'KW' '104';\n"); + grammarBuilder.append("KW105 : 'KW' '105';\n"); + grammarBuilder.append("KW106 : 'KW' '106';\n"); + grammarBuilder.append("KW107 : 'KW' '107';\n"); + grammarBuilder.append("KW108 : 'KW' '108';\n"); + grammarBuilder.append("KW109 : 'KW' '109';\n"); + grammarBuilder.append("KW110 : 'KW' '110';\n"); + grammarBuilder.append("KW111 : 'KW' '111';\n"); + grammarBuilder.append("KW112 : 'KW' '112';\n"); + grammarBuilder.append("KW113 : 'KW' '113';\n"); + grammarBuilder.append("KW114 : 'KW' '114';\n"); + grammarBuilder.append("KW115 : 'KW' '115';\n"); + grammarBuilder.append("KW116 : 'KW' '116';\n"); + grammarBuilder.append("KW117 : 'KW' '117';\n"); + grammarBuilder.append("KW118 : 'KW' '118';\n"); + grammarBuilder.append("KW119 : 'KW' '119';\n"); + grammarBuilder.append("KW120 : 'KW' '120';\n"); + grammarBuilder.append("KW121 : 'KW' '121';\n"); + grammarBuilder.append("KW122 : 'KW' '122';\n"); + grammarBuilder.append("KW123 : 'KW' '123';\n"); + grammarBuilder.append("KW124 : 'KW' '124';\n"); + grammarBuilder.append("KW125 : 'KW' '125';\n"); + grammarBuilder.append("KW126 : 'KW' '126';\n"); + grammarBuilder.append("KW127 : 'KW' '127';\n"); + grammarBuilder.append("KW128 : 'KW' '128';\n"); + grammarBuilder.append("KW129 : 'KW' '129';\n"); + grammarBuilder.append("KW130 : 'KW' '130';\n"); + grammarBuilder.append("KW131 : 'KW' '131';\n"); + grammarBuilder.append("KW132 : 'KW' '132';\n"); + grammarBuilder.append("KW133 : 'KW' '133';\n"); + grammarBuilder.append("KW134 : 'KW' '134';\n"); + grammarBuilder.append("KW135 : 'KW' '135';\n"); + grammarBuilder.append("KW136 : 'KW' '136';\n"); + grammarBuilder.append("KW137 : 'KW' '137';\n"); + grammarBuilder.append("KW138 : 'KW' '138';\n"); + grammarBuilder.append("KW139 : 'KW' '139';\n"); + grammarBuilder.append("KW140 : 'KW' '140';\n"); + grammarBuilder.append("KW141 : 'KW' '141';\n"); + grammarBuilder.append("KW142 : 'KW' '142';\n"); + grammarBuilder.append("KW143 : 'KW' '143';\n"); + grammarBuilder.append("KW144 : 'KW' '144';\n"); + grammarBuilder.append("KW145 : 'KW' '145';\n"); + grammarBuilder.append("KW146 : 'KW' '146';\n"); + grammarBuilder.append("KW147 : 'KW' '147';\n"); + grammarBuilder.append("KW148 : 'KW' '148';\n"); + grammarBuilder.append("KW149 : 'KW' '149';\n"); + grammarBuilder.append("KW150 : 'KW' '150';\n"); + grammarBuilder.append("KW151 : 'KW' '151';\n"); + grammarBuilder.append("KW152 : 'KW' '152';\n"); + grammarBuilder.append("KW153 : 'KW' '153';\n"); + grammarBuilder.append("KW154 : 'KW' '154';\n"); + grammarBuilder.append("KW155 : 'KW' '155';\n"); + grammarBuilder.append("KW156 : 'KW' '156';\n"); + grammarBuilder.append("KW157 : 'KW' '157';\n"); + grammarBuilder.append("KW158 : 'KW' '158';\n"); + grammarBuilder.append("KW159 : 'KW' '159';\n"); + grammarBuilder.append("KW160 : 'KW' '160';\n"); + grammarBuilder.append("KW161 : 'KW' '161';\n"); + grammarBuilder.append("KW162 : 'KW' '162';\n"); + grammarBuilder.append("KW163 : 'KW' '163';\n"); + grammarBuilder.append("KW164 : 'KW' '164';\n"); + grammarBuilder.append("KW165 : 'KW' '165';\n"); + grammarBuilder.append("KW166 : 'KW' '166';\n"); + grammarBuilder.append("KW167 : 'KW' '167';\n"); + grammarBuilder.append("KW168 : 'KW' '168';\n"); + grammarBuilder.append("KW169 : 'KW' '169';\n"); + grammarBuilder.append("KW170 : 'KW' '170';\n"); + grammarBuilder.append("KW171 : 'KW' '171';\n"); + grammarBuilder.append("KW172 : 'KW' '172';\n"); + grammarBuilder.append("KW173 : 'KW' '173';\n"); + grammarBuilder.append("KW174 : 'KW' '174';\n"); + grammarBuilder.append("KW175 : 'KW' '175';\n"); + grammarBuilder.append("KW176 : 'KW' '176';\n"); + grammarBuilder.append("KW177 : 'KW' '177';\n"); + grammarBuilder.append("KW178 : 'KW' '178';\n"); + grammarBuilder.append("KW179 : 'KW' '179';\n"); + grammarBuilder.append("KW180 : 'KW' '180';\n"); + grammarBuilder.append("KW181 : 'KW' '181';\n"); + grammarBuilder.append("KW182 : 'KW' '182';\n"); + grammarBuilder.append("KW183 : 'KW' '183';\n"); + grammarBuilder.append("KW184 : 'KW' '184';\n"); + grammarBuilder.append("KW185 : 'KW' '185';\n"); + grammarBuilder.append("KW186 : 'KW' '186';\n"); + grammarBuilder.append("KW187 : 'KW' '187';\n"); + grammarBuilder.append("KW188 : 'KW' '188';\n"); + grammarBuilder.append("KW189 : 'KW' '189';\n"); + grammarBuilder.append("KW190 : 'KW' '190';\n"); + grammarBuilder.append("KW191 : 'KW' '191';\n"); + grammarBuilder.append("KW192 : 'KW' '192';\n"); + grammarBuilder.append("KW193 : 'KW' '193';\n"); + grammarBuilder.append("KW194 : 'KW' '194';\n"); + grammarBuilder.append("KW195 : 'KW' '195';\n"); + grammarBuilder.append("KW196 : 'KW' '196';\n"); + grammarBuilder.append("KW197 : 'KW' '197';\n"); + grammarBuilder.append("KW198 : 'KW' '198';\n"); + grammarBuilder.append("KW199 : 'KW' '199';\n"); + grammarBuilder.append("KW200 : 'KW' '200';\n"); + grammarBuilder.append("KW201 : 'KW' '201';\n"); + grammarBuilder.append("KW202 : 'KW' '202';\n"); + grammarBuilder.append("KW203 : 'KW' '203';\n"); + grammarBuilder.append("KW204 : 'KW' '204';\n"); + grammarBuilder.append("KW205 : 'KW' '205';\n"); + grammarBuilder.append("KW206 : 'KW' '206';\n"); + grammarBuilder.append("KW207 : 'KW' '207';\n"); + grammarBuilder.append("KW208 : 'KW' '208';\n"); + grammarBuilder.append("KW209 : 'KW' '209';\n"); + grammarBuilder.append("KW210 : 'KW' '210';\n"); + grammarBuilder.append("KW211 : 'KW' '211';\n"); + grammarBuilder.append("KW212 : 'KW' '212';\n"); + grammarBuilder.append("KW213 : 'KW' '213';\n"); + grammarBuilder.append("KW214 : 'KW' '214';\n"); + grammarBuilder.append("KW215 : 'KW' '215';\n"); + grammarBuilder.append("KW216 : 'KW' '216';\n"); + grammarBuilder.append("KW217 : 'KW' '217';\n"); + grammarBuilder.append("KW218 : 'KW' '218';\n"); + grammarBuilder.append("KW219 : 'KW' '219';\n"); + grammarBuilder.append("KW220 : 'KW' '220';\n"); + grammarBuilder.append("KW221 : 'KW' '221';\n"); + grammarBuilder.append("KW222 : 'KW' '222';\n"); + grammarBuilder.append("KW223 : 'KW' '223';\n"); + grammarBuilder.append("KW224 : 'KW' '224';\n"); + grammarBuilder.append("KW225 : 'KW' '225';\n"); + grammarBuilder.append("KW226 : 'KW' '226';\n"); + grammarBuilder.append("KW227 : 'KW' '227';\n"); + grammarBuilder.append("KW228 : 'KW' '228';\n"); + grammarBuilder.append("KW229 : 'KW' '229';\n"); + grammarBuilder.append("KW230 : 'KW' '230';\n"); + grammarBuilder.append("KW231 : 'KW' '231';\n"); + grammarBuilder.append("KW232 : 'KW' '232';\n"); + grammarBuilder.append("KW233 : 'KW' '233';\n"); + grammarBuilder.append("KW234 : 'KW' '234';\n"); + grammarBuilder.append("KW235 : 'KW' '235';\n"); + grammarBuilder.append("KW236 : 'KW' '236';\n"); + grammarBuilder.append("KW237 : 'KW' '237';\n"); + grammarBuilder.append("KW238 : 'KW' '238';\n"); + grammarBuilder.append("KW239 : 'KW' '239';\n"); + grammarBuilder.append("KW240 : 'KW' '240';\n"); + grammarBuilder.append("KW241 : 'KW' '241';\n"); + grammarBuilder.append("KW242 : 'KW' '242';\n"); + grammarBuilder.append("KW243 : 'KW' '243';\n"); + grammarBuilder.append("KW244 : 'KW' '244';\n"); + grammarBuilder.append("KW245 : 'KW' '245';\n"); + grammarBuilder.append("KW246 : 'KW' '246';\n"); + grammarBuilder.append("KW247 : 'KW' '247';\n"); + grammarBuilder.append("KW248 : 'KW' '248';\n"); + grammarBuilder.append("KW249 : 'KW' '249';\n"); + grammarBuilder.append("KW250 : 'KW' '250';\n"); + grammarBuilder.append("KW251 : 'KW' '251';\n"); + grammarBuilder.append("KW252 : 'KW' '252';\n"); + grammarBuilder.append("KW253 : 'KW' '253';\n"); + grammarBuilder.append("KW254 : 'KW' '254';\n"); + grammarBuilder.append("KW255 : 'KW' '255';\n"); + grammarBuilder.append("KW256 : 'KW' '256';\n"); + grammarBuilder.append("KW257 : 'KW' '257';\n"); + grammarBuilder.append("KW258 : 'KW' '258';\n"); + grammarBuilder.append("KW259 : 'KW' '259';\n"); + grammarBuilder.append("KW260 : 'KW' '260';\n"); + grammarBuilder.append("KW261 : 'KW' '261';\n"); + grammarBuilder.append("KW262 : 'KW' '262';\n"); + grammarBuilder.append("KW263 : 'KW' '263';\n"); + grammarBuilder.append("KW264 : 'KW' '264';\n"); + grammarBuilder.append("KW265 : 'KW' '265';\n"); + grammarBuilder.append("KW266 : 'KW' '266';\n"); + grammarBuilder.append("KW267 : 'KW' '267';\n"); + grammarBuilder.append("KW268 : 'KW' '268';\n"); + grammarBuilder.append("KW269 : 'KW' '269';\n"); + grammarBuilder.append("KW270 : 'KW' '270';\n"); + grammarBuilder.append("KW271 : 'KW' '271';\n"); + grammarBuilder.append("KW272 : 'KW' '272';\n"); + grammarBuilder.append("KW273 : 'KW' '273';\n"); + grammarBuilder.append("KW274 : 'KW' '274';\n"); + grammarBuilder.append("KW275 : 'KW' '275';\n"); + grammarBuilder.append("KW276 : 'KW' '276';\n"); + grammarBuilder.append("KW277 : 'KW' '277';\n"); + grammarBuilder.append("KW278 : 'KW' '278';\n"); + grammarBuilder.append("KW279 : 'KW' '279';\n"); + grammarBuilder.append("KW280 : 'KW' '280';\n"); + grammarBuilder.append("KW281 : 'KW' '281';\n"); + grammarBuilder.append("KW282 : 'KW' '282';\n"); + grammarBuilder.append("KW283 : 'KW' '283';\n"); + grammarBuilder.append("KW284 : 'KW' '284';\n"); + grammarBuilder.append("KW285 : 'KW' '285';\n"); + grammarBuilder.append("KW286 : 'KW' '286';\n"); + grammarBuilder.append("KW287 : 'KW' '287';\n"); + grammarBuilder.append("KW288 : 'KW' '288';\n"); + grammarBuilder.append("KW289 : 'KW' '289';\n"); + grammarBuilder.append("KW290 : 'KW' '290';\n"); + grammarBuilder.append("KW291 : 'KW' '291';\n"); + grammarBuilder.append("KW292 : 'KW' '292';\n"); + grammarBuilder.append("KW293 : 'KW' '293';\n"); + grammarBuilder.append("KW294 : 'KW' '294';\n"); + grammarBuilder.append("KW295 : 'KW' '295';\n"); + grammarBuilder.append("KW296 : 'KW' '296';\n"); + grammarBuilder.append("KW297 : 'KW' '297';\n"); + grammarBuilder.append("KW298 : 'KW' '298';\n"); + grammarBuilder.append("KW299 : 'KW' '299';\n"); + grammarBuilder.append("KW300 : 'KW' '300';\n"); + grammarBuilder.append("KW301 : 'KW' '301';\n"); + grammarBuilder.append("KW302 : 'KW' '302';\n"); + grammarBuilder.append("KW303 : 'KW' '303';\n"); + grammarBuilder.append("KW304 : 'KW' '304';\n"); + grammarBuilder.append("KW305 : 'KW' '305';\n"); + grammarBuilder.append("KW306 : 'KW' '306';\n"); + grammarBuilder.append("KW307 : 'KW' '307';\n"); + grammarBuilder.append("KW308 : 'KW' '308';\n"); + grammarBuilder.append("KW309 : 'KW' '309';\n"); + grammarBuilder.append("KW310 : 'KW' '310';\n"); + grammarBuilder.append("KW311 : 'KW' '311';\n"); + grammarBuilder.append("KW312 : 'KW' '312';\n"); + grammarBuilder.append("KW313 : 'KW' '313';\n"); + grammarBuilder.append("KW314 : 'KW' '314';\n"); + grammarBuilder.append("KW315 : 'KW' '315';\n"); + grammarBuilder.append("KW316 : 'KW' '316';\n"); + grammarBuilder.append("KW317 : 'KW' '317';\n"); + grammarBuilder.append("KW318 : 'KW' '318';\n"); + grammarBuilder.append("KW319 : 'KW' '319';\n"); + grammarBuilder.append("KW320 : 'KW' '320';\n"); + grammarBuilder.append("KW321 : 'KW' '321';\n"); + grammarBuilder.append("KW322 : 'KW' '322';\n"); + grammarBuilder.append("KW323 : 'KW' '323';\n"); + grammarBuilder.append("KW324 : 'KW' '324';\n"); + grammarBuilder.append("KW325 : 'KW' '325';\n"); + grammarBuilder.append("KW326 : 'KW' '326';\n"); + grammarBuilder.append("KW327 : 'KW' '327';\n"); + grammarBuilder.append("KW328 : 'KW' '328';\n"); + grammarBuilder.append("KW329 : 'KW' '329';\n"); + grammarBuilder.append("KW330 : 'KW' '330';\n"); + grammarBuilder.append("KW331 : 'KW' '331';\n"); + grammarBuilder.append("KW332 : 'KW' '332';\n"); + grammarBuilder.append("KW333 : 'KW' '333';\n"); + grammarBuilder.append("KW334 : 'KW' '334';\n"); + grammarBuilder.append("KW335 : 'KW' '335';\n"); + grammarBuilder.append("KW336 : 'KW' '336';\n"); + grammarBuilder.append("KW337 : 'KW' '337';\n"); + grammarBuilder.append("KW338 : 'KW' '338';\n"); + grammarBuilder.append("KW339 : 'KW' '339';\n"); + grammarBuilder.append("KW340 : 'KW' '340';\n"); + grammarBuilder.append("KW341 : 'KW' '341';\n"); + grammarBuilder.append("KW342 : 'KW' '342';\n"); + grammarBuilder.append("KW343 : 'KW' '343';\n"); + grammarBuilder.append("KW344 : 'KW' '344';\n"); + grammarBuilder.append("KW345 : 'KW' '345';\n"); + grammarBuilder.append("KW346 : 'KW' '346';\n"); + grammarBuilder.append("KW347 : 'KW' '347';\n"); + grammarBuilder.append("KW348 : 'KW' '348';\n"); + grammarBuilder.append("KW349 : 'KW' '349';\n"); + grammarBuilder.append("KW350 : 'KW' '350';\n"); + grammarBuilder.append("KW351 : 'KW' '351';\n"); + grammarBuilder.append("KW352 : 'KW' '352';\n"); + grammarBuilder.append("KW353 : 'KW' '353';\n"); + grammarBuilder.append("KW354 : 'KW' '354';\n"); + grammarBuilder.append("KW355 : 'KW' '355';\n"); + grammarBuilder.append("KW356 : 'KW' '356';\n"); + grammarBuilder.append("KW357 : 'KW' '357';\n"); + grammarBuilder.append("KW358 : 'KW' '358';\n"); + grammarBuilder.append("KW359 : 'KW' '359';\n"); + grammarBuilder.append("KW360 : 'KW' '360';\n"); + grammarBuilder.append("KW361 : 'KW' '361';\n"); + grammarBuilder.append("KW362 : 'KW' '362';\n"); + grammarBuilder.append("KW363 : 'KW' '363';\n"); + grammarBuilder.append("KW364 : 'KW' '364';\n"); + grammarBuilder.append("KW365 : 'KW' '365';\n"); + grammarBuilder.append("KW366 : 'KW' '366';\n"); + grammarBuilder.append("KW367 : 'KW' '367';\n"); + grammarBuilder.append("KW368 : 'KW' '368';\n"); + grammarBuilder.append("KW369 : 'KW' '369';\n"); + grammarBuilder.append("KW370 : 'KW' '370';\n"); + grammarBuilder.append("KW371 : 'KW' '371';\n"); + grammarBuilder.append("KW372 : 'KW' '372';\n"); + grammarBuilder.append("KW373 : 'KW' '373';\n"); + grammarBuilder.append("KW374 : 'KW' '374';\n"); + grammarBuilder.append("KW375 : 'KW' '375';\n"); + grammarBuilder.append("KW376 : 'KW' '376';\n"); + grammarBuilder.append("KW377 : 'KW' '377';\n"); + grammarBuilder.append("KW378 : 'KW' '378';\n"); + grammarBuilder.append("KW379 : 'KW' '379';\n"); + grammarBuilder.append("KW380 : 'KW' '380';\n"); + grammarBuilder.append("KW381 : 'KW' '381';\n"); + grammarBuilder.append("KW382 : 'KW' '382';\n"); + grammarBuilder.append("KW383 : 'KW' '383';\n"); + grammarBuilder.append("KW384 : 'KW' '384';\n"); + grammarBuilder.append("KW385 : 'KW' '385';\n"); + grammarBuilder.append("KW386 : 'KW' '386';\n"); + grammarBuilder.append("KW387 : 'KW' '387';\n"); + grammarBuilder.append("KW388 : 'KW' '388';\n"); + grammarBuilder.append("KW389 : 'KW' '389';\n"); + grammarBuilder.append("KW390 : 'KW' '390';\n"); + grammarBuilder.append("KW391 : 'KW' '391';\n"); + grammarBuilder.append("KW392 : 'KW' '392';\n"); + grammarBuilder.append("KW393 : 'KW' '393';\n"); + grammarBuilder.append("KW394 : 'KW' '394';\n"); + grammarBuilder.append("KW395 : 'KW' '395';\n"); + grammarBuilder.append("KW396 : 'KW' '396';\n"); + grammarBuilder.append("KW397 : 'KW' '397';\n"); + grammarBuilder.append("KW398 : 'KW' '398';\n"); + grammarBuilder.append("KW399 : 'KW' '399';\n"); + grammarBuilder.append("KW400 : 'KW' '400';\n"); + grammarBuilder.append("KW401 : 'KW' '401';\n"); + grammarBuilder.append("KW402 : 'KW' '402';\n"); + grammarBuilder.append("KW403 : 'KW' '403';\n"); + grammarBuilder.append("KW404 : 'KW' '404';\n"); + grammarBuilder.append("KW405 : 'KW' '405';\n"); + grammarBuilder.append("KW406 : 'KW' '406';\n"); + grammarBuilder.append("KW407 : 'KW' '407';\n"); + grammarBuilder.append("KW408 : 'KW' '408';\n"); + grammarBuilder.append("KW409 : 'KW' '409';\n"); + grammarBuilder.append("KW410 : 'KW' '410';\n"); + grammarBuilder.append("KW411 : 'KW' '411';\n"); + grammarBuilder.append("KW412 : 'KW' '412';\n"); + grammarBuilder.append("KW413 : 'KW' '413';\n"); + grammarBuilder.append("KW414 : 'KW' '414';\n"); + grammarBuilder.append("KW415 : 'KW' '415';\n"); + grammarBuilder.append("KW416 : 'KW' '416';\n"); + grammarBuilder.append("KW417 : 'KW' '417';\n"); + grammarBuilder.append("KW418 : 'KW' '418';\n"); + grammarBuilder.append("KW419 : 'KW' '419';\n"); + grammarBuilder.append("KW420 : 'KW' '420';\n"); + grammarBuilder.append("KW421 : 'KW' '421';\n"); + grammarBuilder.append("KW422 : 'KW' '422';\n"); + grammarBuilder.append("KW423 : 'KW' '423';\n"); + grammarBuilder.append("KW424 : 'KW' '424';\n"); + grammarBuilder.append("KW425 : 'KW' '425';\n"); + grammarBuilder.append("KW426 : 'KW' '426';\n"); + grammarBuilder.append("KW427 : 'KW' '427';\n"); + grammarBuilder.append("KW428 : 'KW' '428';\n"); + grammarBuilder.append("KW429 : 'KW' '429';\n"); + grammarBuilder.append("KW430 : 'KW' '430';\n"); + grammarBuilder.append("KW431 : 'KW' '431';\n"); + grammarBuilder.append("KW432 : 'KW' '432';\n"); + grammarBuilder.append("KW433 : 'KW' '433';\n"); + grammarBuilder.append("KW434 : 'KW' '434';\n"); + grammarBuilder.append("KW435 : 'KW' '435';\n"); + grammarBuilder.append("KW436 : 'KW' '436';\n"); + grammarBuilder.append("KW437 : 'KW' '437';\n"); + grammarBuilder.append("KW438 : 'KW' '438';\n"); + grammarBuilder.append("KW439 : 'KW' '439';\n"); + grammarBuilder.append("KW440 : 'KW' '440';\n"); + grammarBuilder.append("KW441 : 'KW' '441';\n"); + grammarBuilder.append("KW442 : 'KW' '442';\n"); + grammarBuilder.append("KW443 : 'KW' '443';\n"); + grammarBuilder.append("KW444 : 'KW' '444';\n"); + grammarBuilder.append("KW445 : 'KW' '445';\n"); + grammarBuilder.append("KW446 : 'KW' '446';\n"); + grammarBuilder.append("KW447 : 'KW' '447';\n"); + grammarBuilder.append("KW448 : 'KW' '448';\n"); + grammarBuilder.append("KW449 : 'KW' '449';\n"); + grammarBuilder.append("KW450 : 'KW' '450';\n"); + grammarBuilder.append("KW451 : 'KW' '451';\n"); + grammarBuilder.append("KW452 : 'KW' '452';\n"); + grammarBuilder.append("KW453 : 'KW' '453';\n"); + grammarBuilder.append("KW454 : 'KW' '454';\n"); + grammarBuilder.append("KW455 : 'KW' '455';\n"); + grammarBuilder.append("KW456 : 'KW' '456';\n"); + grammarBuilder.append("KW457 : 'KW' '457';\n"); + grammarBuilder.append("KW458 : 'KW' '458';\n"); + grammarBuilder.append("KW459 : 'KW' '459';\n"); + grammarBuilder.append("KW460 : 'KW' '460';\n"); + grammarBuilder.append("KW461 : 'KW' '461';\n"); + grammarBuilder.append("KW462 : 'KW' '462';\n"); + grammarBuilder.append("KW463 : 'KW' '463';\n"); + grammarBuilder.append("KW464 : 'KW' '464';\n"); + grammarBuilder.append("KW465 : 'KW' '465';\n"); + grammarBuilder.append("KW466 : 'KW' '466';\n"); + grammarBuilder.append("KW467 : 'KW' '467';\n"); + grammarBuilder.append("KW468 : 'KW' '468';\n"); + grammarBuilder.append("KW469 : 'KW' '469';\n"); + grammarBuilder.append("KW470 : 'KW' '470';\n"); + grammarBuilder.append("KW471 : 'KW' '471';\n"); + grammarBuilder.append("KW472 : 'KW' '472';\n"); + grammarBuilder.append("KW473 : 'KW' '473';\n"); + grammarBuilder.append("KW474 : 'KW' '474';\n"); + grammarBuilder.append("KW475 : 'KW' '475';\n"); + grammarBuilder.append("KW476 : 'KW' '476';\n"); + grammarBuilder.append("KW477 : 'KW' '477';\n"); + grammarBuilder.append("KW478 : 'KW' '478';\n"); + grammarBuilder.append("KW479 : 'KW' '479';\n"); + grammarBuilder.append("KW480 : 'KW' '480';\n"); + grammarBuilder.append("KW481 : 'KW' '481';\n"); + grammarBuilder.append("KW482 : 'KW' '482';\n"); + grammarBuilder.append("KW483 : 'KW' '483';\n"); + grammarBuilder.append("KW484 : 'KW' '484';\n"); + grammarBuilder.append("KW485 : 'KW' '485';\n"); + grammarBuilder.append("KW486 : 'KW' '486';\n"); + grammarBuilder.append("KW487 : 'KW' '487';\n"); + grammarBuilder.append("KW488 : 'KW' '488';\n"); + grammarBuilder.append("KW489 : 'KW' '489';\n"); + grammarBuilder.append("KW490 : 'KW' '490';\n"); + grammarBuilder.append("KW491 : 'KW' '491';\n"); + grammarBuilder.append("KW492 : 'KW' '492';\n"); + grammarBuilder.append("KW493 : 'KW' '493';\n"); + grammarBuilder.append("KW494 : 'KW' '494';\n"); + grammarBuilder.append("KW495 : 'KW' '495';\n"); + grammarBuilder.append("KW496 : 'KW' '496';\n"); + grammarBuilder.append("KW497 : 'KW' '497';\n"); + grammarBuilder.append("KW498 : 'KW' '498';\n"); + grammarBuilder.append("KW499 : 'KW' '499';\n"); + grammarBuilder.append("KW500 : 'KW' '500';\n"); + grammarBuilder.append("KW501 : 'KW' '501';\n"); + grammarBuilder.append("KW502 : 'KW' '502';\n"); + grammarBuilder.append("KW503 : 'KW' '503';\n"); + grammarBuilder.append("KW504 : 'KW' '504';\n"); + grammarBuilder.append("KW505 : 'KW' '505';\n"); + grammarBuilder.append("KW506 : 'KW' '506';\n"); + grammarBuilder.append("KW507 : 'KW' '507';\n"); + grammarBuilder.append("KW508 : 'KW' '508';\n"); + grammarBuilder.append("KW509 : 'KW' '509';\n"); + grammarBuilder.append("KW510 : 'KW' '510';\n"); + grammarBuilder.append("KW511 : 'KW' '511';\n"); + grammarBuilder.append("KW512 : 'KW' '512';\n"); + grammarBuilder.append("KW513 : 'KW' '513';\n"); + grammarBuilder.append("KW514 : 'KW' '514';\n"); + grammarBuilder.append("KW515 : 'KW' '515';\n"); + grammarBuilder.append("KW516 : 'KW' '516';\n"); + grammarBuilder.append("KW517 : 'KW' '517';\n"); + grammarBuilder.append("KW518 : 'KW' '518';\n"); + grammarBuilder.append("KW519 : 'KW' '519';\n"); + grammarBuilder.append("KW520 : 'KW' '520';\n"); + grammarBuilder.append("KW521 : 'KW' '521';\n"); + grammarBuilder.append("KW522 : 'KW' '522';\n"); + grammarBuilder.append("KW523 : 'KW' '523';\n"); + grammarBuilder.append("KW524 : 'KW' '524';\n"); + grammarBuilder.append("KW525 : 'KW' '525';\n"); + grammarBuilder.append("KW526 : 'KW' '526';\n"); + grammarBuilder.append("KW527 : 'KW' '527';\n"); + grammarBuilder.append("KW528 : 'KW' '528';\n"); + grammarBuilder.append("KW529 : 'KW' '529';\n"); + grammarBuilder.append("KW530 : 'KW' '530';\n"); + grammarBuilder.append("KW531 : 'KW' '531';\n"); + grammarBuilder.append("KW532 : 'KW' '532';\n"); + grammarBuilder.append("KW533 : 'KW' '533';\n"); + grammarBuilder.append("KW534 : 'KW' '534';\n"); + grammarBuilder.append("KW535 : 'KW' '535';\n"); + grammarBuilder.append("KW536 : 'KW' '536';\n"); + grammarBuilder.append("KW537 : 'KW' '537';\n"); + grammarBuilder.append("KW538 : 'KW' '538';\n"); + grammarBuilder.append("KW539 : 'KW' '539';\n"); + grammarBuilder.append("KW540 : 'KW' '540';\n"); + grammarBuilder.append("KW541 : 'KW' '541';\n"); + grammarBuilder.append("KW542 : 'KW' '542';\n"); + grammarBuilder.append("KW543 : 'KW' '543';\n"); + grammarBuilder.append("KW544 : 'KW' '544';\n"); + grammarBuilder.append("KW545 : 'KW' '545';\n"); + grammarBuilder.append("KW546 : 'KW' '546';\n"); + grammarBuilder.append("KW547 : 'KW' '547';\n"); + grammarBuilder.append("KW548 : 'KW' '548';\n"); + grammarBuilder.append("KW549 : 'KW' '549';\n"); + grammarBuilder.append("KW550 : 'KW' '550';\n"); + grammarBuilder.append("KW551 : 'KW' '551';\n"); + grammarBuilder.append("KW552 : 'KW' '552';\n"); + grammarBuilder.append("KW553 : 'KW' '553';\n"); + grammarBuilder.append("KW554 : 'KW' '554';\n"); + grammarBuilder.append("KW555 : 'KW' '555';\n"); + grammarBuilder.append("KW556 : 'KW' '556';\n"); + grammarBuilder.append("KW557 : 'KW' '557';\n"); + grammarBuilder.append("KW558 : 'KW' '558';\n"); + grammarBuilder.append("KW559 : 'KW' '559';\n"); + grammarBuilder.append("KW560 : 'KW' '560';\n"); + grammarBuilder.append("KW561 : 'KW' '561';\n"); + grammarBuilder.append("KW562 : 'KW' '562';\n"); + grammarBuilder.append("KW563 : 'KW' '563';\n"); + grammarBuilder.append("KW564 : 'KW' '564';\n"); + grammarBuilder.append("KW565 : 'KW' '565';\n"); + grammarBuilder.append("KW566 : 'KW' '566';\n"); + grammarBuilder.append("KW567 : 'KW' '567';\n"); + grammarBuilder.append("KW568 : 'KW' '568';\n"); + grammarBuilder.append("KW569 : 'KW' '569';\n"); + grammarBuilder.append("KW570 : 'KW' '570';\n"); + grammarBuilder.append("KW571 : 'KW' '571';\n"); + grammarBuilder.append("KW572 : 'KW' '572';\n"); + grammarBuilder.append("KW573 : 'KW' '573';\n"); + grammarBuilder.append("KW574 : 'KW' '574';\n"); + grammarBuilder.append("KW575 : 'KW' '575';\n"); + grammarBuilder.append("KW576 : 'KW' '576';\n"); + grammarBuilder.append("KW577 : 'KW' '577';\n"); + grammarBuilder.append("KW578 : 'KW' '578';\n"); + grammarBuilder.append("KW579 : 'KW' '579';\n"); + grammarBuilder.append("KW580 : 'KW' '580';\n"); + grammarBuilder.append("KW581 : 'KW' '581';\n"); + grammarBuilder.append("KW582 : 'KW' '582';\n"); + grammarBuilder.append("KW583 : 'KW' '583';\n"); + grammarBuilder.append("KW584 : 'KW' '584';\n"); + grammarBuilder.append("KW585 : 'KW' '585';\n"); + grammarBuilder.append("KW586 : 'KW' '586';\n"); + grammarBuilder.append("KW587 : 'KW' '587';\n"); + grammarBuilder.append("KW588 : 'KW' '588';\n"); + grammarBuilder.append("KW589 : 'KW' '589';\n"); + grammarBuilder.append("KW590 : 'KW' '590';\n"); + grammarBuilder.append("KW591 : 'KW' '591';\n"); + grammarBuilder.append("KW592 : 'KW' '592';\n"); + grammarBuilder.append("KW593 : 'KW' '593';\n"); + grammarBuilder.append("KW594 : 'KW' '594';\n"); + grammarBuilder.append("KW595 : 'KW' '595';\n"); + grammarBuilder.append("KW596 : 'KW' '596';\n"); + grammarBuilder.append("KW597 : 'KW' '597';\n"); + grammarBuilder.append("KW598 : 'KW' '598';\n"); + grammarBuilder.append("KW599 : 'KW' '599';\n"); + grammarBuilder.append("KW600 : 'KW' '600';\n"); + grammarBuilder.append("KW601 : 'KW' '601';\n"); + grammarBuilder.append("KW602 : 'KW' '602';\n"); + grammarBuilder.append("KW603 : 'KW' '603';\n"); + grammarBuilder.append("KW604 : 'KW' '604';\n"); + grammarBuilder.append("KW605 : 'KW' '605';\n"); + grammarBuilder.append("KW606 : 'KW' '606';\n"); + grammarBuilder.append("KW607 : 'KW' '607';\n"); + grammarBuilder.append("KW608 : 'KW' '608';\n"); + grammarBuilder.append("KW609 : 'KW' '609';\n"); + grammarBuilder.append("KW610 : 'KW' '610';\n"); + grammarBuilder.append("KW611 : 'KW' '611';\n"); + grammarBuilder.append("KW612 : 'KW' '612';\n"); + grammarBuilder.append("KW613 : 'KW' '613';\n"); + grammarBuilder.append("KW614 : 'KW' '614';\n"); + grammarBuilder.append("KW615 : 'KW' '615';\n"); + grammarBuilder.append("KW616 : 'KW' '616';\n"); + grammarBuilder.append("KW617 : 'KW' '617';\n"); + grammarBuilder.append("KW618 : 'KW' '618';\n"); + grammarBuilder.append("KW619 : 'KW' '619';\n"); + grammarBuilder.append("KW620 : 'KW' '620';\n"); + grammarBuilder.append("KW621 : 'KW' '621';\n"); + grammarBuilder.append("KW622 : 'KW' '622';\n"); + grammarBuilder.append("KW623 : 'KW' '623';\n"); + grammarBuilder.append("KW624 : 'KW' '624';\n"); + grammarBuilder.append("KW625 : 'KW' '625';\n"); + grammarBuilder.append("KW626 : 'KW' '626';\n"); + grammarBuilder.append("KW627 : 'KW' '627';\n"); + grammarBuilder.append("KW628 : 'KW' '628';\n"); + grammarBuilder.append("KW629 : 'KW' '629';\n"); + grammarBuilder.append("KW630 : 'KW' '630';\n"); + grammarBuilder.append("KW631 : 'KW' '631';\n"); + grammarBuilder.append("KW632 : 'KW' '632';\n"); + grammarBuilder.append("KW633 : 'KW' '633';\n"); + grammarBuilder.append("KW634 : 'KW' '634';\n"); + grammarBuilder.append("KW635 : 'KW' '635';\n"); + grammarBuilder.append("KW636 : 'KW' '636';\n"); + grammarBuilder.append("KW637 : 'KW' '637';\n"); + grammarBuilder.append("KW638 : 'KW' '638';\n"); + grammarBuilder.append("KW639 : 'KW' '639';\n"); + grammarBuilder.append("KW640 : 'KW' '640';\n"); + grammarBuilder.append("KW641 : 'KW' '641';\n"); + grammarBuilder.append("KW642 : 'KW' '642';\n"); + grammarBuilder.append("KW643 : 'KW' '643';\n"); + grammarBuilder.append("KW644 : 'KW' '644';\n"); + grammarBuilder.append("KW645 : 'KW' '645';\n"); + grammarBuilder.append("KW646 : 'KW' '646';\n"); + grammarBuilder.append("KW647 : 'KW' '647';\n"); + grammarBuilder.append("KW648 : 'KW' '648';\n"); + grammarBuilder.append("KW649 : 'KW' '649';\n"); + grammarBuilder.append("KW650 : 'KW' '650';\n"); + grammarBuilder.append("KW651 : 'KW' '651';\n"); + grammarBuilder.append("KW652 : 'KW' '652';\n"); + grammarBuilder.append("KW653 : 'KW' '653';\n"); + grammarBuilder.append("KW654 : 'KW' '654';\n"); + grammarBuilder.append("KW655 : 'KW' '655';\n"); + grammarBuilder.append("KW656 : 'KW' '656';\n"); + grammarBuilder.append("KW657 : 'KW' '657';\n"); + grammarBuilder.append("KW658 : 'KW' '658';\n"); + grammarBuilder.append("KW659 : 'KW' '659';\n"); + grammarBuilder.append("KW660 : 'KW' '660';\n"); + grammarBuilder.append("KW661 : 'KW' '661';\n"); + grammarBuilder.append("KW662 : 'KW' '662';\n"); + grammarBuilder.append("KW663 : 'KW' '663';\n"); + grammarBuilder.append("KW664 : 'KW' '664';\n"); + grammarBuilder.append("KW665 : 'KW' '665';\n"); + grammarBuilder.append("KW666 : 'KW' '666';\n"); + grammarBuilder.append("KW667 : 'KW' '667';\n"); + grammarBuilder.append("KW668 : 'KW' '668';\n"); + grammarBuilder.append("KW669 : 'KW' '669';\n"); + grammarBuilder.append("KW670 : 'KW' '670';\n"); + grammarBuilder.append("KW671 : 'KW' '671';\n"); + grammarBuilder.append("KW672 : 'KW' '672';\n"); + grammarBuilder.append("KW673 : 'KW' '673';\n"); + grammarBuilder.append("KW674 : 'KW' '674';\n"); + grammarBuilder.append("KW675 : 'KW' '675';\n"); + grammarBuilder.append("KW676 : 'KW' '676';\n"); + grammarBuilder.append("KW677 : 'KW' '677';\n"); + grammarBuilder.append("KW678 : 'KW' '678';\n"); + grammarBuilder.append("KW679 : 'KW' '679';\n"); + grammarBuilder.append("KW680 : 'KW' '680';\n"); + grammarBuilder.append("KW681 : 'KW' '681';\n"); + grammarBuilder.append("KW682 : 'KW' '682';\n"); + grammarBuilder.append("KW683 : 'KW' '683';\n"); + grammarBuilder.append("KW684 : 'KW' '684';\n"); + grammarBuilder.append("KW685 : 'KW' '685';\n"); + grammarBuilder.append("KW686 : 'KW' '686';\n"); + grammarBuilder.append("KW687 : 'KW' '687';\n"); + grammarBuilder.append("KW688 : 'KW' '688';\n"); + grammarBuilder.append("KW689 : 'KW' '689';\n"); + grammarBuilder.append("KW690 : 'KW' '690';\n"); + grammarBuilder.append("KW691 : 'KW' '691';\n"); + grammarBuilder.append("KW692 : 'KW' '692';\n"); + grammarBuilder.append("KW693 : 'KW' '693';\n"); + grammarBuilder.append("KW694 : 'KW' '694';\n"); + grammarBuilder.append("KW695 : 'KW' '695';\n"); + grammarBuilder.append("KW696 : 'KW' '696';\n"); + grammarBuilder.append("KW697 : 'KW' '697';\n"); + grammarBuilder.append("KW698 : 'KW' '698';\n"); + grammarBuilder.append("KW699 : 'KW' '699';\n"); + grammarBuilder.append("KW700 : 'KW' '700';\n"); + grammarBuilder.append("KW701 : 'KW' '701';\n"); + grammarBuilder.append("KW702 : 'KW' '702';\n"); + grammarBuilder.append("KW703 : 'KW' '703';\n"); + grammarBuilder.append("KW704 : 'KW' '704';\n"); + grammarBuilder.append("KW705 : 'KW' '705';\n"); + grammarBuilder.append("KW706 : 'KW' '706';\n"); + grammarBuilder.append("KW707 : 'KW' '707';\n"); + grammarBuilder.append("KW708 : 'KW' '708';\n"); + grammarBuilder.append("KW709 : 'KW' '709';\n"); + grammarBuilder.append("KW710 : 'KW' '710';\n"); + grammarBuilder.append("KW711 : 'KW' '711';\n"); + grammarBuilder.append("KW712 : 'KW' '712';\n"); + grammarBuilder.append("KW713 : 'KW' '713';\n"); + grammarBuilder.append("KW714 : 'KW' '714';\n"); + grammarBuilder.append("KW715 : 'KW' '715';\n"); + grammarBuilder.append("KW716 : 'KW' '716';\n"); + grammarBuilder.append("KW717 : 'KW' '717';\n"); + grammarBuilder.append("KW718 : 'KW' '718';\n"); + grammarBuilder.append("KW719 : 'KW' '719';\n"); + grammarBuilder.append("KW720 : 'KW' '720';\n"); + grammarBuilder.append("KW721 : 'KW' '721';\n"); + grammarBuilder.append("KW722 : 'KW' '722';\n"); + grammarBuilder.append("KW723 : 'KW' '723';\n"); + grammarBuilder.append("KW724 : 'KW' '724';\n"); + grammarBuilder.append("KW725 : 'KW' '725';\n"); + grammarBuilder.append("KW726 : 'KW' '726';\n"); + grammarBuilder.append("KW727 : 'KW' '727';\n"); + grammarBuilder.append("KW728 : 'KW' '728';\n"); + grammarBuilder.append("KW729 : 'KW' '729';\n"); + grammarBuilder.append("KW730 : 'KW' '730';\n"); + grammarBuilder.append("KW731 : 'KW' '731';\n"); + grammarBuilder.append("KW732 : 'KW' '732';\n"); + grammarBuilder.append("KW733 : 'KW' '733';\n"); + grammarBuilder.append("KW734 : 'KW' '734';\n"); + grammarBuilder.append("KW735 : 'KW' '735';\n"); + grammarBuilder.append("KW736 : 'KW' '736';\n"); + grammarBuilder.append("KW737 : 'KW' '737';\n"); + grammarBuilder.append("KW738 : 'KW' '738';\n"); + grammarBuilder.append("KW739 : 'KW' '739';\n"); + grammarBuilder.append("KW740 : 'KW' '740';\n"); + grammarBuilder.append("KW741 : 'KW' '741';\n"); + grammarBuilder.append("KW742 : 'KW' '742';\n"); + grammarBuilder.append("KW743 : 'KW' '743';\n"); + grammarBuilder.append("KW744 : 'KW' '744';\n"); + grammarBuilder.append("KW745 : 'KW' '745';\n"); + grammarBuilder.append("KW746 : 'KW' '746';\n"); + grammarBuilder.append("KW747 : 'KW' '747';\n"); + grammarBuilder.append("KW748 : 'KW' '748';\n"); + grammarBuilder.append("KW749 : 'KW' '749';\n"); + grammarBuilder.append("KW750 : 'KW' '750';\n"); + grammarBuilder.append("KW751 : 'KW' '751';\n"); + grammarBuilder.append("KW752 : 'KW' '752';\n"); + grammarBuilder.append("KW753 : 'KW' '753';\n"); + grammarBuilder.append("KW754 : 'KW' '754';\n"); + grammarBuilder.append("KW755 : 'KW' '755';\n"); + grammarBuilder.append("KW756 : 'KW' '756';\n"); + grammarBuilder.append("KW757 : 'KW' '757';\n"); + grammarBuilder.append("KW758 : 'KW' '758';\n"); + grammarBuilder.append("KW759 : 'KW' '759';\n"); + grammarBuilder.append("KW760 : 'KW' '760';\n"); + grammarBuilder.append("KW761 : 'KW' '761';\n"); + grammarBuilder.append("KW762 : 'KW' '762';\n"); + grammarBuilder.append("KW763 : 'KW' '763';\n"); + grammarBuilder.append("KW764 : 'KW' '764';\n"); + grammarBuilder.append("KW765 : 'KW' '765';\n"); + grammarBuilder.append("KW766 : 'KW' '766';\n"); + grammarBuilder.append("KW767 : 'KW' '767';\n"); + grammarBuilder.append("KW768 : 'KW' '768';\n"); + grammarBuilder.append("KW769 : 'KW' '769';\n"); + grammarBuilder.append("KW770 : 'KW' '770';\n"); + grammarBuilder.append("KW771 : 'KW' '771';\n"); + grammarBuilder.append("KW772 : 'KW' '772';\n"); + grammarBuilder.append("KW773 : 'KW' '773';\n"); + grammarBuilder.append("KW774 : 'KW' '774';\n"); + grammarBuilder.append("KW775 : 'KW' '775';\n"); + grammarBuilder.append("KW776 : 'KW' '776';\n"); + grammarBuilder.append("KW777 : 'KW' '777';\n"); + grammarBuilder.append("KW778 : 'KW' '778';\n"); + grammarBuilder.append("KW779 : 'KW' '779';\n"); + grammarBuilder.append("KW780 : 'KW' '780';\n"); + grammarBuilder.append("KW781 : 'KW' '781';\n"); + grammarBuilder.append("KW782 : 'KW' '782';\n"); + grammarBuilder.append("KW783 : 'KW' '783';\n"); + grammarBuilder.append("KW784 : 'KW' '784';\n"); + grammarBuilder.append("KW785 : 'KW' '785';\n"); + grammarBuilder.append("KW786 : 'KW' '786';\n"); + grammarBuilder.append("KW787 : 'KW' '787';\n"); + grammarBuilder.append("KW788 : 'KW' '788';\n"); + grammarBuilder.append("KW789 : 'KW' '789';\n"); + grammarBuilder.append("KW790 : 'KW' '790';\n"); + grammarBuilder.append("KW791 : 'KW' '791';\n"); + grammarBuilder.append("KW792 : 'KW' '792';\n"); + grammarBuilder.append("KW793 : 'KW' '793';\n"); + grammarBuilder.append("KW794 : 'KW' '794';\n"); + grammarBuilder.append("KW795 : 'KW' '795';\n"); + grammarBuilder.append("KW796 : 'KW' '796';\n"); + grammarBuilder.append("KW797 : 'KW' '797';\n"); + grammarBuilder.append("KW798 : 'KW' '798';\n"); + grammarBuilder.append("KW799 : 'KW' '799';\n"); + grammarBuilder.append("KW800 : 'KW' '800';\n"); + grammarBuilder.append("KW801 : 'KW' '801';\n"); + grammarBuilder.append("KW802 : 'KW' '802';\n"); + grammarBuilder.append("KW803 : 'KW' '803';\n"); + grammarBuilder.append("KW804 : 'KW' '804';\n"); + grammarBuilder.append("KW805 : 'KW' '805';\n"); + grammarBuilder.append("KW806 : 'KW' '806';\n"); + grammarBuilder.append("KW807 : 'KW' '807';\n"); + grammarBuilder.append("KW808 : 'KW' '808';\n"); + grammarBuilder.append("KW809 : 'KW' '809';\n"); + grammarBuilder.append("KW810 : 'KW' '810';\n"); + grammarBuilder.append("KW811 : 'KW' '811';\n"); + grammarBuilder.append("KW812 : 'KW' '812';\n"); + grammarBuilder.append("KW813 : 'KW' '813';\n"); + grammarBuilder.append("KW814 : 'KW' '814';\n"); + grammarBuilder.append("KW815 : 'KW' '815';\n"); + grammarBuilder.append("KW816 : 'KW' '816';\n"); + grammarBuilder.append("KW817 : 'KW' '817';\n"); + grammarBuilder.append("KW818 : 'KW' '818';\n"); + grammarBuilder.append("KW819 : 'KW' '819';\n"); + grammarBuilder.append("KW820 : 'KW' '820';\n"); + grammarBuilder.append("KW821 : 'KW' '821';\n"); + grammarBuilder.append("KW822 : 'KW' '822';\n"); + grammarBuilder.append("KW823 : 'KW' '823';\n"); + grammarBuilder.append("KW824 : 'KW' '824';\n"); + grammarBuilder.append("KW825 : 'KW' '825';\n"); + grammarBuilder.append("KW826 : 'KW' '826';\n"); + grammarBuilder.append("KW827 : 'KW' '827';\n"); + grammarBuilder.append("KW828 : 'KW' '828';\n"); + grammarBuilder.append("KW829 : 'KW' '829';\n"); + grammarBuilder.append("KW830 : 'KW' '830';\n"); + grammarBuilder.append("KW831 : 'KW' '831';\n"); + grammarBuilder.append("KW832 : 'KW' '832';\n"); + grammarBuilder.append("KW833 : 'KW' '833';\n"); + grammarBuilder.append("KW834 : 'KW' '834';\n"); + grammarBuilder.append("KW835 : 'KW' '835';\n"); + grammarBuilder.append("KW836 : 'KW' '836';\n"); + grammarBuilder.append("KW837 : 'KW' '837';\n"); + grammarBuilder.append("KW838 : 'KW' '838';\n"); + grammarBuilder.append("KW839 : 'KW' '839';\n"); + grammarBuilder.append("KW840 : 'KW' '840';\n"); + grammarBuilder.append("KW841 : 'KW' '841';\n"); + grammarBuilder.append("KW842 : 'KW' '842';\n"); + grammarBuilder.append("KW843 : 'KW' '843';\n"); + grammarBuilder.append("KW844 : 'KW' '844';\n"); + grammarBuilder.append("KW845 : 'KW' '845';\n"); + grammarBuilder.append("KW846 : 'KW' '846';\n"); + grammarBuilder.append("KW847 : 'KW' '847';\n"); + grammarBuilder.append("KW848 : 'KW' '848';\n"); + grammarBuilder.append("KW849 : 'KW' '849';\n"); + grammarBuilder.append("KW850 : 'KW' '850';\n"); + grammarBuilder.append("KW851 : 'KW' '851';\n"); + grammarBuilder.append("KW852 : 'KW' '852';\n"); + grammarBuilder.append("KW853 : 'KW' '853';\n"); + grammarBuilder.append("KW854 : 'KW' '854';\n"); + grammarBuilder.append("KW855 : 'KW' '855';\n"); + grammarBuilder.append("KW856 : 'KW' '856';\n"); + grammarBuilder.append("KW857 : 'KW' '857';\n"); + grammarBuilder.append("KW858 : 'KW' '858';\n"); + grammarBuilder.append("KW859 : 'KW' '859';\n"); + grammarBuilder.append("KW860 : 'KW' '860';\n"); + grammarBuilder.append("KW861 : 'KW' '861';\n"); + grammarBuilder.append("KW862 : 'KW' '862';\n"); + grammarBuilder.append("KW863 : 'KW' '863';\n"); + grammarBuilder.append("KW864 : 'KW' '864';\n"); + grammarBuilder.append("KW865 : 'KW' '865';\n"); + grammarBuilder.append("KW866 : 'KW' '866';\n"); + grammarBuilder.append("KW867 : 'KW' '867';\n"); + grammarBuilder.append("KW868 : 'KW' '868';\n"); + grammarBuilder.append("KW869 : 'KW' '869';\n"); + grammarBuilder.append("KW870 : 'KW' '870';\n"); + grammarBuilder.append("KW871 : 'KW' '871';\n"); + grammarBuilder.append("KW872 : 'KW' '872';\n"); + grammarBuilder.append("KW873 : 'KW' '873';\n"); + grammarBuilder.append("KW874 : 'KW' '874';\n"); + grammarBuilder.append("KW875 : 'KW' '875';\n"); + grammarBuilder.append("KW876 : 'KW' '876';\n"); + grammarBuilder.append("KW877 : 'KW' '877';\n"); + grammarBuilder.append("KW878 : 'KW' '878';\n"); + grammarBuilder.append("KW879 : 'KW' '879';\n"); + grammarBuilder.append("KW880 : 'KW' '880';\n"); + grammarBuilder.append("KW881 : 'KW' '881';\n"); + grammarBuilder.append("KW882 : 'KW' '882';\n"); + grammarBuilder.append("KW883 : 'KW' '883';\n"); + grammarBuilder.append("KW884 : 'KW' '884';\n"); + grammarBuilder.append("KW885 : 'KW' '885';\n"); + grammarBuilder.append("KW886 : 'KW' '886';\n"); + grammarBuilder.append("KW887 : 'KW' '887';\n"); + grammarBuilder.append("KW888 : 'KW' '888';\n"); + grammarBuilder.append("KW889 : 'KW' '889';\n"); + grammarBuilder.append("KW890 : 'KW' '890';\n"); + grammarBuilder.append("KW891 : 'KW' '891';\n"); + grammarBuilder.append("KW892 : 'KW' '892';\n"); + grammarBuilder.append("KW893 : 'KW' '893';\n"); + grammarBuilder.append("KW894 : 'KW' '894';\n"); + grammarBuilder.append("KW895 : 'KW' '895';\n"); + grammarBuilder.append("KW896 : 'KW' '896';\n"); + grammarBuilder.append("KW897 : 'KW' '897';\n"); + grammarBuilder.append("KW898 : 'KW' '898';\n"); + grammarBuilder.append("KW899 : 'KW' '899';\n"); + grammarBuilder.append("KW900 : 'KW' '900';\n"); + grammarBuilder.append("KW901 : 'KW' '901';\n"); + grammarBuilder.append("KW902 : 'KW' '902';\n"); + grammarBuilder.append("KW903 : 'KW' '903';\n"); + grammarBuilder.append("KW904 : 'KW' '904';\n"); + grammarBuilder.append("KW905 : 'KW' '905';\n"); + grammarBuilder.append("KW906 : 'KW' '906';\n"); + grammarBuilder.append("KW907 : 'KW' '907';\n"); + grammarBuilder.append("KW908 : 'KW' '908';\n"); + grammarBuilder.append("KW909 : 'KW' '909';\n"); + grammarBuilder.append("KW910 : 'KW' '910';\n"); + grammarBuilder.append("KW911 : 'KW' '911';\n"); + grammarBuilder.append("KW912 : 'KW' '912';\n"); + grammarBuilder.append("KW913 : 'KW' '913';\n"); + grammarBuilder.append("KW914 : 'KW' '914';\n"); + grammarBuilder.append("KW915 : 'KW' '915';\n"); + grammarBuilder.append("KW916 : 'KW' '916';\n"); + grammarBuilder.append("KW917 : 'KW' '917';\n"); + grammarBuilder.append("KW918 : 'KW' '918';\n"); + grammarBuilder.append("KW919 : 'KW' '919';\n"); + grammarBuilder.append("KW920 : 'KW' '920';\n"); + grammarBuilder.append("KW921 : 'KW' '921';\n"); + grammarBuilder.append("KW922 : 'KW' '922';\n"); + grammarBuilder.append("KW923 : 'KW' '923';\n"); + grammarBuilder.append("KW924 : 'KW' '924';\n"); + grammarBuilder.append("KW925 : 'KW' '925';\n"); + grammarBuilder.append("KW926 : 'KW' '926';\n"); + grammarBuilder.append("KW927 : 'KW' '927';\n"); + grammarBuilder.append("KW928 : 'KW' '928';\n"); + grammarBuilder.append("KW929 : 'KW' '929';\n"); + grammarBuilder.append("KW930 : 'KW' '930';\n"); + grammarBuilder.append("KW931 : 'KW' '931';\n"); + grammarBuilder.append("KW932 : 'KW' '932';\n"); + grammarBuilder.append("KW933 : 'KW' '933';\n"); + grammarBuilder.append("KW934 : 'KW' '934';\n"); + grammarBuilder.append("KW935 : 'KW' '935';\n"); + grammarBuilder.append("KW936 : 'KW' '936';\n"); + grammarBuilder.append("KW937 : 'KW' '937';\n"); + grammarBuilder.append("KW938 : 'KW' '938';\n"); + grammarBuilder.append("KW939 : 'KW' '939';\n"); + grammarBuilder.append("KW940 : 'KW' '940';\n"); + grammarBuilder.append("KW941 : 'KW' '941';\n"); + grammarBuilder.append("KW942 : 'KW' '942';\n"); + grammarBuilder.append("KW943 : 'KW' '943';\n"); + grammarBuilder.append("KW944 : 'KW' '944';\n"); + grammarBuilder.append("KW945 : 'KW' '945';\n"); + grammarBuilder.append("KW946 : 'KW' '946';\n"); + grammarBuilder.append("KW947 : 'KW' '947';\n"); + grammarBuilder.append("KW948 : 'KW' '948';\n"); + grammarBuilder.append("KW949 : 'KW' '949';\n"); + grammarBuilder.append("KW950 : 'KW' '950';\n"); + grammarBuilder.append("KW951 : 'KW' '951';\n"); + grammarBuilder.append("KW952 : 'KW' '952';\n"); + grammarBuilder.append("KW953 : 'KW' '953';\n"); + grammarBuilder.append("KW954 : 'KW' '954';\n"); + grammarBuilder.append("KW955 : 'KW' '955';\n"); + grammarBuilder.append("KW956 : 'KW' '956';\n"); + grammarBuilder.append("KW957 : 'KW' '957';\n"); + grammarBuilder.append("KW958 : 'KW' '958';\n"); + grammarBuilder.append("KW959 : 'KW' '959';\n"); + grammarBuilder.append("KW960 : 'KW' '960';\n"); + grammarBuilder.append("KW961 : 'KW' '961';\n"); + grammarBuilder.append("KW962 : 'KW' '962';\n"); + grammarBuilder.append("KW963 : 'KW' '963';\n"); + grammarBuilder.append("KW964 : 'KW' '964';\n"); + grammarBuilder.append("KW965 : 'KW' '965';\n"); + grammarBuilder.append("KW966 : 'KW' '966';\n"); + grammarBuilder.append("KW967 : 'KW' '967';\n"); + grammarBuilder.append("KW968 : 'KW' '968';\n"); + grammarBuilder.append("KW969 : 'KW' '969';\n"); + grammarBuilder.append("KW970 : 'KW' '970';\n"); + grammarBuilder.append("KW971 : 'KW' '971';\n"); + grammarBuilder.append("KW972 : 'KW' '972';\n"); + grammarBuilder.append("KW973 : 'KW' '973';\n"); + grammarBuilder.append("KW974 : 'KW' '974';\n"); + grammarBuilder.append("KW975 : 'KW' '975';\n"); + grammarBuilder.append("KW976 : 'KW' '976';\n"); + grammarBuilder.append("KW977 : 'KW' '977';\n"); + grammarBuilder.append("KW978 : 'KW' '978';\n"); + grammarBuilder.append("KW979 : 'KW' '979';\n"); + grammarBuilder.append("KW980 : 'KW' '980';\n"); + grammarBuilder.append("KW981 : 'KW' '981';\n"); + grammarBuilder.append("KW982 : 'KW' '982';\n"); + grammarBuilder.append("KW983 : 'KW' '983';\n"); + grammarBuilder.append("KW984 : 'KW' '984';\n"); + grammarBuilder.append("KW985 : 'KW' '985';\n"); + grammarBuilder.append("KW986 : 'KW' '986';\n"); + grammarBuilder.append("KW987 : 'KW' '987';\n"); + grammarBuilder.append("KW988 : 'KW' '988';\n"); + grammarBuilder.append("KW989 : 'KW' '989';\n"); + grammarBuilder.append("KW990 : 'KW' '990';\n"); + grammarBuilder.append("KW991 : 'KW' '991';\n"); + grammarBuilder.append("KW992 : 'KW' '992';\n"); + grammarBuilder.append("KW993 : 'KW' '993';\n"); + grammarBuilder.append("KW994 : 'KW' '994';\n"); + grammarBuilder.append("KW995 : 'KW' '995';\n"); + grammarBuilder.append("KW996 : 'KW' '996';\n"); + grammarBuilder.append("KW997 : 'KW' '997';\n"); + grammarBuilder.append("KW998 : 'KW' '998';\n"); + grammarBuilder.append("KW999 : 'KW' '999';\n"); + grammarBuilder.append("KW1000 : 'KW' '1000';\n"); + grammarBuilder.append("KW1001 : 'KW' '1001';\n"); + grammarBuilder.append("KW1002 : 'KW' '1002';\n"); + grammarBuilder.append("KW1003 : 'KW' '1003';\n"); + grammarBuilder.append("KW1004 : 'KW' '1004';\n"); + grammarBuilder.append("KW1005 : 'KW' '1005';\n"); + grammarBuilder.append("KW1006 : 'KW' '1006';\n"); + grammarBuilder.append("KW1007 : 'KW' '1007';\n"); + grammarBuilder.append("KW1008 : 'KW' '1008';\n"); + grammarBuilder.append("KW1009 : 'KW' '1009';\n"); + grammarBuilder.append("KW1010 : 'KW' '1010';\n"); + grammarBuilder.append("KW1011 : 'KW' '1011';\n"); + grammarBuilder.append("KW1012 : 'KW' '1012';\n"); + grammarBuilder.append("KW1013 : 'KW' '1013';\n"); + grammarBuilder.append("KW1014 : 'KW' '1014';\n"); + grammarBuilder.append("KW1015 : 'KW' '1015';\n"); + grammarBuilder.append("KW1016 : 'KW' '1016';\n"); + grammarBuilder.append("KW1017 : 'KW' '1017';\n"); + grammarBuilder.append("KW1018 : 'KW' '1018';\n"); + grammarBuilder.append("KW1019 : 'KW' '1019';\n"); + grammarBuilder.append("KW1020 : 'KW' '1020';\n"); + grammarBuilder.append("KW1021 : 'KW' '1021';\n"); + grammarBuilder.append("KW1022 : 'KW' '1022';\n"); + grammarBuilder.append("KW1023 : 'KW' '1023';\n"); + grammarBuilder.append("KW1024 : 'KW' '1024';\n"); + grammarBuilder.append("KW1025 : 'KW' '1025';\n"); + grammarBuilder.append("KW1026 : 'KW' '1026';\n"); + grammarBuilder.append("KW1027 : 'KW' '1027';\n"); + grammarBuilder.append("KW1028 : 'KW' '1028';\n"); + grammarBuilder.append("KW1029 : 'KW' '1029';\n"); + grammarBuilder.append("KW1030 : 'KW' '1030';\n"); + grammarBuilder.append("KW1031 : 'KW' '1031';\n"); + grammarBuilder.append("KW1032 : 'KW' '1032';\n"); + grammarBuilder.append("KW1033 : 'KW' '1033';\n"); + grammarBuilder.append("KW1034 : 'KW' '1034';\n"); + grammarBuilder.append("KW1035 : 'KW' '1035';\n"); + grammarBuilder.append("KW1036 : 'KW' '1036';\n"); + grammarBuilder.append("KW1037 : 'KW' '1037';\n"); + grammarBuilder.append("KW1038 : 'KW' '1038';\n"); + grammarBuilder.append("KW1039 : 'KW' '1039';\n"); + grammarBuilder.append("KW1040 : 'KW' '1040';\n"); + grammarBuilder.append("KW1041 : 'KW' '1041';\n"); + grammarBuilder.append("KW1042 : 'KW' '1042';\n"); + grammarBuilder.append("KW1043 : 'KW' '1043';\n"); + grammarBuilder.append("KW1044 : 'KW' '1044';\n"); + grammarBuilder.append("KW1045 : 'KW' '1045';\n"); + grammarBuilder.append("KW1046 : 'KW' '1046';\n"); + grammarBuilder.append("KW1047 : 'KW' '1047';\n"); + grammarBuilder.append("KW1048 : 'KW' '1048';\n"); + grammarBuilder.append("KW1049 : 'KW' '1049';\n"); + grammarBuilder.append("KW1050 : 'KW' '1050';\n"); + grammarBuilder.append("KW1051 : 'KW' '1051';\n"); + grammarBuilder.append("KW1052 : 'KW' '1052';\n"); + grammarBuilder.append("KW1053 : 'KW' '1053';\n"); + grammarBuilder.append("KW1054 : 'KW' '1054';\n"); + grammarBuilder.append("KW1055 : 'KW' '1055';\n"); + grammarBuilder.append("KW1056 : 'KW' '1056';\n"); + grammarBuilder.append("KW1057 : 'KW' '1057';\n"); + grammarBuilder.append("KW1058 : 'KW' '1058';\n"); + grammarBuilder.append("KW1059 : 'KW' '1059';\n"); + grammarBuilder.append("KW1060 : 'KW' '1060';\n"); + grammarBuilder.append("KW1061 : 'KW' '1061';\n"); + grammarBuilder.append("KW1062 : 'KW' '1062';\n"); + grammarBuilder.append("KW1063 : 'KW' '1063';\n"); + grammarBuilder.append("KW1064 : 'KW' '1064';\n"); + grammarBuilder.append("KW1065 : 'KW' '1065';\n"); + grammarBuilder.append("KW1066 : 'KW' '1066';\n"); + grammarBuilder.append("KW1067 : 'KW' '1067';\n"); + grammarBuilder.append("KW1068 : 'KW' '1068';\n"); + grammarBuilder.append("KW1069 : 'KW' '1069';\n"); + grammarBuilder.append("KW1070 : 'KW' '1070';\n"); + grammarBuilder.append("KW1071 : 'KW' '1071';\n"); + grammarBuilder.append("KW1072 : 'KW' '1072';\n"); + grammarBuilder.append("KW1073 : 'KW' '1073';\n"); + grammarBuilder.append("KW1074 : 'KW' '1074';\n"); + grammarBuilder.append("KW1075 : 'KW' '1075';\n"); + grammarBuilder.append("KW1076 : 'KW' '1076';\n"); + grammarBuilder.append("KW1077 : 'KW' '1077';\n"); + grammarBuilder.append("KW1078 : 'KW' '1078';\n"); + grammarBuilder.append("KW1079 : 'KW' '1079';\n"); + grammarBuilder.append("KW1080 : 'KW' '1080';\n"); + grammarBuilder.append("KW1081 : 'KW' '1081';\n"); + grammarBuilder.append("KW1082 : 'KW' '1082';\n"); + grammarBuilder.append("KW1083 : 'KW' '1083';\n"); + grammarBuilder.append("KW1084 : 'KW' '1084';\n"); + grammarBuilder.append("KW1085 : 'KW' '1085';\n"); + grammarBuilder.append("KW1086 : 'KW' '1086';\n"); + grammarBuilder.append("KW1087 : 'KW' '1087';\n"); + grammarBuilder.append("KW1088 : 'KW' '1088';\n"); + grammarBuilder.append("KW1089 : 'KW' '1089';\n"); + grammarBuilder.append("KW1090 : 'KW' '1090';\n"); + grammarBuilder.append("KW1091 : 'KW' '1091';\n"); + grammarBuilder.append("KW1092 : 'KW' '1092';\n"); + grammarBuilder.append("KW1093 : 'KW' '1093';\n"); + grammarBuilder.append("KW1094 : 'KW' '1094';\n"); + grammarBuilder.append("KW1095 : 'KW' '1095';\n"); + grammarBuilder.append("KW1096 : 'KW' '1096';\n"); + grammarBuilder.append("KW1097 : 'KW' '1097';\n"); + grammarBuilder.append("KW1098 : 'KW' '1098';\n"); + grammarBuilder.append("KW1099 : 'KW' '1099';\n"); + grammarBuilder.append("KW1100 : 'KW' '1100';\n"); + grammarBuilder.append("KW1101 : 'KW' '1101';\n"); + grammarBuilder.append("KW1102 : 'KW' '1102';\n"); + grammarBuilder.append("KW1103 : 'KW' '1103';\n"); + grammarBuilder.append("KW1104 : 'KW' '1104';\n"); + grammarBuilder.append("KW1105 : 'KW' '1105';\n"); + grammarBuilder.append("KW1106 : 'KW' '1106';\n"); + grammarBuilder.append("KW1107 : 'KW' '1107';\n"); + grammarBuilder.append("KW1108 : 'KW' '1108';\n"); + grammarBuilder.append("KW1109 : 'KW' '1109';\n"); + grammarBuilder.append("KW1110 : 'KW' '1110';\n"); + grammarBuilder.append("KW1111 : 'KW' '1111';\n"); + grammarBuilder.append("KW1112 : 'KW' '1112';\n"); + grammarBuilder.append("KW1113 : 'KW' '1113';\n"); + grammarBuilder.append("KW1114 : 'KW' '1114';\n"); + grammarBuilder.append("KW1115 : 'KW' '1115';\n"); + grammarBuilder.append("KW1116 : 'KW' '1116';\n"); + grammarBuilder.append("KW1117 : 'KW' '1117';\n"); + grammarBuilder.append("KW1118 : 'KW' '1118';\n"); + grammarBuilder.append("KW1119 : 'KW' '1119';\n"); + grammarBuilder.append("KW1120 : 'KW' '1120';\n"); + grammarBuilder.append("KW1121 : 'KW' '1121';\n"); + grammarBuilder.append("KW1122 : 'KW' '1122';\n"); + grammarBuilder.append("KW1123 : 'KW' '1123';\n"); + grammarBuilder.append("KW1124 : 'KW' '1124';\n"); + grammarBuilder.append("KW1125 : 'KW' '1125';\n"); + grammarBuilder.append("KW1126 : 'KW' '1126';\n"); + grammarBuilder.append("KW1127 : 'KW' '1127';\n"); + grammarBuilder.append("KW1128 : 'KW' '1128';\n"); + grammarBuilder.append("KW1129 : 'KW' '1129';\n"); + grammarBuilder.append("KW1130 : 'KW' '1130';\n"); + grammarBuilder.append("KW1131 : 'KW' '1131';\n"); + grammarBuilder.append("KW1132 : 'KW' '1132';\n"); + grammarBuilder.append("KW1133 : 'KW' '1133';\n"); + grammarBuilder.append("KW1134 : 'KW' '1134';\n"); + grammarBuilder.append("KW1135 : 'KW' '1135';\n"); + grammarBuilder.append("KW1136 : 'KW' '1136';\n"); + grammarBuilder.append("KW1137 : 'KW' '1137';\n"); + grammarBuilder.append("KW1138 : 'KW' '1138';\n"); + grammarBuilder.append("KW1139 : 'KW' '1139';\n"); + grammarBuilder.append("KW1140 : 'KW' '1140';\n"); + grammarBuilder.append("KW1141 : 'KW' '1141';\n"); + grammarBuilder.append("KW1142 : 'KW' '1142';\n"); + grammarBuilder.append("KW1143 : 'KW' '1143';\n"); + grammarBuilder.append("KW1144 : 'KW' '1144';\n"); + grammarBuilder.append("KW1145 : 'KW' '1145';\n"); + grammarBuilder.append("KW1146 : 'KW' '1146';\n"); + grammarBuilder.append("KW1147 : 'KW' '1147';\n"); + grammarBuilder.append("KW1148 : 'KW' '1148';\n"); + grammarBuilder.append("KW1149 : 'KW' '1149';\n"); + grammarBuilder.append("KW1150 : 'KW' '1150';\n"); + grammarBuilder.append("KW1151 : 'KW' '1151';\n"); + grammarBuilder.append("KW1152 : 'KW' '1152';\n"); + grammarBuilder.append("KW1153 : 'KW' '1153';\n"); + grammarBuilder.append("KW1154 : 'KW' '1154';\n"); + grammarBuilder.append("KW1155 : 'KW' '1155';\n"); + grammarBuilder.append("KW1156 : 'KW' '1156';\n"); + grammarBuilder.append("KW1157 : 'KW' '1157';\n"); + grammarBuilder.append("KW1158 : 'KW' '1158';\n"); + grammarBuilder.append("KW1159 : 'KW' '1159';\n"); + grammarBuilder.append("KW1160 : 'KW' '1160';\n"); + grammarBuilder.append("KW1161 : 'KW' '1161';\n"); + grammarBuilder.append("KW1162 : 'KW' '1162';\n"); + grammarBuilder.append("KW1163 : 'KW' '1163';\n"); + grammarBuilder.append("KW1164 : 'KW' '1164';\n"); + grammarBuilder.append("KW1165 : 'KW' '1165';\n"); + grammarBuilder.append("KW1166 : 'KW' '1166';\n"); + grammarBuilder.append("KW1167 : 'KW' '1167';\n"); + grammarBuilder.append("KW1168 : 'KW' '1168';\n"); + grammarBuilder.append("KW1169 : 'KW' '1169';\n"); + grammarBuilder.append("KW1170 : 'KW' '1170';\n"); + grammarBuilder.append("KW1171 : 'KW' '1171';\n"); + grammarBuilder.append("KW1172 : 'KW' '1172';\n"); + grammarBuilder.append("KW1173 : 'KW' '1173';\n"); + grammarBuilder.append("KW1174 : 'KW' '1174';\n"); + grammarBuilder.append("KW1175 : 'KW' '1175';\n"); + grammarBuilder.append("KW1176 : 'KW' '1176';\n"); + grammarBuilder.append("KW1177 : 'KW' '1177';\n"); + grammarBuilder.append("KW1178 : 'KW' '1178';\n"); + grammarBuilder.append("KW1179 : 'KW' '1179';\n"); + grammarBuilder.append("KW1180 : 'KW' '1180';\n"); + grammarBuilder.append("KW1181 : 'KW' '1181';\n"); + grammarBuilder.append("KW1182 : 'KW' '1182';\n"); + grammarBuilder.append("KW1183 : 'KW' '1183';\n"); + grammarBuilder.append("KW1184 : 'KW' '1184';\n"); + grammarBuilder.append("KW1185 : 'KW' '1185';\n"); + grammarBuilder.append("KW1186 : 'KW' '1186';\n"); + grammarBuilder.append("KW1187 : 'KW' '1187';\n"); + grammarBuilder.append("KW1188 : 'KW' '1188';\n"); + grammarBuilder.append("KW1189 : 'KW' '1189';\n"); + grammarBuilder.append("KW1190 : 'KW' '1190';\n"); + grammarBuilder.append("KW1191 : 'KW' '1191';\n"); + grammarBuilder.append("KW1192 : 'KW' '1192';\n"); + grammarBuilder.append("KW1193 : 'KW' '1193';\n"); + grammarBuilder.append("KW1194 : 'KW' '1194';\n"); + grammarBuilder.append("KW1195 : 'KW' '1195';\n"); + grammarBuilder.append("KW1196 : 'KW' '1196';\n"); + grammarBuilder.append("KW1197 : 'KW' '1197';\n"); + grammarBuilder.append("KW1198 : 'KW' '1198';\n"); + grammarBuilder.append("KW1199 : 'KW' '1199';\n"); + grammarBuilder.append("KW1200 : 'KW' '1200';\n"); + grammarBuilder.append("KW1201 : 'KW' '1201';\n"); + grammarBuilder.append("KW1202 : 'KW' '1202';\n"); + grammarBuilder.append("KW1203 : 'KW' '1203';\n"); + grammarBuilder.append("KW1204 : 'KW' '1204';\n"); + grammarBuilder.append("KW1205 : 'KW' '1205';\n"); + grammarBuilder.append("KW1206 : 'KW' '1206';\n"); + grammarBuilder.append("KW1207 : 'KW' '1207';\n"); + grammarBuilder.append("KW1208 : 'KW' '1208';\n"); + grammarBuilder.append("KW1209 : 'KW' '1209';\n"); + grammarBuilder.append("KW1210 : 'KW' '1210';\n"); + grammarBuilder.append("KW1211 : 'KW' '1211';\n"); + grammarBuilder.append("KW1212 : 'KW' '1212';\n"); + grammarBuilder.append("KW1213 : 'KW' '1213';\n"); + grammarBuilder.append("KW1214 : 'KW' '1214';\n"); + grammarBuilder.append("KW1215 : 'KW' '1215';\n"); + grammarBuilder.append("KW1216 : 'KW' '1216';\n"); + grammarBuilder.append("KW1217 : 'KW' '1217';\n"); + grammarBuilder.append("KW1218 : 'KW' '1218';\n"); + grammarBuilder.append("KW1219 : 'KW' '1219';\n"); + grammarBuilder.append("KW1220 : 'KW' '1220';\n"); + grammarBuilder.append("KW1221 : 'KW' '1221';\n"); + grammarBuilder.append("KW1222 : 'KW' '1222';\n"); + grammarBuilder.append("KW1223 : 'KW' '1223';\n"); + grammarBuilder.append("KW1224 : 'KW' '1224';\n"); + grammarBuilder.append("KW1225 : 'KW' '1225';\n"); + grammarBuilder.append("KW1226 : 'KW' '1226';\n"); + grammarBuilder.append("KW1227 : 'KW' '1227';\n"); + grammarBuilder.append("KW1228 : 'KW' '1228';\n"); + grammarBuilder.append("KW1229 : 'KW' '1229';\n"); + grammarBuilder.append("KW1230 : 'KW' '1230';\n"); + grammarBuilder.append("KW1231 : 'KW' '1231';\n"); + grammarBuilder.append("KW1232 : 'KW' '1232';\n"); + grammarBuilder.append("KW1233 : 'KW' '1233';\n"); + grammarBuilder.append("KW1234 : 'KW' '1234';\n"); + grammarBuilder.append("KW1235 : 'KW' '1235';\n"); + grammarBuilder.append("KW1236 : 'KW' '1236';\n"); + grammarBuilder.append("KW1237 : 'KW' '1237';\n"); + grammarBuilder.append("KW1238 : 'KW' '1238';\n"); + grammarBuilder.append("KW1239 : 'KW' '1239';\n"); + grammarBuilder.append("KW1240 : 'KW' '1240';\n"); + grammarBuilder.append("KW1241 : 'KW' '1241';\n"); + grammarBuilder.append("KW1242 : 'KW' '1242';\n"); + grammarBuilder.append("KW1243 : 'KW' '1243';\n"); + grammarBuilder.append("KW1244 : 'KW' '1244';\n"); + grammarBuilder.append("KW1245 : 'KW' '1245';\n"); + grammarBuilder.append("KW1246 : 'KW' '1246';\n"); + grammarBuilder.append("KW1247 : 'KW' '1247';\n"); + grammarBuilder.append("KW1248 : 'KW' '1248';\n"); + grammarBuilder.append("KW1249 : 'KW' '1249';\n"); + grammarBuilder.append("KW1250 : 'KW' '1250';\n"); + grammarBuilder.append("KW1251 : 'KW' '1251';\n"); + grammarBuilder.append("KW1252 : 'KW' '1252';\n"); + grammarBuilder.append("KW1253 : 'KW' '1253';\n"); + grammarBuilder.append("KW1254 : 'KW' '1254';\n"); + grammarBuilder.append("KW1255 : 'KW' '1255';\n"); + grammarBuilder.append("KW1256 : 'KW' '1256';\n"); + grammarBuilder.append("KW1257 : 'KW' '1257';\n"); + grammarBuilder.append("KW1258 : 'KW' '1258';\n"); + grammarBuilder.append("KW1259 : 'KW' '1259';\n"); + grammarBuilder.append("KW1260 : 'KW' '1260';\n"); + grammarBuilder.append("KW1261 : 'KW' '1261';\n"); + grammarBuilder.append("KW1262 : 'KW' '1262';\n"); + grammarBuilder.append("KW1263 : 'KW' '1263';\n"); + grammarBuilder.append("KW1264 : 'KW' '1264';\n"); + grammarBuilder.append("KW1265 : 'KW' '1265';\n"); + grammarBuilder.append("KW1266 : 'KW' '1266';\n"); + grammarBuilder.append("KW1267 : 'KW' '1267';\n"); + grammarBuilder.append("KW1268 : 'KW' '1268';\n"); + grammarBuilder.append("KW1269 : 'KW' '1269';\n"); + grammarBuilder.append("KW1270 : 'KW' '1270';\n"); + grammarBuilder.append("KW1271 : 'KW' '1271';\n"); + grammarBuilder.append("KW1272 : 'KW' '1272';\n"); + grammarBuilder.append("KW1273 : 'KW' '1273';\n"); + grammarBuilder.append("KW1274 : 'KW' '1274';\n"); + grammarBuilder.append("KW1275 : 'KW' '1275';\n"); + grammarBuilder.append("KW1276 : 'KW' '1276';\n"); + grammarBuilder.append("KW1277 : 'KW' '1277';\n"); + grammarBuilder.append("KW1278 : 'KW' '1278';\n"); + grammarBuilder.append("KW1279 : 'KW' '1279';\n"); + grammarBuilder.append("KW1280 : 'KW' '1280';\n"); + grammarBuilder.append("KW1281 : 'KW' '1281';\n"); + grammarBuilder.append("KW1282 : 'KW' '1282';\n"); + grammarBuilder.append("KW1283 : 'KW' '1283';\n"); + grammarBuilder.append("KW1284 : 'KW' '1284';\n"); + grammarBuilder.append("KW1285 : 'KW' '1285';\n"); + grammarBuilder.append("KW1286 : 'KW' '1286';\n"); + grammarBuilder.append("KW1287 : 'KW' '1287';\n"); + grammarBuilder.append("KW1288 : 'KW' '1288';\n"); + grammarBuilder.append("KW1289 : 'KW' '1289';\n"); + grammarBuilder.append("KW1290 : 'KW' '1290';\n"); + grammarBuilder.append("KW1291 : 'KW' '1291';\n"); + grammarBuilder.append("KW1292 : 'KW' '1292';\n"); + grammarBuilder.append("KW1293 : 'KW' '1293';\n"); + grammarBuilder.append("KW1294 : 'KW' '1294';\n"); + grammarBuilder.append("KW1295 : 'KW' '1295';\n"); + grammarBuilder.append("KW1296 : 'KW' '1296';\n"); + grammarBuilder.append("KW1297 : 'KW' '1297';\n"); + grammarBuilder.append("KW1298 : 'KW' '1298';\n"); + grammarBuilder.append("KW1299 : 'KW' '1299';\n"); + grammarBuilder.append("KW1300 : 'KW' '1300';\n"); + grammarBuilder.append("KW1301 : 'KW' '1301';\n"); + grammarBuilder.append("KW1302 : 'KW' '1302';\n"); + grammarBuilder.append("KW1303 : 'KW' '1303';\n"); + grammarBuilder.append("KW1304 : 'KW' '1304';\n"); + grammarBuilder.append("KW1305 : 'KW' '1305';\n"); + grammarBuilder.append("KW1306 : 'KW' '1306';\n"); + grammarBuilder.append("KW1307 : 'KW' '1307';\n"); + grammarBuilder.append("KW1308 : 'KW' '1308';\n"); + grammarBuilder.append("KW1309 : 'KW' '1309';\n"); + grammarBuilder.append("KW1310 : 'KW' '1310';\n"); + grammarBuilder.append("KW1311 : 'KW' '1311';\n"); + grammarBuilder.append("KW1312 : 'KW' '1312';\n"); + grammarBuilder.append("KW1313 : 'KW' '1313';\n"); + grammarBuilder.append("KW1314 : 'KW' '1314';\n"); + grammarBuilder.append("KW1315 : 'KW' '1315';\n"); + grammarBuilder.append("KW1316 : 'KW' '1316';\n"); + grammarBuilder.append("KW1317 : 'KW' '1317';\n"); + grammarBuilder.append("KW1318 : 'KW' '1318';\n"); + grammarBuilder.append("KW1319 : 'KW' '1319';\n"); + grammarBuilder.append("KW1320 : 'KW' '1320';\n"); + grammarBuilder.append("KW1321 : 'KW' '1321';\n"); + grammarBuilder.append("KW1322 : 'KW' '1322';\n"); + grammarBuilder.append("KW1323 : 'KW' '1323';\n"); + grammarBuilder.append("KW1324 : 'KW' '1324';\n"); + grammarBuilder.append("KW1325 : 'KW' '1325';\n"); + grammarBuilder.append("KW1326 : 'KW' '1326';\n"); + grammarBuilder.append("KW1327 : 'KW' '1327';\n"); + grammarBuilder.append("KW1328 : 'KW' '1328';\n"); + grammarBuilder.append("KW1329 : 'KW' '1329';\n"); + grammarBuilder.append("KW1330 : 'KW' '1330';\n"); + grammarBuilder.append("KW1331 : 'KW' '1331';\n"); + grammarBuilder.append("KW1332 : 'KW' '1332';\n"); + grammarBuilder.append("KW1333 : 'KW' '1333';\n"); + grammarBuilder.append("KW1334 : 'KW' '1334';\n"); + grammarBuilder.append("KW1335 : 'KW' '1335';\n"); + grammarBuilder.append("KW1336 : 'KW' '1336';\n"); + grammarBuilder.append("KW1337 : 'KW' '1337';\n"); + grammarBuilder.append("KW1338 : 'KW' '1338';\n"); + grammarBuilder.append("KW1339 : 'KW' '1339';\n"); + grammarBuilder.append("KW1340 : 'KW' '1340';\n"); + grammarBuilder.append("KW1341 : 'KW' '1341';\n"); + grammarBuilder.append("KW1342 : 'KW' '1342';\n"); + grammarBuilder.append("KW1343 : 'KW' '1343';\n"); + grammarBuilder.append("KW1344 : 'KW' '1344';\n"); + grammarBuilder.append("KW1345 : 'KW' '1345';\n"); + grammarBuilder.append("KW1346 : 'KW' '1346';\n"); + grammarBuilder.append("KW1347 : 'KW' '1347';\n"); + grammarBuilder.append("KW1348 : 'KW' '1348';\n"); + grammarBuilder.append("KW1349 : 'KW' '1349';\n"); + grammarBuilder.append("KW1350 : 'KW' '1350';\n"); + grammarBuilder.append("KW1351 : 'KW' '1351';\n"); + grammarBuilder.append("KW1352 : 'KW' '1352';\n"); + grammarBuilder.append("KW1353 : 'KW' '1353';\n"); + grammarBuilder.append("KW1354 : 'KW' '1354';\n"); + grammarBuilder.append("KW1355 : 'KW' '1355';\n"); + grammarBuilder.append("KW1356 : 'KW' '1356';\n"); + grammarBuilder.append("KW1357 : 'KW' '1357';\n"); + grammarBuilder.append("KW1358 : 'KW' '1358';\n"); + grammarBuilder.append("KW1359 : 'KW' '1359';\n"); + grammarBuilder.append("KW1360 : 'KW' '1360';\n"); + grammarBuilder.append("KW1361 : 'KW' '1361';\n"); + grammarBuilder.append("KW1362 : 'KW' '1362';\n"); + grammarBuilder.append("KW1363 : 'KW' '1363';\n"); + grammarBuilder.append("KW1364 : 'KW' '1364';\n"); + grammarBuilder.append("KW1365 : 'KW' '1365';\n"); + grammarBuilder.append("KW1366 : 'KW' '1366';\n"); + grammarBuilder.append("KW1367 : 'KW' '1367';\n"); + grammarBuilder.append("KW1368 : 'KW' '1368';\n"); + grammarBuilder.append("KW1369 : 'KW' '1369';\n"); + grammarBuilder.append("KW1370 : 'KW' '1370';\n"); + grammarBuilder.append("KW1371 : 'KW' '1371';\n"); + grammarBuilder.append("KW1372 : 'KW' '1372';\n"); + grammarBuilder.append("KW1373 : 'KW' '1373';\n"); + grammarBuilder.append("KW1374 : 'KW' '1374';\n"); + grammarBuilder.append("KW1375 : 'KW' '1375';\n"); + grammarBuilder.append("KW1376 : 'KW' '1376';\n"); + grammarBuilder.append("KW1377 : 'KW' '1377';\n"); + grammarBuilder.append("KW1378 : 'KW' '1378';\n"); + grammarBuilder.append("KW1379 : 'KW' '1379';\n"); + grammarBuilder.append("KW1380 : 'KW' '1380';\n"); + grammarBuilder.append("KW1381 : 'KW' '1381';\n"); + grammarBuilder.append("KW1382 : 'KW' '1382';\n"); + grammarBuilder.append("KW1383 : 'KW' '1383';\n"); + grammarBuilder.append("KW1384 : 'KW' '1384';\n"); + grammarBuilder.append("KW1385 : 'KW' '1385';\n"); + grammarBuilder.append("KW1386 : 'KW' '1386';\n"); + grammarBuilder.append("KW1387 : 'KW' '1387';\n"); + grammarBuilder.append("KW1388 : 'KW' '1388';\n"); + grammarBuilder.append("KW1389 : 'KW' '1389';\n"); + grammarBuilder.append("KW1390 : 'KW' '1390';\n"); + grammarBuilder.append("KW1391 : 'KW' '1391';\n"); + grammarBuilder.append("KW1392 : 'KW' '1392';\n"); + grammarBuilder.append("KW1393 : 'KW' '1393';\n"); + grammarBuilder.append("KW1394 : 'KW' '1394';\n"); + grammarBuilder.append("KW1395 : 'KW' '1395';\n"); + grammarBuilder.append("KW1396 : 'KW' '1396';\n"); + grammarBuilder.append("KW1397 : 'KW' '1397';\n"); + grammarBuilder.append("KW1398 : 'KW' '1398';\n"); + grammarBuilder.append("KW1399 : 'KW' '1399';\n"); + grammarBuilder.append("KW1400 : 'KW' '1400';\n"); + grammarBuilder.append("KW1401 : 'KW' '1401';\n"); + grammarBuilder.append("KW1402 : 'KW' '1402';\n"); + grammarBuilder.append("KW1403 : 'KW' '1403';\n"); + grammarBuilder.append("KW1404 : 'KW' '1404';\n"); + grammarBuilder.append("KW1405 : 'KW' '1405';\n"); + grammarBuilder.append("KW1406 : 'KW' '1406';\n"); + grammarBuilder.append("KW1407 : 'KW' '1407';\n"); + grammarBuilder.append("KW1408 : 'KW' '1408';\n"); + grammarBuilder.append("KW1409 : 'KW' '1409';\n"); + grammarBuilder.append("KW1410 : 'KW' '1410';\n"); + grammarBuilder.append("KW1411 : 'KW' '1411';\n"); + grammarBuilder.append("KW1412 : 'KW' '1412';\n"); + grammarBuilder.append("KW1413 : 'KW' '1413';\n"); + grammarBuilder.append("KW1414 : 'KW' '1414';\n"); + grammarBuilder.append("KW1415 : 'KW' '1415';\n"); + grammarBuilder.append("KW1416 : 'KW' '1416';\n"); + grammarBuilder.append("KW1417 : 'KW' '1417';\n"); + grammarBuilder.append("KW1418 : 'KW' '1418';\n"); + grammarBuilder.append("KW1419 : 'KW' '1419';\n"); + grammarBuilder.append("KW1420 : 'KW' '1420';\n"); + grammarBuilder.append("KW1421 : 'KW' '1421';\n"); + grammarBuilder.append("KW1422 : 'KW' '1422';\n"); + grammarBuilder.append("KW1423 : 'KW' '1423';\n"); + grammarBuilder.append("KW1424 : 'KW' '1424';\n"); + grammarBuilder.append("KW1425 : 'KW' '1425';\n"); + grammarBuilder.append("KW1426 : 'KW' '1426';\n"); + grammarBuilder.append("KW1427 : 'KW' '1427';\n"); + grammarBuilder.append("KW1428 : 'KW' '1428';\n"); + grammarBuilder.append("KW1429 : 'KW' '1429';\n"); + grammarBuilder.append("KW1430 : 'KW' '1430';\n"); + grammarBuilder.append("KW1431 : 'KW' '1431';\n"); + grammarBuilder.append("KW1432 : 'KW' '1432';\n"); + grammarBuilder.append("KW1433 : 'KW' '1433';\n"); + grammarBuilder.append("KW1434 : 'KW' '1434';\n"); + grammarBuilder.append("KW1435 : 'KW' '1435';\n"); + grammarBuilder.append("KW1436 : 'KW' '1436';\n"); + grammarBuilder.append("KW1437 : 'KW' '1437';\n"); + grammarBuilder.append("KW1438 : 'KW' '1438';\n"); + grammarBuilder.append("KW1439 : 'KW' '1439';\n"); + grammarBuilder.append("KW1440 : 'KW' '1440';\n"); + grammarBuilder.append("KW1441 : 'KW' '1441';\n"); + grammarBuilder.append("KW1442 : 'KW' '1442';\n"); + grammarBuilder.append("KW1443 : 'KW' '1443';\n"); + grammarBuilder.append("KW1444 : 'KW' '1444';\n"); + grammarBuilder.append("KW1445 : 'KW' '1445';\n"); + grammarBuilder.append("KW1446 : 'KW' '1446';\n"); + grammarBuilder.append("KW1447 : 'KW' '1447';\n"); + grammarBuilder.append("KW1448 : 'KW' '1448';\n"); + grammarBuilder.append("KW1449 : 'KW' '1449';\n"); + grammarBuilder.append("KW1450 : 'KW' '1450';\n"); + grammarBuilder.append("KW1451 : 'KW' '1451';\n"); + grammarBuilder.append("KW1452 : 'KW' '1452';\n"); + grammarBuilder.append("KW1453 : 'KW' '1453';\n"); + grammarBuilder.append("KW1454 : 'KW' '1454';\n"); + grammarBuilder.append("KW1455 : 'KW' '1455';\n"); + grammarBuilder.append("KW1456 : 'KW' '1456';\n"); + grammarBuilder.append("KW1457 : 'KW' '1457';\n"); + grammarBuilder.append("KW1458 : 'KW' '1458';\n"); + grammarBuilder.append("KW1459 : 'KW' '1459';\n"); + grammarBuilder.append("KW1460 : 'KW' '1460';\n"); + grammarBuilder.append("KW1461 : 'KW' '1461';\n"); + grammarBuilder.append("KW1462 : 'KW' '1462';\n"); + grammarBuilder.append("KW1463 : 'KW' '1463';\n"); + grammarBuilder.append("KW1464 : 'KW' '1464';\n"); + grammarBuilder.append("KW1465 : 'KW' '1465';\n"); + grammarBuilder.append("KW1466 : 'KW' '1466';\n"); + grammarBuilder.append("KW1467 : 'KW' '1467';\n"); + grammarBuilder.append("KW1468 : 'KW' '1468';\n"); + grammarBuilder.append("KW1469 : 'KW' '1469';\n"); + grammarBuilder.append("KW1470 : 'KW' '1470';\n"); + grammarBuilder.append("KW1471 : 'KW' '1471';\n"); + grammarBuilder.append("KW1472 : 'KW' '1472';\n"); + grammarBuilder.append("KW1473 : 'KW' '1473';\n"); + grammarBuilder.append("KW1474 : 'KW' '1474';\n"); + grammarBuilder.append("KW1475 : 'KW' '1475';\n"); + grammarBuilder.append("KW1476 : 'KW' '1476';\n"); + grammarBuilder.append("KW1477 : 'KW' '1477';\n"); + grammarBuilder.append("KW1478 : 'KW' '1478';\n"); + grammarBuilder.append("KW1479 : 'KW' '1479';\n"); + grammarBuilder.append("KW1480 : 'KW' '1480';\n"); + grammarBuilder.append("KW1481 : 'KW' '1481';\n"); + grammarBuilder.append("KW1482 : 'KW' '1482';\n"); + grammarBuilder.append("KW1483 : 'KW' '1483';\n"); + grammarBuilder.append("KW1484 : 'KW' '1484';\n"); + grammarBuilder.append("KW1485 : 'KW' '1485';\n"); + grammarBuilder.append("KW1486 : 'KW' '1486';\n"); + grammarBuilder.append("KW1487 : 'KW' '1487';\n"); + grammarBuilder.append("KW1488 : 'KW' '1488';\n"); + grammarBuilder.append("KW1489 : 'KW' '1489';\n"); + grammarBuilder.append("KW1490 : 'KW' '1490';\n"); + grammarBuilder.append("KW1491 : 'KW' '1491';\n"); + grammarBuilder.append("KW1492 : 'KW' '1492';\n"); + grammarBuilder.append("KW1493 : 'KW' '1493';\n"); + grammarBuilder.append("KW1494 : 'KW' '1494';\n"); + grammarBuilder.append("KW1495 : 'KW' '1495';\n"); + grammarBuilder.append("KW1496 : 'KW' '1496';\n"); + grammarBuilder.append("KW1497 : 'KW' '1497';\n"); + grammarBuilder.append("KW1498 : 'KW' '1498';\n"); + grammarBuilder.append("KW1499 : 'KW' '1499';\n"); + grammarBuilder.append("KW1500 : 'KW' '1500';\n"); + grammarBuilder.append("KW1501 : 'KW' '1501';\n"); + grammarBuilder.append("KW1502 : 'KW' '1502';\n"); + grammarBuilder.append("KW1503 : 'KW' '1503';\n"); + grammarBuilder.append("KW1504 : 'KW' '1504';\n"); + grammarBuilder.append("KW1505 : 'KW' '1505';\n"); + grammarBuilder.append("KW1506 : 'KW' '1506';\n"); + grammarBuilder.append("KW1507 : 'KW' '1507';\n"); + grammarBuilder.append("KW1508 : 'KW' '1508';\n"); + grammarBuilder.append("KW1509 : 'KW' '1509';\n"); + grammarBuilder.append("KW1510 : 'KW' '1510';\n"); + grammarBuilder.append("KW1511 : 'KW' '1511';\n"); + grammarBuilder.append("KW1512 : 'KW' '1512';\n"); + grammarBuilder.append("KW1513 : 'KW' '1513';\n"); + grammarBuilder.append("KW1514 : 'KW' '1514';\n"); + grammarBuilder.append("KW1515 : 'KW' '1515';\n"); + grammarBuilder.append("KW1516 : 'KW' '1516';\n"); + grammarBuilder.append("KW1517 : 'KW' '1517';\n"); + grammarBuilder.append("KW1518 : 'KW' '1518';\n"); + grammarBuilder.append("KW1519 : 'KW' '1519';\n"); + grammarBuilder.append("KW1520 : 'KW' '1520';\n"); + grammarBuilder.append("KW1521 : 'KW' '1521';\n"); + grammarBuilder.append("KW1522 : 'KW' '1522';\n"); + grammarBuilder.append("KW1523 : 'KW' '1523';\n"); + grammarBuilder.append("KW1524 : 'KW' '1524';\n"); + grammarBuilder.append("KW1525 : 'KW' '1525';\n"); + grammarBuilder.append("KW1526 : 'KW' '1526';\n"); + grammarBuilder.append("KW1527 : 'KW' '1527';\n"); + grammarBuilder.append("KW1528 : 'KW' '1528';\n"); + grammarBuilder.append("KW1529 : 'KW' '1529';\n"); + grammarBuilder.append("KW1530 : 'KW' '1530';\n"); + grammarBuilder.append("KW1531 : 'KW' '1531';\n"); + grammarBuilder.append("KW1532 : 'KW' '1532';\n"); + grammarBuilder.append("KW1533 : 'KW' '1533';\n"); + grammarBuilder.append("KW1534 : 'KW' '1534';\n"); + grammarBuilder.append("KW1535 : 'KW' '1535';\n"); + grammarBuilder.append("KW1536 : 'KW' '1536';\n"); + grammarBuilder.append("KW1537 : 'KW' '1537';\n"); + grammarBuilder.append("KW1538 : 'KW' '1538';\n"); + grammarBuilder.append("KW1539 : 'KW' '1539';\n"); + grammarBuilder.append("KW1540 : 'KW' '1540';\n"); + grammarBuilder.append("KW1541 : 'KW' '1541';\n"); + grammarBuilder.append("KW1542 : 'KW' '1542';\n"); + grammarBuilder.append("KW1543 : 'KW' '1543';\n"); + grammarBuilder.append("KW1544 : 'KW' '1544';\n"); + grammarBuilder.append("KW1545 : 'KW' '1545';\n"); + grammarBuilder.append("KW1546 : 'KW' '1546';\n"); + grammarBuilder.append("KW1547 : 'KW' '1547';\n"); + grammarBuilder.append("KW1548 : 'KW' '1548';\n"); + grammarBuilder.append("KW1549 : 'KW' '1549';\n"); + grammarBuilder.append("KW1550 : 'KW' '1550';\n"); + grammarBuilder.append("KW1551 : 'KW' '1551';\n"); + grammarBuilder.append("KW1552 : 'KW' '1552';\n"); + grammarBuilder.append("KW1553 : 'KW' '1553';\n"); + grammarBuilder.append("KW1554 : 'KW' '1554';\n"); + grammarBuilder.append("KW1555 : 'KW' '1555';\n"); + grammarBuilder.append("KW1556 : 'KW' '1556';\n"); + grammarBuilder.append("KW1557 : 'KW' '1557';\n"); + grammarBuilder.append("KW1558 : 'KW' '1558';\n"); + grammarBuilder.append("KW1559 : 'KW' '1559';\n"); + grammarBuilder.append("KW1560 : 'KW' '1560';\n"); + grammarBuilder.append("KW1561 : 'KW' '1561';\n"); + grammarBuilder.append("KW1562 : 'KW' '1562';\n"); + grammarBuilder.append("KW1563 : 'KW' '1563';\n"); + grammarBuilder.append("KW1564 : 'KW' '1564';\n"); + grammarBuilder.append("KW1565 : 'KW' '1565';\n"); + grammarBuilder.append("KW1566 : 'KW' '1566';\n"); + grammarBuilder.append("KW1567 : 'KW' '1567';\n"); + grammarBuilder.append("KW1568 : 'KW' '1568';\n"); + grammarBuilder.append("KW1569 : 'KW' '1569';\n"); + grammarBuilder.append("KW1570 : 'KW' '1570';\n"); + grammarBuilder.append("KW1571 : 'KW' '1571';\n"); + grammarBuilder.append("KW1572 : 'KW' '1572';\n"); + grammarBuilder.append("KW1573 : 'KW' '1573';\n"); + grammarBuilder.append("KW1574 : 'KW' '1574';\n"); + grammarBuilder.append("KW1575 : 'KW' '1575';\n"); + grammarBuilder.append("KW1576 : 'KW' '1576';\n"); + grammarBuilder.append("KW1577 : 'KW' '1577';\n"); + grammarBuilder.append("KW1578 : 'KW' '1578';\n"); + grammarBuilder.append("KW1579 : 'KW' '1579';\n"); + grammarBuilder.append("KW1580 : 'KW' '1580';\n"); + grammarBuilder.append("KW1581 : 'KW' '1581';\n"); + grammarBuilder.append("KW1582 : 'KW' '1582';\n"); + grammarBuilder.append("KW1583 : 'KW' '1583';\n"); + grammarBuilder.append("KW1584 : 'KW' '1584';\n"); + grammarBuilder.append("KW1585 : 'KW' '1585';\n"); + grammarBuilder.append("KW1586 : 'KW' '1586';\n"); + grammarBuilder.append("KW1587 : 'KW' '1587';\n"); + grammarBuilder.append("KW1588 : 'KW' '1588';\n"); + grammarBuilder.append("KW1589 : 'KW' '1589';\n"); + grammarBuilder.append("KW1590 : 'KW' '1590';\n"); + grammarBuilder.append("KW1591 : 'KW' '1591';\n"); + grammarBuilder.append("KW1592 : 'KW' '1592';\n"); + grammarBuilder.append("KW1593 : 'KW' '1593';\n"); + grammarBuilder.append("KW1594 : 'KW' '1594';\n"); + grammarBuilder.append("KW1595 : 'KW' '1595';\n"); + grammarBuilder.append("KW1596 : 'KW' '1596';\n"); + grammarBuilder.append("KW1597 : 'KW' '1597';\n"); + grammarBuilder.append("KW1598 : 'KW' '1598';\n"); + grammarBuilder.append("KW1599 : 'KW' '1599';\n"); + grammarBuilder.append("KW1600 : 'KW' '1600';\n"); + grammarBuilder.append("KW1601 : 'KW' '1601';\n"); + grammarBuilder.append("KW1602 : 'KW' '1602';\n"); + grammarBuilder.append("KW1603 : 'KW' '1603';\n"); + grammarBuilder.append("KW1604 : 'KW' '1604';\n"); + grammarBuilder.append("KW1605 : 'KW' '1605';\n"); + grammarBuilder.append("KW1606 : 'KW' '1606';\n"); + grammarBuilder.append("KW1607 : 'KW' '1607';\n"); + grammarBuilder.append("KW1608 : 'KW' '1608';\n"); + grammarBuilder.append("KW1609 : 'KW' '1609';\n"); + grammarBuilder.append("KW1610 : 'KW' '1610';\n"); + grammarBuilder.append("KW1611 : 'KW' '1611';\n"); + grammarBuilder.append("KW1612 : 'KW' '1612';\n"); + grammarBuilder.append("KW1613 : 'KW' '1613';\n"); + grammarBuilder.append("KW1614 : 'KW' '1614';\n"); + grammarBuilder.append("KW1615 : 'KW' '1615';\n"); + grammarBuilder.append("KW1616 : 'KW' '1616';\n"); + grammarBuilder.append("KW1617 : 'KW' '1617';\n"); + grammarBuilder.append("KW1618 : 'KW' '1618';\n"); + grammarBuilder.append("KW1619 : 'KW' '1619';\n"); + grammarBuilder.append("KW1620 : 'KW' '1620';\n"); + grammarBuilder.append("KW1621 : 'KW' '1621';\n"); + grammarBuilder.append("KW1622 : 'KW' '1622';\n"); + grammarBuilder.append("KW1623 : 'KW' '1623';\n"); + grammarBuilder.append("KW1624 : 'KW' '1624';\n"); + grammarBuilder.append("KW1625 : 'KW' '1625';\n"); + grammarBuilder.append("KW1626 : 'KW' '1626';\n"); + grammarBuilder.append("KW1627 : 'KW' '1627';\n"); + grammarBuilder.append("KW1628 : 'KW' '1628';\n"); + grammarBuilder.append("KW1629 : 'KW' '1629';\n"); + grammarBuilder.append("KW1630 : 'KW' '1630';\n"); + grammarBuilder.append("KW1631 : 'KW' '1631';\n"); + grammarBuilder.append("KW1632 : 'KW' '1632';\n"); + grammarBuilder.append("KW1633 : 'KW' '1633';\n"); + grammarBuilder.append("KW1634 : 'KW' '1634';\n"); + grammarBuilder.append("KW1635 : 'KW' '1635';\n"); + grammarBuilder.append("KW1636 : 'KW' '1636';\n"); + grammarBuilder.append("KW1637 : 'KW' '1637';\n"); + grammarBuilder.append("KW1638 : 'KW' '1638';\n"); + grammarBuilder.append("KW1639 : 'KW' '1639';\n"); + grammarBuilder.append("KW1640 : 'KW' '1640';\n"); + grammarBuilder.append("KW1641 : 'KW' '1641';\n"); + grammarBuilder.append("KW1642 : 'KW' '1642';\n"); + grammarBuilder.append("KW1643 : 'KW' '1643';\n"); + grammarBuilder.append("KW1644 : 'KW' '1644';\n"); + grammarBuilder.append("KW1645 : 'KW' '1645';\n"); + grammarBuilder.append("KW1646 : 'KW' '1646';\n"); + grammarBuilder.append("KW1647 : 'KW' '1647';\n"); + grammarBuilder.append("KW1648 : 'KW' '1648';\n"); + grammarBuilder.append("KW1649 : 'KW' '1649';\n"); + grammarBuilder.append("KW1650 : 'KW' '1650';\n"); + grammarBuilder.append("KW1651 : 'KW' '1651';\n"); + grammarBuilder.append("KW1652 : 'KW' '1652';\n"); + grammarBuilder.append("KW1653 : 'KW' '1653';\n"); + grammarBuilder.append("KW1654 : 'KW' '1654';\n"); + grammarBuilder.append("KW1655 : 'KW' '1655';\n"); + grammarBuilder.append("KW1656 : 'KW' '1656';\n"); + grammarBuilder.append("KW1657 : 'KW' '1657';\n"); + grammarBuilder.append("KW1658 : 'KW' '1658';\n"); + grammarBuilder.append("KW1659 : 'KW' '1659';\n"); + grammarBuilder.append("KW1660 : 'KW' '1660';\n"); + grammarBuilder.append("KW1661 : 'KW' '1661';\n"); + grammarBuilder.append("KW1662 : 'KW' '1662';\n"); + grammarBuilder.append("KW1663 : 'KW' '1663';\n"); + grammarBuilder.append("KW1664 : 'KW' '1664';\n"); + grammarBuilder.append("KW1665 : 'KW' '1665';\n"); + grammarBuilder.append("KW1666 : 'KW' '1666';\n"); + grammarBuilder.append("KW1667 : 'KW' '1667';\n"); + grammarBuilder.append("KW1668 : 'KW' '1668';\n"); + grammarBuilder.append("KW1669 : 'KW' '1669';\n"); + grammarBuilder.append("KW1670 : 'KW' '1670';\n"); + grammarBuilder.append("KW1671 : 'KW' '1671';\n"); + grammarBuilder.append("KW1672 : 'KW' '1672';\n"); + grammarBuilder.append("KW1673 : 'KW' '1673';\n"); + grammarBuilder.append("KW1674 : 'KW' '1674';\n"); + grammarBuilder.append("KW1675 : 'KW' '1675';\n"); + grammarBuilder.append("KW1676 : 'KW' '1676';\n"); + grammarBuilder.append("KW1677 : 'KW' '1677';\n"); + grammarBuilder.append("KW1678 : 'KW' '1678';\n"); + grammarBuilder.append("KW1679 : 'KW' '1679';\n"); + grammarBuilder.append("KW1680 : 'KW' '1680';\n"); + grammarBuilder.append("KW1681 : 'KW' '1681';\n"); + grammarBuilder.append("KW1682 : 'KW' '1682';\n"); + grammarBuilder.append("KW1683 : 'KW' '1683';\n"); + grammarBuilder.append("KW1684 : 'KW' '1684';\n"); + grammarBuilder.append("KW1685 : 'KW' '1685';\n"); + grammarBuilder.append("KW1686 : 'KW' '1686';\n"); + grammarBuilder.append("KW1687 : 'KW' '1687';\n"); + grammarBuilder.append("KW1688 : 'KW' '1688';\n"); + grammarBuilder.append("KW1689 : 'KW' '1689';\n"); + grammarBuilder.append("KW1690 : 'KW' '1690';\n"); + grammarBuilder.append("KW1691 : 'KW' '1691';\n"); + grammarBuilder.append("KW1692 : 'KW' '1692';\n"); + grammarBuilder.append("KW1693 : 'KW' '1693';\n"); + grammarBuilder.append("KW1694 : 'KW' '1694';\n"); + grammarBuilder.append("KW1695 : 'KW' '1695';\n"); + grammarBuilder.append("KW1696 : 'KW' '1696';\n"); + grammarBuilder.append("KW1697 : 'KW' '1697';\n"); + grammarBuilder.append("KW1698 : 'KW' '1698';\n"); + grammarBuilder.append("KW1699 : 'KW' '1699';\n"); + grammarBuilder.append("KW1700 : 'KW' '1700';\n"); + grammarBuilder.append("KW1701 : 'KW' '1701';\n"); + grammarBuilder.append("KW1702 : 'KW' '1702';\n"); + grammarBuilder.append("KW1703 : 'KW' '1703';\n"); + grammarBuilder.append("KW1704 : 'KW' '1704';\n"); + grammarBuilder.append("KW1705 : 'KW' '1705';\n"); + grammarBuilder.append("KW1706 : 'KW' '1706';\n"); + grammarBuilder.append("KW1707 : 'KW' '1707';\n"); + grammarBuilder.append("KW1708 : 'KW' '1708';\n"); + grammarBuilder.append("KW1709 : 'KW' '1709';\n"); + grammarBuilder.append("KW1710 : 'KW' '1710';\n"); + grammarBuilder.append("KW1711 : 'KW' '1711';\n"); + grammarBuilder.append("KW1712 : 'KW' '1712';\n"); + grammarBuilder.append("KW1713 : 'KW' '1713';\n"); + grammarBuilder.append("KW1714 : 'KW' '1714';\n"); + grammarBuilder.append("KW1715 : 'KW' '1715';\n"); + grammarBuilder.append("KW1716 : 'KW' '1716';\n"); + grammarBuilder.append("KW1717 : 'KW' '1717';\n"); + grammarBuilder.append("KW1718 : 'KW' '1718';\n"); + grammarBuilder.append("KW1719 : 'KW' '1719';\n"); + grammarBuilder.append("KW1720 : 'KW' '1720';\n"); + grammarBuilder.append("KW1721 : 'KW' '1721';\n"); + grammarBuilder.append("KW1722 : 'KW' '1722';\n"); + grammarBuilder.append("KW1723 : 'KW' '1723';\n"); + grammarBuilder.append("KW1724 : 'KW' '1724';\n"); + grammarBuilder.append("KW1725 : 'KW' '1725';\n"); + grammarBuilder.append("KW1726 : 'KW' '1726';\n"); + grammarBuilder.append("KW1727 : 'KW' '1727';\n"); + grammarBuilder.append("KW1728 : 'KW' '1728';\n"); + grammarBuilder.append("KW1729 : 'KW' '1729';\n"); + grammarBuilder.append("KW1730 : 'KW' '1730';\n"); + grammarBuilder.append("KW1731 : 'KW' '1731';\n"); + grammarBuilder.append("KW1732 : 'KW' '1732';\n"); + grammarBuilder.append("KW1733 : 'KW' '1733';\n"); + grammarBuilder.append("KW1734 : 'KW' '1734';\n"); + grammarBuilder.append("KW1735 : 'KW' '1735';\n"); + grammarBuilder.append("KW1736 : 'KW' '1736';\n"); + grammarBuilder.append("KW1737 : 'KW' '1737';\n"); + grammarBuilder.append("KW1738 : 'KW' '1738';\n"); + grammarBuilder.append("KW1739 : 'KW' '1739';\n"); + grammarBuilder.append("KW1740 : 'KW' '1740';\n"); + grammarBuilder.append("KW1741 : 'KW' '1741';\n"); + grammarBuilder.append("KW1742 : 'KW' '1742';\n"); + grammarBuilder.append("KW1743 : 'KW' '1743';\n"); + grammarBuilder.append("KW1744 : 'KW' '1744';\n"); + grammarBuilder.append("KW1745 : 'KW' '1745';\n"); + grammarBuilder.append("KW1746 : 'KW' '1746';\n"); + grammarBuilder.append("KW1747 : 'KW' '1747';\n"); + grammarBuilder.append("KW1748 : 'KW' '1748';\n"); + grammarBuilder.append("KW1749 : 'KW' '1749';\n"); + grammarBuilder.append("KW1750 : 'KW' '1750';\n"); + grammarBuilder.append("KW1751 : 'KW' '1751';\n"); + grammarBuilder.append("KW1752 : 'KW' '1752';\n"); + grammarBuilder.append("KW1753 : 'KW' '1753';\n"); + grammarBuilder.append("KW1754 : 'KW' '1754';\n"); + grammarBuilder.append("KW1755 : 'KW' '1755';\n"); + grammarBuilder.append("KW1756 : 'KW' '1756';\n"); + grammarBuilder.append("KW1757 : 'KW' '1757';\n"); + grammarBuilder.append("KW1758 : 'KW' '1758';\n"); + grammarBuilder.append("KW1759 : 'KW' '1759';\n"); + grammarBuilder.append("KW1760 : 'KW' '1760';\n"); + grammarBuilder.append("KW1761 : 'KW' '1761';\n"); + grammarBuilder.append("KW1762 : 'KW' '1762';\n"); + grammarBuilder.append("KW1763 : 'KW' '1763';\n"); + grammarBuilder.append("KW1764 : 'KW' '1764';\n"); + grammarBuilder.append("KW1765 : 'KW' '1765';\n"); + grammarBuilder.append("KW1766 : 'KW' '1766';\n"); + grammarBuilder.append("KW1767 : 'KW' '1767';\n"); + grammarBuilder.append("KW1768 : 'KW' '1768';\n"); + grammarBuilder.append("KW1769 : 'KW' '1769';\n"); + grammarBuilder.append("KW1770 : 'KW' '1770';\n"); + grammarBuilder.append("KW1771 : 'KW' '1771';\n"); + grammarBuilder.append("KW1772 : 'KW' '1772';\n"); + grammarBuilder.append("KW1773 : 'KW' '1773';\n"); + grammarBuilder.append("KW1774 : 'KW' '1774';\n"); + grammarBuilder.append("KW1775 : 'KW' '1775';\n"); + grammarBuilder.append("KW1776 : 'KW' '1776';\n"); + grammarBuilder.append("KW1777 : 'KW' '1777';\n"); + grammarBuilder.append("KW1778 : 'KW' '1778';\n"); + grammarBuilder.append("KW1779 : 'KW' '1779';\n"); + grammarBuilder.append("KW1780 : 'KW' '1780';\n"); + grammarBuilder.append("KW1781 : 'KW' '1781';\n"); + grammarBuilder.append("KW1782 : 'KW' '1782';\n"); + grammarBuilder.append("KW1783 : 'KW' '1783';\n"); + grammarBuilder.append("KW1784 : 'KW' '1784';\n"); + grammarBuilder.append("KW1785 : 'KW' '1785';\n"); + grammarBuilder.append("KW1786 : 'KW' '1786';\n"); + grammarBuilder.append("KW1787 : 'KW' '1787';\n"); + grammarBuilder.append("KW1788 : 'KW' '1788';\n"); + grammarBuilder.append("KW1789 : 'KW' '1789';\n"); + grammarBuilder.append("KW1790 : 'KW' '1790';\n"); + grammarBuilder.append("KW1791 : 'KW' '1791';\n"); + grammarBuilder.append("KW1792 : 'KW' '1792';\n"); + grammarBuilder.append("KW1793 : 'KW' '1793';\n"); + grammarBuilder.append("KW1794 : 'KW' '1794';\n"); + grammarBuilder.append("KW1795 : 'KW' '1795';\n"); + grammarBuilder.append("KW1796 : 'KW' '1796';\n"); + grammarBuilder.append("KW1797 : 'KW' '1797';\n"); + grammarBuilder.append("KW1798 : 'KW' '1798';\n"); + grammarBuilder.append("KW1799 : 'KW' '1799';\n"); + grammarBuilder.append("KW1800 : 'KW' '1800';\n"); + grammarBuilder.append("KW1801 : 'KW' '1801';\n"); + grammarBuilder.append("KW1802 : 'KW' '1802';\n"); + grammarBuilder.append("KW1803 : 'KW' '1803';\n"); + grammarBuilder.append("KW1804 : 'KW' '1804';\n"); + grammarBuilder.append("KW1805 : 'KW' '1805';\n"); + grammarBuilder.append("KW1806 : 'KW' '1806';\n"); + grammarBuilder.append("KW1807 : 'KW' '1807';\n"); + grammarBuilder.append("KW1808 : 'KW' '1808';\n"); + grammarBuilder.append("KW1809 : 'KW' '1809';\n"); + grammarBuilder.append("KW1810 : 'KW' '1810';\n"); + grammarBuilder.append("KW1811 : 'KW' '1811';\n"); + grammarBuilder.append("KW1812 : 'KW' '1812';\n"); + grammarBuilder.append("KW1813 : 'KW' '1813';\n"); + grammarBuilder.append("KW1814 : 'KW' '1814';\n"); + grammarBuilder.append("KW1815 : 'KW' '1815';\n"); + grammarBuilder.append("KW1816 : 'KW' '1816';\n"); + grammarBuilder.append("KW1817 : 'KW' '1817';\n"); + grammarBuilder.append("KW1818 : 'KW' '1818';\n"); + grammarBuilder.append("KW1819 : 'KW' '1819';\n"); + grammarBuilder.append("KW1820 : 'KW' '1820';\n"); + grammarBuilder.append("KW1821 : 'KW' '1821';\n"); + grammarBuilder.append("KW1822 : 'KW' '1822';\n"); + grammarBuilder.append("KW1823 : 'KW' '1823';\n"); + grammarBuilder.append("KW1824 : 'KW' '1824';\n"); + grammarBuilder.append("KW1825 : 'KW' '1825';\n"); + grammarBuilder.append("KW1826 : 'KW' '1826';\n"); + grammarBuilder.append("KW1827 : 'KW' '1827';\n"); + grammarBuilder.append("KW1828 : 'KW' '1828';\n"); + grammarBuilder.append("KW1829 : 'KW' '1829';\n"); + grammarBuilder.append("KW1830 : 'KW' '1830';\n"); + grammarBuilder.append("KW1831 : 'KW' '1831';\n"); + grammarBuilder.append("KW1832 : 'KW' '1832';\n"); + grammarBuilder.append("KW1833 : 'KW' '1833';\n"); + grammarBuilder.append("KW1834 : 'KW' '1834';\n"); + grammarBuilder.append("KW1835 : 'KW' '1835';\n"); + grammarBuilder.append("KW1836 : 'KW' '1836';\n"); + grammarBuilder.append("KW1837 : 'KW' '1837';\n"); + grammarBuilder.append("KW1838 : 'KW' '1838';\n"); + grammarBuilder.append("KW1839 : 'KW' '1839';\n"); + grammarBuilder.append("KW1840 : 'KW' '1840';\n"); + grammarBuilder.append("KW1841 : 'KW' '1841';\n"); + grammarBuilder.append("KW1842 : 'KW' '1842';\n"); + grammarBuilder.append("KW1843 : 'KW' '1843';\n"); + grammarBuilder.append("KW1844 : 'KW' '1844';\n"); + grammarBuilder.append("KW1845 : 'KW' '1845';\n"); + grammarBuilder.append("KW1846 : 'KW' '1846';\n"); + grammarBuilder.append("KW1847 : 'KW' '1847';\n"); + grammarBuilder.append("KW1848 : 'KW' '1848';\n"); + grammarBuilder.append("KW1849 : 'KW' '1849';\n"); + grammarBuilder.append("KW1850 : 'KW' '1850';\n"); + grammarBuilder.append("KW1851 : 'KW' '1851';\n"); + grammarBuilder.append("KW1852 : 'KW' '1852';\n"); + grammarBuilder.append("KW1853 : 'KW' '1853';\n"); + grammarBuilder.append("KW1854 : 'KW' '1854';\n"); + grammarBuilder.append("KW1855 : 'KW' '1855';\n"); + grammarBuilder.append("KW1856 : 'KW' '1856';\n"); + grammarBuilder.append("KW1857 : 'KW' '1857';\n"); + grammarBuilder.append("KW1858 : 'KW' '1858';\n"); + grammarBuilder.append("KW1859 : 'KW' '1859';\n"); + grammarBuilder.append("KW1860 : 'KW' '1860';\n"); + grammarBuilder.append("KW1861 : 'KW' '1861';\n"); + grammarBuilder.append("KW1862 : 'KW' '1862';\n"); + grammarBuilder.append("KW1863 : 'KW' '1863';\n"); + grammarBuilder.append("KW1864 : 'KW' '1864';\n"); + grammarBuilder.append("KW1865 : 'KW' '1865';\n"); + grammarBuilder.append("KW1866 : 'KW' '1866';\n"); + grammarBuilder.append("KW1867 : 'KW' '1867';\n"); + grammarBuilder.append("KW1868 : 'KW' '1868';\n"); + grammarBuilder.append("KW1869 : 'KW' '1869';\n"); + grammarBuilder.append("KW1870 : 'KW' '1870';\n"); + grammarBuilder.append("KW1871 : 'KW' '1871';\n"); + grammarBuilder.append("KW1872 : 'KW' '1872';\n"); + grammarBuilder.append("KW1873 : 'KW' '1873';\n"); + grammarBuilder.append("KW1874 : 'KW' '1874';\n"); + grammarBuilder.append("KW1875 : 'KW' '1875';\n"); + grammarBuilder.append("KW1876 : 'KW' '1876';\n"); + grammarBuilder.append("KW1877 : 'KW' '1877';\n"); + grammarBuilder.append("KW1878 : 'KW' '1878';\n"); + grammarBuilder.append("KW1879 : 'KW' '1879';\n"); + grammarBuilder.append("KW1880 : 'KW' '1880';\n"); + grammarBuilder.append("KW1881 : 'KW' '1881';\n"); + grammarBuilder.append("KW1882 : 'KW' '1882';\n"); + grammarBuilder.append("KW1883 : 'KW' '1883';\n"); + grammarBuilder.append("KW1884 : 'KW' '1884';\n"); + grammarBuilder.append("KW1885 : 'KW' '1885';\n"); + grammarBuilder.append("KW1886 : 'KW' '1886';\n"); + grammarBuilder.append("KW1887 : 'KW' '1887';\n"); + grammarBuilder.append("KW1888 : 'KW' '1888';\n"); + grammarBuilder.append("KW1889 : 'KW' '1889';\n"); + grammarBuilder.append("KW1890 : 'KW' '1890';\n"); + grammarBuilder.append("KW1891 : 'KW' '1891';\n"); + grammarBuilder.append("KW1892 : 'KW' '1892';\n"); + grammarBuilder.append("KW1893 : 'KW' '1893';\n"); + grammarBuilder.append("KW1894 : 'KW' '1894';\n"); + grammarBuilder.append("KW1895 : 'KW' '1895';\n"); + grammarBuilder.append("KW1896 : 'KW' '1896';\n"); + grammarBuilder.append("KW1897 : 'KW' '1897';\n"); + grammarBuilder.append("KW1898 : 'KW' '1898';\n"); + grammarBuilder.append("KW1899 : 'KW' '1899';\n"); + grammarBuilder.append("KW1900 : 'KW' '1900';\n"); + grammarBuilder.append("KW1901 : 'KW' '1901';\n"); + grammarBuilder.append("KW1902 : 'KW' '1902';\n"); + grammarBuilder.append("KW1903 : 'KW' '1903';\n"); + grammarBuilder.append("KW1904 : 'KW' '1904';\n"); + grammarBuilder.append("KW1905 : 'KW' '1905';\n"); + grammarBuilder.append("KW1906 : 'KW' '1906';\n"); + grammarBuilder.append("KW1907 : 'KW' '1907';\n"); + grammarBuilder.append("KW1908 : 'KW' '1908';\n"); + grammarBuilder.append("KW1909 : 'KW' '1909';\n"); + grammarBuilder.append("KW1910 : 'KW' '1910';\n"); + grammarBuilder.append("KW1911 : 'KW' '1911';\n"); + grammarBuilder.append("KW1912 : 'KW' '1912';\n"); + grammarBuilder.append("KW1913 : 'KW' '1913';\n"); + grammarBuilder.append("KW1914 : 'KW' '1914';\n"); + grammarBuilder.append("KW1915 : 'KW' '1915';\n"); + grammarBuilder.append("KW1916 : 'KW' '1916';\n"); + grammarBuilder.append("KW1917 : 'KW' '1917';\n"); + grammarBuilder.append("KW1918 : 'KW' '1918';\n"); + grammarBuilder.append("KW1919 : 'KW' '1919';\n"); + grammarBuilder.append("KW1920 : 'KW' '1920';\n"); + grammarBuilder.append("KW1921 : 'KW' '1921';\n"); + grammarBuilder.append("KW1922 : 'KW' '1922';\n"); + grammarBuilder.append("KW1923 : 'KW' '1923';\n"); + grammarBuilder.append("KW1924 : 'KW' '1924';\n"); + grammarBuilder.append("KW1925 : 'KW' '1925';\n"); + grammarBuilder.append("KW1926 : 'KW' '1926';\n"); + grammarBuilder.append("KW1927 : 'KW' '1927';\n"); + grammarBuilder.append("KW1928 : 'KW' '1928';\n"); + grammarBuilder.append("KW1929 : 'KW' '1929';\n"); + grammarBuilder.append("KW1930 : 'KW' '1930';\n"); + grammarBuilder.append("KW1931 : 'KW' '1931';\n"); + grammarBuilder.append("KW1932 : 'KW' '1932';\n"); + grammarBuilder.append("KW1933 : 'KW' '1933';\n"); + grammarBuilder.append("KW1934 : 'KW' '1934';\n"); + grammarBuilder.append("KW1935 : 'KW' '1935';\n"); + grammarBuilder.append("KW1936 : 'KW' '1936';\n"); + grammarBuilder.append("KW1937 : 'KW' '1937';\n"); + grammarBuilder.append("KW1938 : 'KW' '1938';\n"); + grammarBuilder.append("KW1939 : 'KW' '1939';\n"); + grammarBuilder.append("KW1940 : 'KW' '1940';\n"); + grammarBuilder.append("KW1941 : 'KW' '1941';\n"); + grammarBuilder.append("KW1942 : 'KW' '1942';\n"); + grammarBuilder.append("KW1943 : 'KW' '1943';\n"); + grammarBuilder.append("KW1944 : 'KW' '1944';\n"); + grammarBuilder.append("KW1945 : 'KW' '1945';\n"); + grammarBuilder.append("KW1946 : 'KW' '1946';\n"); + grammarBuilder.append("KW1947 : 'KW' '1947';\n"); + grammarBuilder.append("KW1948 : 'KW' '1948';\n"); + grammarBuilder.append("KW1949 : 'KW' '1949';\n"); + grammarBuilder.append("KW1950 : 'KW' '1950';\n"); + grammarBuilder.append("KW1951 : 'KW' '1951';\n"); + grammarBuilder.append("KW1952 : 'KW' '1952';\n"); + grammarBuilder.append("KW1953 : 'KW' '1953';\n"); + grammarBuilder.append("KW1954 : 'KW' '1954';\n"); + grammarBuilder.append("KW1955 : 'KW' '1955';\n"); + grammarBuilder.append("KW1956 : 'KW' '1956';\n"); + grammarBuilder.append("KW1957 : 'KW' '1957';\n"); + grammarBuilder.append("KW1958 : 'KW' '1958';\n"); + grammarBuilder.append("KW1959 : 'KW' '1959';\n"); + grammarBuilder.append("KW1960 : 'KW' '1960';\n"); + grammarBuilder.append("KW1961 : 'KW' '1961';\n"); + grammarBuilder.append("KW1962 : 'KW' '1962';\n"); + grammarBuilder.append("KW1963 : 'KW' '1963';\n"); + grammarBuilder.append("KW1964 : 'KW' '1964';\n"); + grammarBuilder.append("KW1965 : 'KW' '1965';\n"); + grammarBuilder.append("KW1966 : 'KW' '1966';\n"); + grammarBuilder.append("KW1967 : 'KW' '1967';\n"); + grammarBuilder.append("KW1968 : 'KW' '1968';\n"); + grammarBuilder.append("KW1969 : 'KW' '1969';\n"); + grammarBuilder.append("KW1970 : 'KW' '1970';\n"); + grammarBuilder.append("KW1971 : 'KW' '1971';\n"); + grammarBuilder.append("KW1972 : 'KW' '1972';\n"); + grammarBuilder.append("KW1973 : 'KW' '1973';\n"); + grammarBuilder.append("KW1974 : 'KW' '1974';\n"); + grammarBuilder.append("KW1975 : 'KW' '1975';\n"); + grammarBuilder.append("KW1976 : 'KW' '1976';\n"); + grammarBuilder.append("KW1977 : 'KW' '1977';\n"); + grammarBuilder.append("KW1978 : 'KW' '1978';\n"); + grammarBuilder.append("KW1979 : 'KW' '1979';\n"); + grammarBuilder.append("KW1980 : 'KW' '1980';\n"); + grammarBuilder.append("KW1981 : 'KW' '1981';\n"); + grammarBuilder.append("KW1982 : 'KW' '1982';\n"); + grammarBuilder.append("KW1983 : 'KW' '1983';\n"); + grammarBuilder.append("KW1984 : 'KW' '1984';\n"); + grammarBuilder.append("KW1985 : 'KW' '1985';\n"); + grammarBuilder.append("KW1986 : 'KW' '1986';\n"); + grammarBuilder.append("KW1987 : 'KW' '1987';\n"); + grammarBuilder.append("KW1988 : 'KW' '1988';\n"); + grammarBuilder.append("KW1989 : 'KW' '1989';\n"); + grammarBuilder.append("KW1990 : 'KW' '1990';\n"); + grammarBuilder.append("KW1991 : 'KW' '1991';\n"); + grammarBuilder.append("KW1992 : 'KW' '1992';\n"); + grammarBuilder.append("KW1993 : 'KW' '1993';\n"); + grammarBuilder.append("KW1994 : 'KW' '1994';\n"); + grammarBuilder.append("KW1995 : 'KW' '1995';\n"); + grammarBuilder.append("KW1996 : 'KW' '1996';\n"); + grammarBuilder.append("KW1997 : 'KW' '1997';\n"); + grammarBuilder.append("KW1998 : 'KW' '1998';\n"); + grammarBuilder.append("KW1999 : 'KW' '1999';\n"); + grammarBuilder.append("KW2000 : 'KW' '2000';\n"); + grammarBuilder.append("KW2001 : 'KW' '2001';\n"); + grammarBuilder.append("KW2002 : 'KW' '2002';\n"); + grammarBuilder.append("KW2003 : 'KW' '2003';\n"); + grammarBuilder.append("KW2004 : 'KW' '2004';\n"); + grammarBuilder.append("KW2005 : 'KW' '2005';\n"); + grammarBuilder.append("KW2006 : 'KW' '2006';\n"); + grammarBuilder.append("KW2007 : 'KW' '2007';\n"); + grammarBuilder.append("KW2008 : 'KW' '2008';\n"); + grammarBuilder.append("KW2009 : 'KW' '2009';\n"); + grammarBuilder.append("KW2010 : 'KW' '2010';\n"); + grammarBuilder.append("KW2011 : 'KW' '2011';\n"); + grammarBuilder.append("KW2012 : 'KW' '2012';\n"); + grammarBuilder.append("KW2013 : 'KW' '2013';\n"); + grammarBuilder.append("KW2014 : 'KW' '2014';\n"); + grammarBuilder.append("KW2015 : 'KW' '2015';\n"); + grammarBuilder.append("KW2016 : 'KW' '2016';\n"); + grammarBuilder.append("KW2017 : 'KW' '2017';\n"); + grammarBuilder.append("KW2018 : 'KW' '2018';\n"); + grammarBuilder.append("KW2019 : 'KW' '2019';\n"); + grammarBuilder.append("KW2020 : 'KW' '2020';\n"); + grammarBuilder.append("KW2021 : 'KW' '2021';\n"); + grammarBuilder.append("KW2022 : 'KW' '2022';\n"); + grammarBuilder.append("KW2023 : 'KW' '2023';\n"); + grammarBuilder.append("KW2024 : 'KW' '2024';\n"); + grammarBuilder.append("KW2025 : 'KW' '2025';\n"); + grammarBuilder.append("KW2026 : 'KW' '2026';\n"); + grammarBuilder.append("KW2027 : 'KW' '2027';\n"); + grammarBuilder.append("KW2028 : 'KW' '2028';\n"); + grammarBuilder.append("KW2029 : 'KW' '2029';\n"); + grammarBuilder.append("KW2030 : 'KW' '2030';\n"); + grammarBuilder.append("KW2031 : 'KW' '2031';\n"); + grammarBuilder.append("KW2032 : 'KW' '2032';\n"); + grammarBuilder.append("KW2033 : 'KW' '2033';\n"); + grammarBuilder.append("KW2034 : 'KW' '2034';\n"); + grammarBuilder.append("KW2035 : 'KW' '2035';\n"); + grammarBuilder.append("KW2036 : 'KW' '2036';\n"); + grammarBuilder.append("KW2037 : 'KW' '2037';\n"); + grammarBuilder.append("KW2038 : 'KW' '2038';\n"); + grammarBuilder.append("KW2039 : 'KW' '2039';\n"); + grammarBuilder.append("KW2040 : 'KW' '2040';\n"); + grammarBuilder.append("KW2041 : 'KW' '2041';\n"); + grammarBuilder.append("KW2042 : 'KW' '2042';\n"); + grammarBuilder.append("KW2043 : 'KW' '2043';\n"); + grammarBuilder.append("KW2044 : 'KW' '2044';\n"); + grammarBuilder.append("KW2045 : 'KW' '2045';\n"); + grammarBuilder.append("KW2046 : 'KW' '2046';\n"); + grammarBuilder.append("KW2047 : 'KW' '2047';\n"); + grammarBuilder.append("KW2048 : 'KW' '2048';\n"); + grammarBuilder.append("KW2049 : 'KW' '2049';\n"); + grammarBuilder.append("KW2050 : 'KW' '2050';\n"); + grammarBuilder.append("KW2051 : 'KW' '2051';\n"); + grammarBuilder.append("KW2052 : 'KW' '2052';\n"); + grammarBuilder.append("KW2053 : 'KW' '2053';\n"); + grammarBuilder.append("KW2054 : 'KW' '2054';\n"); + grammarBuilder.append("KW2055 : 'KW' '2055';\n"); + grammarBuilder.append("KW2056 : 'KW' '2056';\n"); + grammarBuilder.append("KW2057 : 'KW' '2057';\n"); + grammarBuilder.append("KW2058 : 'KW' '2058';\n"); + grammarBuilder.append("KW2059 : 'KW' '2059';\n"); + grammarBuilder.append("KW2060 : 'KW' '2060';\n"); + grammarBuilder.append("KW2061 : 'KW' '2061';\n"); + grammarBuilder.append("KW2062 : 'KW' '2062';\n"); + grammarBuilder.append("KW2063 : 'KW' '2063';\n"); + grammarBuilder.append("KW2064 : 'KW' '2064';\n"); + grammarBuilder.append("KW2065 : 'KW' '2065';\n"); + grammarBuilder.append("KW2066 : 'KW' '2066';\n"); + grammarBuilder.append("KW2067 : 'KW' '2067';\n"); + grammarBuilder.append("KW2068 : 'KW' '2068';\n"); + grammarBuilder.append("KW2069 : 'KW' '2069';\n"); + grammarBuilder.append("KW2070 : 'KW' '2070';\n"); + grammarBuilder.append("KW2071 : 'KW' '2071';\n"); + grammarBuilder.append("KW2072 : 'KW' '2072';\n"); + grammarBuilder.append("KW2073 : 'KW' '2073';\n"); + grammarBuilder.append("KW2074 : 'KW' '2074';\n"); + grammarBuilder.append("KW2075 : 'KW' '2075';\n"); + grammarBuilder.append("KW2076 : 'KW' '2076';\n"); + grammarBuilder.append("KW2077 : 'KW' '2077';\n"); + grammarBuilder.append("KW2078 : 'KW' '2078';\n"); + grammarBuilder.append("KW2079 : 'KW' '2079';\n"); + grammarBuilder.append("KW2080 : 'KW' '2080';\n"); + grammarBuilder.append("KW2081 : 'KW' '2081';\n"); + grammarBuilder.append("KW2082 : 'KW' '2082';\n"); + grammarBuilder.append("KW2083 : 'KW' '2083';\n"); + grammarBuilder.append("KW2084 : 'KW' '2084';\n"); + grammarBuilder.append("KW2085 : 'KW' '2085';\n"); + grammarBuilder.append("KW2086 : 'KW' '2086';\n"); + grammarBuilder.append("KW2087 : 'KW' '2087';\n"); + grammarBuilder.append("KW2088 : 'KW' '2088';\n"); + grammarBuilder.append("KW2089 : 'KW' '2089';\n"); + grammarBuilder.append("KW2090 : 'KW' '2090';\n"); + grammarBuilder.append("KW2091 : 'KW' '2091';\n"); + grammarBuilder.append("KW2092 : 'KW' '2092';\n"); + grammarBuilder.append("KW2093 : 'KW' '2093';\n"); + grammarBuilder.append("KW2094 : 'KW' '2094';\n"); + grammarBuilder.append("KW2095 : 'KW' '2095';\n"); + grammarBuilder.append("KW2096 : 'KW' '2096';\n"); + grammarBuilder.append("KW2097 : 'KW' '2097';\n"); + grammarBuilder.append("KW2098 : 'KW' '2098';\n"); + grammarBuilder.append("KW2099 : 'KW' '2099';\n"); + grammarBuilder.append("KW2100 : 'KW' '2100';\n"); + grammarBuilder.append("KW2101 : 'KW' '2101';\n"); + grammarBuilder.append("KW2102 : 'KW' '2102';\n"); + grammarBuilder.append("KW2103 : 'KW' '2103';\n"); + grammarBuilder.append("KW2104 : 'KW' '2104';\n"); + grammarBuilder.append("KW2105 : 'KW' '2105';\n"); + grammarBuilder.append("KW2106 : 'KW' '2106';\n"); + grammarBuilder.append("KW2107 : 'KW' '2107';\n"); + grammarBuilder.append("KW2108 : 'KW' '2108';\n"); + grammarBuilder.append("KW2109 : 'KW' '2109';\n"); + grammarBuilder.append("KW2110 : 'KW' '2110';\n"); + grammarBuilder.append("KW2111 : 'KW' '2111';\n"); + grammarBuilder.append("KW2112 : 'KW' '2112';\n"); + grammarBuilder.append("KW2113 : 'KW' '2113';\n"); + grammarBuilder.append("KW2114 : 'KW' '2114';\n"); + grammarBuilder.append("KW2115 : 'KW' '2115';\n"); + grammarBuilder.append("KW2116 : 'KW' '2116';\n"); + grammarBuilder.append("KW2117 : 'KW' '2117';\n"); + grammarBuilder.append("KW2118 : 'KW' '2118';\n"); + grammarBuilder.append("KW2119 : 'KW' '2119';\n"); + grammarBuilder.append("KW2120 : 'KW' '2120';\n"); + grammarBuilder.append("KW2121 : 'KW' '2121';\n"); + grammarBuilder.append("KW2122 : 'KW' '2122';\n"); + grammarBuilder.append("KW2123 : 'KW' '2123';\n"); + grammarBuilder.append("KW2124 : 'KW' '2124';\n"); + grammarBuilder.append("KW2125 : 'KW' '2125';\n"); + grammarBuilder.append("KW2126 : 'KW' '2126';\n"); + grammarBuilder.append("KW2127 : 'KW' '2127';\n"); + grammarBuilder.append("KW2128 : 'KW' '2128';\n"); + grammarBuilder.append("KW2129 : 'KW' '2129';\n"); + grammarBuilder.append("KW2130 : 'KW' '2130';\n"); + grammarBuilder.append("KW2131 : 'KW' '2131';\n"); + grammarBuilder.append("KW2132 : 'KW' '2132';\n"); + grammarBuilder.append("KW2133 : 'KW' '2133';\n"); + grammarBuilder.append("KW2134 : 'KW' '2134';\n"); + grammarBuilder.append("KW2135 : 'KW' '2135';\n"); + grammarBuilder.append("KW2136 : 'KW' '2136';\n"); + grammarBuilder.append("KW2137 : 'KW' '2137';\n"); + grammarBuilder.append("KW2138 : 'KW' '2138';\n"); + grammarBuilder.append("KW2139 : 'KW' '2139';\n"); + grammarBuilder.append("KW2140 : 'KW' '2140';\n"); + grammarBuilder.append("KW2141 : 'KW' '2141';\n"); + grammarBuilder.append("KW2142 : 'KW' '2142';\n"); + grammarBuilder.append("KW2143 : 'KW' '2143';\n"); + grammarBuilder.append("KW2144 : 'KW' '2144';\n"); + grammarBuilder.append("KW2145 : 'KW' '2145';\n"); + grammarBuilder.append("KW2146 : 'KW' '2146';\n"); + grammarBuilder.append("KW2147 : 'KW' '2147';\n"); + grammarBuilder.append("KW2148 : 'KW' '2148';\n"); + grammarBuilder.append("KW2149 : 'KW' '2149';\n"); + grammarBuilder.append("KW2150 : 'KW' '2150';\n"); + grammarBuilder.append("KW2151 : 'KW' '2151';\n"); + grammarBuilder.append("KW2152 : 'KW' '2152';\n"); + grammarBuilder.append("KW2153 : 'KW' '2153';\n"); + grammarBuilder.append("KW2154 : 'KW' '2154';\n"); + grammarBuilder.append("KW2155 : 'KW' '2155';\n"); + grammarBuilder.append("KW2156 : 'KW' '2156';\n"); + grammarBuilder.append("KW2157 : 'KW' '2157';\n"); + grammarBuilder.append("KW2158 : 'KW' '2158';\n"); + grammarBuilder.append("KW2159 : 'KW' '2159';\n"); + grammarBuilder.append("KW2160 : 'KW' '2160';\n"); + grammarBuilder.append("KW2161 : 'KW' '2161';\n"); + grammarBuilder.append("KW2162 : 'KW' '2162';\n"); + grammarBuilder.append("KW2163 : 'KW' '2163';\n"); + grammarBuilder.append("KW2164 : 'KW' '2164';\n"); + grammarBuilder.append("KW2165 : 'KW' '2165';\n"); + grammarBuilder.append("KW2166 : 'KW' '2166';\n"); + grammarBuilder.append("KW2167 : 'KW' '2167';\n"); + grammarBuilder.append("KW2168 : 'KW' '2168';\n"); + grammarBuilder.append("KW2169 : 'KW' '2169';\n"); + grammarBuilder.append("KW2170 : 'KW' '2170';\n"); + grammarBuilder.append("KW2171 : 'KW' '2171';\n"); + grammarBuilder.append("KW2172 : 'KW' '2172';\n"); + grammarBuilder.append("KW2173 : 'KW' '2173';\n"); + grammarBuilder.append("KW2174 : 'KW' '2174';\n"); + grammarBuilder.append("KW2175 : 'KW' '2175';\n"); + grammarBuilder.append("KW2176 : 'KW' '2176';\n"); + grammarBuilder.append("KW2177 : 'KW' '2177';\n"); + grammarBuilder.append("KW2178 : 'KW' '2178';\n"); + grammarBuilder.append("KW2179 : 'KW' '2179';\n"); + grammarBuilder.append("KW2180 : 'KW' '2180';\n"); + grammarBuilder.append("KW2181 : 'KW' '2181';\n"); + grammarBuilder.append("KW2182 : 'KW' '2182';\n"); + grammarBuilder.append("KW2183 : 'KW' '2183';\n"); + grammarBuilder.append("KW2184 : 'KW' '2184';\n"); + grammarBuilder.append("KW2185 : 'KW' '2185';\n"); + grammarBuilder.append("KW2186 : 'KW' '2186';\n"); + grammarBuilder.append("KW2187 : 'KW' '2187';\n"); + grammarBuilder.append("KW2188 : 'KW' '2188';\n"); + grammarBuilder.append("KW2189 : 'KW' '2189';\n"); + grammarBuilder.append("KW2190 : 'KW' '2190';\n"); + grammarBuilder.append("KW2191 : 'KW' '2191';\n"); + grammarBuilder.append("KW2192 : 'KW' '2192';\n"); + grammarBuilder.append("KW2193 : 'KW' '2193';\n"); + grammarBuilder.append("KW2194 : 'KW' '2194';\n"); + grammarBuilder.append("KW2195 : 'KW' '2195';\n"); + grammarBuilder.append("KW2196 : 'KW' '2196';\n"); + grammarBuilder.append("KW2197 : 'KW' '2197';\n"); + grammarBuilder.append("KW2198 : 'KW' '2198';\n"); + grammarBuilder.append("KW2199 : 'KW' '2199';\n"); + grammarBuilder.append("KW2200 : 'KW' '2200';\n"); + grammarBuilder.append("KW2201 : 'KW' '2201';\n"); + grammarBuilder.append("KW2202 : 'KW' '2202';\n"); + grammarBuilder.append("KW2203 : 'KW' '2203';\n"); + grammarBuilder.append("KW2204 : 'KW' '2204';\n"); + grammarBuilder.append("KW2205 : 'KW' '2205';\n"); + grammarBuilder.append("KW2206 : 'KW' '2206';\n"); + grammarBuilder.append("KW2207 : 'KW' '2207';\n"); + grammarBuilder.append("KW2208 : 'KW' '2208';\n"); + grammarBuilder.append("KW2209 : 'KW' '2209';\n"); + grammarBuilder.append("KW2210 : 'KW' '2210';\n"); + grammarBuilder.append("KW2211 : 'KW' '2211';\n"); + grammarBuilder.append("KW2212 : 'KW' '2212';\n"); + grammarBuilder.append("KW2213 : 'KW' '2213';\n"); + grammarBuilder.append("KW2214 : 'KW' '2214';\n"); + grammarBuilder.append("KW2215 : 'KW' '2215';\n"); + grammarBuilder.append("KW2216 : 'KW' '2216';\n"); + grammarBuilder.append("KW2217 : 'KW' '2217';\n"); + grammarBuilder.append("KW2218 : 'KW' '2218';\n"); + grammarBuilder.append("KW2219 : 'KW' '2219';\n"); + grammarBuilder.append("KW2220 : 'KW' '2220';\n"); + grammarBuilder.append("KW2221 : 'KW' '2221';\n"); + grammarBuilder.append("KW2222 : 'KW' '2222';\n"); + grammarBuilder.append("KW2223 : 'KW' '2223';\n"); + grammarBuilder.append("KW2224 : 'KW' '2224';\n"); + grammarBuilder.append("KW2225 : 'KW' '2225';\n"); + grammarBuilder.append("KW2226 : 'KW' '2226';\n"); + grammarBuilder.append("KW2227 : 'KW' '2227';\n"); + grammarBuilder.append("KW2228 : 'KW' '2228';\n"); + grammarBuilder.append("KW2229 : 'KW' '2229';\n"); + grammarBuilder.append("KW2230 : 'KW' '2230';\n"); + grammarBuilder.append("KW2231 : 'KW' '2231';\n"); + grammarBuilder.append("KW2232 : 'KW' '2232';\n"); + grammarBuilder.append("KW2233 : 'KW' '2233';\n"); + grammarBuilder.append("KW2234 : 'KW' '2234';\n"); + grammarBuilder.append("KW2235 : 'KW' '2235';\n"); + grammarBuilder.append("KW2236 : 'KW' '2236';\n"); + grammarBuilder.append("KW2237 : 'KW' '2237';\n"); + grammarBuilder.append("KW2238 : 'KW' '2238';\n"); + grammarBuilder.append("KW2239 : 'KW' '2239';\n"); + grammarBuilder.append("KW2240 : 'KW' '2240';\n"); + grammarBuilder.append("KW2241 : 'KW' '2241';\n"); + grammarBuilder.append("KW2242 : 'KW' '2242';\n"); + grammarBuilder.append("KW2243 : 'KW' '2243';\n"); + grammarBuilder.append("KW2244 : 'KW' '2244';\n"); + grammarBuilder.append("KW2245 : 'KW' '2245';\n"); + grammarBuilder.append("KW2246 : 'KW' '2246';\n"); + grammarBuilder.append("KW2247 : 'KW' '2247';\n"); + grammarBuilder.append("KW2248 : 'KW' '2248';\n"); + grammarBuilder.append("KW2249 : 'KW' '2249';\n"); + grammarBuilder.append("KW2250 : 'KW' '2250';\n"); + grammarBuilder.append("KW2251 : 'KW' '2251';\n"); + grammarBuilder.append("KW2252 : 'KW' '2252';\n"); + grammarBuilder.append("KW2253 : 'KW' '2253';\n"); + grammarBuilder.append("KW2254 : 'KW' '2254';\n"); + grammarBuilder.append("KW2255 : 'KW' '2255';\n"); + grammarBuilder.append("KW2256 : 'KW' '2256';\n"); + grammarBuilder.append("KW2257 : 'KW' '2257';\n"); + grammarBuilder.append("KW2258 : 'KW' '2258';\n"); + grammarBuilder.append("KW2259 : 'KW' '2259';\n"); + grammarBuilder.append("KW2260 : 'KW' '2260';\n"); + grammarBuilder.append("KW2261 : 'KW' '2261';\n"); + grammarBuilder.append("KW2262 : 'KW' '2262';\n"); + grammarBuilder.append("KW2263 : 'KW' '2263';\n"); + grammarBuilder.append("KW2264 : 'KW' '2264';\n"); + grammarBuilder.append("KW2265 : 'KW' '2265';\n"); + grammarBuilder.append("KW2266 : 'KW' '2266';\n"); + grammarBuilder.append("KW2267 : 'KW' '2267';\n"); + grammarBuilder.append("KW2268 : 'KW' '2268';\n"); + grammarBuilder.append("KW2269 : 'KW' '2269';\n"); + grammarBuilder.append("KW2270 : 'KW' '2270';\n"); + grammarBuilder.append("KW2271 : 'KW' '2271';\n"); + grammarBuilder.append("KW2272 : 'KW' '2272';\n"); + grammarBuilder.append("KW2273 : 'KW' '2273';\n"); + grammarBuilder.append("KW2274 : 'KW' '2274';\n"); + grammarBuilder.append("KW2275 : 'KW' '2275';\n"); + grammarBuilder.append("KW2276 : 'KW' '2276';\n"); + grammarBuilder.append("KW2277 : 'KW' '2277';\n"); + grammarBuilder.append("KW2278 : 'KW' '2278';\n"); + grammarBuilder.append("KW2279 : 'KW' '2279';\n"); + grammarBuilder.append("KW2280 : 'KW' '2280';\n"); + grammarBuilder.append("KW2281 : 'KW' '2281';\n"); + grammarBuilder.append("KW2282 : 'KW' '2282';\n"); + grammarBuilder.append("KW2283 : 'KW' '2283';\n"); + grammarBuilder.append("KW2284 : 'KW' '2284';\n"); + grammarBuilder.append("KW2285 : 'KW' '2285';\n"); + grammarBuilder.append("KW2286 : 'KW' '2286';\n"); + grammarBuilder.append("KW2287 : 'KW' '2287';\n"); + grammarBuilder.append("KW2288 : 'KW' '2288';\n"); + grammarBuilder.append("KW2289 : 'KW' '2289';\n"); + grammarBuilder.append("KW2290 : 'KW' '2290';\n"); + grammarBuilder.append("KW2291 : 'KW' '2291';\n"); + grammarBuilder.append("KW2292 : 'KW' '2292';\n"); + grammarBuilder.append("KW2293 : 'KW' '2293';\n"); + grammarBuilder.append("KW2294 : 'KW' '2294';\n"); + grammarBuilder.append("KW2295 : 'KW' '2295';\n"); + grammarBuilder.append("KW2296 : 'KW' '2296';\n"); + grammarBuilder.append("KW2297 : 'KW' '2297';\n"); + grammarBuilder.append("KW2298 : 'KW' '2298';\n"); + grammarBuilder.append("KW2299 : 'KW' '2299';\n"); + grammarBuilder.append("KW2300 : 'KW' '2300';\n"); + grammarBuilder.append("KW2301 : 'KW' '2301';\n"); + grammarBuilder.append("KW2302 : 'KW' '2302';\n"); + grammarBuilder.append("KW2303 : 'KW' '2303';\n"); + grammarBuilder.append("KW2304 : 'KW' '2304';\n"); + grammarBuilder.append("KW2305 : 'KW' '2305';\n"); + grammarBuilder.append("KW2306 : 'KW' '2306';\n"); + grammarBuilder.append("KW2307 : 'KW' '2307';\n"); + grammarBuilder.append("KW2308 : 'KW' '2308';\n"); + grammarBuilder.append("KW2309 : 'KW' '2309';\n"); + grammarBuilder.append("KW2310 : 'KW' '2310';\n"); + grammarBuilder.append("KW2311 : 'KW' '2311';\n"); + grammarBuilder.append("KW2312 : 'KW' '2312';\n"); + grammarBuilder.append("KW2313 : 'KW' '2313';\n"); + grammarBuilder.append("KW2314 : 'KW' '2314';\n"); + grammarBuilder.append("KW2315 : 'KW' '2315';\n"); + grammarBuilder.append("KW2316 : 'KW' '2316';\n"); + grammarBuilder.append("KW2317 : 'KW' '2317';\n"); + grammarBuilder.append("KW2318 : 'KW' '2318';\n"); + grammarBuilder.append("KW2319 : 'KW' '2319';\n"); + grammarBuilder.append("KW2320 : 'KW' '2320';\n"); + grammarBuilder.append("KW2321 : 'KW' '2321';\n"); + grammarBuilder.append("KW2322 : 'KW' '2322';\n"); + grammarBuilder.append("KW2323 : 'KW' '2323';\n"); + grammarBuilder.append("KW2324 : 'KW' '2324';\n"); + grammarBuilder.append("KW2325 : 'KW' '2325';\n"); + grammarBuilder.append("KW2326 : 'KW' '2326';\n"); + grammarBuilder.append("KW2327 : 'KW' '2327';\n"); + grammarBuilder.append("KW2328 : 'KW' '2328';\n"); + grammarBuilder.append("KW2329 : 'KW' '2329';\n"); + grammarBuilder.append("KW2330 : 'KW' '2330';\n"); + grammarBuilder.append("KW2331 : 'KW' '2331';\n"); + grammarBuilder.append("KW2332 : 'KW' '2332';\n"); + grammarBuilder.append("KW2333 : 'KW' '2333';\n"); + grammarBuilder.append("KW2334 : 'KW' '2334';\n"); + grammarBuilder.append("KW2335 : 'KW' '2335';\n"); + grammarBuilder.append("KW2336 : 'KW' '2336';\n"); + grammarBuilder.append("KW2337 : 'KW' '2337';\n"); + grammarBuilder.append("KW2338 : 'KW' '2338';\n"); + grammarBuilder.append("KW2339 : 'KW' '2339';\n"); + grammarBuilder.append("KW2340 : 'KW' '2340';\n"); + grammarBuilder.append("KW2341 : 'KW' '2341';\n"); + grammarBuilder.append("KW2342 : 'KW' '2342';\n"); + grammarBuilder.append("KW2343 : 'KW' '2343';\n"); + grammarBuilder.append("KW2344 : 'KW' '2344';\n"); + grammarBuilder.append("KW2345 : 'KW' '2345';\n"); + grammarBuilder.append("KW2346 : 'KW' '2346';\n"); + grammarBuilder.append("KW2347 : 'KW' '2347';\n"); + grammarBuilder.append("KW2348 : 'KW' '2348';\n"); + grammarBuilder.append("KW2349 : 'KW' '2349';\n"); + grammarBuilder.append("KW2350 : 'KW' '2350';\n"); + grammarBuilder.append("KW2351 : 'KW' '2351';\n"); + grammarBuilder.append("KW2352 : 'KW' '2352';\n"); + grammarBuilder.append("KW2353 : 'KW' '2353';\n"); + grammarBuilder.append("KW2354 : 'KW' '2354';\n"); + grammarBuilder.append("KW2355 : 'KW' '2355';\n"); + grammarBuilder.append("KW2356 : 'KW' '2356';\n"); + grammarBuilder.append("KW2357 : 'KW' '2357';\n"); + grammarBuilder.append("KW2358 : 'KW' '2358';\n"); + grammarBuilder.append("KW2359 : 'KW' '2359';\n"); + grammarBuilder.append("KW2360 : 'KW' '2360';\n"); + grammarBuilder.append("KW2361 : 'KW' '2361';\n"); + grammarBuilder.append("KW2362 : 'KW' '2362';\n"); + grammarBuilder.append("KW2363 : 'KW' '2363';\n"); + grammarBuilder.append("KW2364 : 'KW' '2364';\n"); + grammarBuilder.append("KW2365 : 'KW' '2365';\n"); + grammarBuilder.append("KW2366 : 'KW' '2366';\n"); + grammarBuilder.append("KW2367 : 'KW' '2367';\n"); + grammarBuilder.append("KW2368 : 'KW' '2368';\n"); + grammarBuilder.append("KW2369 : 'KW' '2369';\n"); + grammarBuilder.append("KW2370 : 'KW' '2370';\n"); + grammarBuilder.append("KW2371 : 'KW' '2371';\n"); + grammarBuilder.append("KW2372 : 'KW' '2372';\n"); + grammarBuilder.append("KW2373 : 'KW' '2373';\n"); + grammarBuilder.append("KW2374 : 'KW' '2374';\n"); + grammarBuilder.append("KW2375 : 'KW' '2375';\n"); + grammarBuilder.append("KW2376 : 'KW' '2376';\n"); + grammarBuilder.append("KW2377 : 'KW' '2377';\n"); + grammarBuilder.append("KW2378 : 'KW' '2378';\n"); + grammarBuilder.append("KW2379 : 'KW' '2379';\n"); + grammarBuilder.append("KW2380 : 'KW' '2380';\n"); + grammarBuilder.append("KW2381 : 'KW' '2381';\n"); + grammarBuilder.append("KW2382 : 'KW' '2382';\n"); + grammarBuilder.append("KW2383 : 'KW' '2383';\n"); + grammarBuilder.append("KW2384 : 'KW' '2384';\n"); + grammarBuilder.append("KW2385 : 'KW' '2385';\n"); + grammarBuilder.append("KW2386 : 'KW' '2386';\n"); + grammarBuilder.append("KW2387 : 'KW' '2387';\n"); + grammarBuilder.append("KW2388 : 'KW' '2388';\n"); + grammarBuilder.append("KW2389 : 'KW' '2389';\n"); + grammarBuilder.append("KW2390 : 'KW' '2390';\n"); + grammarBuilder.append("KW2391 : 'KW' '2391';\n"); + grammarBuilder.append("KW2392 : 'KW' '2392';\n"); + grammarBuilder.append("KW2393 : 'KW' '2393';\n"); + grammarBuilder.append("KW2394 : 'KW' '2394';\n"); + grammarBuilder.append("KW2395 : 'KW' '2395';\n"); + grammarBuilder.append("KW2396 : 'KW' '2396';\n"); + grammarBuilder.append("KW2397 : 'KW' '2397';\n"); + grammarBuilder.append("KW2398 : 'KW' '2398';\n"); + grammarBuilder.append("KW2399 : 'KW' '2399';\n"); + grammarBuilder.append("KW2400 : 'KW' '2400';\n"); + grammarBuilder.append("KW2401 : 'KW' '2401';\n"); + grammarBuilder.append("KW2402 : 'KW' '2402';\n"); + grammarBuilder.append("KW2403 : 'KW' '2403';\n"); + grammarBuilder.append("KW2404 : 'KW' '2404';\n"); + grammarBuilder.append("KW2405 : 'KW' '2405';\n"); + grammarBuilder.append("KW2406 : 'KW' '2406';\n"); + grammarBuilder.append("KW2407 : 'KW' '2407';\n"); + grammarBuilder.append("KW2408 : 'KW' '2408';\n"); + grammarBuilder.append("KW2409 : 'KW' '2409';\n"); + grammarBuilder.append("KW2410 : 'KW' '2410';\n"); + grammarBuilder.append("KW2411 : 'KW' '2411';\n"); + grammarBuilder.append("KW2412 : 'KW' '2412';\n"); + grammarBuilder.append("KW2413 : 'KW' '2413';\n"); + grammarBuilder.append("KW2414 : 'KW' '2414';\n"); + grammarBuilder.append("KW2415 : 'KW' '2415';\n"); + grammarBuilder.append("KW2416 : 'KW' '2416';\n"); + grammarBuilder.append("KW2417 : 'KW' '2417';\n"); + grammarBuilder.append("KW2418 : 'KW' '2418';\n"); + grammarBuilder.append("KW2419 : 'KW' '2419';\n"); + grammarBuilder.append("KW2420 : 'KW' '2420';\n"); + grammarBuilder.append("KW2421 : 'KW' '2421';\n"); + grammarBuilder.append("KW2422 : 'KW' '2422';\n"); + grammarBuilder.append("KW2423 : 'KW' '2423';\n"); + grammarBuilder.append("KW2424 : 'KW' '2424';\n"); + grammarBuilder.append("KW2425 : 'KW' '2425';\n"); + grammarBuilder.append("KW2426 : 'KW' '2426';\n"); + grammarBuilder.append("KW2427 : 'KW' '2427';\n"); + grammarBuilder.append("KW2428 : 'KW' '2428';\n"); + grammarBuilder.append("KW2429 : 'KW' '2429';\n"); + grammarBuilder.append("KW2430 : 'KW' '2430';\n"); + grammarBuilder.append("KW2431 : 'KW' '2431';\n"); + grammarBuilder.append("KW2432 : 'KW' '2432';\n"); + grammarBuilder.append("KW2433 : 'KW' '2433';\n"); + grammarBuilder.append("KW2434 : 'KW' '2434';\n"); + grammarBuilder.append("KW2435 : 'KW' '2435';\n"); + grammarBuilder.append("KW2436 : 'KW' '2436';\n"); + grammarBuilder.append("KW2437 : 'KW' '2437';\n"); + grammarBuilder.append("KW2438 : 'KW' '2438';\n"); + grammarBuilder.append("KW2439 : 'KW' '2439';\n"); + grammarBuilder.append("KW2440 : 'KW' '2440';\n"); + grammarBuilder.append("KW2441 : 'KW' '2441';\n"); + grammarBuilder.append("KW2442 : 'KW' '2442';\n"); + grammarBuilder.append("KW2443 : 'KW' '2443';\n"); + grammarBuilder.append("KW2444 : 'KW' '2444';\n"); + grammarBuilder.append("KW2445 : 'KW' '2445';\n"); + grammarBuilder.append("KW2446 : 'KW' '2446';\n"); + grammarBuilder.append("KW2447 : 'KW' '2447';\n"); + grammarBuilder.append("KW2448 : 'KW' '2448';\n"); + grammarBuilder.append("KW2449 : 'KW' '2449';\n"); + grammarBuilder.append("KW2450 : 'KW' '2450';\n"); + grammarBuilder.append("KW2451 : 'KW' '2451';\n"); + grammarBuilder.append("KW2452 : 'KW' '2452';\n"); + grammarBuilder.append("KW2453 : 'KW' '2453';\n"); + grammarBuilder.append("KW2454 : 'KW' '2454';\n"); + grammarBuilder.append("KW2455 : 'KW' '2455';\n"); + grammarBuilder.append("KW2456 : 'KW' '2456';\n"); + grammarBuilder.append("KW2457 : 'KW' '2457';\n"); + grammarBuilder.append("KW2458 : 'KW' '2458';\n"); + grammarBuilder.append("KW2459 : 'KW' '2459';\n"); + grammarBuilder.append("KW2460 : 'KW' '2460';\n"); + grammarBuilder.append("KW2461 : 'KW' '2461';\n"); + grammarBuilder.append("KW2462 : 'KW' '2462';\n"); + grammarBuilder.append("KW2463 : 'KW' '2463';\n"); + grammarBuilder.append("KW2464 : 'KW' '2464';\n"); + grammarBuilder.append("KW2465 : 'KW' '2465';\n"); + grammarBuilder.append("KW2466 : 'KW' '2466';\n"); + grammarBuilder.append("KW2467 : 'KW' '2467';\n"); + grammarBuilder.append("KW2468 : 'KW' '2468';\n"); + grammarBuilder.append("KW2469 : 'KW' '2469';\n"); + grammarBuilder.append("KW2470 : 'KW' '2470';\n"); + grammarBuilder.append("KW2471 : 'KW' '2471';\n"); + grammarBuilder.append("KW2472 : 'KW' '2472';\n"); + grammarBuilder.append("KW2473 : 'KW' '2473';\n"); + grammarBuilder.append("KW2474 : 'KW' '2474';\n"); + grammarBuilder.append("KW2475 : 'KW' '2475';\n"); + grammarBuilder.append("KW2476 : 'KW' '2476';\n"); + grammarBuilder.append("KW2477 : 'KW' '2477';\n"); + grammarBuilder.append("KW2478 : 'KW' '2478';\n"); + grammarBuilder.append("KW2479 : 'KW' '2479';\n"); + grammarBuilder.append("KW2480 : 'KW' '2480';\n"); + grammarBuilder.append("KW2481 : 'KW' '2481';\n"); + grammarBuilder.append("KW2482 : 'KW' '2482';\n"); + grammarBuilder.append("KW2483 : 'KW' '2483';\n"); + grammarBuilder.append("KW2484 : 'KW' '2484';\n"); + grammarBuilder.append("KW2485 : 'KW' '2485';\n"); + grammarBuilder.append("KW2486 : 'KW' '2486';\n"); + grammarBuilder.append("KW2487 : 'KW' '2487';\n"); + grammarBuilder.append("KW2488 : 'KW' '2488';\n"); + grammarBuilder.append("KW2489 : 'KW' '2489';\n"); + grammarBuilder.append("KW2490 : 'KW' '2490';\n"); + grammarBuilder.append("KW2491 : 'KW' '2491';\n"); + grammarBuilder.append("KW2492 : 'KW' '2492';\n"); + grammarBuilder.append("KW2493 : 'KW' '2493';\n"); + grammarBuilder.append("KW2494 : 'KW' '2494';\n"); + grammarBuilder.append("KW2495 : 'KW' '2495';\n"); + grammarBuilder.append("KW2496 : 'KW' '2496';\n"); + grammarBuilder.append("KW2497 : 'KW' '2497';\n"); + grammarBuilder.append("KW2498 : 'KW' '2498';\n"); + grammarBuilder.append("KW2499 : 'KW' '2499';\n"); + grammarBuilder.append("KW2500 : 'KW' '2500';\n"); + grammarBuilder.append("KW2501 : 'KW' '2501';\n"); + grammarBuilder.append("KW2502 : 'KW' '2502';\n"); + grammarBuilder.append("KW2503 : 'KW' '2503';\n"); + grammarBuilder.append("KW2504 : 'KW' '2504';\n"); + grammarBuilder.append("KW2505 : 'KW' '2505';\n"); + grammarBuilder.append("KW2506 : 'KW' '2506';\n"); + grammarBuilder.append("KW2507 : 'KW' '2507';\n"); + grammarBuilder.append("KW2508 : 'KW' '2508';\n"); + grammarBuilder.append("KW2509 : 'KW' '2509';\n"); + grammarBuilder.append("KW2510 : 'KW' '2510';\n"); + grammarBuilder.append("KW2511 : 'KW' '2511';\n"); + grammarBuilder.append("KW2512 : 'KW' '2512';\n"); + grammarBuilder.append("KW2513 : 'KW' '2513';\n"); + grammarBuilder.append("KW2514 : 'KW' '2514';\n"); + grammarBuilder.append("KW2515 : 'KW' '2515';\n"); + grammarBuilder.append("KW2516 : 'KW' '2516';\n"); + grammarBuilder.append("KW2517 : 'KW' '2517';\n"); + grammarBuilder.append("KW2518 : 'KW' '2518';\n"); + grammarBuilder.append("KW2519 : 'KW' '2519';\n"); + grammarBuilder.append("KW2520 : 'KW' '2520';\n"); + grammarBuilder.append("KW2521 : 'KW' '2521';\n"); + grammarBuilder.append("KW2522 : 'KW' '2522';\n"); + grammarBuilder.append("KW2523 : 'KW' '2523';\n"); + grammarBuilder.append("KW2524 : 'KW' '2524';\n"); + grammarBuilder.append("KW2525 : 'KW' '2525';\n"); + grammarBuilder.append("KW2526 : 'KW' '2526';\n"); + grammarBuilder.append("KW2527 : 'KW' '2527';\n"); + grammarBuilder.append("KW2528 : 'KW' '2528';\n"); + grammarBuilder.append("KW2529 : 'KW' '2529';\n"); + grammarBuilder.append("KW2530 : 'KW' '2530';\n"); + grammarBuilder.append("KW2531 : 'KW' '2531';\n"); + grammarBuilder.append("KW2532 : 'KW' '2532';\n"); + grammarBuilder.append("KW2533 : 'KW' '2533';\n"); + grammarBuilder.append("KW2534 : 'KW' '2534';\n"); + grammarBuilder.append("KW2535 : 'KW' '2535';\n"); + grammarBuilder.append("KW2536 : 'KW' '2536';\n"); + grammarBuilder.append("KW2537 : 'KW' '2537';\n"); + grammarBuilder.append("KW2538 : 'KW' '2538';\n"); + grammarBuilder.append("KW2539 : 'KW' '2539';\n"); + grammarBuilder.append("KW2540 : 'KW' '2540';\n"); + grammarBuilder.append("KW2541 : 'KW' '2541';\n"); + grammarBuilder.append("KW2542 : 'KW' '2542';\n"); + grammarBuilder.append("KW2543 : 'KW' '2543';\n"); + grammarBuilder.append("KW2544 : 'KW' '2544';\n"); + grammarBuilder.append("KW2545 : 'KW' '2545';\n"); + grammarBuilder.append("KW2546 : 'KW' '2546';\n"); + grammarBuilder.append("KW2547 : 'KW' '2547';\n"); + grammarBuilder.append("KW2548 : 'KW' '2548';\n"); + grammarBuilder.append("KW2549 : 'KW' '2549';\n"); + grammarBuilder.append("KW2550 : 'KW' '2550';\n"); + grammarBuilder.append("KW2551 : 'KW' '2551';\n"); + grammarBuilder.append("KW2552 : 'KW' '2552';\n"); + grammarBuilder.append("KW2553 : 'KW' '2553';\n"); + grammarBuilder.append("KW2554 : 'KW' '2554';\n"); + grammarBuilder.append("KW2555 : 'KW' '2555';\n"); + grammarBuilder.append("KW2556 : 'KW' '2556';\n"); + grammarBuilder.append("KW2557 : 'KW' '2557';\n"); + grammarBuilder.append("KW2558 : 'KW' '2558';\n"); + grammarBuilder.append("KW2559 : 'KW' '2559';\n"); + grammarBuilder.append("KW2560 : 'KW' '2560';\n"); + grammarBuilder.append("KW2561 : 'KW' '2561';\n"); + grammarBuilder.append("KW2562 : 'KW' '2562';\n"); + grammarBuilder.append("KW2563 : 'KW' '2563';\n"); + grammarBuilder.append("KW2564 : 'KW' '2564';\n"); + grammarBuilder.append("KW2565 : 'KW' '2565';\n"); + grammarBuilder.append("KW2566 : 'KW' '2566';\n"); + grammarBuilder.append("KW2567 : 'KW' '2567';\n"); + grammarBuilder.append("KW2568 : 'KW' '2568';\n"); + grammarBuilder.append("KW2569 : 'KW' '2569';\n"); + grammarBuilder.append("KW2570 : 'KW' '2570';\n"); + grammarBuilder.append("KW2571 : 'KW' '2571';\n"); + grammarBuilder.append("KW2572 : 'KW' '2572';\n"); + grammarBuilder.append("KW2573 : 'KW' '2573';\n"); + grammarBuilder.append("KW2574 : 'KW' '2574';\n"); + grammarBuilder.append("KW2575 : 'KW' '2575';\n"); + grammarBuilder.append("KW2576 : 'KW' '2576';\n"); + grammarBuilder.append("KW2577 : 'KW' '2577';\n"); + grammarBuilder.append("KW2578 : 'KW' '2578';\n"); + grammarBuilder.append("KW2579 : 'KW' '2579';\n"); + grammarBuilder.append("KW2580 : 'KW' '2580';\n"); + grammarBuilder.append("KW2581 : 'KW' '2581';\n"); + grammarBuilder.append("KW2582 : 'KW' '2582';\n"); + grammarBuilder.append("KW2583 : 'KW' '2583';\n"); + grammarBuilder.append("KW2584 : 'KW' '2584';\n"); + grammarBuilder.append("KW2585 : 'KW' '2585';\n"); + grammarBuilder.append("KW2586 : 'KW' '2586';\n"); + grammarBuilder.append("KW2587 : 'KW' '2587';\n"); + grammarBuilder.append("KW2588 : 'KW' '2588';\n"); + grammarBuilder.append("KW2589 : 'KW' '2589';\n"); + grammarBuilder.append("KW2590 : 'KW' '2590';\n"); + grammarBuilder.append("KW2591 : 'KW' '2591';\n"); + grammarBuilder.append("KW2592 : 'KW' '2592';\n"); + grammarBuilder.append("KW2593 : 'KW' '2593';\n"); + grammarBuilder.append("KW2594 : 'KW' '2594';\n"); + grammarBuilder.append("KW2595 : 'KW' '2595';\n"); + grammarBuilder.append("KW2596 : 'KW' '2596';\n"); + grammarBuilder.append("KW2597 : 'KW' '2597';\n"); + grammarBuilder.append("KW2598 : 'KW' '2598';\n"); + grammarBuilder.append("KW2599 : 'KW' '2599';\n"); + grammarBuilder.append("KW2600 : 'KW' '2600';\n"); + grammarBuilder.append("KW2601 : 'KW' '2601';\n"); + grammarBuilder.append("KW2602 : 'KW' '2602';\n"); + grammarBuilder.append("KW2603 : 'KW' '2603';\n"); + grammarBuilder.append("KW2604 : 'KW' '2604';\n"); + grammarBuilder.append("KW2605 : 'KW' '2605';\n"); + grammarBuilder.append("KW2606 : 'KW' '2606';\n"); + grammarBuilder.append("KW2607 : 'KW' '2607';\n"); + grammarBuilder.append("KW2608 : 'KW' '2608';\n"); + grammarBuilder.append("KW2609 : 'KW' '2609';\n"); + grammarBuilder.append("KW2610 : 'KW' '2610';\n"); + grammarBuilder.append("KW2611 : 'KW' '2611';\n"); + grammarBuilder.append("KW2612 : 'KW' '2612';\n"); + grammarBuilder.append("KW2613 : 'KW' '2613';\n"); + grammarBuilder.append("KW2614 : 'KW' '2614';\n"); + grammarBuilder.append("KW2615 : 'KW' '2615';\n"); + grammarBuilder.append("KW2616 : 'KW' '2616';\n"); + grammarBuilder.append("KW2617 : 'KW' '2617';\n"); + grammarBuilder.append("KW2618 : 'KW' '2618';\n"); + grammarBuilder.append("KW2619 : 'KW' '2619';\n"); + grammarBuilder.append("KW2620 : 'KW' '2620';\n"); + grammarBuilder.append("KW2621 : 'KW' '2621';\n"); + grammarBuilder.append("KW2622 : 'KW' '2622';\n"); + grammarBuilder.append("KW2623 : 'KW' '2623';\n"); + grammarBuilder.append("KW2624 : 'KW' '2624';\n"); + grammarBuilder.append("KW2625 : 'KW' '2625';\n"); + grammarBuilder.append("KW2626 : 'KW' '2626';\n"); + grammarBuilder.append("KW2627 : 'KW' '2627';\n"); + grammarBuilder.append("KW2628 : 'KW' '2628';\n"); + grammarBuilder.append("KW2629 : 'KW' '2629';\n"); + grammarBuilder.append("KW2630 : 'KW' '2630';\n"); + grammarBuilder.append("KW2631 : 'KW' '2631';\n"); + grammarBuilder.append("KW2632 : 'KW' '2632';\n"); + grammarBuilder.append("KW2633 : 'KW' '2633';\n"); + grammarBuilder.append("KW2634 : 'KW' '2634';\n"); + grammarBuilder.append("KW2635 : 'KW' '2635';\n"); + grammarBuilder.append("KW2636 : 'KW' '2636';\n"); + grammarBuilder.append("KW2637 : 'KW' '2637';\n"); + grammarBuilder.append("KW2638 : 'KW' '2638';\n"); + grammarBuilder.append("KW2639 : 'KW' '2639';\n"); + grammarBuilder.append("KW2640 : 'KW' '2640';\n"); + grammarBuilder.append("KW2641 : 'KW' '2641';\n"); + grammarBuilder.append("KW2642 : 'KW' '2642';\n"); + grammarBuilder.append("KW2643 : 'KW' '2643';\n"); + grammarBuilder.append("KW2644 : 'KW' '2644';\n"); + grammarBuilder.append("KW2645 : 'KW' '2645';\n"); + grammarBuilder.append("KW2646 : 'KW' '2646';\n"); + grammarBuilder.append("KW2647 : 'KW' '2647';\n"); + grammarBuilder.append("KW2648 : 'KW' '2648';\n"); + grammarBuilder.append("KW2649 : 'KW' '2649';\n"); + grammarBuilder.append("KW2650 : 'KW' '2650';\n"); + grammarBuilder.append("KW2651 : 'KW' '2651';\n"); + grammarBuilder.append("KW2652 : 'KW' '2652';\n"); + grammarBuilder.append("KW2653 : 'KW' '2653';\n"); + grammarBuilder.append("KW2654 : 'KW' '2654';\n"); + grammarBuilder.append("KW2655 : 'KW' '2655';\n"); + grammarBuilder.append("KW2656 : 'KW' '2656';\n"); + grammarBuilder.append("KW2657 : 'KW' '2657';\n"); + grammarBuilder.append("KW2658 : 'KW' '2658';\n"); + grammarBuilder.append("KW2659 : 'KW' '2659';\n"); + grammarBuilder.append("KW2660 : 'KW' '2660';\n"); + grammarBuilder.append("KW2661 : 'KW' '2661';\n"); + grammarBuilder.append("KW2662 : 'KW' '2662';\n"); + grammarBuilder.append("KW2663 : 'KW' '2663';\n"); + grammarBuilder.append("KW2664 : 'KW' '2664';\n"); + grammarBuilder.append("KW2665 : 'KW' '2665';\n"); + grammarBuilder.append("KW2666 : 'KW' '2666';\n"); + grammarBuilder.append("KW2667 : 'KW' '2667';\n"); + grammarBuilder.append("KW2668 : 'KW' '2668';\n"); + grammarBuilder.append("KW2669 : 'KW' '2669';\n"); + grammarBuilder.append("KW2670 : 'KW' '2670';\n"); + grammarBuilder.append("KW2671 : 'KW' '2671';\n"); + grammarBuilder.append("KW2672 : 'KW' '2672';\n"); + grammarBuilder.append("KW2673 : 'KW' '2673';\n"); + grammarBuilder.append("KW2674 : 'KW' '2674';\n"); + grammarBuilder.append("KW2675 : 'KW' '2675';\n"); + grammarBuilder.append("KW2676 : 'KW' '2676';\n"); + grammarBuilder.append("KW2677 : 'KW' '2677';\n"); + grammarBuilder.append("KW2678 : 'KW' '2678';\n"); + grammarBuilder.append("KW2679 : 'KW' '2679';\n"); + grammarBuilder.append("KW2680 : 'KW' '2680';\n"); + grammarBuilder.append("KW2681 : 'KW' '2681';\n"); + grammarBuilder.append("KW2682 : 'KW' '2682';\n"); + grammarBuilder.append("KW2683 : 'KW' '2683';\n"); + grammarBuilder.append("KW2684 : 'KW' '2684';\n"); + grammarBuilder.append("KW2685 : 'KW' '2685';\n"); + grammarBuilder.append("KW2686 : 'KW' '2686';\n"); + grammarBuilder.append("KW2687 : 'KW' '2687';\n"); + grammarBuilder.append("KW2688 : 'KW' '2688';\n"); + grammarBuilder.append("KW2689 : 'KW' '2689';\n"); + grammarBuilder.append("KW2690 : 'KW' '2690';\n"); + grammarBuilder.append("KW2691 : 'KW' '2691';\n"); + grammarBuilder.append("KW2692 : 'KW' '2692';\n"); + grammarBuilder.append("KW2693 : 'KW' '2693';\n"); + grammarBuilder.append("KW2694 : 'KW' '2694';\n"); + grammarBuilder.append("KW2695 : 'KW' '2695';\n"); + grammarBuilder.append("KW2696 : 'KW' '2696';\n"); + grammarBuilder.append("KW2697 : 'KW' '2697';\n"); + grammarBuilder.append("KW2698 : 'KW' '2698';\n"); + grammarBuilder.append("KW2699 : 'KW' '2699';\n"); + grammarBuilder.append("KW2700 : 'KW' '2700';\n"); + grammarBuilder.append("KW2701 : 'KW' '2701';\n"); + grammarBuilder.append("KW2702 : 'KW' '2702';\n"); + grammarBuilder.append("KW2703 : 'KW' '2703';\n"); + grammarBuilder.append("KW2704 : 'KW' '2704';\n"); + grammarBuilder.append("KW2705 : 'KW' '2705';\n"); + grammarBuilder.append("KW2706 : 'KW' '2706';\n"); + grammarBuilder.append("KW2707 : 'KW' '2707';\n"); + grammarBuilder.append("KW2708 : 'KW' '2708';\n"); + grammarBuilder.append("KW2709 : 'KW' '2709';\n"); + grammarBuilder.append("KW2710 : 'KW' '2710';\n"); + grammarBuilder.append("KW2711 : 'KW' '2711';\n"); + grammarBuilder.append("KW2712 : 'KW' '2712';\n"); + grammarBuilder.append("KW2713 : 'KW' '2713';\n"); + grammarBuilder.append("KW2714 : 'KW' '2714';\n"); + grammarBuilder.append("KW2715 : 'KW' '2715';\n"); + grammarBuilder.append("KW2716 : 'KW' '2716';\n"); + grammarBuilder.append("KW2717 : 'KW' '2717';\n"); + grammarBuilder.append("KW2718 : 'KW' '2718';\n"); + grammarBuilder.append("KW2719 : 'KW' '2719';\n"); + grammarBuilder.append("KW2720 : 'KW' '2720';\n"); + grammarBuilder.append("KW2721 : 'KW' '2721';\n"); + grammarBuilder.append("KW2722 : 'KW' '2722';\n"); + grammarBuilder.append("KW2723 : 'KW' '2723';\n"); + grammarBuilder.append("KW2724 : 'KW' '2724';\n"); + grammarBuilder.append("KW2725 : 'KW' '2725';\n"); + grammarBuilder.append("KW2726 : 'KW' '2726';\n"); + grammarBuilder.append("KW2727 : 'KW' '2727';\n"); + grammarBuilder.append("KW2728 : 'KW' '2728';\n"); + grammarBuilder.append("KW2729 : 'KW' '2729';\n"); + grammarBuilder.append("KW2730 : 'KW' '2730';\n"); + grammarBuilder.append("KW2731 : 'KW' '2731';\n"); + grammarBuilder.append("KW2732 : 'KW' '2732';\n"); + grammarBuilder.append("KW2733 : 'KW' '2733';\n"); + grammarBuilder.append("KW2734 : 'KW' '2734';\n"); + grammarBuilder.append("KW2735 : 'KW' '2735';\n"); + grammarBuilder.append("KW2736 : 'KW' '2736';\n"); + grammarBuilder.append("KW2737 : 'KW' '2737';\n"); + grammarBuilder.append("KW2738 : 'KW' '2738';\n"); + grammarBuilder.append("KW2739 : 'KW' '2739';\n"); + grammarBuilder.append("KW2740 : 'KW' '2740';\n"); + grammarBuilder.append("KW2741 : 'KW' '2741';\n"); + grammarBuilder.append("KW2742 : 'KW' '2742';\n"); + grammarBuilder.append("KW2743 : 'KW' '2743';\n"); + grammarBuilder.append("KW2744 : 'KW' '2744';\n"); + grammarBuilder.append("KW2745 : 'KW' '2745';\n"); + grammarBuilder.append("KW2746 : 'KW' '2746';\n"); + grammarBuilder.append("KW2747 : 'KW' '2747';\n"); + grammarBuilder.append("KW2748 : 'KW' '2748';\n"); + grammarBuilder.append("KW2749 : 'KW' '2749';\n"); + grammarBuilder.append("KW2750 : 'KW' '2750';\n"); + grammarBuilder.append("KW2751 : 'KW' '2751';\n"); + grammarBuilder.append("KW2752 : 'KW' '2752';\n"); + grammarBuilder.append("KW2753 : 'KW' '2753';\n"); + grammarBuilder.append("KW2754 : 'KW' '2754';\n"); + grammarBuilder.append("KW2755 : 'KW' '2755';\n"); + grammarBuilder.append("KW2756 : 'KW' '2756';\n"); + grammarBuilder.append("KW2757 : 'KW' '2757';\n"); + grammarBuilder.append("KW2758 : 'KW' '2758';\n"); + grammarBuilder.append("KW2759 : 'KW' '2759';\n"); + grammarBuilder.append("KW2760 : 'KW' '2760';\n"); + grammarBuilder.append("KW2761 : 'KW' '2761';\n"); + grammarBuilder.append("KW2762 : 'KW' '2762';\n"); + grammarBuilder.append("KW2763 : 'KW' '2763';\n"); + grammarBuilder.append("KW2764 : 'KW' '2764';\n"); + grammarBuilder.append("KW2765 : 'KW' '2765';\n"); + grammarBuilder.append("KW2766 : 'KW' '2766';\n"); + grammarBuilder.append("KW2767 : 'KW' '2767';\n"); + grammarBuilder.append("KW2768 : 'KW' '2768';\n"); + grammarBuilder.append("KW2769 : 'KW' '2769';\n"); + grammarBuilder.append("KW2770 : 'KW' '2770';\n"); + grammarBuilder.append("KW2771 : 'KW' '2771';\n"); + grammarBuilder.append("KW2772 : 'KW' '2772';\n"); + grammarBuilder.append("KW2773 : 'KW' '2773';\n"); + grammarBuilder.append("KW2774 : 'KW' '2774';\n"); + grammarBuilder.append("KW2775 : 'KW' '2775';\n"); + grammarBuilder.append("KW2776 : 'KW' '2776';\n"); + grammarBuilder.append("KW2777 : 'KW' '2777';\n"); + grammarBuilder.append("KW2778 : 'KW' '2778';\n"); + grammarBuilder.append("KW2779 : 'KW' '2779';\n"); + grammarBuilder.append("KW2780 : 'KW' '2780';\n"); + grammarBuilder.append("KW2781 : 'KW' '2781';\n"); + grammarBuilder.append("KW2782 : 'KW' '2782';\n"); + grammarBuilder.append("KW2783 : 'KW' '2783';\n"); + grammarBuilder.append("KW2784 : 'KW' '2784';\n"); + grammarBuilder.append("KW2785 : 'KW' '2785';\n"); + grammarBuilder.append("KW2786 : 'KW' '2786';\n"); + grammarBuilder.append("KW2787 : 'KW' '2787';\n"); + grammarBuilder.append("KW2788 : 'KW' '2788';\n"); + grammarBuilder.append("KW2789 : 'KW' '2789';\n"); + grammarBuilder.append("KW2790 : 'KW' '2790';\n"); + grammarBuilder.append("KW2791 : 'KW' '2791';\n"); + grammarBuilder.append("KW2792 : 'KW' '2792';\n"); + grammarBuilder.append("KW2793 : 'KW' '2793';\n"); + grammarBuilder.append("KW2794 : 'KW' '2794';\n"); + grammarBuilder.append("KW2795 : 'KW' '2795';\n"); + grammarBuilder.append("KW2796 : 'KW' '2796';\n"); + grammarBuilder.append("KW2797 : 'KW' '2797';\n"); + grammarBuilder.append("KW2798 : 'KW' '2798';\n"); + grammarBuilder.append("KW2799 : 'KW' '2799';\n"); + grammarBuilder.append("KW2800 : 'KW' '2800';\n"); + grammarBuilder.append("KW2801 : 'KW' '2801';\n"); + grammarBuilder.append("KW2802 : 'KW' '2802';\n"); + grammarBuilder.append("KW2803 : 'KW' '2803';\n"); + grammarBuilder.append("KW2804 : 'KW' '2804';\n"); + grammarBuilder.append("KW2805 : 'KW' '2805';\n"); + grammarBuilder.append("KW2806 : 'KW' '2806';\n"); + grammarBuilder.append("KW2807 : 'KW' '2807';\n"); + grammarBuilder.append("KW2808 : 'KW' '2808';\n"); + grammarBuilder.append("KW2809 : 'KW' '2809';\n"); + grammarBuilder.append("KW2810 : 'KW' '2810';\n"); + grammarBuilder.append("KW2811 : 'KW' '2811';\n"); + grammarBuilder.append("KW2812 : 'KW' '2812';\n"); + grammarBuilder.append("KW2813 : 'KW' '2813';\n"); + grammarBuilder.append("KW2814 : 'KW' '2814';\n"); + grammarBuilder.append("KW2815 : 'KW' '2815';\n"); + grammarBuilder.append("KW2816 : 'KW' '2816';\n"); + grammarBuilder.append("KW2817 : 'KW' '2817';\n"); + grammarBuilder.append("KW2818 : 'KW' '2818';\n"); + grammarBuilder.append("KW2819 : 'KW' '2819';\n"); + grammarBuilder.append("KW2820 : 'KW' '2820';\n"); + grammarBuilder.append("KW2821 : 'KW' '2821';\n"); + grammarBuilder.append("KW2822 : 'KW' '2822';\n"); + grammarBuilder.append("KW2823 : 'KW' '2823';\n"); + grammarBuilder.append("KW2824 : 'KW' '2824';\n"); + grammarBuilder.append("KW2825 : 'KW' '2825';\n"); + grammarBuilder.append("KW2826 : 'KW' '2826';\n"); + grammarBuilder.append("KW2827 : 'KW' '2827';\n"); + grammarBuilder.append("KW2828 : 'KW' '2828';\n"); + grammarBuilder.append("KW2829 : 'KW' '2829';\n"); + grammarBuilder.append("KW2830 : 'KW' '2830';\n"); + grammarBuilder.append("KW2831 : 'KW' '2831';\n"); + grammarBuilder.append("KW2832 : 'KW' '2832';\n"); + grammarBuilder.append("KW2833 : 'KW' '2833';\n"); + grammarBuilder.append("KW2834 : 'KW' '2834';\n"); + grammarBuilder.append("KW2835 : 'KW' '2835';\n"); + grammarBuilder.append("KW2836 : 'KW' '2836';\n"); + grammarBuilder.append("KW2837 : 'KW' '2837';\n"); + grammarBuilder.append("KW2838 : 'KW' '2838';\n"); + grammarBuilder.append("KW2839 : 'KW' '2839';\n"); + grammarBuilder.append("KW2840 : 'KW' '2840';\n"); + grammarBuilder.append("KW2841 : 'KW' '2841';\n"); + grammarBuilder.append("KW2842 : 'KW' '2842';\n"); + grammarBuilder.append("KW2843 : 'KW' '2843';\n"); + grammarBuilder.append("KW2844 : 'KW' '2844';\n"); + grammarBuilder.append("KW2845 : 'KW' '2845';\n"); + grammarBuilder.append("KW2846 : 'KW' '2846';\n"); + grammarBuilder.append("KW2847 : 'KW' '2847';\n"); + grammarBuilder.append("KW2848 : 'KW' '2848';\n"); + grammarBuilder.append("KW2849 : 'KW' '2849';\n"); + grammarBuilder.append("KW2850 : 'KW' '2850';\n"); + grammarBuilder.append("KW2851 : 'KW' '2851';\n"); + grammarBuilder.append("KW2852 : 'KW' '2852';\n"); + grammarBuilder.append("KW2853 : 'KW' '2853';\n"); + grammarBuilder.append("KW2854 : 'KW' '2854';\n"); + grammarBuilder.append("KW2855 : 'KW' '2855';\n"); + grammarBuilder.append("KW2856 : 'KW' '2856';\n"); + grammarBuilder.append("KW2857 : 'KW' '2857';\n"); + grammarBuilder.append("KW2858 : 'KW' '2858';\n"); + grammarBuilder.append("KW2859 : 'KW' '2859';\n"); + grammarBuilder.append("KW2860 : 'KW' '2860';\n"); + grammarBuilder.append("KW2861 : 'KW' '2861';\n"); + grammarBuilder.append("KW2862 : 'KW' '2862';\n"); + grammarBuilder.append("KW2863 : 'KW' '2863';\n"); + grammarBuilder.append("KW2864 : 'KW' '2864';\n"); + grammarBuilder.append("KW2865 : 'KW' '2865';\n"); + grammarBuilder.append("KW2866 : 'KW' '2866';\n"); + grammarBuilder.append("KW2867 : 'KW' '2867';\n"); + grammarBuilder.append("KW2868 : 'KW' '2868';\n"); + grammarBuilder.append("KW2869 : 'KW' '2869';\n"); + grammarBuilder.append("KW2870 : 'KW' '2870';\n"); + grammarBuilder.append("KW2871 : 'KW' '2871';\n"); + grammarBuilder.append("KW2872 : 'KW' '2872';\n"); + grammarBuilder.append("KW2873 : 'KW' '2873';\n"); + grammarBuilder.append("KW2874 : 'KW' '2874';\n"); + grammarBuilder.append("KW2875 : 'KW' '2875';\n"); + grammarBuilder.append("KW2876 : 'KW' '2876';\n"); + grammarBuilder.append("KW2877 : 'KW' '2877';\n"); + grammarBuilder.append("KW2878 : 'KW' '2878';\n"); + grammarBuilder.append("KW2879 : 'KW' '2879';\n"); + grammarBuilder.append("KW2880 : 'KW' '2880';\n"); + grammarBuilder.append("KW2881 : 'KW' '2881';\n"); + grammarBuilder.append("KW2882 : 'KW' '2882';\n"); + grammarBuilder.append("KW2883 : 'KW' '2883';\n"); + grammarBuilder.append("KW2884 : 'KW' '2884';\n"); + grammarBuilder.append("KW2885 : 'KW' '2885';\n"); + grammarBuilder.append("KW2886 : 'KW' '2886';\n"); + grammarBuilder.append("KW2887 : 'KW' '2887';\n"); + grammarBuilder.append("KW2888 : 'KW' '2888';\n"); + grammarBuilder.append("KW2889 : 'KW' '2889';\n"); + grammarBuilder.append("KW2890 : 'KW' '2890';\n"); + grammarBuilder.append("KW2891 : 'KW' '2891';\n"); + grammarBuilder.append("KW2892 : 'KW' '2892';\n"); + grammarBuilder.append("KW2893 : 'KW' '2893';\n"); + grammarBuilder.append("KW2894 : 'KW' '2894';\n"); + grammarBuilder.append("KW2895 : 'KW' '2895';\n"); + grammarBuilder.append("KW2896 : 'KW' '2896';\n"); + grammarBuilder.append("KW2897 : 'KW' '2897';\n"); + grammarBuilder.append("KW2898 : 'KW' '2898';\n"); + grammarBuilder.append("KW2899 : 'KW' '2899';\n"); + grammarBuilder.append("KW2900 : 'KW' '2900';\n"); + grammarBuilder.append("KW2901 : 'KW' '2901';\n"); + grammarBuilder.append("KW2902 : 'KW' '2902';\n"); + grammarBuilder.append("KW2903 : 'KW' '2903';\n"); + grammarBuilder.append("KW2904 : 'KW' '2904';\n"); + grammarBuilder.append("KW2905 : 'KW' '2905';\n"); + grammarBuilder.append("KW2906 : 'KW' '2906';\n"); + grammarBuilder.append("KW2907 : 'KW' '2907';\n"); + grammarBuilder.append("KW2908 : 'KW' '2908';\n"); + grammarBuilder.append("KW2909 : 'KW' '2909';\n"); + grammarBuilder.append("KW2910 : 'KW' '2910';\n"); + grammarBuilder.append("KW2911 : 'KW' '2911';\n"); + grammarBuilder.append("KW2912 : 'KW' '2912';\n"); + grammarBuilder.append("KW2913 : 'KW' '2913';\n"); + grammarBuilder.append("KW2914 : 'KW' '2914';\n"); + grammarBuilder.append("KW2915 : 'KW' '2915';\n"); + grammarBuilder.append("KW2916 : 'KW' '2916';\n"); + grammarBuilder.append("KW2917 : 'KW' '2917';\n"); + grammarBuilder.append("KW2918 : 'KW' '2918';\n"); + grammarBuilder.append("KW2919 : 'KW' '2919';\n"); + grammarBuilder.append("KW2920 : 'KW' '2920';\n"); + grammarBuilder.append("KW2921 : 'KW' '2921';\n"); + grammarBuilder.append("KW2922 : 'KW' '2922';\n"); + grammarBuilder.append("KW2923 : 'KW' '2923';\n"); + grammarBuilder.append("KW2924 : 'KW' '2924';\n"); + grammarBuilder.append("KW2925 : 'KW' '2925';\n"); + grammarBuilder.append("KW2926 : 'KW' '2926';\n"); + grammarBuilder.append("KW2927 : 'KW' '2927';\n"); + grammarBuilder.append("KW2928 : 'KW' '2928';\n"); + grammarBuilder.append("KW2929 : 'KW' '2929';\n"); + grammarBuilder.append("KW2930 : 'KW' '2930';\n"); + grammarBuilder.append("KW2931 : 'KW' '2931';\n"); + grammarBuilder.append("KW2932 : 'KW' '2932';\n"); + grammarBuilder.append("KW2933 : 'KW' '2933';\n"); + grammarBuilder.append("KW2934 : 'KW' '2934';\n"); + grammarBuilder.append("KW2935 : 'KW' '2935';\n"); + grammarBuilder.append("KW2936 : 'KW' '2936';\n"); + grammarBuilder.append("KW2937 : 'KW' '2937';\n"); + grammarBuilder.append("KW2938 : 'KW' '2938';\n"); + grammarBuilder.append("KW2939 : 'KW' '2939';\n"); + grammarBuilder.append("KW2940 : 'KW' '2940';\n"); + grammarBuilder.append("KW2941 : 'KW' '2941';\n"); + grammarBuilder.append("KW2942 : 'KW' '2942';\n"); + grammarBuilder.append("KW2943 : 'KW' '2943';\n"); + grammarBuilder.append("KW2944 : 'KW' '2944';\n"); + grammarBuilder.append("KW2945 : 'KW' '2945';\n"); + grammarBuilder.append("KW2946 : 'KW' '2946';\n"); + grammarBuilder.append("KW2947 : 'KW' '2947';\n"); + grammarBuilder.append("KW2948 : 'KW' '2948';\n"); + grammarBuilder.append("KW2949 : 'KW' '2949';\n"); + grammarBuilder.append("KW2950 : 'KW' '2950';\n"); + grammarBuilder.append("KW2951 : 'KW' '2951';\n"); + grammarBuilder.append("KW2952 : 'KW' '2952';\n"); + grammarBuilder.append("KW2953 : 'KW' '2953';\n"); + grammarBuilder.append("KW2954 : 'KW' '2954';\n"); + grammarBuilder.append("KW2955 : 'KW' '2955';\n"); + grammarBuilder.append("KW2956 : 'KW' '2956';\n"); + grammarBuilder.append("KW2957 : 'KW' '2957';\n"); + grammarBuilder.append("KW2958 : 'KW' '2958';\n"); + grammarBuilder.append("KW2959 : 'KW' '2959';\n"); + grammarBuilder.append("KW2960 : 'KW' '2960';\n"); + grammarBuilder.append("KW2961 : 'KW' '2961';\n"); + grammarBuilder.append("KW2962 : 'KW' '2962';\n"); + grammarBuilder.append("KW2963 : 'KW' '2963';\n"); + grammarBuilder.append("KW2964 : 'KW' '2964';\n"); + grammarBuilder.append("KW2965 : 'KW' '2965';\n"); + grammarBuilder.append("KW2966 : 'KW' '2966';\n"); + grammarBuilder.append("KW2967 : 'KW' '2967';\n"); + grammarBuilder.append("KW2968 : 'KW' '2968';\n"); + grammarBuilder.append("KW2969 : 'KW' '2969';\n"); + grammarBuilder.append("KW2970 : 'KW' '2970';\n"); + grammarBuilder.append("KW2971 : 'KW' '2971';\n"); + grammarBuilder.append("KW2972 : 'KW' '2972';\n"); + grammarBuilder.append("KW2973 : 'KW' '2973';\n"); + grammarBuilder.append("KW2974 : 'KW' '2974';\n"); + grammarBuilder.append("KW2975 : 'KW' '2975';\n"); + grammarBuilder.append("KW2976 : 'KW' '2976';\n"); + grammarBuilder.append("KW2977 : 'KW' '2977';\n"); + grammarBuilder.append("KW2978 : 'KW' '2978';\n"); + grammarBuilder.append("KW2979 : 'KW' '2979';\n"); + grammarBuilder.append("KW2980 : 'KW' '2980';\n"); + grammarBuilder.append("KW2981 : 'KW' '2981';\n"); + grammarBuilder.append("KW2982 : 'KW' '2982';\n"); + grammarBuilder.append("KW2983 : 'KW' '2983';\n"); + grammarBuilder.append("KW2984 : 'KW' '2984';\n"); + grammarBuilder.append("KW2985 : 'KW' '2985';\n"); + grammarBuilder.append("KW2986 : 'KW' '2986';\n"); + grammarBuilder.append("KW2987 : 'KW' '2987';\n"); + grammarBuilder.append("KW2988 : 'KW' '2988';\n"); + grammarBuilder.append("KW2989 : 'KW' '2989';\n"); + grammarBuilder.append("KW2990 : 'KW' '2990';\n"); + grammarBuilder.append("KW2991 : 'KW' '2991';\n"); + grammarBuilder.append("KW2992 : 'KW' '2992';\n"); + grammarBuilder.append("KW2993 : 'KW' '2993';\n"); + grammarBuilder.append("KW2994 : 'KW' '2994';\n"); + grammarBuilder.append("KW2995 : 'KW' '2995';\n"); + grammarBuilder.append("KW2996 : 'KW' '2996';\n"); + grammarBuilder.append("KW2997 : 'KW' '2997';\n"); + grammarBuilder.append("KW2998 : 'KW' '2998';\n"); + grammarBuilder.append("KW2999 : 'KW' '2999';\n"); + grammarBuilder.append("KW3000 : 'KW' '3000';\n"); + grammarBuilder.append("KW3001 : 'KW' '3001';\n"); + grammarBuilder.append("KW3002 : 'KW' '3002';\n"); + grammarBuilder.append("KW3003 : 'KW' '3003';\n"); + grammarBuilder.append("KW3004 : 'KW' '3004';\n"); + grammarBuilder.append("KW3005 : 'KW' '3005';\n"); + grammarBuilder.append("KW3006 : 'KW' '3006';\n"); + grammarBuilder.append("KW3007 : 'KW' '3007';\n"); + grammarBuilder.append("KW3008 : 'KW' '3008';\n"); + grammarBuilder.append("KW3009 : 'KW' '3009';\n"); + grammarBuilder.append("KW3010 : 'KW' '3010';\n"); + grammarBuilder.append("KW3011 : 'KW' '3011';\n"); + grammarBuilder.append("KW3012 : 'KW' '3012';\n"); + grammarBuilder.append("KW3013 : 'KW' '3013';\n"); + grammarBuilder.append("KW3014 : 'KW' '3014';\n"); + grammarBuilder.append("KW3015 : 'KW' '3015';\n"); + grammarBuilder.append("KW3016 : 'KW' '3016';\n"); + grammarBuilder.append("KW3017 : 'KW' '3017';\n"); + grammarBuilder.append("KW3018 : 'KW' '3018';\n"); + grammarBuilder.append("KW3019 : 'KW' '3019';\n"); + grammarBuilder.append("KW3020 : 'KW' '3020';\n"); + grammarBuilder.append("KW3021 : 'KW' '3021';\n"); + grammarBuilder.append("KW3022 : 'KW' '3022';\n"); + grammarBuilder.append("KW3023 : 'KW' '3023';\n"); + grammarBuilder.append("KW3024 : 'KW' '3024';\n"); + grammarBuilder.append("KW3025 : 'KW' '3025';\n"); + grammarBuilder.append("KW3026 : 'KW' '3026';\n"); + grammarBuilder.append("KW3027 : 'KW' '3027';\n"); + grammarBuilder.append("KW3028 : 'KW' '3028';\n"); + grammarBuilder.append("KW3029 : 'KW' '3029';\n"); + grammarBuilder.append("KW3030 : 'KW' '3030';\n"); + grammarBuilder.append("KW3031 : 'KW' '3031';\n"); + grammarBuilder.append("KW3032 : 'KW' '3032';\n"); + grammarBuilder.append("KW3033 : 'KW' '3033';\n"); + grammarBuilder.append("KW3034 : 'KW' '3034';\n"); + grammarBuilder.append("KW3035 : 'KW' '3035';\n"); + grammarBuilder.append("KW3036 : 'KW' '3036';\n"); + grammarBuilder.append("KW3037 : 'KW' '3037';\n"); + grammarBuilder.append("KW3038 : 'KW' '3038';\n"); + grammarBuilder.append("KW3039 : 'KW' '3039';\n"); + grammarBuilder.append("KW3040 : 'KW' '3040';\n"); + grammarBuilder.append("KW3041 : 'KW' '3041';\n"); + grammarBuilder.append("KW3042 : 'KW' '3042';\n"); + grammarBuilder.append("KW3043 : 'KW' '3043';\n"); + grammarBuilder.append("KW3044 : 'KW' '3044';\n"); + grammarBuilder.append("KW3045 : 'KW' '3045';\n"); + grammarBuilder.append("KW3046 : 'KW' '3046';\n"); + grammarBuilder.append("KW3047 : 'KW' '3047';\n"); + grammarBuilder.append("KW3048 : 'KW' '3048';\n"); + grammarBuilder.append("KW3049 : 'KW' '3049';\n"); + grammarBuilder.append("KW3050 : 'KW' '3050';\n"); + grammarBuilder.append("KW3051 : 'KW' '3051';\n"); + grammarBuilder.append("KW3052 : 'KW' '3052';\n"); + grammarBuilder.append("KW3053 : 'KW' '3053';\n"); + grammarBuilder.append("KW3054 : 'KW' '3054';\n"); + grammarBuilder.append("KW3055 : 'KW' '3055';\n"); + grammarBuilder.append("KW3056 : 'KW' '3056';\n"); + grammarBuilder.append("KW3057 : 'KW' '3057';\n"); + grammarBuilder.append("KW3058 : 'KW' '3058';\n"); + grammarBuilder.append("KW3059 : 'KW' '3059';\n"); + grammarBuilder.append("KW3060 : 'KW' '3060';\n"); + grammarBuilder.append("KW3061 : 'KW' '3061';\n"); + grammarBuilder.append("KW3062 : 'KW' '3062';\n"); + grammarBuilder.append("KW3063 : 'KW' '3063';\n"); + grammarBuilder.append("KW3064 : 'KW' '3064';\n"); + grammarBuilder.append("KW3065 : 'KW' '3065';\n"); + grammarBuilder.append("KW3066 : 'KW' '3066';\n"); + grammarBuilder.append("KW3067 : 'KW' '3067';\n"); + grammarBuilder.append("KW3068 : 'KW' '3068';\n"); + grammarBuilder.append("KW3069 : 'KW' '3069';\n"); + grammarBuilder.append("KW3070 : 'KW' '3070';\n"); + grammarBuilder.append("KW3071 : 'KW' '3071';\n"); + grammarBuilder.append("KW3072 : 'KW' '3072';\n"); + grammarBuilder.append("KW3073 : 'KW' '3073';\n"); + grammarBuilder.append("KW3074 : 'KW' '3074';\n"); + grammarBuilder.append("KW3075 : 'KW' '3075';\n"); + grammarBuilder.append("KW3076 : 'KW' '3076';\n"); + grammarBuilder.append("KW3077 : 'KW' '3077';\n"); + grammarBuilder.append("KW3078 : 'KW' '3078';\n"); + grammarBuilder.append("KW3079 : 'KW' '3079';\n"); + grammarBuilder.append("KW3080 : 'KW' '3080';\n"); + grammarBuilder.append("KW3081 : 'KW' '3081';\n"); + grammarBuilder.append("KW3082 : 'KW' '3082';\n"); + grammarBuilder.append("KW3083 : 'KW' '3083';\n"); + grammarBuilder.append("KW3084 : 'KW' '3084';\n"); + grammarBuilder.append("KW3085 : 'KW' '3085';\n"); + grammarBuilder.append("KW3086 : 'KW' '3086';\n"); + grammarBuilder.append("KW3087 : 'KW' '3087';\n"); + grammarBuilder.append("KW3088 : 'KW' '3088';\n"); + grammarBuilder.append("KW3089 : 'KW' '3089';\n"); + grammarBuilder.append("KW3090 : 'KW' '3090';\n"); + grammarBuilder.append("KW3091 : 'KW' '3091';\n"); + grammarBuilder.append("KW3092 : 'KW' '3092';\n"); + grammarBuilder.append("KW3093 : 'KW' '3093';\n"); + grammarBuilder.append("KW3094 : 'KW' '3094';\n"); + grammarBuilder.append("KW3095 : 'KW' '3095';\n"); + grammarBuilder.append("KW3096 : 'KW' '3096';\n"); + grammarBuilder.append("KW3097 : 'KW' '3097';\n"); + grammarBuilder.append("KW3098 : 'KW' '3098';\n"); + grammarBuilder.append("KW3099 : 'KW' '3099';\n"); + grammarBuilder.append("KW3100 : 'KW' '3100';\n"); + grammarBuilder.append("KW3101 : 'KW' '3101';\n"); + grammarBuilder.append("KW3102 : 'KW' '3102';\n"); + grammarBuilder.append("KW3103 : 'KW' '3103';\n"); + grammarBuilder.append("KW3104 : 'KW' '3104';\n"); + grammarBuilder.append("KW3105 : 'KW' '3105';\n"); + grammarBuilder.append("KW3106 : 'KW' '3106';\n"); + grammarBuilder.append("KW3107 : 'KW' '3107';\n"); + grammarBuilder.append("KW3108 : 'KW' '3108';\n"); + grammarBuilder.append("KW3109 : 'KW' '3109';\n"); + grammarBuilder.append("KW3110 : 'KW' '3110';\n"); + grammarBuilder.append("KW3111 : 'KW' '3111';\n"); + grammarBuilder.append("KW3112 : 'KW' '3112';\n"); + grammarBuilder.append("KW3113 : 'KW' '3113';\n"); + grammarBuilder.append("KW3114 : 'KW' '3114';\n"); + grammarBuilder.append("KW3115 : 'KW' '3115';\n"); + grammarBuilder.append("KW3116 : 'KW' '3116';\n"); + grammarBuilder.append("KW3117 : 'KW' '3117';\n"); + grammarBuilder.append("KW3118 : 'KW' '3118';\n"); + grammarBuilder.append("KW3119 : 'KW' '3119';\n"); + grammarBuilder.append("KW3120 : 'KW' '3120';\n"); + grammarBuilder.append("KW3121 : 'KW' '3121';\n"); + grammarBuilder.append("KW3122 : 'KW' '3122';\n"); + grammarBuilder.append("KW3123 : 'KW' '3123';\n"); + grammarBuilder.append("KW3124 : 'KW' '3124';\n"); + grammarBuilder.append("KW3125 : 'KW' '3125';\n"); + grammarBuilder.append("KW3126 : 'KW' '3126';\n"); + grammarBuilder.append("KW3127 : 'KW' '3127';\n"); + grammarBuilder.append("KW3128 : 'KW' '3128';\n"); + grammarBuilder.append("KW3129 : 'KW' '3129';\n"); + grammarBuilder.append("KW3130 : 'KW' '3130';\n"); + grammarBuilder.append("KW3131 : 'KW' '3131';\n"); + grammarBuilder.append("KW3132 : 'KW' '3132';\n"); + grammarBuilder.append("KW3133 : 'KW' '3133';\n"); + grammarBuilder.append("KW3134 : 'KW' '3134';\n"); + grammarBuilder.append("KW3135 : 'KW' '3135';\n"); + grammarBuilder.append("KW3136 : 'KW' '3136';\n"); + grammarBuilder.append("KW3137 : 'KW' '3137';\n"); + grammarBuilder.append("KW3138 : 'KW' '3138';\n"); + grammarBuilder.append("KW3139 : 'KW' '3139';\n"); + grammarBuilder.append("KW3140 : 'KW' '3140';\n"); + grammarBuilder.append("KW3141 : 'KW' '3141';\n"); + grammarBuilder.append("KW3142 : 'KW' '3142';\n"); + grammarBuilder.append("KW3143 : 'KW' '3143';\n"); + grammarBuilder.append("KW3144 : 'KW' '3144';\n"); + grammarBuilder.append("KW3145 : 'KW' '3145';\n"); + grammarBuilder.append("KW3146 : 'KW' '3146';\n"); + grammarBuilder.append("KW3147 : 'KW' '3147';\n"); + grammarBuilder.append("KW3148 : 'KW' '3148';\n"); + grammarBuilder.append("KW3149 : 'KW' '3149';\n"); + grammarBuilder.append("KW3150 : 'KW' '3150';\n"); + grammarBuilder.append("KW3151 : 'KW' '3151';\n"); + grammarBuilder.append("KW3152 : 'KW' '3152';\n"); + grammarBuilder.append("KW3153 : 'KW' '3153';\n"); + grammarBuilder.append("KW3154 : 'KW' '3154';\n"); + grammarBuilder.append("KW3155 : 'KW' '3155';\n"); + grammarBuilder.append("KW3156 : 'KW' '3156';\n"); + grammarBuilder.append("KW3157 : 'KW' '3157';\n"); + grammarBuilder.append("KW3158 : 'KW' '3158';\n"); + grammarBuilder.append("KW3159 : 'KW' '3159';\n"); + grammarBuilder.append("KW3160 : 'KW' '3160';\n"); + grammarBuilder.append("KW3161 : 'KW' '3161';\n"); + grammarBuilder.append("KW3162 : 'KW' '3162';\n"); + grammarBuilder.append("KW3163 : 'KW' '3163';\n"); + grammarBuilder.append("KW3164 : 'KW' '3164';\n"); + grammarBuilder.append("KW3165 : 'KW' '3165';\n"); + grammarBuilder.append("KW3166 : 'KW' '3166';\n"); + grammarBuilder.append("KW3167 : 'KW' '3167';\n"); + grammarBuilder.append("KW3168 : 'KW' '3168';\n"); + grammarBuilder.append("KW3169 : 'KW' '3169';\n"); + grammarBuilder.append("KW3170 : 'KW' '3170';\n"); + grammarBuilder.append("KW3171 : 'KW' '3171';\n"); + grammarBuilder.append("KW3172 : 'KW' '3172';\n"); + grammarBuilder.append("KW3173 : 'KW' '3173';\n"); + grammarBuilder.append("KW3174 : 'KW' '3174';\n"); + grammarBuilder.append("KW3175 : 'KW' '3175';\n"); + grammarBuilder.append("KW3176 : 'KW' '3176';\n"); + grammarBuilder.append("KW3177 : 'KW' '3177';\n"); + grammarBuilder.append("KW3178 : 'KW' '3178';\n"); + grammarBuilder.append("KW3179 : 'KW' '3179';\n"); + grammarBuilder.append("KW3180 : 'KW' '3180';\n"); + grammarBuilder.append("KW3181 : 'KW' '3181';\n"); + grammarBuilder.append("KW3182 : 'KW' '3182';\n"); + grammarBuilder.append("KW3183 : 'KW' '3183';\n"); + grammarBuilder.append("KW3184 : 'KW' '3184';\n"); + grammarBuilder.append("KW3185 : 'KW' '3185';\n"); + grammarBuilder.append("KW3186 : 'KW' '3186';\n"); + grammarBuilder.append("KW3187 : 'KW' '3187';\n"); + grammarBuilder.append("KW3188 : 'KW' '3188';\n"); + grammarBuilder.append("KW3189 : 'KW' '3189';\n"); + grammarBuilder.append("KW3190 : 'KW' '3190';\n"); + grammarBuilder.append("KW3191 : 'KW' '3191';\n"); + grammarBuilder.append("KW3192 : 'KW' '3192';\n"); + grammarBuilder.append("KW3193 : 'KW' '3193';\n"); + grammarBuilder.append("KW3194 : 'KW' '3194';\n"); + grammarBuilder.append("KW3195 : 'KW' '3195';\n"); + grammarBuilder.append("KW3196 : 'KW' '3196';\n"); + grammarBuilder.append("KW3197 : 'KW' '3197';\n"); + grammarBuilder.append("KW3198 : 'KW' '3198';\n"); + grammarBuilder.append("KW3199 : 'KW' '3199';\n"); + grammarBuilder.append("KW3200 : 'KW' '3200';\n"); + grammarBuilder.append("KW3201 : 'KW' '3201';\n"); + grammarBuilder.append("KW3202 : 'KW' '3202';\n"); + grammarBuilder.append("KW3203 : 'KW' '3203';\n"); + grammarBuilder.append("KW3204 : 'KW' '3204';\n"); + grammarBuilder.append("KW3205 : 'KW' '3205';\n"); + grammarBuilder.append("KW3206 : 'KW' '3206';\n"); + grammarBuilder.append("KW3207 : 'KW' '3207';\n"); + grammarBuilder.append("KW3208 : 'KW' '3208';\n"); + grammarBuilder.append("KW3209 : 'KW' '3209';\n"); + grammarBuilder.append("KW3210 : 'KW' '3210';\n"); + grammarBuilder.append("KW3211 : 'KW' '3211';\n"); + grammarBuilder.append("KW3212 : 'KW' '3212';\n"); + grammarBuilder.append("KW3213 : 'KW' '3213';\n"); + grammarBuilder.append("KW3214 : 'KW' '3214';\n"); + grammarBuilder.append("KW3215 : 'KW' '3215';\n"); + grammarBuilder.append("KW3216 : 'KW' '3216';\n"); + grammarBuilder.append("KW3217 : 'KW' '3217';\n"); + grammarBuilder.append("KW3218 : 'KW' '3218';\n"); + grammarBuilder.append("KW3219 : 'KW' '3219';\n"); + grammarBuilder.append("KW3220 : 'KW' '3220';\n"); + grammarBuilder.append("KW3221 : 'KW' '3221';\n"); + grammarBuilder.append("KW3222 : 'KW' '3222';\n"); + grammarBuilder.append("KW3223 : 'KW' '3223';\n"); + grammarBuilder.append("KW3224 : 'KW' '3224';\n"); + grammarBuilder.append("KW3225 : 'KW' '3225';\n"); + grammarBuilder.append("KW3226 : 'KW' '3226';\n"); + grammarBuilder.append("KW3227 : 'KW' '3227';\n"); + grammarBuilder.append("KW3228 : 'KW' '3228';\n"); + grammarBuilder.append("KW3229 : 'KW' '3229';\n"); + grammarBuilder.append("KW3230 : 'KW' '3230';\n"); + grammarBuilder.append("KW3231 : 'KW' '3231';\n"); + grammarBuilder.append("KW3232 : 'KW' '3232';\n"); + grammarBuilder.append("KW3233 : 'KW' '3233';\n"); + grammarBuilder.append("KW3234 : 'KW' '3234';\n"); + grammarBuilder.append("KW3235 : 'KW' '3235';\n"); + grammarBuilder.append("KW3236 : 'KW' '3236';\n"); + grammarBuilder.append("KW3237 : 'KW' '3237';\n"); + grammarBuilder.append("KW3238 : 'KW' '3238';\n"); + grammarBuilder.append("KW3239 : 'KW' '3239';\n"); + grammarBuilder.append("KW3240 : 'KW' '3240';\n"); + grammarBuilder.append("KW3241 : 'KW' '3241';\n"); + grammarBuilder.append("KW3242 : 'KW' '3242';\n"); + grammarBuilder.append("KW3243 : 'KW' '3243';\n"); + grammarBuilder.append("KW3244 : 'KW' '3244';\n"); + grammarBuilder.append("KW3245 : 'KW' '3245';\n"); + grammarBuilder.append("KW3246 : 'KW' '3246';\n"); + grammarBuilder.append("KW3247 : 'KW' '3247';\n"); + grammarBuilder.append("KW3248 : 'KW' '3248';\n"); + grammarBuilder.append("KW3249 : 'KW' '3249';\n"); + grammarBuilder.append("KW3250 : 'KW' '3250';\n"); + grammarBuilder.append("KW3251 : 'KW' '3251';\n"); + grammarBuilder.append("KW3252 : 'KW' '3252';\n"); + grammarBuilder.append("KW3253 : 'KW' '3253';\n"); + grammarBuilder.append("KW3254 : 'KW' '3254';\n"); + grammarBuilder.append("KW3255 : 'KW' '3255';\n"); + grammarBuilder.append("KW3256 : 'KW' '3256';\n"); + grammarBuilder.append("KW3257 : 'KW' '3257';\n"); + grammarBuilder.append("KW3258 : 'KW' '3258';\n"); + grammarBuilder.append("KW3259 : 'KW' '3259';\n"); + grammarBuilder.append("KW3260 : 'KW' '3260';\n"); + grammarBuilder.append("KW3261 : 'KW' '3261';\n"); + grammarBuilder.append("KW3262 : 'KW' '3262';\n"); + grammarBuilder.append("KW3263 : 'KW' '3263';\n"); + grammarBuilder.append("KW3264 : 'KW' '3264';\n"); + grammarBuilder.append("KW3265 : 'KW' '3265';\n"); + grammarBuilder.append("KW3266 : 'KW' '3266';\n"); + grammarBuilder.append("KW3267 : 'KW' '3267';\n"); + grammarBuilder.append("KW3268 : 'KW' '3268';\n"); + grammarBuilder.append("KW3269 : 'KW' '3269';\n"); + grammarBuilder.append("KW3270 : 'KW' '3270';\n"); + grammarBuilder.append("KW3271 : 'KW' '3271';\n"); + grammarBuilder.append("KW3272 : 'KW' '3272';\n"); + grammarBuilder.append("KW3273 : 'KW' '3273';\n"); + grammarBuilder.append("KW3274 : 'KW' '3274';\n"); + grammarBuilder.append("KW3275 : 'KW' '3275';\n"); + grammarBuilder.append("KW3276 : 'KW' '3276';\n"); + grammarBuilder.append("KW3277 : 'KW' '3277';\n"); + grammarBuilder.append("KW3278 : 'KW' '3278';\n"); + grammarBuilder.append("KW3279 : 'KW' '3279';\n"); + grammarBuilder.append("KW3280 : 'KW' '3280';\n"); + grammarBuilder.append("KW3281 : 'KW' '3281';\n"); + grammarBuilder.append("KW3282 : 'KW' '3282';\n"); + grammarBuilder.append("KW3283 : 'KW' '3283';\n"); + grammarBuilder.append("KW3284 : 'KW' '3284';\n"); + grammarBuilder.append("KW3285 : 'KW' '3285';\n"); + grammarBuilder.append("KW3286 : 'KW' '3286';\n"); + grammarBuilder.append("KW3287 : 'KW' '3287';\n"); + grammarBuilder.append("KW3288 : 'KW' '3288';\n"); + grammarBuilder.append("KW3289 : 'KW' '3289';\n"); + grammarBuilder.append("KW3290 : 'KW' '3290';\n"); + grammarBuilder.append("KW3291 : 'KW' '3291';\n"); + grammarBuilder.append("KW3292 : 'KW' '3292';\n"); + grammarBuilder.append("KW3293 : 'KW' '3293';\n"); + grammarBuilder.append("KW3294 : 'KW' '3294';\n"); + grammarBuilder.append("KW3295 : 'KW' '3295';\n"); + grammarBuilder.append("KW3296 : 'KW' '3296';\n"); + grammarBuilder.append("KW3297 : 'KW' '3297';\n"); + grammarBuilder.append("KW3298 : 'KW' '3298';\n"); + grammarBuilder.append("KW3299 : 'KW' '3299';\n"); + grammarBuilder.append("KW3300 : 'KW' '3300';\n"); + grammarBuilder.append("KW3301 : 'KW' '3301';\n"); + grammarBuilder.append("KW3302 : 'KW' '3302';\n"); + grammarBuilder.append("KW3303 : 'KW' '3303';\n"); + grammarBuilder.append("KW3304 : 'KW' '3304';\n"); + grammarBuilder.append("KW3305 : 'KW' '3305';\n"); + grammarBuilder.append("KW3306 : 'KW' '3306';\n"); + grammarBuilder.append("KW3307 : 'KW' '3307';\n"); + grammarBuilder.append("KW3308 : 'KW' '3308';\n"); + grammarBuilder.append("KW3309 : 'KW' '3309';\n"); + grammarBuilder.append("KW3310 : 'KW' '3310';\n"); + grammarBuilder.append("KW3311 : 'KW' '3311';\n"); + grammarBuilder.append("KW3312 : 'KW' '3312';\n"); + grammarBuilder.append("KW3313 : 'KW' '3313';\n"); + grammarBuilder.append("KW3314 : 'KW' '3314';\n"); + grammarBuilder.append("KW3315 : 'KW' '3315';\n"); + grammarBuilder.append("KW3316 : 'KW' '3316';\n"); + grammarBuilder.append("KW3317 : 'KW' '3317';\n"); + grammarBuilder.append("KW3318 : 'KW' '3318';\n"); + grammarBuilder.append("KW3319 : 'KW' '3319';\n"); + grammarBuilder.append("KW3320 : 'KW' '3320';\n"); + grammarBuilder.append("KW3321 : 'KW' '3321';\n"); + grammarBuilder.append("KW3322 : 'KW' '3322';\n"); + grammarBuilder.append("KW3323 : 'KW' '3323';\n"); + grammarBuilder.append("KW3324 : 'KW' '3324';\n"); + grammarBuilder.append("KW3325 : 'KW' '3325';\n"); + grammarBuilder.append("KW3326 : 'KW' '3326';\n"); + grammarBuilder.append("KW3327 : 'KW' '3327';\n"); + grammarBuilder.append("KW3328 : 'KW' '3328';\n"); + grammarBuilder.append("KW3329 : 'KW' '3329';\n"); + grammarBuilder.append("KW3330 : 'KW' '3330';\n"); + grammarBuilder.append("KW3331 : 'KW' '3331';\n"); + grammarBuilder.append("KW3332 : 'KW' '3332';\n"); + grammarBuilder.append("KW3333 : 'KW' '3333';\n"); + grammarBuilder.append("KW3334 : 'KW' '3334';\n"); + grammarBuilder.append("KW3335 : 'KW' '3335';\n"); + grammarBuilder.append("KW3336 : 'KW' '3336';\n"); + grammarBuilder.append("KW3337 : 'KW' '3337';\n"); + grammarBuilder.append("KW3338 : 'KW' '3338';\n"); + grammarBuilder.append("KW3339 : 'KW' '3339';\n"); + grammarBuilder.append("KW3340 : 'KW' '3340';\n"); + grammarBuilder.append("KW3341 : 'KW' '3341';\n"); + grammarBuilder.append("KW3342 : 'KW' '3342';\n"); + grammarBuilder.append("KW3343 : 'KW' '3343';\n"); + grammarBuilder.append("KW3344 : 'KW' '3344';\n"); + grammarBuilder.append("KW3345 : 'KW' '3345';\n"); + grammarBuilder.append("KW3346 : 'KW' '3346';\n"); + grammarBuilder.append("KW3347 : 'KW' '3347';\n"); + grammarBuilder.append("KW3348 : 'KW' '3348';\n"); + grammarBuilder.append("KW3349 : 'KW' '3349';\n"); + grammarBuilder.append("KW3350 : 'KW' '3350';\n"); + grammarBuilder.append("KW3351 : 'KW' '3351';\n"); + grammarBuilder.append("KW3352 : 'KW' '3352';\n"); + grammarBuilder.append("KW3353 : 'KW' '3353';\n"); + grammarBuilder.append("KW3354 : 'KW' '3354';\n"); + grammarBuilder.append("KW3355 : 'KW' '3355';\n"); + grammarBuilder.append("KW3356 : 'KW' '3356';\n"); + grammarBuilder.append("KW3357 : 'KW' '3357';\n"); + grammarBuilder.append("KW3358 : 'KW' '3358';\n"); + grammarBuilder.append("KW3359 : 'KW' '3359';\n"); + grammarBuilder.append("KW3360 : 'KW' '3360';\n"); + grammarBuilder.append("KW3361 : 'KW' '3361';\n"); + grammarBuilder.append("KW3362 : 'KW' '3362';\n"); + grammarBuilder.append("KW3363 : 'KW' '3363';\n"); + grammarBuilder.append("KW3364 : 'KW' '3364';\n"); + grammarBuilder.append("KW3365 : 'KW' '3365';\n"); + grammarBuilder.append("KW3366 : 'KW' '3366';\n"); + grammarBuilder.append("KW3367 : 'KW' '3367';\n"); + grammarBuilder.append("KW3368 : 'KW' '3368';\n"); + grammarBuilder.append("KW3369 : 'KW' '3369';\n"); + grammarBuilder.append("KW3370 : 'KW' '3370';\n"); + grammarBuilder.append("KW3371 : 'KW' '3371';\n"); + grammarBuilder.append("KW3372 : 'KW' '3372';\n"); + grammarBuilder.append("KW3373 : 'KW' '3373';\n"); + grammarBuilder.append("KW3374 : 'KW' '3374';\n"); + grammarBuilder.append("KW3375 : 'KW' '3375';\n"); + grammarBuilder.append("KW3376 : 'KW' '3376';\n"); + grammarBuilder.append("KW3377 : 'KW' '3377';\n"); + grammarBuilder.append("KW3378 : 'KW' '3378';\n"); + grammarBuilder.append("KW3379 : 'KW' '3379';\n"); + grammarBuilder.append("KW3380 : 'KW' '3380';\n"); + grammarBuilder.append("KW3381 : 'KW' '3381';\n"); + grammarBuilder.append("KW3382 : 'KW' '3382';\n"); + grammarBuilder.append("KW3383 : 'KW' '3383';\n"); + grammarBuilder.append("KW3384 : 'KW' '3384';\n"); + grammarBuilder.append("KW3385 : 'KW' '3385';\n"); + grammarBuilder.append("KW3386 : 'KW' '3386';\n"); + grammarBuilder.append("KW3387 : 'KW' '3387';\n"); + grammarBuilder.append("KW3388 : 'KW' '3388';\n"); + grammarBuilder.append("KW3389 : 'KW' '3389';\n"); + grammarBuilder.append("KW3390 : 'KW' '3390';\n"); + grammarBuilder.append("KW3391 : 'KW' '3391';\n"); + grammarBuilder.append("KW3392 : 'KW' '3392';\n"); + grammarBuilder.append("KW3393 : 'KW' '3393';\n"); + grammarBuilder.append("KW3394 : 'KW' '3394';\n"); + grammarBuilder.append("KW3395 : 'KW' '3395';\n"); + grammarBuilder.append("KW3396 : 'KW' '3396';\n"); + grammarBuilder.append("KW3397 : 'KW' '3397';\n"); + grammarBuilder.append("KW3398 : 'KW' '3398';\n"); + grammarBuilder.append("KW3399 : 'KW' '3399';\n"); + grammarBuilder.append("KW3400 : 'KW' '3400';\n"); + grammarBuilder.append("KW3401 : 'KW' '3401';\n"); + grammarBuilder.append("KW3402 : 'KW' '3402';\n"); + grammarBuilder.append("KW3403 : 'KW' '3403';\n"); + grammarBuilder.append("KW3404 : 'KW' '3404';\n"); + grammarBuilder.append("KW3405 : 'KW' '3405';\n"); + grammarBuilder.append("KW3406 : 'KW' '3406';\n"); + grammarBuilder.append("KW3407 : 'KW' '3407';\n"); + grammarBuilder.append("KW3408 : 'KW' '3408';\n"); + grammarBuilder.append("KW3409 : 'KW' '3409';\n"); + grammarBuilder.append("KW3410 : 'KW' '3410';\n"); + grammarBuilder.append("KW3411 : 'KW' '3411';\n"); + grammarBuilder.append("KW3412 : 'KW' '3412';\n"); + grammarBuilder.append("KW3413 : 'KW' '3413';\n"); + grammarBuilder.append("KW3414 : 'KW' '3414';\n"); + grammarBuilder.append("KW3415 : 'KW' '3415';\n"); + grammarBuilder.append("KW3416 : 'KW' '3416';\n"); + grammarBuilder.append("KW3417 : 'KW' '3417';\n"); + grammarBuilder.append("KW3418 : 'KW' '3418';\n"); + grammarBuilder.append("KW3419 : 'KW' '3419';\n"); + grammarBuilder.append("KW3420 : 'KW' '3420';\n"); + grammarBuilder.append("KW3421 : 'KW' '3421';\n"); + grammarBuilder.append("KW3422 : 'KW' '3422';\n"); + grammarBuilder.append("KW3423 : 'KW' '3423';\n"); + grammarBuilder.append("KW3424 : 'KW' '3424';\n"); + grammarBuilder.append("KW3425 : 'KW' '3425';\n"); + grammarBuilder.append("KW3426 : 'KW' '3426';\n"); + grammarBuilder.append("KW3427 : 'KW' '3427';\n"); + grammarBuilder.append("KW3428 : 'KW' '3428';\n"); + grammarBuilder.append("KW3429 : 'KW' '3429';\n"); + grammarBuilder.append("KW3430 : 'KW' '3430';\n"); + grammarBuilder.append("KW3431 : 'KW' '3431';\n"); + grammarBuilder.append("KW3432 : 'KW' '3432';\n"); + grammarBuilder.append("KW3433 : 'KW' '3433';\n"); + grammarBuilder.append("KW3434 : 'KW' '3434';\n"); + grammarBuilder.append("KW3435 : 'KW' '3435';\n"); + grammarBuilder.append("KW3436 : 'KW' '3436';\n"); + grammarBuilder.append("KW3437 : 'KW' '3437';\n"); + grammarBuilder.append("KW3438 : 'KW' '3438';\n"); + grammarBuilder.append("KW3439 : 'KW' '3439';\n"); + grammarBuilder.append("KW3440 : 'KW' '3440';\n"); + grammarBuilder.append("KW3441 : 'KW' '3441';\n"); + grammarBuilder.append("KW3442 : 'KW' '3442';\n"); + grammarBuilder.append("KW3443 : 'KW' '3443';\n"); + grammarBuilder.append("KW3444 : 'KW' '3444';\n"); + grammarBuilder.append("KW3445 : 'KW' '3445';\n"); + grammarBuilder.append("KW3446 : 'KW' '3446';\n"); + grammarBuilder.append("KW3447 : 'KW' '3447';\n"); + grammarBuilder.append("KW3448 : 'KW' '3448';\n"); + grammarBuilder.append("KW3449 : 'KW' '3449';\n"); + grammarBuilder.append("KW3450 : 'KW' '3450';\n"); + grammarBuilder.append("KW3451 : 'KW' '3451';\n"); + grammarBuilder.append("KW3452 : 'KW' '3452';\n"); + grammarBuilder.append("KW3453 : 'KW' '3453';\n"); + grammarBuilder.append("KW3454 : 'KW' '3454';\n"); + grammarBuilder.append("KW3455 : 'KW' '3455';\n"); + grammarBuilder.append("KW3456 : 'KW' '3456';\n"); + grammarBuilder.append("KW3457 : 'KW' '3457';\n"); + grammarBuilder.append("KW3458 : 'KW' '3458';\n"); + grammarBuilder.append("KW3459 : 'KW' '3459';\n"); + grammarBuilder.append("KW3460 : 'KW' '3460';\n"); + grammarBuilder.append("KW3461 : 'KW' '3461';\n"); + grammarBuilder.append("KW3462 : 'KW' '3462';\n"); + grammarBuilder.append("KW3463 : 'KW' '3463';\n"); + grammarBuilder.append("KW3464 : 'KW' '3464';\n"); + grammarBuilder.append("KW3465 : 'KW' '3465';\n"); + grammarBuilder.append("KW3466 : 'KW' '3466';\n"); + grammarBuilder.append("KW3467 : 'KW' '3467';\n"); + grammarBuilder.append("KW3468 : 'KW' '3468';\n"); + grammarBuilder.append("KW3469 : 'KW' '3469';\n"); + grammarBuilder.append("KW3470 : 'KW' '3470';\n"); + grammarBuilder.append("KW3471 : 'KW' '3471';\n"); + grammarBuilder.append("KW3472 : 'KW' '3472';\n"); + grammarBuilder.append("KW3473 : 'KW' '3473';\n"); + grammarBuilder.append("KW3474 : 'KW' '3474';\n"); + grammarBuilder.append("KW3475 : 'KW' '3475';\n"); + grammarBuilder.append("KW3476 : 'KW' '3476';\n"); + grammarBuilder.append("KW3477 : 'KW' '3477';\n"); + grammarBuilder.append("KW3478 : 'KW' '3478';\n"); + grammarBuilder.append("KW3479 : 'KW' '3479';\n"); + grammarBuilder.append("KW3480 : 'KW' '3480';\n"); + grammarBuilder.append("KW3481 : 'KW' '3481';\n"); + grammarBuilder.append("KW3482 : 'KW' '3482';\n"); + grammarBuilder.append("KW3483 : 'KW' '3483';\n"); + grammarBuilder.append("KW3484 : 'KW' '3484';\n"); + grammarBuilder.append("KW3485 : 'KW' '3485';\n"); + grammarBuilder.append("KW3486 : 'KW' '3486';\n"); + grammarBuilder.append("KW3487 : 'KW' '3487';\n"); + grammarBuilder.append("KW3488 : 'KW' '3488';\n"); + grammarBuilder.append("KW3489 : 'KW' '3489';\n"); + grammarBuilder.append("KW3490 : 'KW' '3490';\n"); + grammarBuilder.append("KW3491 : 'KW' '3491';\n"); + grammarBuilder.append("KW3492 : 'KW' '3492';\n"); + grammarBuilder.append("KW3493 : 'KW' '3493';\n"); + grammarBuilder.append("KW3494 : 'KW' '3494';\n"); + grammarBuilder.append("KW3495 : 'KW' '3495';\n"); + grammarBuilder.append("KW3496 : 'KW' '3496';\n"); + grammarBuilder.append("KW3497 : 'KW' '3497';\n"); + grammarBuilder.append("KW3498 : 'KW' '3498';\n"); + grammarBuilder.append("KW3499 : 'KW' '3499';\n"); + grammarBuilder.append("KW3500 : 'KW' '3500';\n"); + grammarBuilder.append("KW3501 : 'KW' '3501';\n"); + grammarBuilder.append("KW3502 : 'KW' '3502';\n"); + grammarBuilder.append("KW3503 : 'KW' '3503';\n"); + grammarBuilder.append("KW3504 : 'KW' '3504';\n"); + grammarBuilder.append("KW3505 : 'KW' '3505';\n"); + grammarBuilder.append("KW3506 : 'KW' '3506';\n"); + grammarBuilder.append("KW3507 : 'KW' '3507';\n"); + grammarBuilder.append("KW3508 : 'KW' '3508';\n"); + grammarBuilder.append("KW3509 : 'KW' '3509';\n"); + grammarBuilder.append("KW3510 : 'KW' '3510';\n"); + grammarBuilder.append("KW3511 : 'KW' '3511';\n"); + grammarBuilder.append("KW3512 : 'KW' '3512';\n"); + grammarBuilder.append("KW3513 : 'KW' '3513';\n"); + grammarBuilder.append("KW3514 : 'KW' '3514';\n"); + grammarBuilder.append("KW3515 : 'KW' '3515';\n"); + grammarBuilder.append("KW3516 : 'KW' '3516';\n"); + grammarBuilder.append("KW3517 : 'KW' '3517';\n"); + grammarBuilder.append("KW3518 : 'KW' '3518';\n"); + grammarBuilder.append("KW3519 : 'KW' '3519';\n"); + grammarBuilder.append("KW3520 : 'KW' '3520';\n"); + grammarBuilder.append("KW3521 : 'KW' '3521';\n"); + grammarBuilder.append("KW3522 : 'KW' '3522';\n"); + grammarBuilder.append("KW3523 : 'KW' '3523';\n"); + grammarBuilder.append("KW3524 : 'KW' '3524';\n"); + grammarBuilder.append("KW3525 : 'KW' '3525';\n"); + grammarBuilder.append("KW3526 : 'KW' '3526';\n"); + grammarBuilder.append("KW3527 : 'KW' '3527';\n"); + grammarBuilder.append("KW3528 : 'KW' '3528';\n"); + grammarBuilder.append("KW3529 : 'KW' '3529';\n"); + grammarBuilder.append("KW3530 : 'KW' '3530';\n"); + grammarBuilder.append("KW3531 : 'KW' '3531';\n"); + grammarBuilder.append("KW3532 : 'KW' '3532';\n"); + grammarBuilder.append("KW3533 : 'KW' '3533';\n"); + grammarBuilder.append("KW3534 : 'KW' '3534';\n"); + grammarBuilder.append("KW3535 : 'KW' '3535';\n"); + grammarBuilder.append("KW3536 : 'KW' '3536';\n"); + grammarBuilder.append("KW3537 : 'KW' '3537';\n"); + grammarBuilder.append("KW3538 : 'KW' '3538';\n"); + grammarBuilder.append("KW3539 : 'KW' '3539';\n"); + grammarBuilder.append("KW3540 : 'KW' '3540';\n"); + grammarBuilder.append("KW3541 : 'KW' '3541';\n"); + grammarBuilder.append("KW3542 : 'KW' '3542';\n"); + grammarBuilder.append("KW3543 : 'KW' '3543';\n"); + grammarBuilder.append("KW3544 : 'KW' '3544';\n"); + grammarBuilder.append("KW3545 : 'KW' '3545';\n"); + grammarBuilder.append("KW3546 : 'KW' '3546';\n"); + grammarBuilder.append("KW3547 : 'KW' '3547';\n"); + grammarBuilder.append("KW3548 : 'KW' '3548';\n"); + grammarBuilder.append("KW3549 : 'KW' '3549';\n"); + grammarBuilder.append("KW3550 : 'KW' '3550';\n"); + grammarBuilder.append("KW3551 : 'KW' '3551';\n"); + grammarBuilder.append("KW3552 : 'KW' '3552';\n"); + grammarBuilder.append("KW3553 : 'KW' '3553';\n"); + grammarBuilder.append("KW3554 : 'KW' '3554';\n"); + grammarBuilder.append("KW3555 : 'KW' '3555';\n"); + grammarBuilder.append("KW3556 : 'KW' '3556';\n"); + grammarBuilder.append("KW3557 : 'KW' '3557';\n"); + grammarBuilder.append("KW3558 : 'KW' '3558';\n"); + grammarBuilder.append("KW3559 : 'KW' '3559';\n"); + grammarBuilder.append("KW3560 : 'KW' '3560';\n"); + grammarBuilder.append("KW3561 : 'KW' '3561';\n"); + grammarBuilder.append("KW3562 : 'KW' '3562';\n"); + grammarBuilder.append("KW3563 : 'KW' '3563';\n"); + grammarBuilder.append("KW3564 : 'KW' '3564';\n"); + grammarBuilder.append("KW3565 : 'KW' '3565';\n"); + grammarBuilder.append("KW3566 : 'KW' '3566';\n"); + grammarBuilder.append("KW3567 : 'KW' '3567';\n"); + grammarBuilder.append("KW3568 : 'KW' '3568';\n"); + grammarBuilder.append("KW3569 : 'KW' '3569';\n"); + grammarBuilder.append("KW3570 : 'KW' '3570';\n"); + grammarBuilder.append("KW3571 : 'KW' '3571';\n"); + grammarBuilder.append("KW3572 : 'KW' '3572';\n"); + grammarBuilder.append("KW3573 : 'KW' '3573';\n"); + grammarBuilder.append("KW3574 : 'KW' '3574';\n"); + grammarBuilder.append("KW3575 : 'KW' '3575';\n"); + grammarBuilder.append("KW3576 : 'KW' '3576';\n"); + grammarBuilder.append("KW3577 : 'KW' '3577';\n"); + grammarBuilder.append("KW3578 : 'KW' '3578';\n"); + grammarBuilder.append("KW3579 : 'KW' '3579';\n"); + grammarBuilder.append("KW3580 : 'KW' '3580';\n"); + grammarBuilder.append("KW3581 : 'KW' '3581';\n"); + grammarBuilder.append("KW3582 : 'KW' '3582';\n"); + grammarBuilder.append("KW3583 : 'KW' '3583';\n"); + grammarBuilder.append("KW3584 : 'KW' '3584';\n"); + grammarBuilder.append("KW3585 : 'KW' '3585';\n"); + grammarBuilder.append("KW3586 : 'KW' '3586';\n"); + grammarBuilder.append("KW3587 : 'KW' '3587';\n"); + grammarBuilder.append("KW3588 : 'KW' '3588';\n"); + grammarBuilder.append("KW3589 : 'KW' '3589';\n"); + grammarBuilder.append("KW3590 : 'KW' '3590';\n"); + grammarBuilder.append("KW3591 : 'KW' '3591';\n"); + grammarBuilder.append("KW3592 : 'KW' '3592';\n"); + grammarBuilder.append("KW3593 : 'KW' '3593';\n"); + grammarBuilder.append("KW3594 : 'KW' '3594';\n"); + grammarBuilder.append("KW3595 : 'KW' '3595';\n"); + grammarBuilder.append("KW3596 : 'KW' '3596';\n"); + grammarBuilder.append("KW3597 : 'KW' '3597';\n"); + grammarBuilder.append("KW3598 : 'KW' '3598';\n"); + grammarBuilder.append("KW3599 : 'KW' '3599';\n"); + grammarBuilder.append("KW3600 : 'KW' '3600';\n"); + grammarBuilder.append("KW3601 : 'KW' '3601';\n"); + grammarBuilder.append("KW3602 : 'KW' '3602';\n"); + grammarBuilder.append("KW3603 : 'KW' '3603';\n"); + grammarBuilder.append("KW3604 : 'KW' '3604';\n"); + grammarBuilder.append("KW3605 : 'KW' '3605';\n"); + grammarBuilder.append("KW3606 : 'KW' '3606';\n"); + grammarBuilder.append("KW3607 : 'KW' '3607';\n"); + grammarBuilder.append("KW3608 : 'KW' '3608';\n"); + grammarBuilder.append("KW3609 : 'KW' '3609';\n"); + grammarBuilder.append("KW3610 : 'KW' '3610';\n"); + grammarBuilder.append("KW3611 : 'KW' '3611';\n"); + grammarBuilder.append("KW3612 : 'KW' '3612';\n"); + grammarBuilder.append("KW3613 : 'KW' '3613';\n"); + grammarBuilder.append("KW3614 : 'KW' '3614';\n"); + grammarBuilder.append("KW3615 : 'KW' '3615';\n"); + grammarBuilder.append("KW3616 : 'KW' '3616';\n"); + grammarBuilder.append("KW3617 : 'KW' '3617';\n"); + grammarBuilder.append("KW3618 : 'KW' '3618';\n"); + grammarBuilder.append("KW3619 : 'KW' '3619';\n"); + grammarBuilder.append("KW3620 : 'KW' '3620';\n"); + grammarBuilder.append("KW3621 : 'KW' '3621';\n"); + grammarBuilder.append("KW3622 : 'KW' '3622';\n"); + grammarBuilder.append("KW3623 : 'KW' '3623';\n"); + grammarBuilder.append("KW3624 : 'KW' '3624';\n"); + grammarBuilder.append("KW3625 : 'KW' '3625';\n"); + grammarBuilder.append("KW3626 : 'KW' '3626';\n"); + grammarBuilder.append("KW3627 : 'KW' '3627';\n"); + grammarBuilder.append("KW3628 : 'KW' '3628';\n"); + grammarBuilder.append("KW3629 : 'KW' '3629';\n"); + grammarBuilder.append("KW3630 : 'KW' '3630';\n"); + grammarBuilder.append("KW3631 : 'KW' '3631';\n"); + grammarBuilder.append("KW3632 : 'KW' '3632';\n"); + grammarBuilder.append("KW3633 : 'KW' '3633';\n"); + grammarBuilder.append("KW3634 : 'KW' '3634';\n"); + grammarBuilder.append("KW3635 : 'KW' '3635';\n"); + grammarBuilder.append("KW3636 : 'KW' '3636';\n"); + grammarBuilder.append("KW3637 : 'KW' '3637';\n"); + grammarBuilder.append("KW3638 : 'KW' '3638';\n"); + grammarBuilder.append("KW3639 : 'KW' '3639';\n"); + grammarBuilder.append("KW3640 : 'KW' '3640';\n"); + grammarBuilder.append("KW3641 : 'KW' '3641';\n"); + grammarBuilder.append("KW3642 : 'KW' '3642';\n"); + grammarBuilder.append("KW3643 : 'KW' '3643';\n"); + grammarBuilder.append("KW3644 : 'KW' '3644';\n"); + grammarBuilder.append("KW3645 : 'KW' '3645';\n"); + grammarBuilder.append("KW3646 : 'KW' '3646';\n"); + grammarBuilder.append("KW3647 : 'KW' '3647';\n"); + grammarBuilder.append("KW3648 : 'KW' '3648';\n"); + grammarBuilder.append("KW3649 : 'KW' '3649';\n"); + grammarBuilder.append("KW3650 : 'KW' '3650';\n"); + grammarBuilder.append("KW3651 : 'KW' '3651';\n"); + grammarBuilder.append("KW3652 : 'KW' '3652';\n"); + grammarBuilder.append("KW3653 : 'KW' '3653';\n"); + grammarBuilder.append("KW3654 : 'KW' '3654';\n"); + grammarBuilder.append("KW3655 : 'KW' '3655';\n"); + grammarBuilder.append("KW3656 : 'KW' '3656';\n"); + grammarBuilder.append("KW3657 : 'KW' '3657';\n"); + grammarBuilder.append("KW3658 : 'KW' '3658';\n"); + grammarBuilder.append("KW3659 : 'KW' '3659';\n"); + grammarBuilder.append("KW3660 : 'KW' '3660';\n"); + grammarBuilder.append("KW3661 : 'KW' '3661';\n"); + grammarBuilder.append("KW3662 : 'KW' '3662';\n"); + grammarBuilder.append("KW3663 : 'KW' '3663';\n"); + grammarBuilder.append("KW3664 : 'KW' '3664';\n"); + grammarBuilder.append("KW3665 : 'KW' '3665';\n"); + grammarBuilder.append("KW3666 : 'KW' '3666';\n"); + grammarBuilder.append("KW3667 : 'KW' '3667';\n"); + grammarBuilder.append("KW3668 : 'KW' '3668';\n"); + grammarBuilder.append("KW3669 : 'KW' '3669';\n"); + grammarBuilder.append("KW3670 : 'KW' '3670';\n"); + grammarBuilder.append("KW3671 : 'KW' '3671';\n"); + grammarBuilder.append("KW3672 : 'KW' '3672';\n"); + grammarBuilder.append("KW3673 : 'KW' '3673';\n"); + grammarBuilder.append("KW3674 : 'KW' '3674';\n"); + grammarBuilder.append("KW3675 : 'KW' '3675';\n"); + grammarBuilder.append("KW3676 : 'KW' '3676';\n"); + grammarBuilder.append("KW3677 : 'KW' '3677';\n"); + grammarBuilder.append("KW3678 : 'KW' '3678';\n"); + grammarBuilder.append("KW3679 : 'KW' '3679';\n"); + grammarBuilder.append("KW3680 : 'KW' '3680';\n"); + grammarBuilder.append("KW3681 : 'KW' '3681';\n"); + grammarBuilder.append("KW3682 : 'KW' '3682';\n"); + grammarBuilder.append("KW3683 : 'KW' '3683';\n"); + grammarBuilder.append("KW3684 : 'KW' '3684';\n"); + grammarBuilder.append("KW3685 : 'KW' '3685';\n"); + grammarBuilder.append("KW3686 : 'KW' '3686';\n"); + grammarBuilder.append("KW3687 : 'KW' '3687';\n"); + grammarBuilder.append("KW3688 : 'KW' '3688';\n"); + grammarBuilder.append("KW3689 : 'KW' '3689';\n"); + grammarBuilder.append("KW3690 : 'KW' '3690';\n"); + grammarBuilder.append("KW3691 : 'KW' '3691';\n"); + grammarBuilder.append("KW3692 : 'KW' '3692';\n"); + grammarBuilder.append("KW3693 : 'KW' '3693';\n"); + grammarBuilder.append("KW3694 : 'KW' '3694';\n"); + grammarBuilder.append("KW3695 : 'KW' '3695';\n"); + grammarBuilder.append("KW3696 : 'KW' '3696';\n"); + grammarBuilder.append("KW3697 : 'KW' '3697';\n"); + grammarBuilder.append("KW3698 : 'KW' '3698';\n"); + grammarBuilder.append("KW3699 : 'KW' '3699';\n"); + grammarBuilder.append("KW3700 : 'KW' '3700';\n"); + grammarBuilder.append("KW3701 : 'KW' '3701';\n"); + grammarBuilder.append("KW3702 : 'KW' '3702';\n"); + grammarBuilder.append("KW3703 : 'KW' '3703';\n"); + grammarBuilder.append("KW3704 : 'KW' '3704';\n"); + grammarBuilder.append("KW3705 : 'KW' '3705';\n"); + grammarBuilder.append("KW3706 : 'KW' '3706';\n"); + grammarBuilder.append("KW3707 : 'KW' '3707';\n"); + grammarBuilder.append("KW3708 : 'KW' '3708';\n"); + grammarBuilder.append("KW3709 : 'KW' '3709';\n"); + grammarBuilder.append("KW3710 : 'KW' '3710';\n"); + grammarBuilder.append("KW3711 : 'KW' '3711';\n"); + grammarBuilder.append("KW3712 : 'KW' '3712';\n"); + grammarBuilder.append("KW3713 : 'KW' '3713';\n"); + grammarBuilder.append("KW3714 : 'KW' '3714';\n"); + grammarBuilder.append("KW3715 : 'KW' '3715';\n"); + grammarBuilder.append("KW3716 : 'KW' '3716';\n"); + grammarBuilder.append("KW3717 : 'KW' '3717';\n"); + grammarBuilder.append("KW3718 : 'KW' '3718';\n"); + grammarBuilder.append("KW3719 : 'KW' '3719';\n"); + grammarBuilder.append("KW3720 : 'KW' '3720';\n"); + grammarBuilder.append("KW3721 : 'KW' '3721';\n"); + grammarBuilder.append("KW3722 : 'KW' '3722';\n"); + grammarBuilder.append("KW3723 : 'KW' '3723';\n"); + grammarBuilder.append("KW3724 : 'KW' '3724';\n"); + grammarBuilder.append("KW3725 : 'KW' '3725';\n"); + grammarBuilder.append("KW3726 : 'KW' '3726';\n"); + grammarBuilder.append("KW3727 : 'KW' '3727';\n"); + grammarBuilder.append("KW3728 : 'KW' '3728';\n"); + grammarBuilder.append("KW3729 : 'KW' '3729';\n"); + grammarBuilder.append("KW3730 : 'KW' '3730';\n"); + grammarBuilder.append("KW3731 : 'KW' '3731';\n"); + grammarBuilder.append("KW3732 : 'KW' '3732';\n"); + grammarBuilder.append("KW3733 : 'KW' '3733';\n"); + grammarBuilder.append("KW3734 : 'KW' '3734';\n"); + grammarBuilder.append("KW3735 : 'KW' '3735';\n"); + grammarBuilder.append("KW3736 : 'KW' '3736';\n"); + grammarBuilder.append("KW3737 : 'KW' '3737';\n"); + grammarBuilder.append("KW3738 : 'KW' '3738';\n"); + grammarBuilder.append("KW3739 : 'KW' '3739';\n"); + grammarBuilder.append("KW3740 : 'KW' '3740';\n"); + grammarBuilder.append("KW3741 : 'KW' '3741';\n"); + grammarBuilder.append("KW3742 : 'KW' '3742';\n"); + grammarBuilder.append("KW3743 : 'KW' '3743';\n"); + grammarBuilder.append("KW3744 : 'KW' '3744';\n"); + grammarBuilder.append("KW3745 : 'KW' '3745';\n"); + grammarBuilder.append("KW3746 : 'KW' '3746';\n"); + grammarBuilder.append("KW3747 : 'KW' '3747';\n"); + grammarBuilder.append("KW3748 : 'KW' '3748';\n"); + grammarBuilder.append("KW3749 : 'KW' '3749';\n"); + grammarBuilder.append("KW3750 : 'KW' '3750';\n"); + grammarBuilder.append("KW3751 : 'KW' '3751';\n"); + grammarBuilder.append("KW3752 : 'KW' '3752';\n"); + grammarBuilder.append("KW3753 : 'KW' '3753';\n"); + grammarBuilder.append("KW3754 : 'KW' '3754';\n"); + grammarBuilder.append("KW3755 : 'KW' '3755';\n"); + grammarBuilder.append("KW3756 : 'KW' '3756';\n"); + grammarBuilder.append("KW3757 : 'KW' '3757';\n"); + grammarBuilder.append("KW3758 : 'KW' '3758';\n"); + grammarBuilder.append("KW3759 : 'KW' '3759';\n"); + grammarBuilder.append("KW3760 : 'KW' '3760';\n"); + grammarBuilder.append("KW3761 : 'KW' '3761';\n"); + grammarBuilder.append("KW3762 : 'KW' '3762';\n"); + grammarBuilder.append("KW3763 : 'KW' '3763';\n"); + grammarBuilder.append("KW3764 : 'KW' '3764';\n"); + grammarBuilder.append("KW3765 : 'KW' '3765';\n"); + grammarBuilder.append("KW3766 : 'KW' '3766';\n"); + grammarBuilder.append("KW3767 : 'KW' '3767';\n"); + grammarBuilder.append("KW3768 : 'KW' '3768';\n"); + grammarBuilder.append("KW3769 : 'KW' '3769';\n"); + grammarBuilder.append("KW3770 : 'KW' '3770';\n"); + grammarBuilder.append("KW3771 : 'KW' '3771';\n"); + grammarBuilder.append("KW3772 : 'KW' '3772';\n"); + grammarBuilder.append("KW3773 : 'KW' '3773';\n"); + grammarBuilder.append("KW3774 : 'KW' '3774';\n"); + grammarBuilder.append("KW3775 : 'KW' '3775';\n"); + grammarBuilder.append("KW3776 : 'KW' '3776';\n"); + grammarBuilder.append("KW3777 : 'KW' '3777';\n"); + grammarBuilder.append("KW3778 : 'KW' '3778';\n"); + grammarBuilder.append("KW3779 : 'KW' '3779';\n"); + grammarBuilder.append("KW3780 : 'KW' '3780';\n"); + grammarBuilder.append("KW3781 : 'KW' '3781';\n"); + grammarBuilder.append("KW3782 : 'KW' '3782';\n"); + grammarBuilder.append("KW3783 : 'KW' '3783';\n"); + grammarBuilder.append("KW3784 : 'KW' '3784';\n"); + grammarBuilder.append("KW3785 : 'KW' '3785';\n"); + grammarBuilder.append("KW3786 : 'KW' '3786';\n"); + grammarBuilder.append("KW3787 : 'KW' '3787';\n"); + grammarBuilder.append("KW3788 : 'KW' '3788';\n"); + grammarBuilder.append("KW3789 : 'KW' '3789';\n"); + grammarBuilder.append("KW3790 : 'KW' '3790';\n"); + grammarBuilder.append("KW3791 : 'KW' '3791';\n"); + grammarBuilder.append("KW3792 : 'KW' '3792';\n"); + grammarBuilder.append("KW3793 : 'KW' '3793';\n"); + grammarBuilder.append("KW3794 : 'KW' '3794';\n"); + grammarBuilder.append("KW3795 : 'KW' '3795';\n"); + grammarBuilder.append("KW3796 : 'KW' '3796';\n"); + grammarBuilder.append("KW3797 : 'KW' '3797';\n"); + grammarBuilder.append("KW3798 : 'KW' '3798';\n"); + grammarBuilder.append("KW3799 : 'KW' '3799';\n"); + grammarBuilder.append("KW3800 : 'KW' '3800';\n"); + grammarBuilder.append("KW3801 : 'KW' '3801';\n"); + grammarBuilder.append("KW3802 : 'KW' '3802';\n"); + grammarBuilder.append("KW3803 : 'KW' '3803';\n"); + grammarBuilder.append("KW3804 : 'KW' '3804';\n"); + grammarBuilder.append("KW3805 : 'KW' '3805';\n"); + grammarBuilder.append("KW3806 : 'KW' '3806';\n"); + grammarBuilder.append("KW3807 : 'KW' '3807';\n"); + grammarBuilder.append("KW3808 : 'KW' '3808';\n"); + grammarBuilder.append("KW3809 : 'KW' '3809';\n"); + grammarBuilder.append("KW3810 : 'KW' '3810';\n"); + grammarBuilder.append("KW3811 : 'KW' '3811';\n"); + grammarBuilder.append("KW3812 : 'KW' '3812';\n"); + grammarBuilder.append("KW3813 : 'KW' '3813';\n"); + grammarBuilder.append("KW3814 : 'KW' '3814';\n"); + grammarBuilder.append("KW3815 : 'KW' '3815';\n"); + grammarBuilder.append("KW3816 : 'KW' '3816';\n"); + grammarBuilder.append("KW3817 : 'KW' '3817';\n"); + grammarBuilder.append("KW3818 : 'KW' '3818';\n"); + grammarBuilder.append("KW3819 : 'KW' '3819';\n"); + grammarBuilder.append("KW3820 : 'KW' '3820';\n"); + grammarBuilder.append("KW3821 : 'KW' '3821';\n"); + grammarBuilder.append("KW3822 : 'KW' '3822';\n"); + grammarBuilder.append("KW3823 : 'KW' '3823';\n"); + grammarBuilder.append("KW3824 : 'KW' '3824';\n"); + grammarBuilder.append("KW3825 : 'KW' '3825';\n"); + grammarBuilder.append("KW3826 : 'KW' '3826';\n"); + grammarBuilder.append("KW3827 : 'KW' '3827';\n"); + grammarBuilder.append("KW3828 : 'KW' '3828';\n"); + grammarBuilder.append("KW3829 : 'KW' '3829';\n"); + grammarBuilder.append("KW3830 : 'KW' '3830';\n"); + grammarBuilder.append("KW3831 : 'KW' '3831';\n"); + grammarBuilder.append("KW3832 : 'KW' '3832';\n"); + grammarBuilder.append("KW3833 : 'KW' '3833';\n"); + grammarBuilder.append("KW3834 : 'KW' '3834';\n"); + grammarBuilder.append("KW3835 : 'KW' '3835';\n"); + grammarBuilder.append("KW3836 : 'KW' '3836';\n"); + grammarBuilder.append("KW3837 : 'KW' '3837';\n"); + grammarBuilder.append("KW3838 : 'KW' '3838';\n"); + grammarBuilder.append("KW3839 : 'KW' '3839';\n"); + grammarBuilder.append("KW3840 : 'KW' '3840';\n"); + grammarBuilder.append("KW3841 : 'KW' '3841';\n"); + grammarBuilder.append("KW3842 : 'KW' '3842';\n"); + grammarBuilder.append("KW3843 : 'KW' '3843';\n"); + grammarBuilder.append("KW3844 : 'KW' '3844';\n"); + grammarBuilder.append("KW3845 : 'KW' '3845';\n"); + grammarBuilder.append("KW3846 : 'KW' '3846';\n"); + grammarBuilder.append("KW3847 : 'KW' '3847';\n"); + grammarBuilder.append("KW3848 : 'KW' '3848';\n"); + grammarBuilder.append("KW3849 : 'KW' '3849';\n"); + grammarBuilder.append("KW3850 : 'KW' '3850';\n"); + grammarBuilder.append("KW3851 : 'KW' '3851';\n"); + grammarBuilder.append("KW3852 : 'KW' '3852';\n"); + grammarBuilder.append("KW3853 : 'KW' '3853';\n"); + grammarBuilder.append("KW3854 : 'KW' '3854';\n"); + grammarBuilder.append("KW3855 : 'KW' '3855';\n"); + grammarBuilder.append("KW3856 : 'KW' '3856';\n"); + grammarBuilder.append("KW3857 : 'KW' '3857';\n"); + grammarBuilder.append("KW3858 : 'KW' '3858';\n"); + grammarBuilder.append("KW3859 : 'KW' '3859';\n"); + grammarBuilder.append("KW3860 : 'KW' '3860';\n"); + grammarBuilder.append("KW3861 : 'KW' '3861';\n"); + grammarBuilder.append("KW3862 : 'KW' '3862';\n"); + grammarBuilder.append("KW3863 : 'KW' '3863';\n"); + grammarBuilder.append("KW3864 : 'KW' '3864';\n"); + grammarBuilder.append("KW3865 : 'KW' '3865';\n"); + grammarBuilder.append("KW3866 : 'KW' '3866';\n"); + grammarBuilder.append("KW3867 : 'KW' '3867';\n"); + grammarBuilder.append("KW3868 : 'KW' '3868';\n"); + grammarBuilder.append("KW3869 : 'KW' '3869';\n"); + grammarBuilder.append("KW3870 : 'KW' '3870';\n"); + grammarBuilder.append("KW3871 : 'KW' '3871';\n"); + grammarBuilder.append("KW3872 : 'KW' '3872';\n"); + grammarBuilder.append("KW3873 : 'KW' '3873';\n"); + grammarBuilder.append("KW3874 : 'KW' '3874';\n"); + grammarBuilder.append("KW3875 : 'KW' '3875';\n"); + grammarBuilder.append("KW3876 : 'KW' '3876';\n"); + grammarBuilder.append("KW3877 : 'KW' '3877';\n"); + grammarBuilder.append("KW3878 : 'KW' '3878';\n"); + grammarBuilder.append("KW3879 : 'KW' '3879';\n"); + grammarBuilder.append("KW3880 : 'KW' '3880';\n"); + grammarBuilder.append("KW3881 : 'KW' '3881';\n"); + grammarBuilder.append("KW3882 : 'KW' '3882';\n"); + grammarBuilder.append("KW3883 : 'KW' '3883';\n"); + grammarBuilder.append("KW3884 : 'KW' '3884';\n"); + grammarBuilder.append("KW3885 : 'KW' '3885';\n"); + grammarBuilder.append("KW3886 : 'KW' '3886';\n"); + grammarBuilder.append("KW3887 : 'KW' '3887';\n"); + grammarBuilder.append("KW3888 : 'KW' '3888';\n"); + grammarBuilder.append("KW3889 : 'KW' '3889';\n"); + grammarBuilder.append("KW3890 : 'KW' '3890';\n"); + grammarBuilder.append("KW3891 : 'KW' '3891';\n"); + grammarBuilder.append("KW3892 : 'KW' '3892';\n"); + grammarBuilder.append("KW3893 : 'KW' '3893';\n"); + grammarBuilder.append("KW3894 : 'KW' '3894';\n"); + grammarBuilder.append("KW3895 : 'KW' '3895';\n"); + grammarBuilder.append("KW3896 : 'KW' '3896';\n"); + grammarBuilder.append("KW3897 : 'KW' '3897';\n"); + grammarBuilder.append("KW3898 : 'KW' '3898';\n"); + grammarBuilder.append("KW3899 : 'KW' '3899';\n"); + grammarBuilder.append("KW3900 : 'KW' '3900';\n"); + grammarBuilder.append("KW3901 : 'KW' '3901';\n"); + grammarBuilder.append("KW3902 : 'KW' '3902';\n"); + grammarBuilder.append("KW3903 : 'KW' '3903';\n"); + grammarBuilder.append("KW3904 : 'KW' '3904';\n"); + grammarBuilder.append("KW3905 : 'KW' '3905';\n"); + grammarBuilder.append("KW3906 : 'KW' '3906';\n"); + grammarBuilder.append("KW3907 : 'KW' '3907';\n"); + grammarBuilder.append("KW3908 : 'KW' '3908';\n"); + grammarBuilder.append("KW3909 : 'KW' '3909';\n"); + grammarBuilder.append("KW3910 : 'KW' '3910';\n"); + grammarBuilder.append("KW3911 : 'KW' '3911';\n"); + grammarBuilder.append("KW3912 : 'KW' '3912';\n"); + grammarBuilder.append("KW3913 : 'KW' '3913';\n"); + grammarBuilder.append("KW3914 : 'KW' '3914';\n"); + grammarBuilder.append("KW3915 : 'KW' '3915';\n"); + grammarBuilder.append("KW3916 : 'KW' '3916';\n"); + grammarBuilder.append("KW3917 : 'KW' '3917';\n"); + grammarBuilder.append("KW3918 : 'KW' '3918';\n"); + grammarBuilder.append("KW3919 : 'KW' '3919';\n"); + grammarBuilder.append("KW3920 : 'KW' '3920';\n"); + grammarBuilder.append("KW3921 : 'KW' '3921';\n"); + grammarBuilder.append("KW3922 : 'KW' '3922';\n"); + grammarBuilder.append("KW3923 : 'KW' '3923';\n"); + grammarBuilder.append("KW3924 : 'KW' '3924';\n"); + grammarBuilder.append("KW3925 : 'KW' '3925';\n"); + grammarBuilder.append("KW3926 : 'KW' '3926';\n"); + grammarBuilder.append("KW3927 : 'KW' '3927';\n"); + grammarBuilder.append("KW3928 : 'KW' '3928';\n"); + grammarBuilder.append("KW3929 : 'KW' '3929';\n"); + grammarBuilder.append("KW3930 : 'KW' '3930';\n"); + grammarBuilder.append("KW3931 : 'KW' '3931';\n"); + grammarBuilder.append("KW3932 : 'KW' '3932';\n"); + grammarBuilder.append("KW3933 : 'KW' '3933';\n"); + grammarBuilder.append("KW3934 : 'KW' '3934';\n"); + grammarBuilder.append("KW3935 : 'KW' '3935';\n"); + grammarBuilder.append("KW3936 : 'KW' '3936';\n"); + grammarBuilder.append("KW3937 : 'KW' '3937';\n"); + grammarBuilder.append("KW3938 : 'KW' '3938';\n"); + grammarBuilder.append("KW3939 : 'KW' '3939';\n"); + grammarBuilder.append("KW3940 : 'KW' '3940';\n"); + grammarBuilder.append("KW3941 : 'KW' '3941';\n"); + grammarBuilder.append("KW3942 : 'KW' '3942';\n"); + grammarBuilder.append("KW3943 : 'KW' '3943';\n"); + grammarBuilder.append("KW3944 : 'KW' '3944';\n"); + grammarBuilder.append("KW3945 : 'KW' '3945';\n"); + grammarBuilder.append("KW3946 : 'KW' '3946';\n"); + grammarBuilder.append("KW3947 : 'KW' '3947';\n"); + grammarBuilder.append("KW3948 : 'KW' '3948';\n"); + grammarBuilder.append("KW3949 : 'KW' '3949';\n"); + grammarBuilder.append("KW3950 : 'KW' '3950';\n"); + grammarBuilder.append("KW3951 : 'KW' '3951';\n"); + grammarBuilder.append("KW3952 : 'KW' '3952';\n"); + grammarBuilder.append("KW3953 : 'KW' '3953';\n"); + grammarBuilder.append("KW3954 : 'KW' '3954';\n"); + grammarBuilder.append("KW3955 : 'KW' '3955';\n"); + grammarBuilder.append("KW3956 : 'KW' '3956';\n"); + grammarBuilder.append("KW3957 : 'KW' '3957';\n"); + grammarBuilder.append("KW3958 : 'KW' '3958';\n"); + grammarBuilder.append("KW3959 : 'KW' '3959';\n"); + grammarBuilder.append("KW3960 : 'KW' '3960';\n"); + grammarBuilder.append("KW3961 : 'KW' '3961';\n"); + grammarBuilder.append("KW3962 : 'KW' '3962';\n"); + grammarBuilder.append("KW3963 : 'KW' '3963';\n"); + grammarBuilder.append("KW3964 : 'KW' '3964';\n"); + grammarBuilder.append("KW3965 : 'KW' '3965';\n"); + grammarBuilder.append("KW3966 : 'KW' '3966';\n"); + grammarBuilder.append("KW3967 : 'KW' '3967';\n"); + grammarBuilder.append("KW3968 : 'KW' '3968';\n"); + grammarBuilder.append("KW3969 : 'KW' '3969';\n"); + grammarBuilder.append("KW3970 : 'KW' '3970';\n"); + grammarBuilder.append("KW3971 : 'KW' '3971';\n"); + grammarBuilder.append("KW3972 : 'KW' '3972';\n"); + grammarBuilder.append("KW3973 : 'KW' '3973';\n"); + grammarBuilder.append("KW3974 : 'KW' '3974';\n"); + grammarBuilder.append("KW3975 : 'KW' '3975';\n"); + grammarBuilder.append("KW3976 : 'KW' '3976';\n"); + grammarBuilder.append("KW3977 : 'KW' '3977';\n"); + grammarBuilder.append("KW3978 : 'KW' '3978';\n"); + grammarBuilder.append("KW3979 : 'KW' '3979';\n"); + grammarBuilder.append("KW3980 : 'KW' '3980';\n"); + grammarBuilder.append("KW3981 : 'KW' '3981';\n"); + grammarBuilder.append("KW3982 : 'KW' '3982';\n"); + grammarBuilder.append("KW3983 : 'KW' '3983';\n"); + grammarBuilder.append("KW3984 : 'KW' '3984';\n"); + grammarBuilder.append("KW3985 : 'KW' '3985';\n"); + grammarBuilder.append("KW3986 : 'KW' '3986';\n"); + grammarBuilder.append("KW3987 : 'KW' '3987';\n"); + grammarBuilder.append("KW3988 : 'KW' '3988';\n"); + grammarBuilder.append("KW3989 : 'KW' '3989';\n"); + grammarBuilder.append("KW3990 : 'KW' '3990';\n"); + grammarBuilder.append("KW3991 : 'KW' '3991';\n"); + grammarBuilder.append("KW3992 : 'KW' '3992';\n"); + grammarBuilder.append("KW3993 : 'KW' '3993';\n"); + grammarBuilder.append("KW3994 : 'KW' '3994';\n"); + grammarBuilder.append("KW3995 : 'KW' '3995';\n"); + grammarBuilder.append("KW3996 : 'KW' '3996';\n"); + grammarBuilder.append("KW3997 : 'KW' '3997';\n"); + grammarBuilder.append("KW3998 : 'KW' '3998';\n"); + grammarBuilder.append("KW3999 : 'KW' '3999';"); + String grammar = grammarBuilder.toString(); + + String input ="KW400"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='KW400',<402>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : .*? ('a' | 'ab') {std::cout << getText() << std::endl;} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : . {std::cout << getText() << std::endl;};"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "a\n" + + "b\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:1='b',<3>,1:1]\n" + + "[@2,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"hi\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:3='\"hi\"',<1>,1:0]\n" + + "[@1,4:8='\"mom\"',<1>,1:4]\n" + + "[@2,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParentheses() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("START_BLOCK: '-.-.-';\n"); + grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); + grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); + grammarBuilder.append("fragment L_A: '.-';\n"); + grammarBuilder.append("fragment L_K: '-.-';\n"); + grammarBuilder.append("SEPARATOR: '!';"); + String grammar = grammarBuilder.toString(); + + String input ="-.-.-!"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='-.-.-',<1>,1:0]\n" + + "[@1,5:5='!',<3>,1:5]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPositionAdjustingLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(2737); + grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("protected:\n"); + grammarBuilder.append(" class PositionAdjustingLexerATNSimulator : public atn::LexerATNSimulator {\n"); + grammarBuilder.append(" public:\n"); + grammarBuilder.append(" PositionAdjustingLexerATNSimulator(Lexer *recog, const atn::ATN &atn, std::vector &decisionToDFA,\n"); + grammarBuilder.append(" atn::PredictionContextCache &sharedContextCache)\n"); + grammarBuilder.append(" : atn::LexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache) {\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" void resetAcceptPosition(CharStream *input, int index, int line, int charPositionInLine) {\n"); + grammarBuilder.append(" input->seek(index);\n"); + grammarBuilder.append(" _line = line;\n"); + grammarBuilder.append(" _charPositionInLine = charPositionInLine;\n"); + grammarBuilder.append(" consume(input);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual std::unique_ptr nextToken() override {\n"); + grammarBuilder.append(" if (dynamic_cast(_interpreter) == nullptr) {\n"); + grammarBuilder.append(" delete _interpreter;\n"); + grammarBuilder.append(" _interpreter = new PositionAdjustingLexerATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return Lexer::nextToken();\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" virtual Token* emit() override {\n"); + grammarBuilder.append(" switch (type) {\n"); + grammarBuilder.append(" case TOKENS:\n"); + grammarBuilder.append(" handleAcceptPositionForKeyword(\"tokens\");\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" case LABEL:\n"); + grammarBuilder.append(" handleAcceptPositionForIdentifier();\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" default:\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" return Lexer::emit();\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("private:\n"); + grammarBuilder.append(" bool handleAcceptPositionForIdentifier() {\n"); + grammarBuilder.append(" std::string tokenText = getText();\n"); + grammarBuilder.append(" int identifierLength = 0;\n"); + grammarBuilder.append(" while (identifierLength < tokenText.length() && isIdentifierChar(tokenText[identifierLength])) {\n"); + grammarBuilder.append(" identifierLength++;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" if (getInputStream()->index() > tokenStartCharIndex + identifierLength) {\n"); + grammarBuilder.append(" int offset = identifierLength - 1;\n"); + grammarBuilder.append(" getInterpreter()->resetAcceptPosition(getInputStream(),\n"); + grammarBuilder.append(" tokenStartCharIndex + offset, tokenStartLine, tokenStartCharPositionInLine + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" bool handleAcceptPositionForKeyword(const std::string &keyword) {\n"); + grammarBuilder.append(" if (getInputStream()->index() > tokenStartCharIndex + keyword.length()) {\n"); + grammarBuilder.append(" long offset = keyword.size() - 1;\n"); + grammarBuilder.append(" getInterpreter()->resetAcceptPosition(getInputStream(),\n"); + grammarBuilder.append(" tokenStartCharIndex + offset, tokenStartLine, tokenStartCharPositionInLine + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" static bool isIdentifierChar(char c) {\n"); + grammarBuilder.append(" return std::isalnum(c) || c == '_';\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ASSIGN : '=' ;\n"); + grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); + grammarBuilder.append("LCURLY: '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// 'tokens' followed by '{'\n"); + grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); + grammarBuilder.append("LABEL\n"); + grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("IDENTIFIER\n"); + grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("IGNORED\n"); + grammarBuilder.append(" : [ \\t\\r\\n]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("NEWLINE\n"); + grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS\n"); + grammarBuilder.append(" : [ \\t]+ -> skip\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + String input = + "tokens\n" + + "tokens {\n" + + "notLabel\n" + + "label1 =\n" + + "label2 +=\n" + + "notLabel\n"; + String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); + assertEquals( + "[@0,0:5='tokens',<6>,1:0]\n" + + "[@1,7:12='tokens',<4>,2:0]\n" + + "[@2,14:14='{',<3>,2:7]\n" + + "[@3,16:23='notLabel',<6>,3:0]\n" + + "[@4,25:30='label1',<5>,4:0]\n" + + "[@5,32:32='=',<1>,4:7]\n" + + "[@6,34:39='label2',<5>,5:0]\n" + + "[@7,41:42='+=',<2>,5:7]\n" + + "[@8,44:51='notLabel',<6>,6:0]\n" + + "[@9,53:52='',<-1>,7:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testQuoteTranslation() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); + String grammar = grammarBuilder.toString(); + + String input ="\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\"',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : '-' I ;\n"); + grammarBuilder.append("I : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 -21 3"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='34',<2>,1:0]\n" + + "[@1,3:5='-21',<1>,1:3]\n" + + "[@2,7:7='3',<2>,1:7]\n" + + "[@3,8:7='',<-1>,1:8]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSlashes() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("Backslash : '\\\\';\n"); + grammarBuilder.append("Slash : '/';\n"); + grammarBuilder.append("Vee : '\\\\/';\n"); + grammarBuilder.append("Wedge : '/\\\\';\n"); + grammarBuilder.append("WS : [ \\t] -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="\\ / \\/ /\\"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\\',<1>,1:0]\n" + + "[@1,2:2='/',<2>,1:2]\n" + + "[@2,4:5='\\/',<3>,1:4]\n" + + "[@3,7:8='/\\',<4>,1:7]\n" + + "[@4,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testZeroLengthToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("BeginString\n"); + grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("mode StringMode;\n"); + grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); + grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); + grammarBuilder.append("mode EndStringMode; \n"); + grammarBuilder.append(" EndString : '\\'' -> popMode;"); + String grammar = grammarBuilder.toString(); + + String input ="'xxx'"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4=''xxx'',<1>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestListeners.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestListeners.java new file mode 100644 index 000000000..6a119ac29 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestListeners.java @@ -0,0 +1,377 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestListeners extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(506); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::definitions {\n"); + grammarBuilder.append("#include \"TBaseListener.h\"\n"); + grammarBuilder.append("class LeafListener : public TBaseListener {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual void visitTerminal(tree::TerminalNode *node) override {\n"); + grammarBuilder.append(" std::cout << node->getSymbol()->getText() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("LeafListener listener;\n"); + grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1\n" + + "2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLR() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(716); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::definitions {\n"); + grammarBuilder.append("#include \"TBaseListener.h\"\n"); + grammarBuilder.append("class LeafListener : public TBaseListener {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual void exitE(TParser::EContext *ctx) override {\n"); + grammarBuilder.append(" if (ctx->children.size() == 3) {\n"); + grammarBuilder.append(" std::cout << ctx->e(0)->start->getText() << \" \" << ctx->e(1)->start->getText() << \" \" << ctx->e()[0]->start->getText() << std::endl;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" std::cout << ctx->INT()->getSymbol()->getText() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("LeafListener listener;\n"); + grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e op='*' e\n"); + grammarBuilder.append(" | e op='+' e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) + (e (e 2) * (e 3)))\n" + + "1\n" + + "2\n" + + "3\n" + + "2 3 2\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLRWithLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(718); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::definitions {\n"); + grammarBuilder.append("#include \"TBaseListener.h\"\n"); + grammarBuilder.append("class LeafListener : public TBaseListener {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual void exitCall(TParser::CallContext *ctx) override {\n"); + grammarBuilder.append(" std::cout << ctx->e()->start->getText() << \" \" << ctx->eList()->toString() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" virtual void exitInt(TParser::IntContext *ctx) override {\n"); + grammarBuilder.append(" std::cout << ctx->INT()->getSymbol()->getText() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("LeafListener listener;\n"); + grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e '(' eList ')' # Call\n"); + grammarBuilder.append(" | INT # Int\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("eList : e (',' e)* ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1(2,3)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + + "1\n" + + "2\n" + + "3\n" + + "1 [13 6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(736); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::definitions {\n"); + grammarBuilder.append("#include \"TBaseListener.h\"\n"); + grammarBuilder.append("class LeafListener : public TBaseListener {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); + grammarBuilder.append(" if (ctx->children.size() == 2) {\n"); + grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << \" \" << ctx->b(1)->start->getText() << \" \" << ctx->b()[0]->start->getText() << std::endl;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("LeafListener listener;\n"); + grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b 1) (b 2))\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(736); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::definitions {\n"); + grammarBuilder.append("#include \"TBaseListener.h\"\n"); + grammarBuilder.append("class LeafListener : public TBaseListener {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); + grammarBuilder.append(" if (ctx->children.size() == 2) {\n"); + grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << \" \" << ctx->b(1)->start->getText() << \" \" << ctx->b()[0]->start->getText() << std::endl;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("LeafListener listener;\n"); + grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b abc))\n" + + "abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(701); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::definitions {\n"); + grammarBuilder.append("#include \"TBaseListener.h\"\n"); + grammarBuilder.append("class LeafListener : public TBaseListener {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); + grammarBuilder.append(" if (ctx->children.size() == 2)\n"); + grammarBuilder.append(" std::cout << ctx->INT(0)->getSymbol()->getText() << \" \" << ctx->INT(1)->getSymbol()->getText()\n"); + grammarBuilder.append(" << \" \" << Arrays::toString(ctx->INT()) << std::endl;\n"); + grammarBuilder.append(" else\n"); + grammarBuilder.append(" std::cout << ctx->ID()->getSymbol()->toString() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("LeafListener listener;\n"); + grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1 2 [1, 2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(701); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::definitions {\n"); + grammarBuilder.append("#include \"TBaseListener.h\"\n"); + grammarBuilder.append("class LeafListener : public TBaseListener {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); + grammarBuilder.append(" if (ctx->children.size() == 2)\n"); + grammarBuilder.append(" std::cout << ctx->INT(0)->getSymbol()->getText() << \" \" << ctx->INT(1)->getSymbol()->getText()\n"); + grammarBuilder.append(" << \" \" << Arrays::toString(ctx->INT()) << std::endl;\n"); + grammarBuilder.append(" else\n"); + grammarBuilder.append(" std::cout << ctx->ID()->getSymbol()->toString() << std::endl;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("LeafListener listener;\n"); + grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a abc)\n" + + "[@0,0:2='abc',<4>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParseTrees.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParseTrees.java new file mode 100644 index 000000000..74fdcd499 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParseTrees.java @@ -0,0 +1,311 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParseTrees extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2AltLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(147); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyyxyxz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y y x y x z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2Alts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAltNum() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(582); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class MyRuleNode : public ParserRuleContext {\n"); + grammarBuilder.append("public:\n"); + grammarBuilder.append(" size_t altNum;\n"); + grammarBuilder.append(" MyRuleNode(ParserRuleContext *parent, int invokingStateNumber)\n"); + grammarBuilder.append(" : ParserRuleContext(parent, invokingStateNumber) {\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" virtual size_t getAltNumber() const override { return altNum; }\n"); + grammarBuilder.append(" virtual void setAltNumber(size_t altNum) override { this->altNum = altNum; }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("a : 'f'\n"); + grammarBuilder.append(" | 'g'\n"); + grammarBuilder.append(" | 'x' b 'z'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'e' {} | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a:3 x (b:2 y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExtraToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(153); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="xzy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(155); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a z)\n", found); + + assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleRef() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b 'x'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'y' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="yx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a (b y) x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSync() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(156); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'* '!'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xzyy!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y y !)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToken2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(138); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenAndRuleContextString() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(217); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' { \n"); + grammarBuilder.append("std::cout << Arrays::listToString(getRuleInvocationStack(), \", \") << std::endl;\n"); + grammarBuilder.append("} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "[a, s]\n" + + "(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserErrors.java new file mode 100644 index 000000000..2256222f0 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserErrors.java @@ -0,0 +1,752 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserErrors extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x='b' {std::cout << \"conjured=\" + $x->toString() << std::endl;} 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpTokenFromSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x=('b'|'c') {std::cout << \"conjured=\" + $x->toString() << std::endl;} 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testContextListGetters() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(208); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members{\n"); + grammarBuilder.append("void foo() {\n"); + grammarBuilder.append(" SContext *s;\n"); + grammarBuilder.append(" std::vector a = s->a();\n"); + grammarBuilder.append(" std::vector b = s->b();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : (a | b)+;\n"); + grammarBuilder.append("a : 'a' {std::cout << \"a\";};\n"); + grammarBuilder.append("b : 'b' {std::cout << \"b\";};"); + String grammar = grammarBuilder.toString(); + + + String input ="abab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("abab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidATNStateRemoval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(114); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {/* do nothing */} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input ="x:x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidEmptyInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID+;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + + assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1ErrorInfo() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(303); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); + grammarBuilder.append("animal : (DOG | CAT );\n"); + grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); + grammarBuilder.append("AND : 'and';\n"); + grammarBuilder.append("DOG : 'dog';\n"); + grammarBuilder.append("CAT : 'cat';\n"); + grammarBuilder.append("HARDWARE: 'hardware';\n"); + grammarBuilder.append("SOFTWARE: 'software';\n"); + grammarBuilder.append("WS : ' ' -> skip ;\n"); + grammarBuilder.append("acClass\n"); + grammarBuilder.append("@init\n"); + grammarBuilder.append("{std::cout << getExpectedTokens().toString(_tokenNames) << std::endl;}\n"); + grammarBuilder.append(" : ;"); + String grammar = grammarBuilder.toString(); + + + String input ="dog and software"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("{'hardware', 'software'}\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'\n"); + grammarBuilder.append(" | 'a' 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(55); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c'\n"); + grammarBuilder.append(" | 'a' 'b' 'd'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abe"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLLStar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aaae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAltAvoidance() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e '!' ;\n"); + grammarBuilder.append("e : 'a' 'b'\n"); + grammarBuilder.append(" | 'a'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a."; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(34); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(107); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {std::cout << \"\" + $myset.stop->toString() << std::endl;} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@0,0:0='a',<3>,1:0]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('b' | 'c')\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'a'\n"); + grammarBuilder.append(";"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(25); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})*;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforePredict() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="caaab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(107); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {std::cout << \"\" + $myset.stop->toString() << std::endl;} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="aabd"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@2,2:2='b',<1>,1:2]\n", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionExpectingSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); + grammarBuilder.append("expr: ID '=' STR ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="( ~FORCE_ERROR~ "; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserExec.java new file mode 100644 index 000000000..880cf2c88 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestParserExec.java @@ -0,0 +1,823 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserExec extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(97); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID+ {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(97); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(97); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(102); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)+ {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(102); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(102); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorB() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID {\n"); + grammarBuilder.append("std::cout << \"alt 1\" << std::endl;\n"); + grammarBuilder.append("} | INT {\n"); + grammarBuilder.append("std::cout << \"alt 2\" << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(125); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})+ {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(125); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(125); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID INT {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFInClosure() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : stat EOF;\n"); + grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(206); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(206); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(207); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(206); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(123); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(123); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("std::cout << $text << std::endl;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(197); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : a* EOF;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : label=subrule {std::cout << $label.text << std::endl;} #One\n"); + grammarBuilder.append(" | label='y' {std::cout << $label.text << std::endl;} #Two\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("subrule : 'x';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "x\n" + + "y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); + grammarBuilder.append("b : id_=ID val+=INT*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelForClosureContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(465); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("ifStatement\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("assert($ctx->elseIfStatement().size() >= 0);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : 'if' expression\n"); + grammarBuilder.append(" ( ( 'then'\n"); + grammarBuilder.append(" executableStatement*\n"); + grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); + grammarBuilder.append(" elseStatement?\n"); + grammarBuilder.append(" 'end' 'if'\n"); + grammarBuilder.append(" ) | executableStatement )\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("elseIfStatement\n"); + grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expression : 'a' ;\n"); + grammarBuilder.append("executableStatement : 'a' ;\n"); + grammarBuilder.append("elseStatement : 'a' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelsOnSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b b* ';' ;\n"); + grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleEOFHandling() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(42); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserProperty() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("bool Property() {\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("a : {Property()}? ID {std::cout << \"valid\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("valid\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedIfIfElse() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(174); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : stmt EOF ;\n"); + grammarBuilder.append("stmt : ifStmt | ID;\n"); + grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { _input->LA(1) != TParser::ELSE }?);\n"); + grammarBuilder.append("ELSE : 'else';\n"); + grammarBuilder.append("ID : [a-zA-Z]+;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x if x a else b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredictionIssue334() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(273); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_ @init{\n"); + grammarBuilder.append("_errHandler = std::make_shared();\n"); + grammarBuilder.append("} \n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("std::cout << $ctx->toStringTree(this) << std::endl;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); + grammarBuilder.append("item : A B?;\n"); + grammarBuilder.append("SEMICOLON: ';';\n"); + grammarBuilder.append("A : 'a'|'A';\n"); + grammarBuilder.append("B : 'b'|'B';\n"); + grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); + + assertEquals("(file_ (item a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {std::cout << $text << std::endl;} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {std::cout << $text << std::endl;} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestPerformance.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestPerformance.java new file mode 100644 index 000000000..71e92347b --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestPerformance.java @@ -0,0 +1,220 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestPerformance extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalLexer.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalLexer.java new file mode 100644 index 000000000..efb5a4164 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalLexer.java @@ -0,0 +1,218 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalLexer extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisableRule() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("E1 : 'enum' { false }? ;\n"); + grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<3>,1:5]\n" + + "[@2,8:7='',<-1>,1:8]\n" + + "s0-' '->:s5=>4\n" + + "s0-'a'->:s6=>3\n" + + "s0-'e'->:s1=>3\n" + + ":s1=>3-'n'->:s2=>3\n" + + ":s2=>3-'u'->:s3=>3\n" + + ":s6=>3-'b'->:s6=>3\n" + + ":s6=>3-'c'->:s6=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnumNotID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { getText() == \"enum\" }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<1>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s3=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDnotEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s2=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDvsEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s5=>3\n" + + "s0-'a'->:s4=>2\n" + + "s0-'e'->:s1=>2\n" + + ":s1=>2-'n'->:s2=>2\n" + + ":s2=>2-'u'->:s3=>2\n" + + ":s4=>2-'b'->:s4=>2\n" + + ":s4=>2-'c'->:s4=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndent() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(163); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("INDENT : [ \\t]+ { tokenStartCharPositionInLine == 0 }?\n"); + grammarBuilder.append(" { std::cout << \"INDENT\" << std::endl; } ;\n"); + grammarBuilder.append("NL : '\\n';\n"); + grammarBuilder.append("WS : [ \\t]+ ;"); + String grammar = grammarBuilder.toString(); + + String input = + "abc\n" + + " def \n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "INDENT\n" + + "[@0,0:2='abc',<1>,1:0]\n" + + "[@1,3:3='\\n',<3>,1:3]\n" + + "[@2,4:5=' ',<2>,2:0]\n" + + "[@3,6:8='def',<1>,2:2]\n" + + "[@4,9:10=' ',<4>,2:5]\n" + + "[@5,11:11='\\n',<3>,2:7]\n" + + "[@6,12:11='',<-1>,3:0]\n" + + "s0-'\n" + + "'->:s2=>3\n" + + "s0-'a'->:s1=>1\n" + + "s0-'d'->:s1=>1\n" + + ":s1=>1-'b'->:s1=>1\n" + + ":s1=>1-'c'->:s1=>1\n" + + ":s1=>1-'e'->:s1=>1\n" + + ":s1=>1-'f'->:s1=>1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerInputPositionSensitivePredicates() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(270); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WORD1 : ID1+ { std::cout << getText() << std::endl; } ;\n"); + grammarBuilder.append("WORD2 : ID2+ { std::cout << getText() << std::endl; } ;\n"); + grammarBuilder.append("fragment ID1 : { getCharPositionInLine() < 2 }? [a-zA-Z];\n"); + grammarBuilder.append("fragment ID2 : { getCharPositionInLine() >= 2 }? [a-zA-Z];\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input = + "a cde\n" + + "abcde\n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "a\n" + + "cde\n" + + "ab\n" + + "cde\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:4='cde',<2>,1:2]\n" + + "[@2,6:7='ab',<1>,2:0]\n" + + "[@3,8:10='cde',<2>,2:2]\n" + + "[@4,12:11='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedKeywords() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(184); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { getText() == \"enum\" }? { std::cout << \"enum!\" << std::endl; } ;\n"); + grammarBuilder.append("ID : [a-z]+ { std::cout << \"ID \" + getText() << std::endl; } ;\n"); + grammarBuilder.append("WS : [ \\n] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="enum enu a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "enum!\n" + + "ID enu\n" + + "ID a\n" + + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='enu',<2>,1:5]\n" + + "[@2,9:9='a',<2>,1:9]\n" + + "[@3,10:9='',<-1>,1:10]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalParser.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalParser.java new file mode 100644 index 000000000..f0710321e --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSemPredEvalParser.java @@ -0,0 +1,789 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalParser extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAlts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(374); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);} a ';' a; // do 2x: once in ATN, next in DFA\n"); + grammarBuilder.append("a : ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" | {false}? ID {std::cout << \"alt 3\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + + assertEquals( + "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + + "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(439); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);} a ';' a ';' a;\n"); + grammarBuilder.append("a : INT {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | ID {std::cout << \"alt 2\" << std::endl;} // must pick this one for ID since pred is false\n"); + grammarBuilder.append(" | ID {std::cout << \"alt 3\" << std::endl;}\n"); + grammarBuilder.append(" | {false}? ID {std::cout << \"alt 4\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34; x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 2\n" + + "alt 2\n", found); + + assertEquals( + "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + + "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionHidesPreds() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(239); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a+ ;\n"); + grammarBuilder.append("a : {i = 1;} ID {i == 1}? {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {i = 2;} ID {i == 2}? {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionsHidePredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(316); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append(" std::cout << \"eval=\" << std::boolalpha << v << std::endl;\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {} {pred(true)}? {std::cout << \"parse\" << std::endl;} '!' ;\n"); + grammarBuilder.append("t : e {} {pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAtomWithClosureInTranslatedLRRule() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : e[0] EOF;\n"); + grammarBuilder.append("e[int _p]\n"); + grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); + grammarBuilder.append(" ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b+a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDepedentPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(343); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append(" std::cout << \"eval=\" << std::boolalpha << v << std::endl;\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : a[99] ;\n"); + grammarBuilder.append("a[int i] : e {pred($i == 99)}? {std::cout << \"parse\" << std::endl;} '!' ;\n"); + grammarBuilder.append("b[int i] : e {pred($i == 99)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); + grammarBuilder.append("b[int i] : a[i] ;\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i == 1}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {$i == 2}? ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisabledAlternative() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); + grammarBuilder.append("content: anything | {false}? .;\n"); + grammarBuilder.append("anything: ANY_CHAR;\n"); + grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); + String grammar = grammarBuilder.toString(); + + + String input ="hello"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(209); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b ';' | b '.' ;\n"); + grammarBuilder.append("b : a ;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoTruePredsThrowsNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(197); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {false}? ID INT {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {false}? ID INT {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOrder() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(323); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); + grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); + grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); + grammarBuilder.append("a : ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(217); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {std::cout << $ctx->toStringTree(this) << std::endl;}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{_input->LA(2) != TParser::NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); + + assertEquals( + "line 5:0 mismatched input '' expecting '\n" + + "'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(217); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {std::cout << $ctx->toStringTree(this) << std::endl;}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{_input->LA(2) != TParser::NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n" + + "\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(230); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {std::cout << \"ID \"+$ID.text << std::endl;}\n"); + grammarBuilder.append(" | {!enumKeyword}? 'enum' {std::cout << \"enum\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("ID abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(230); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {std::cout << \"ID \"+$ID.text << std::endl;}\n"); + grammarBuilder.append(" | {!enumKeyword}? 'enum' {std::cout << \"enum\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="enum"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i == 1}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {$i == 2}? ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i == 1}? ID \n"); + grammarBuilder.append(" | {$i == 2}? ID \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(310); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append(" std::cout << \"eval=\" << std::boolalpha << v << std::endl;\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {pred(true)}? {std::cout << \"parse\" << std::endl;} '!' ;\n"); + grammarBuilder.append("t : e {pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRewindBeforePredEval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {_input->LT(1)->getText() == \"x\"}? ID INT {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {_input->LT(1)->getText() == \"y\"}? ID INT {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(295); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); + grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" | INT {std::cout << \"alt 3\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y 3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(190); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {true}? INT {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(193); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a;\n"); + grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {true}? INT {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="3 4 x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n", found); + + assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeft() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(190); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append(" s : a+ ;\n"); + grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeftWithVaryingPredicate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(289); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : ({i += 1;\n"); + grammarBuilder.append("std::cout << \"i=\";\n"); + grammarBuilder.append("std::cout << i << std::endl;} a)+ ;\n"); + grammarBuilder.append("a : {i % 2 == 0}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {i % 2 != 0}? ID {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "i=1\n" + + "alt 2\n" + + "i=2\n" + + "alt 1\n" + + "i=3\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testUnpredicatedPathsInAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(209); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | b {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("a : {false}? ID INT\n"); + grammarBuilder.append(" | ID INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testValidateInDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(358); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ';' a;\n"); + grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); + grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); + grammarBuilder.append("// throws an exception if the validating predicate fails\n"); + grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); + grammarBuilder.append(" | {true}? INT {std::cout << \"alt 2\" << std::endl;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x ; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 no viable alternative at input 'x'\n" + + "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSets.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSets.java new file mode 100644 index 000000000..6ceb6b9b7 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestSets.java @@ -0,0 +1,500 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSets extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetLiteral() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (A {std::cout << $A.text << std::endl;})+ ;\n"); + grammarBuilder.append("A : [AaBb] ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="A a B b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals( + "A\n" + + "a\n" + + "B\n" + + "b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testComplementSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("parse : ~NEW_LINE;\n"); + grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 token recognition error at: 'a'\n" + + "line 1:1 missing {} at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : ('a'|'b')? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : ('a'|'b')* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotChar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(66); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); + grammarBuilder.append("A : ~'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(72); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); + grammarBuilder.append("A : ~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(74); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); + grammarBuilder.append("A : h=~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithRuleRef3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(138); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); + grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("B : ~('a'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : 'b'? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')? 'c' {std::cout << _input->getText() << std::endl;} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A? 'c' {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~('x'|'y') 'z' {std::cout << $t.text << std::endl;} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(72); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ~'x' 'z' {std::cout << _input->getText() << std::endl;} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("zz\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotTokenWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~'x' 'z' {std::cout << $t.text << std::endl;} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(65); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=('x'|'y') {std::cout << $t.text << std::endl;} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : 'b'+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {std::cout << _input->getText() << std::endl;} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleAsSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {std::cout << _input->getText() << std::endl;} : 'a' | 'b' |'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSeqDoesNotBecomeSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(122); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : C {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("fragment A : '1' | '2';\n"); + grammarBuilder.append("fragment B : '3' '4';\n"); + grammarBuilder.append("C : A | B;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')* 'c' {std::cout << _input->getText() << std::endl;} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestVisitors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestVisitors.java new file mode 100644 index 000000000..db946b35c --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/cpp/TestVisitors.java @@ -0,0 +1,53 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.cpp; + +import org.junit.Ignore; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestVisitors extends BaseCppTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testBasic() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLR() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLRWithLabels() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_2() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_2() throws Exception { + } + + +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/BaseCSharpTest.java similarity index 98% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseTest.java rename to runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/BaseCSharpTest.java index 14848a7aa..e1d417854 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseTest.java +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/BaseCSharpTest.java @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.antlr.v4.test.runtime.csharp; +package org.antlr.v4.test.runtime.legacy.csharp; import org.antlr.v4.Tool; import org.antlr.v4.runtime.CommonTokenStream; @@ -35,7 +35,7 @@ import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.TokenSource; import org.antlr.v4.runtime.WritableToken; import org.antlr.v4.runtime.misc.Utils; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; import org.antlr.v4.tool.ANTLRMessage; import org.antlr.v4.tool.DefaultToolListener; import org.antlr.v4.tool.GrammarSemanticsMessage; @@ -77,7 +77,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public abstract class BaseTest { +public abstract class BaseCSharpTest { public static final String newline = System.getProperty("line.separator"); public static final String pathSep = System.getProperty("path.separator"); @@ -311,6 +311,8 @@ public abstract class BaseTest { String grammarStr, String parserName, String lexerName, + String listenerName, + String visitorName, String startRuleName, String input, boolean debug) { @@ -465,8 +467,9 @@ public abstract class BaseTest { public boolean createProject() { try { - String pack = BaseTest.class.getPackage().getName().replace(".", "/") + "/"; + String pack = BaseCSharpTest.class.getPackage().getName().replace(".", "/") + "/"; // save auxiliary files + pack = pack.replace("legacy/", ""); saveResourceAsFile(pack + "AssemblyInfo.cs", new File(tmpdir, "AssemblyInfo.cs")); saveResourceAsFile(pack + "App.config", new File(tmpdir, "App.config")); // update project diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeLexers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeLexers.java new file mode 100644 index 000000000..e4518a1ee --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeLexers.java @@ -0,0 +1,68 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestCompositeLexers extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {Console.WriteLine(\"S.A\");};\n" + + "C : 'c' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="abc"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "S.A\n" + + "[@0,0:0='a',<3>,1:0]\n" + + "[@1,1:1='b',<1>,1:1]\n" + + "[@2,2:2='c',<4>,1:2]\n" + + "[@3,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {Console.WriteLine(\"S.A\");} ;\n" + + "B : 'b' {Console.WriteLine(\"S.B\");} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(92); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("A : 'a' B {Console.WriteLine(\"M.A\");} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "M.A\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeParsers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeParsers.java new file mode 100644 index 000000000..4e560bbdf --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestCompositeParsers.java @@ -0,0 +1,499 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.Grammar; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestCompositeParsers extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBringInLiteralsFromDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : '=' 'a' {Console.Write(\"S.a\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="=a"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCombinedImportsCombined() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : 'x' INT {Console.WriteLine(\"S.x\");};\n" + + "INT : '0'..'9'+ ;\n" + + "WS : (' '|'\\n') -> skip ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(31); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : x INT;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + + + String input ="x 34 9"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatesSeeSameTokenType() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { C, B, A } // reverse order\n" + + "y : A {Console.WriteLine(\"T.y\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : A {Console.WriteLine(\"S.x\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(598); + grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); + grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); + grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); + grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); + grammarBuilder.append("// mapping in each parser:\n"); + grammarBuilder.append("// public static final int C=6;\n"); + grammarBuilder.append("// public static final int EOF=-1;\n"); + grammarBuilder.append("// public static final int B=5;\n"); + grammarBuilder.append("// public static final int WS=7;\n"); + grammarBuilder.append("// public static final int A=4;\n"); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); + grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); + grammarBuilder.append("A : 'a' ; \n"); + grammarBuilder.append("C : 'c' ; \n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + + + String input ="aa"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals( + "S.x\n" + + "T.y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorAccessesDelegateMembers() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "@parser::members {\n" + + "public void foo() {Console.WriteLine(\"foo\");}\n" + + "}\n" + + "a : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar M; // uses no rules from the import\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : 'b' {this.foo();} ; // gS is import pointer\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("foo\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {Console.WriteLine(\"S.a\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a[int x] returns [int y] : B {Console.Write(\"S.a\");} {$y=1000;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(144); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : label=a[3] {Console.WriteLine($label.y);} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a1000\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {Console.Write(\"S.a\");} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(130); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a {Console.Write($a.text);} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.ab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "a : B {Console.WriteLine(\"T.a\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {Console.WriteLine(\"S.a\");};\n" + + "b : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : b {Console.Write(\"S.a\");};\n" + + "b : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("b : 'b'|'c';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegates() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { A }\n" + + "b : 'b' {Console.WriteLine(\"T.b\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {Console.WriteLine(\"S.a\");};\n" + + "b : 'b' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S, T;\n"); + grammarBuilder.append("b : 'b'|'c' {Console.WriteLine(\"M.b\");}|B|A;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.b\n" + + "S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "type_ : 'int' ;\n" + + "decl : type_ ID ';'\n" + + " | type_ ID init ';' {Console.Write(\"JavaDecl: \" + $text);};\n" + + "init : '=' INT;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("prog : decl ;\n"); + grammarBuilder.append("type_ : 'int' | 'float' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="float x = 3;"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); + + assertEquals("JavaDecl: floatx=3;\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportLexerWithOnlyFragmentRules() throws Exception { + mkdir(tmpdir); + + String slave_Unicode = + "lexer grammar Unicode;\n" + + "\n" + + "fragment\n" + + "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + + " | '\\u2000'..'\\u200A'\n" + + " | '\\u202F' | '\\u205F' | '\\u3000'\n" + + " ;\n"; + writeFile(tmpdir, "Unicode.g4", slave_Unicode); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar Test;\n"); + grammarBuilder.append("import Unicode;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program : 'test' 'test';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="test test"; + String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedGrammarWithEmptyOptions() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "options {}\n" + + "a : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedRuleWithAction() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a @after {int x = 0;} : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordVSIDOrder() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "ID : 'a'..'z'+;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("a : A {Console.WriteLine(\"M.a: \" + $A);};\n"); + grammarBuilder.append("A : 'abc' {Console.WriteLine(\"M.A\");};\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.A\n" + + "M.a: [@0,0:2='abc',<1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestFullContextParsing.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestFullContextParsing.java new file mode 100644 index 000000000..e5c56965b --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestFullContextParsing.java @@ -0,0 +1,519 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestFullContextParsing extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigYieldsCtxSensitiveDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(101); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.DumpDFA();}\n"); + grammarBuilder.append(" : ID | ID {} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-ID->:s1^=>1\n", found); + + assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbiguityNoLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append(" : expr expr {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: '@'\n"); + grammarBuilder.append(" | ID '@'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a@"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("alt 1\n", found); + + assertEquals( + "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + + "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + + "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFATwoDiffInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.DumpDFA();}\n"); + grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc @ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 2:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + + "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="@ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(289); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append(": expr[0] {Console.WriteLine($expr.ctx.ToStringTree(this));};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(289); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append(": expr[0] {Console.WriteLine($expr.ctx.ToStringTree(this));};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b * (expr c)))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + + "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + + "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(237); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append("@after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s1=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(237); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append("@after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(237); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append("@after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(237); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append("@after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo else bar }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + + "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(237); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append("@after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(237); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append("@after {this.DumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLoopsSimulateTailRecursion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(321); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); + grammarBuilder.append(" : expr_or_assign*;\n"); + grammarBuilder.append("expr_or_assign\n"); + grammarBuilder.append(" : expr '++' {Console.WriteLine(\"fail.\");}\n"); + grammarBuilder.append(" | expr {Console.WriteLine(\"pass: \"+$expr.text);}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); + grammarBuilder.append("expr_primary\n"); + grammarBuilder.append(" : '(' ID ')'\n"); + grammarBuilder.append(" | ID '(' ID ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a(i)<-x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("pass: a(i)<-x\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + + "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSLLSeesEOFInLLGrammar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.DumpDFA();}\n"); + grammarBuilder.append(" : a;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + + "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLeftRecursion.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLeftRecursion.java new file mode 100644 index 000000000..4cd2a76b3 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLeftRecursion.java @@ -0,0 +1,3499 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestLeftRecursion extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="1\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a = 5\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="b = 6\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*2\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(*a)[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="**a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[3]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator b) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator ( (declarator a) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[]()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[][]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {Console.WriteLine($ctx.ToStringTree(this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {Console.WriteLine($ctx.ToStringTree(this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a x) y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {Console.WriteLine($ctx.ToStringTree(this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a (a x) y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 1) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) - (e 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.this"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . this) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e - (e a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a|b&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f(x)==T.c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_11() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f().g(x,1)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_12() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new T[((n-1) * x) + 1]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a|b)&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a > b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) > (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a >> b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) >> (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a^b^c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new A().b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)t.f()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(245); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(245); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(245); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(184); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(184); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(184); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(740); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(740); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(740); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(740); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrecedenceFilterConsidersContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog \n"); + grammarBuilder.append("@after {Console.WriteLine($ctx.ToStringTree(this));}\n"); + grammarBuilder.append(": statement* EOF {};\n"); + grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); + grammarBuilder.append("letterA: 'a';"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(223); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (literal - 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(223); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1 + -1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(342); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(342); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a+b)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(342); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b+c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("((a=b)+c)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(460); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(460); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(460); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(460); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("9\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPred() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a {true}? ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPredFailOption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID {false}?\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y z))\n", found); + + assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a x))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1,3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1, 3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerErrors.java new file mode 100644 index 000000000..dcbabec60 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerErrors.java @@ -0,0 +1,256 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestLexerErrors extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatFailsBackToDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(39); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:3='ab',<1>,1:2]\n" + + "[@2,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;\n"); + grammarBuilder.append("C : 'abcd' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababcx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:4='abc',<2>,1:2]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { } }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='{ { } }',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testErrorInMiddle() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStart() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,1:0='',<-1>,1:1]\n", found); + + assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStartAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,2:1='',<-1>,1:2]\n", found); + + assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInTokenAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + + assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerExecDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar L;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + String input ="x : x"; + String found = execLexer("L.g4", grammar, "LLexer", input, false); + assertEquals( + "[@0,0:0='x',<3>,1:0]\n" + + "[@1,2:2=':',<1>,1:2]\n" + + "[@2,4:4='x',<3>,1:4]\n" + + "[@3,5:4='',<-1>,1:5]\n", found); + + assertEquals( + "line 1:1 token recognition error at: ' '\n" + + "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo\"]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerExec.java new file mode 100644 index 000000000..85bab5577 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestLexerExec.java @@ -0,0 +1,5023 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestLexerExec extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionPlacement() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(293); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ({Console.WriteLine(\"stuff fail: \" + this.Text);} 'a'\n"); + grammarBuilder.append("| {Console.WriteLine(\"stuff0: \" + this.Text);}\n"); + grammarBuilder.append(" 'a' {Console.WriteLine(\"stuff1: \" + this.Text);}\n"); + grammarBuilder.append(" 'b' {Console.WriteLine(\"stuff2: \" + this.Text);})\n"); + grammarBuilder.append(" {Console.WriteLine(this.Text);} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "stuff0: \n" + + "stuff1: a\n" + + "stuff2: ab\n" + + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {Console.WriteLine(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetInSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(92); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : (~[ab \\n]|'a') {Console.WriteLine(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="a x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:2='x',<1>,1:2]\n" + + "[@2,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetNot() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {Console.WriteLine(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="xaf"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:2='xaf',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetPlus() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {Console.WriteLine(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(141); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {Console.WriteLine(\"I\");} ;\n"); + grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {Console.WriteLine(\"ID\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34 a2 abc \n" + + " "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "ID\n" + + "ID\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,7:8='a2',<2>,2:4]\n" + + "[@3,10:12='abc',<2>,2:7]\n" + + "[@4,18:17='',<-1>,3:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithEscapedChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DASHBRACK : [\\-\\]]+ {Console.WriteLine(\"DASHBRACK\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="- ] "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "DASHBRACK\n" + + "DASHBRACK\n" + + "[@0,0:0='-',<1>,1:0]\n" + + "[@1,2:2=']',<1>,1:2]\n" + + "[@2,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEndRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-]+ {Console.WriteLine(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="00\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='00',<1>,1:0]\n" + + "[@1,3:2='',<-1>,2:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEscapeChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {Console.WriteLine(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"a-z]+ {Console.WriteLine(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:2='b\"a',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(81); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"\\\\ab]+ {Console.WriteLine(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"\\a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:3='b\"\\a',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithReversedRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [z-a9]+ {Console.WriteLine(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="9"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:0='9',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFByItself() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DONE : EOF ;\n"); + grammarBuilder.append("A : 'a';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:-1='',<1>,1:0]\n" + + "[@1,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input ="a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(100); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ('a' | 'ab') {Console.WriteLine(this.Text);} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testHexVsID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); + grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); + grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="x 0 1 a.b a.l"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='x',<5>,1:0]\n" + + "[@1,1:1=' ',<6>,1:1]\n" + + "[@2,2:2='0',<2>,1:2]\n" + + "[@3,3:3=' ',<6>,1:3]\n" + + "[@4,4:4='1',<2>,1:4]\n" + + "[@5,5:5=' ',<6>,1:5]\n" + + "[@6,6:6='a',<5>,1:6]\n" + + "[@7,7:7='.',<4>,1:7]\n" + + "[@8,8:8='b',<5>,1:8]\n" + + "[@9,9:9=' ',<6>,1:9]\n" + + "[@10,10:10='a',<5>,1:10]\n" + + "[@11,11:11='.',<4>,1:11]\n" + + "[@12,12:12='l',<5>,1:12]\n" + + "[@13,13:12='',<-1>,1:13]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("KEND : 'end' ; // has priority\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="end eend ending a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:2='end',<1>,1:0]\n" + + "[@1,3:3=' ',<3>,1:3]\n" + + "[@2,4:7='eend',<2>,1:4]\n" + + "[@3,8:8=' ',<3>,1:8]\n" + + "[@4,9:14='ending',<2>,1:9]\n" + + "[@5,15:15=' ',<3>,1:15]\n" + + "[@6,16:16='a',<2>,1:16]\n" + + "[@7,17:16='',<-1>,1:17]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLargeLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85821); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); + grammarBuilder.append("KW0 : 'KW' '0';\n"); + grammarBuilder.append("KW1 : 'KW' '1';\n"); + grammarBuilder.append("KW2 : 'KW' '2';\n"); + grammarBuilder.append("KW3 : 'KW' '3';\n"); + grammarBuilder.append("KW4 : 'KW' '4';\n"); + grammarBuilder.append("KW5 : 'KW' '5';\n"); + grammarBuilder.append("KW6 : 'KW' '6';\n"); + grammarBuilder.append("KW7 : 'KW' '7';\n"); + grammarBuilder.append("KW8 : 'KW' '8';\n"); + grammarBuilder.append("KW9 : 'KW' '9';\n"); + grammarBuilder.append("KW10 : 'KW' '10';\n"); + grammarBuilder.append("KW11 : 'KW' '11';\n"); + grammarBuilder.append("KW12 : 'KW' '12';\n"); + grammarBuilder.append("KW13 : 'KW' '13';\n"); + grammarBuilder.append("KW14 : 'KW' '14';\n"); + grammarBuilder.append("KW15 : 'KW' '15';\n"); + grammarBuilder.append("KW16 : 'KW' '16';\n"); + grammarBuilder.append("KW17 : 'KW' '17';\n"); + grammarBuilder.append("KW18 : 'KW' '18';\n"); + grammarBuilder.append("KW19 : 'KW' '19';\n"); + grammarBuilder.append("KW20 : 'KW' '20';\n"); + grammarBuilder.append("KW21 : 'KW' '21';\n"); + grammarBuilder.append("KW22 : 'KW' '22';\n"); + grammarBuilder.append("KW23 : 'KW' '23';\n"); + grammarBuilder.append("KW24 : 'KW' '24';\n"); + grammarBuilder.append("KW25 : 'KW' '25';\n"); + grammarBuilder.append("KW26 : 'KW' '26';\n"); + grammarBuilder.append("KW27 : 'KW' '27';\n"); + grammarBuilder.append("KW28 : 'KW' '28';\n"); + grammarBuilder.append("KW29 : 'KW' '29';\n"); + grammarBuilder.append("KW30 : 'KW' '30';\n"); + grammarBuilder.append("KW31 : 'KW' '31';\n"); + grammarBuilder.append("KW32 : 'KW' '32';\n"); + grammarBuilder.append("KW33 : 'KW' '33';\n"); + grammarBuilder.append("KW34 : 'KW' '34';\n"); + grammarBuilder.append("KW35 : 'KW' '35';\n"); + grammarBuilder.append("KW36 : 'KW' '36';\n"); + grammarBuilder.append("KW37 : 'KW' '37';\n"); + grammarBuilder.append("KW38 : 'KW' '38';\n"); + grammarBuilder.append("KW39 : 'KW' '39';\n"); + grammarBuilder.append("KW40 : 'KW' '40';\n"); + grammarBuilder.append("KW41 : 'KW' '41';\n"); + grammarBuilder.append("KW42 : 'KW' '42';\n"); + grammarBuilder.append("KW43 : 'KW' '43';\n"); + grammarBuilder.append("KW44 : 'KW' '44';\n"); + grammarBuilder.append("KW45 : 'KW' '45';\n"); + grammarBuilder.append("KW46 : 'KW' '46';\n"); + grammarBuilder.append("KW47 : 'KW' '47';\n"); + grammarBuilder.append("KW48 : 'KW' '48';\n"); + grammarBuilder.append("KW49 : 'KW' '49';\n"); + grammarBuilder.append("KW50 : 'KW' '50';\n"); + grammarBuilder.append("KW51 : 'KW' '51';\n"); + grammarBuilder.append("KW52 : 'KW' '52';\n"); + grammarBuilder.append("KW53 : 'KW' '53';\n"); + grammarBuilder.append("KW54 : 'KW' '54';\n"); + grammarBuilder.append("KW55 : 'KW' '55';\n"); + grammarBuilder.append("KW56 : 'KW' '56';\n"); + grammarBuilder.append("KW57 : 'KW' '57';\n"); + grammarBuilder.append("KW58 : 'KW' '58';\n"); + grammarBuilder.append("KW59 : 'KW' '59';\n"); + grammarBuilder.append("KW60 : 'KW' '60';\n"); + grammarBuilder.append("KW61 : 'KW' '61';\n"); + grammarBuilder.append("KW62 : 'KW' '62';\n"); + grammarBuilder.append("KW63 : 'KW' '63';\n"); + grammarBuilder.append("KW64 : 'KW' '64';\n"); + grammarBuilder.append("KW65 : 'KW' '65';\n"); + grammarBuilder.append("KW66 : 'KW' '66';\n"); + grammarBuilder.append("KW67 : 'KW' '67';\n"); + grammarBuilder.append("KW68 : 'KW' '68';\n"); + grammarBuilder.append("KW69 : 'KW' '69';\n"); + grammarBuilder.append("KW70 : 'KW' '70';\n"); + grammarBuilder.append("KW71 : 'KW' '71';\n"); + grammarBuilder.append("KW72 : 'KW' '72';\n"); + grammarBuilder.append("KW73 : 'KW' '73';\n"); + grammarBuilder.append("KW74 : 'KW' '74';\n"); + grammarBuilder.append("KW75 : 'KW' '75';\n"); + grammarBuilder.append("KW76 : 'KW' '76';\n"); + grammarBuilder.append("KW77 : 'KW' '77';\n"); + grammarBuilder.append("KW78 : 'KW' '78';\n"); + grammarBuilder.append("KW79 : 'KW' '79';\n"); + grammarBuilder.append("KW80 : 'KW' '80';\n"); + grammarBuilder.append("KW81 : 'KW' '81';\n"); + grammarBuilder.append("KW82 : 'KW' '82';\n"); + grammarBuilder.append("KW83 : 'KW' '83';\n"); + grammarBuilder.append("KW84 : 'KW' '84';\n"); + grammarBuilder.append("KW85 : 'KW' '85';\n"); + grammarBuilder.append("KW86 : 'KW' '86';\n"); + grammarBuilder.append("KW87 : 'KW' '87';\n"); + grammarBuilder.append("KW88 : 'KW' '88';\n"); + grammarBuilder.append("KW89 : 'KW' '89';\n"); + grammarBuilder.append("KW90 : 'KW' '90';\n"); + grammarBuilder.append("KW91 : 'KW' '91';\n"); + grammarBuilder.append("KW92 : 'KW' '92';\n"); + grammarBuilder.append("KW93 : 'KW' '93';\n"); + grammarBuilder.append("KW94 : 'KW' '94';\n"); + grammarBuilder.append("KW95 : 'KW' '95';\n"); + grammarBuilder.append("KW96 : 'KW' '96';\n"); + grammarBuilder.append("KW97 : 'KW' '97';\n"); + grammarBuilder.append("KW98 : 'KW' '98';\n"); + grammarBuilder.append("KW99 : 'KW' '99';\n"); + grammarBuilder.append("KW100 : 'KW' '100';\n"); + grammarBuilder.append("KW101 : 'KW' '101';\n"); + grammarBuilder.append("KW102 : 'KW' '102';\n"); + grammarBuilder.append("KW103 : 'KW' '103';\n"); + grammarBuilder.append("KW104 : 'KW' '104';\n"); + grammarBuilder.append("KW105 : 'KW' '105';\n"); + grammarBuilder.append("KW106 : 'KW' '106';\n"); + grammarBuilder.append("KW107 : 'KW' '107';\n"); + grammarBuilder.append("KW108 : 'KW' '108';\n"); + grammarBuilder.append("KW109 : 'KW' '109';\n"); + grammarBuilder.append("KW110 : 'KW' '110';\n"); + grammarBuilder.append("KW111 : 'KW' '111';\n"); + grammarBuilder.append("KW112 : 'KW' '112';\n"); + grammarBuilder.append("KW113 : 'KW' '113';\n"); + grammarBuilder.append("KW114 : 'KW' '114';\n"); + grammarBuilder.append("KW115 : 'KW' '115';\n"); + grammarBuilder.append("KW116 : 'KW' '116';\n"); + grammarBuilder.append("KW117 : 'KW' '117';\n"); + grammarBuilder.append("KW118 : 'KW' '118';\n"); + grammarBuilder.append("KW119 : 'KW' '119';\n"); + grammarBuilder.append("KW120 : 'KW' '120';\n"); + grammarBuilder.append("KW121 : 'KW' '121';\n"); + grammarBuilder.append("KW122 : 'KW' '122';\n"); + grammarBuilder.append("KW123 : 'KW' '123';\n"); + grammarBuilder.append("KW124 : 'KW' '124';\n"); + grammarBuilder.append("KW125 : 'KW' '125';\n"); + grammarBuilder.append("KW126 : 'KW' '126';\n"); + grammarBuilder.append("KW127 : 'KW' '127';\n"); + grammarBuilder.append("KW128 : 'KW' '128';\n"); + grammarBuilder.append("KW129 : 'KW' '129';\n"); + grammarBuilder.append("KW130 : 'KW' '130';\n"); + grammarBuilder.append("KW131 : 'KW' '131';\n"); + grammarBuilder.append("KW132 : 'KW' '132';\n"); + grammarBuilder.append("KW133 : 'KW' '133';\n"); + grammarBuilder.append("KW134 : 'KW' '134';\n"); + grammarBuilder.append("KW135 : 'KW' '135';\n"); + grammarBuilder.append("KW136 : 'KW' '136';\n"); + grammarBuilder.append("KW137 : 'KW' '137';\n"); + grammarBuilder.append("KW138 : 'KW' '138';\n"); + grammarBuilder.append("KW139 : 'KW' '139';\n"); + grammarBuilder.append("KW140 : 'KW' '140';\n"); + grammarBuilder.append("KW141 : 'KW' '141';\n"); + grammarBuilder.append("KW142 : 'KW' '142';\n"); + grammarBuilder.append("KW143 : 'KW' '143';\n"); + grammarBuilder.append("KW144 : 'KW' '144';\n"); + grammarBuilder.append("KW145 : 'KW' '145';\n"); + grammarBuilder.append("KW146 : 'KW' '146';\n"); + grammarBuilder.append("KW147 : 'KW' '147';\n"); + grammarBuilder.append("KW148 : 'KW' '148';\n"); + grammarBuilder.append("KW149 : 'KW' '149';\n"); + grammarBuilder.append("KW150 : 'KW' '150';\n"); + grammarBuilder.append("KW151 : 'KW' '151';\n"); + grammarBuilder.append("KW152 : 'KW' '152';\n"); + grammarBuilder.append("KW153 : 'KW' '153';\n"); + grammarBuilder.append("KW154 : 'KW' '154';\n"); + grammarBuilder.append("KW155 : 'KW' '155';\n"); + grammarBuilder.append("KW156 : 'KW' '156';\n"); + grammarBuilder.append("KW157 : 'KW' '157';\n"); + grammarBuilder.append("KW158 : 'KW' '158';\n"); + grammarBuilder.append("KW159 : 'KW' '159';\n"); + grammarBuilder.append("KW160 : 'KW' '160';\n"); + grammarBuilder.append("KW161 : 'KW' '161';\n"); + grammarBuilder.append("KW162 : 'KW' '162';\n"); + grammarBuilder.append("KW163 : 'KW' '163';\n"); + grammarBuilder.append("KW164 : 'KW' '164';\n"); + grammarBuilder.append("KW165 : 'KW' '165';\n"); + grammarBuilder.append("KW166 : 'KW' '166';\n"); + grammarBuilder.append("KW167 : 'KW' '167';\n"); + grammarBuilder.append("KW168 : 'KW' '168';\n"); + grammarBuilder.append("KW169 : 'KW' '169';\n"); + grammarBuilder.append("KW170 : 'KW' '170';\n"); + grammarBuilder.append("KW171 : 'KW' '171';\n"); + grammarBuilder.append("KW172 : 'KW' '172';\n"); + grammarBuilder.append("KW173 : 'KW' '173';\n"); + grammarBuilder.append("KW174 : 'KW' '174';\n"); + grammarBuilder.append("KW175 : 'KW' '175';\n"); + grammarBuilder.append("KW176 : 'KW' '176';\n"); + grammarBuilder.append("KW177 : 'KW' '177';\n"); + grammarBuilder.append("KW178 : 'KW' '178';\n"); + grammarBuilder.append("KW179 : 'KW' '179';\n"); + grammarBuilder.append("KW180 : 'KW' '180';\n"); + grammarBuilder.append("KW181 : 'KW' '181';\n"); + grammarBuilder.append("KW182 : 'KW' '182';\n"); + grammarBuilder.append("KW183 : 'KW' '183';\n"); + grammarBuilder.append("KW184 : 'KW' '184';\n"); + grammarBuilder.append("KW185 : 'KW' '185';\n"); + grammarBuilder.append("KW186 : 'KW' '186';\n"); + grammarBuilder.append("KW187 : 'KW' '187';\n"); + grammarBuilder.append("KW188 : 'KW' '188';\n"); + grammarBuilder.append("KW189 : 'KW' '189';\n"); + grammarBuilder.append("KW190 : 'KW' '190';\n"); + grammarBuilder.append("KW191 : 'KW' '191';\n"); + grammarBuilder.append("KW192 : 'KW' '192';\n"); + grammarBuilder.append("KW193 : 'KW' '193';\n"); + grammarBuilder.append("KW194 : 'KW' '194';\n"); + grammarBuilder.append("KW195 : 'KW' '195';\n"); + grammarBuilder.append("KW196 : 'KW' '196';\n"); + grammarBuilder.append("KW197 : 'KW' '197';\n"); + grammarBuilder.append("KW198 : 'KW' '198';\n"); + grammarBuilder.append("KW199 : 'KW' '199';\n"); + grammarBuilder.append("KW200 : 'KW' '200';\n"); + grammarBuilder.append("KW201 : 'KW' '201';\n"); + grammarBuilder.append("KW202 : 'KW' '202';\n"); + grammarBuilder.append("KW203 : 'KW' '203';\n"); + grammarBuilder.append("KW204 : 'KW' '204';\n"); + grammarBuilder.append("KW205 : 'KW' '205';\n"); + grammarBuilder.append("KW206 : 'KW' '206';\n"); + grammarBuilder.append("KW207 : 'KW' '207';\n"); + grammarBuilder.append("KW208 : 'KW' '208';\n"); + grammarBuilder.append("KW209 : 'KW' '209';\n"); + grammarBuilder.append("KW210 : 'KW' '210';\n"); + grammarBuilder.append("KW211 : 'KW' '211';\n"); + grammarBuilder.append("KW212 : 'KW' '212';\n"); + grammarBuilder.append("KW213 : 'KW' '213';\n"); + grammarBuilder.append("KW214 : 'KW' '214';\n"); + grammarBuilder.append("KW215 : 'KW' '215';\n"); + grammarBuilder.append("KW216 : 'KW' '216';\n"); + grammarBuilder.append("KW217 : 'KW' '217';\n"); + grammarBuilder.append("KW218 : 'KW' '218';\n"); + grammarBuilder.append("KW219 : 'KW' '219';\n"); + grammarBuilder.append("KW220 : 'KW' '220';\n"); + grammarBuilder.append("KW221 : 'KW' '221';\n"); + grammarBuilder.append("KW222 : 'KW' '222';\n"); + grammarBuilder.append("KW223 : 'KW' '223';\n"); + grammarBuilder.append("KW224 : 'KW' '224';\n"); + grammarBuilder.append("KW225 : 'KW' '225';\n"); + grammarBuilder.append("KW226 : 'KW' '226';\n"); + grammarBuilder.append("KW227 : 'KW' '227';\n"); + grammarBuilder.append("KW228 : 'KW' '228';\n"); + grammarBuilder.append("KW229 : 'KW' '229';\n"); + grammarBuilder.append("KW230 : 'KW' '230';\n"); + grammarBuilder.append("KW231 : 'KW' '231';\n"); + grammarBuilder.append("KW232 : 'KW' '232';\n"); + grammarBuilder.append("KW233 : 'KW' '233';\n"); + grammarBuilder.append("KW234 : 'KW' '234';\n"); + grammarBuilder.append("KW235 : 'KW' '235';\n"); + grammarBuilder.append("KW236 : 'KW' '236';\n"); + grammarBuilder.append("KW237 : 'KW' '237';\n"); + grammarBuilder.append("KW238 : 'KW' '238';\n"); + grammarBuilder.append("KW239 : 'KW' '239';\n"); + grammarBuilder.append("KW240 : 'KW' '240';\n"); + grammarBuilder.append("KW241 : 'KW' '241';\n"); + grammarBuilder.append("KW242 : 'KW' '242';\n"); + grammarBuilder.append("KW243 : 'KW' '243';\n"); + grammarBuilder.append("KW244 : 'KW' '244';\n"); + grammarBuilder.append("KW245 : 'KW' '245';\n"); + grammarBuilder.append("KW246 : 'KW' '246';\n"); + grammarBuilder.append("KW247 : 'KW' '247';\n"); + grammarBuilder.append("KW248 : 'KW' '248';\n"); + grammarBuilder.append("KW249 : 'KW' '249';\n"); + grammarBuilder.append("KW250 : 'KW' '250';\n"); + grammarBuilder.append("KW251 : 'KW' '251';\n"); + grammarBuilder.append("KW252 : 'KW' '252';\n"); + grammarBuilder.append("KW253 : 'KW' '253';\n"); + grammarBuilder.append("KW254 : 'KW' '254';\n"); + grammarBuilder.append("KW255 : 'KW' '255';\n"); + grammarBuilder.append("KW256 : 'KW' '256';\n"); + grammarBuilder.append("KW257 : 'KW' '257';\n"); + grammarBuilder.append("KW258 : 'KW' '258';\n"); + grammarBuilder.append("KW259 : 'KW' '259';\n"); + grammarBuilder.append("KW260 : 'KW' '260';\n"); + grammarBuilder.append("KW261 : 'KW' '261';\n"); + grammarBuilder.append("KW262 : 'KW' '262';\n"); + grammarBuilder.append("KW263 : 'KW' '263';\n"); + grammarBuilder.append("KW264 : 'KW' '264';\n"); + grammarBuilder.append("KW265 : 'KW' '265';\n"); + grammarBuilder.append("KW266 : 'KW' '266';\n"); + grammarBuilder.append("KW267 : 'KW' '267';\n"); + grammarBuilder.append("KW268 : 'KW' '268';\n"); + grammarBuilder.append("KW269 : 'KW' '269';\n"); + grammarBuilder.append("KW270 : 'KW' '270';\n"); + grammarBuilder.append("KW271 : 'KW' '271';\n"); + grammarBuilder.append("KW272 : 'KW' '272';\n"); + grammarBuilder.append("KW273 : 'KW' '273';\n"); + grammarBuilder.append("KW274 : 'KW' '274';\n"); + grammarBuilder.append("KW275 : 'KW' '275';\n"); + grammarBuilder.append("KW276 : 'KW' '276';\n"); + grammarBuilder.append("KW277 : 'KW' '277';\n"); + grammarBuilder.append("KW278 : 'KW' '278';\n"); + grammarBuilder.append("KW279 : 'KW' '279';\n"); + grammarBuilder.append("KW280 : 'KW' '280';\n"); + grammarBuilder.append("KW281 : 'KW' '281';\n"); + grammarBuilder.append("KW282 : 'KW' '282';\n"); + grammarBuilder.append("KW283 : 'KW' '283';\n"); + grammarBuilder.append("KW284 : 'KW' '284';\n"); + grammarBuilder.append("KW285 : 'KW' '285';\n"); + grammarBuilder.append("KW286 : 'KW' '286';\n"); + grammarBuilder.append("KW287 : 'KW' '287';\n"); + grammarBuilder.append("KW288 : 'KW' '288';\n"); + grammarBuilder.append("KW289 : 'KW' '289';\n"); + grammarBuilder.append("KW290 : 'KW' '290';\n"); + grammarBuilder.append("KW291 : 'KW' '291';\n"); + grammarBuilder.append("KW292 : 'KW' '292';\n"); + grammarBuilder.append("KW293 : 'KW' '293';\n"); + grammarBuilder.append("KW294 : 'KW' '294';\n"); + grammarBuilder.append("KW295 : 'KW' '295';\n"); + grammarBuilder.append("KW296 : 'KW' '296';\n"); + grammarBuilder.append("KW297 : 'KW' '297';\n"); + grammarBuilder.append("KW298 : 'KW' '298';\n"); + grammarBuilder.append("KW299 : 'KW' '299';\n"); + grammarBuilder.append("KW300 : 'KW' '300';\n"); + grammarBuilder.append("KW301 : 'KW' '301';\n"); + grammarBuilder.append("KW302 : 'KW' '302';\n"); + grammarBuilder.append("KW303 : 'KW' '303';\n"); + grammarBuilder.append("KW304 : 'KW' '304';\n"); + grammarBuilder.append("KW305 : 'KW' '305';\n"); + grammarBuilder.append("KW306 : 'KW' '306';\n"); + grammarBuilder.append("KW307 : 'KW' '307';\n"); + grammarBuilder.append("KW308 : 'KW' '308';\n"); + grammarBuilder.append("KW309 : 'KW' '309';\n"); + grammarBuilder.append("KW310 : 'KW' '310';\n"); + grammarBuilder.append("KW311 : 'KW' '311';\n"); + grammarBuilder.append("KW312 : 'KW' '312';\n"); + grammarBuilder.append("KW313 : 'KW' '313';\n"); + grammarBuilder.append("KW314 : 'KW' '314';\n"); + grammarBuilder.append("KW315 : 'KW' '315';\n"); + grammarBuilder.append("KW316 : 'KW' '316';\n"); + grammarBuilder.append("KW317 : 'KW' '317';\n"); + grammarBuilder.append("KW318 : 'KW' '318';\n"); + grammarBuilder.append("KW319 : 'KW' '319';\n"); + grammarBuilder.append("KW320 : 'KW' '320';\n"); + grammarBuilder.append("KW321 : 'KW' '321';\n"); + grammarBuilder.append("KW322 : 'KW' '322';\n"); + grammarBuilder.append("KW323 : 'KW' '323';\n"); + grammarBuilder.append("KW324 : 'KW' '324';\n"); + grammarBuilder.append("KW325 : 'KW' '325';\n"); + grammarBuilder.append("KW326 : 'KW' '326';\n"); + grammarBuilder.append("KW327 : 'KW' '327';\n"); + grammarBuilder.append("KW328 : 'KW' '328';\n"); + grammarBuilder.append("KW329 : 'KW' '329';\n"); + grammarBuilder.append("KW330 : 'KW' '330';\n"); + grammarBuilder.append("KW331 : 'KW' '331';\n"); + grammarBuilder.append("KW332 : 'KW' '332';\n"); + grammarBuilder.append("KW333 : 'KW' '333';\n"); + grammarBuilder.append("KW334 : 'KW' '334';\n"); + grammarBuilder.append("KW335 : 'KW' '335';\n"); + grammarBuilder.append("KW336 : 'KW' '336';\n"); + grammarBuilder.append("KW337 : 'KW' '337';\n"); + grammarBuilder.append("KW338 : 'KW' '338';\n"); + grammarBuilder.append("KW339 : 'KW' '339';\n"); + grammarBuilder.append("KW340 : 'KW' '340';\n"); + grammarBuilder.append("KW341 : 'KW' '341';\n"); + grammarBuilder.append("KW342 : 'KW' '342';\n"); + grammarBuilder.append("KW343 : 'KW' '343';\n"); + grammarBuilder.append("KW344 : 'KW' '344';\n"); + grammarBuilder.append("KW345 : 'KW' '345';\n"); + grammarBuilder.append("KW346 : 'KW' '346';\n"); + grammarBuilder.append("KW347 : 'KW' '347';\n"); + grammarBuilder.append("KW348 : 'KW' '348';\n"); + grammarBuilder.append("KW349 : 'KW' '349';\n"); + grammarBuilder.append("KW350 : 'KW' '350';\n"); + grammarBuilder.append("KW351 : 'KW' '351';\n"); + grammarBuilder.append("KW352 : 'KW' '352';\n"); + grammarBuilder.append("KW353 : 'KW' '353';\n"); + grammarBuilder.append("KW354 : 'KW' '354';\n"); + grammarBuilder.append("KW355 : 'KW' '355';\n"); + grammarBuilder.append("KW356 : 'KW' '356';\n"); + grammarBuilder.append("KW357 : 'KW' '357';\n"); + grammarBuilder.append("KW358 : 'KW' '358';\n"); + grammarBuilder.append("KW359 : 'KW' '359';\n"); + grammarBuilder.append("KW360 : 'KW' '360';\n"); + grammarBuilder.append("KW361 : 'KW' '361';\n"); + grammarBuilder.append("KW362 : 'KW' '362';\n"); + grammarBuilder.append("KW363 : 'KW' '363';\n"); + grammarBuilder.append("KW364 : 'KW' '364';\n"); + grammarBuilder.append("KW365 : 'KW' '365';\n"); + grammarBuilder.append("KW366 : 'KW' '366';\n"); + grammarBuilder.append("KW367 : 'KW' '367';\n"); + grammarBuilder.append("KW368 : 'KW' '368';\n"); + grammarBuilder.append("KW369 : 'KW' '369';\n"); + grammarBuilder.append("KW370 : 'KW' '370';\n"); + grammarBuilder.append("KW371 : 'KW' '371';\n"); + grammarBuilder.append("KW372 : 'KW' '372';\n"); + grammarBuilder.append("KW373 : 'KW' '373';\n"); + grammarBuilder.append("KW374 : 'KW' '374';\n"); + grammarBuilder.append("KW375 : 'KW' '375';\n"); + grammarBuilder.append("KW376 : 'KW' '376';\n"); + grammarBuilder.append("KW377 : 'KW' '377';\n"); + grammarBuilder.append("KW378 : 'KW' '378';\n"); + grammarBuilder.append("KW379 : 'KW' '379';\n"); + grammarBuilder.append("KW380 : 'KW' '380';\n"); + grammarBuilder.append("KW381 : 'KW' '381';\n"); + grammarBuilder.append("KW382 : 'KW' '382';\n"); + grammarBuilder.append("KW383 : 'KW' '383';\n"); + grammarBuilder.append("KW384 : 'KW' '384';\n"); + grammarBuilder.append("KW385 : 'KW' '385';\n"); + grammarBuilder.append("KW386 : 'KW' '386';\n"); + grammarBuilder.append("KW387 : 'KW' '387';\n"); + grammarBuilder.append("KW388 : 'KW' '388';\n"); + grammarBuilder.append("KW389 : 'KW' '389';\n"); + grammarBuilder.append("KW390 : 'KW' '390';\n"); + grammarBuilder.append("KW391 : 'KW' '391';\n"); + grammarBuilder.append("KW392 : 'KW' '392';\n"); + grammarBuilder.append("KW393 : 'KW' '393';\n"); + grammarBuilder.append("KW394 : 'KW' '394';\n"); + grammarBuilder.append("KW395 : 'KW' '395';\n"); + grammarBuilder.append("KW396 : 'KW' '396';\n"); + grammarBuilder.append("KW397 : 'KW' '397';\n"); + grammarBuilder.append("KW398 : 'KW' '398';\n"); + grammarBuilder.append("KW399 : 'KW' '399';\n"); + grammarBuilder.append("KW400 : 'KW' '400';\n"); + grammarBuilder.append("KW401 : 'KW' '401';\n"); + grammarBuilder.append("KW402 : 'KW' '402';\n"); + grammarBuilder.append("KW403 : 'KW' '403';\n"); + grammarBuilder.append("KW404 : 'KW' '404';\n"); + grammarBuilder.append("KW405 : 'KW' '405';\n"); + grammarBuilder.append("KW406 : 'KW' '406';\n"); + grammarBuilder.append("KW407 : 'KW' '407';\n"); + grammarBuilder.append("KW408 : 'KW' '408';\n"); + grammarBuilder.append("KW409 : 'KW' '409';\n"); + grammarBuilder.append("KW410 : 'KW' '410';\n"); + grammarBuilder.append("KW411 : 'KW' '411';\n"); + grammarBuilder.append("KW412 : 'KW' '412';\n"); + grammarBuilder.append("KW413 : 'KW' '413';\n"); + grammarBuilder.append("KW414 : 'KW' '414';\n"); + grammarBuilder.append("KW415 : 'KW' '415';\n"); + grammarBuilder.append("KW416 : 'KW' '416';\n"); + grammarBuilder.append("KW417 : 'KW' '417';\n"); + grammarBuilder.append("KW418 : 'KW' '418';\n"); + grammarBuilder.append("KW419 : 'KW' '419';\n"); + grammarBuilder.append("KW420 : 'KW' '420';\n"); + grammarBuilder.append("KW421 : 'KW' '421';\n"); + grammarBuilder.append("KW422 : 'KW' '422';\n"); + grammarBuilder.append("KW423 : 'KW' '423';\n"); + grammarBuilder.append("KW424 : 'KW' '424';\n"); + grammarBuilder.append("KW425 : 'KW' '425';\n"); + grammarBuilder.append("KW426 : 'KW' '426';\n"); + grammarBuilder.append("KW427 : 'KW' '427';\n"); + grammarBuilder.append("KW428 : 'KW' '428';\n"); + grammarBuilder.append("KW429 : 'KW' '429';\n"); + grammarBuilder.append("KW430 : 'KW' '430';\n"); + grammarBuilder.append("KW431 : 'KW' '431';\n"); + grammarBuilder.append("KW432 : 'KW' '432';\n"); + grammarBuilder.append("KW433 : 'KW' '433';\n"); + grammarBuilder.append("KW434 : 'KW' '434';\n"); + grammarBuilder.append("KW435 : 'KW' '435';\n"); + grammarBuilder.append("KW436 : 'KW' '436';\n"); + grammarBuilder.append("KW437 : 'KW' '437';\n"); + grammarBuilder.append("KW438 : 'KW' '438';\n"); + grammarBuilder.append("KW439 : 'KW' '439';\n"); + grammarBuilder.append("KW440 : 'KW' '440';\n"); + grammarBuilder.append("KW441 : 'KW' '441';\n"); + grammarBuilder.append("KW442 : 'KW' '442';\n"); + grammarBuilder.append("KW443 : 'KW' '443';\n"); + grammarBuilder.append("KW444 : 'KW' '444';\n"); + grammarBuilder.append("KW445 : 'KW' '445';\n"); + grammarBuilder.append("KW446 : 'KW' '446';\n"); + grammarBuilder.append("KW447 : 'KW' '447';\n"); + grammarBuilder.append("KW448 : 'KW' '448';\n"); + grammarBuilder.append("KW449 : 'KW' '449';\n"); + grammarBuilder.append("KW450 : 'KW' '450';\n"); + grammarBuilder.append("KW451 : 'KW' '451';\n"); + grammarBuilder.append("KW452 : 'KW' '452';\n"); + grammarBuilder.append("KW453 : 'KW' '453';\n"); + grammarBuilder.append("KW454 : 'KW' '454';\n"); + grammarBuilder.append("KW455 : 'KW' '455';\n"); + grammarBuilder.append("KW456 : 'KW' '456';\n"); + grammarBuilder.append("KW457 : 'KW' '457';\n"); + grammarBuilder.append("KW458 : 'KW' '458';\n"); + grammarBuilder.append("KW459 : 'KW' '459';\n"); + grammarBuilder.append("KW460 : 'KW' '460';\n"); + grammarBuilder.append("KW461 : 'KW' '461';\n"); + grammarBuilder.append("KW462 : 'KW' '462';\n"); + grammarBuilder.append("KW463 : 'KW' '463';\n"); + grammarBuilder.append("KW464 : 'KW' '464';\n"); + grammarBuilder.append("KW465 : 'KW' '465';\n"); + grammarBuilder.append("KW466 : 'KW' '466';\n"); + grammarBuilder.append("KW467 : 'KW' '467';\n"); + grammarBuilder.append("KW468 : 'KW' '468';\n"); + grammarBuilder.append("KW469 : 'KW' '469';\n"); + grammarBuilder.append("KW470 : 'KW' '470';\n"); + grammarBuilder.append("KW471 : 'KW' '471';\n"); + grammarBuilder.append("KW472 : 'KW' '472';\n"); + grammarBuilder.append("KW473 : 'KW' '473';\n"); + grammarBuilder.append("KW474 : 'KW' '474';\n"); + grammarBuilder.append("KW475 : 'KW' '475';\n"); + grammarBuilder.append("KW476 : 'KW' '476';\n"); + grammarBuilder.append("KW477 : 'KW' '477';\n"); + grammarBuilder.append("KW478 : 'KW' '478';\n"); + grammarBuilder.append("KW479 : 'KW' '479';\n"); + grammarBuilder.append("KW480 : 'KW' '480';\n"); + grammarBuilder.append("KW481 : 'KW' '481';\n"); + grammarBuilder.append("KW482 : 'KW' '482';\n"); + grammarBuilder.append("KW483 : 'KW' '483';\n"); + grammarBuilder.append("KW484 : 'KW' '484';\n"); + grammarBuilder.append("KW485 : 'KW' '485';\n"); + grammarBuilder.append("KW486 : 'KW' '486';\n"); + grammarBuilder.append("KW487 : 'KW' '487';\n"); + grammarBuilder.append("KW488 : 'KW' '488';\n"); + grammarBuilder.append("KW489 : 'KW' '489';\n"); + grammarBuilder.append("KW490 : 'KW' '490';\n"); + grammarBuilder.append("KW491 : 'KW' '491';\n"); + grammarBuilder.append("KW492 : 'KW' '492';\n"); + grammarBuilder.append("KW493 : 'KW' '493';\n"); + grammarBuilder.append("KW494 : 'KW' '494';\n"); + grammarBuilder.append("KW495 : 'KW' '495';\n"); + grammarBuilder.append("KW496 : 'KW' '496';\n"); + grammarBuilder.append("KW497 : 'KW' '497';\n"); + grammarBuilder.append("KW498 : 'KW' '498';\n"); + grammarBuilder.append("KW499 : 'KW' '499';\n"); + grammarBuilder.append("KW500 : 'KW' '500';\n"); + grammarBuilder.append("KW501 : 'KW' '501';\n"); + grammarBuilder.append("KW502 : 'KW' '502';\n"); + grammarBuilder.append("KW503 : 'KW' '503';\n"); + grammarBuilder.append("KW504 : 'KW' '504';\n"); + grammarBuilder.append("KW505 : 'KW' '505';\n"); + grammarBuilder.append("KW506 : 'KW' '506';\n"); + grammarBuilder.append("KW507 : 'KW' '507';\n"); + grammarBuilder.append("KW508 : 'KW' '508';\n"); + grammarBuilder.append("KW509 : 'KW' '509';\n"); + grammarBuilder.append("KW510 : 'KW' '510';\n"); + grammarBuilder.append("KW511 : 'KW' '511';\n"); + grammarBuilder.append("KW512 : 'KW' '512';\n"); + grammarBuilder.append("KW513 : 'KW' '513';\n"); + grammarBuilder.append("KW514 : 'KW' '514';\n"); + grammarBuilder.append("KW515 : 'KW' '515';\n"); + grammarBuilder.append("KW516 : 'KW' '516';\n"); + grammarBuilder.append("KW517 : 'KW' '517';\n"); + grammarBuilder.append("KW518 : 'KW' '518';\n"); + grammarBuilder.append("KW519 : 'KW' '519';\n"); + grammarBuilder.append("KW520 : 'KW' '520';\n"); + grammarBuilder.append("KW521 : 'KW' '521';\n"); + grammarBuilder.append("KW522 : 'KW' '522';\n"); + grammarBuilder.append("KW523 : 'KW' '523';\n"); + grammarBuilder.append("KW524 : 'KW' '524';\n"); + grammarBuilder.append("KW525 : 'KW' '525';\n"); + grammarBuilder.append("KW526 : 'KW' '526';\n"); + grammarBuilder.append("KW527 : 'KW' '527';\n"); + grammarBuilder.append("KW528 : 'KW' '528';\n"); + grammarBuilder.append("KW529 : 'KW' '529';\n"); + grammarBuilder.append("KW530 : 'KW' '530';\n"); + grammarBuilder.append("KW531 : 'KW' '531';\n"); + grammarBuilder.append("KW532 : 'KW' '532';\n"); + grammarBuilder.append("KW533 : 'KW' '533';\n"); + grammarBuilder.append("KW534 : 'KW' '534';\n"); + grammarBuilder.append("KW535 : 'KW' '535';\n"); + grammarBuilder.append("KW536 : 'KW' '536';\n"); + grammarBuilder.append("KW537 : 'KW' '537';\n"); + grammarBuilder.append("KW538 : 'KW' '538';\n"); + grammarBuilder.append("KW539 : 'KW' '539';\n"); + grammarBuilder.append("KW540 : 'KW' '540';\n"); + grammarBuilder.append("KW541 : 'KW' '541';\n"); + grammarBuilder.append("KW542 : 'KW' '542';\n"); + grammarBuilder.append("KW543 : 'KW' '543';\n"); + grammarBuilder.append("KW544 : 'KW' '544';\n"); + grammarBuilder.append("KW545 : 'KW' '545';\n"); + grammarBuilder.append("KW546 : 'KW' '546';\n"); + grammarBuilder.append("KW547 : 'KW' '547';\n"); + grammarBuilder.append("KW548 : 'KW' '548';\n"); + grammarBuilder.append("KW549 : 'KW' '549';\n"); + grammarBuilder.append("KW550 : 'KW' '550';\n"); + grammarBuilder.append("KW551 : 'KW' '551';\n"); + grammarBuilder.append("KW552 : 'KW' '552';\n"); + grammarBuilder.append("KW553 : 'KW' '553';\n"); + grammarBuilder.append("KW554 : 'KW' '554';\n"); + grammarBuilder.append("KW555 : 'KW' '555';\n"); + grammarBuilder.append("KW556 : 'KW' '556';\n"); + grammarBuilder.append("KW557 : 'KW' '557';\n"); + grammarBuilder.append("KW558 : 'KW' '558';\n"); + grammarBuilder.append("KW559 : 'KW' '559';\n"); + grammarBuilder.append("KW560 : 'KW' '560';\n"); + grammarBuilder.append("KW561 : 'KW' '561';\n"); + grammarBuilder.append("KW562 : 'KW' '562';\n"); + grammarBuilder.append("KW563 : 'KW' '563';\n"); + grammarBuilder.append("KW564 : 'KW' '564';\n"); + grammarBuilder.append("KW565 : 'KW' '565';\n"); + grammarBuilder.append("KW566 : 'KW' '566';\n"); + grammarBuilder.append("KW567 : 'KW' '567';\n"); + grammarBuilder.append("KW568 : 'KW' '568';\n"); + grammarBuilder.append("KW569 : 'KW' '569';\n"); + grammarBuilder.append("KW570 : 'KW' '570';\n"); + grammarBuilder.append("KW571 : 'KW' '571';\n"); + grammarBuilder.append("KW572 : 'KW' '572';\n"); + grammarBuilder.append("KW573 : 'KW' '573';\n"); + grammarBuilder.append("KW574 : 'KW' '574';\n"); + grammarBuilder.append("KW575 : 'KW' '575';\n"); + grammarBuilder.append("KW576 : 'KW' '576';\n"); + grammarBuilder.append("KW577 : 'KW' '577';\n"); + grammarBuilder.append("KW578 : 'KW' '578';\n"); + grammarBuilder.append("KW579 : 'KW' '579';\n"); + grammarBuilder.append("KW580 : 'KW' '580';\n"); + grammarBuilder.append("KW581 : 'KW' '581';\n"); + grammarBuilder.append("KW582 : 'KW' '582';\n"); + grammarBuilder.append("KW583 : 'KW' '583';\n"); + grammarBuilder.append("KW584 : 'KW' '584';\n"); + grammarBuilder.append("KW585 : 'KW' '585';\n"); + grammarBuilder.append("KW586 : 'KW' '586';\n"); + grammarBuilder.append("KW587 : 'KW' '587';\n"); + grammarBuilder.append("KW588 : 'KW' '588';\n"); + grammarBuilder.append("KW589 : 'KW' '589';\n"); + grammarBuilder.append("KW590 : 'KW' '590';\n"); + grammarBuilder.append("KW591 : 'KW' '591';\n"); + grammarBuilder.append("KW592 : 'KW' '592';\n"); + grammarBuilder.append("KW593 : 'KW' '593';\n"); + grammarBuilder.append("KW594 : 'KW' '594';\n"); + grammarBuilder.append("KW595 : 'KW' '595';\n"); + grammarBuilder.append("KW596 : 'KW' '596';\n"); + grammarBuilder.append("KW597 : 'KW' '597';\n"); + grammarBuilder.append("KW598 : 'KW' '598';\n"); + grammarBuilder.append("KW599 : 'KW' '599';\n"); + grammarBuilder.append("KW600 : 'KW' '600';\n"); + grammarBuilder.append("KW601 : 'KW' '601';\n"); + grammarBuilder.append("KW602 : 'KW' '602';\n"); + grammarBuilder.append("KW603 : 'KW' '603';\n"); + grammarBuilder.append("KW604 : 'KW' '604';\n"); + grammarBuilder.append("KW605 : 'KW' '605';\n"); + grammarBuilder.append("KW606 : 'KW' '606';\n"); + grammarBuilder.append("KW607 : 'KW' '607';\n"); + grammarBuilder.append("KW608 : 'KW' '608';\n"); + grammarBuilder.append("KW609 : 'KW' '609';\n"); + grammarBuilder.append("KW610 : 'KW' '610';\n"); + grammarBuilder.append("KW611 : 'KW' '611';\n"); + grammarBuilder.append("KW612 : 'KW' '612';\n"); + grammarBuilder.append("KW613 : 'KW' '613';\n"); + grammarBuilder.append("KW614 : 'KW' '614';\n"); + grammarBuilder.append("KW615 : 'KW' '615';\n"); + grammarBuilder.append("KW616 : 'KW' '616';\n"); + grammarBuilder.append("KW617 : 'KW' '617';\n"); + grammarBuilder.append("KW618 : 'KW' '618';\n"); + grammarBuilder.append("KW619 : 'KW' '619';\n"); + grammarBuilder.append("KW620 : 'KW' '620';\n"); + grammarBuilder.append("KW621 : 'KW' '621';\n"); + grammarBuilder.append("KW622 : 'KW' '622';\n"); + grammarBuilder.append("KW623 : 'KW' '623';\n"); + grammarBuilder.append("KW624 : 'KW' '624';\n"); + grammarBuilder.append("KW625 : 'KW' '625';\n"); + grammarBuilder.append("KW626 : 'KW' '626';\n"); + grammarBuilder.append("KW627 : 'KW' '627';\n"); + grammarBuilder.append("KW628 : 'KW' '628';\n"); + grammarBuilder.append("KW629 : 'KW' '629';\n"); + grammarBuilder.append("KW630 : 'KW' '630';\n"); + grammarBuilder.append("KW631 : 'KW' '631';\n"); + grammarBuilder.append("KW632 : 'KW' '632';\n"); + grammarBuilder.append("KW633 : 'KW' '633';\n"); + grammarBuilder.append("KW634 : 'KW' '634';\n"); + grammarBuilder.append("KW635 : 'KW' '635';\n"); + grammarBuilder.append("KW636 : 'KW' '636';\n"); + grammarBuilder.append("KW637 : 'KW' '637';\n"); + grammarBuilder.append("KW638 : 'KW' '638';\n"); + grammarBuilder.append("KW639 : 'KW' '639';\n"); + grammarBuilder.append("KW640 : 'KW' '640';\n"); + grammarBuilder.append("KW641 : 'KW' '641';\n"); + grammarBuilder.append("KW642 : 'KW' '642';\n"); + grammarBuilder.append("KW643 : 'KW' '643';\n"); + grammarBuilder.append("KW644 : 'KW' '644';\n"); + grammarBuilder.append("KW645 : 'KW' '645';\n"); + grammarBuilder.append("KW646 : 'KW' '646';\n"); + grammarBuilder.append("KW647 : 'KW' '647';\n"); + grammarBuilder.append("KW648 : 'KW' '648';\n"); + grammarBuilder.append("KW649 : 'KW' '649';\n"); + grammarBuilder.append("KW650 : 'KW' '650';\n"); + grammarBuilder.append("KW651 : 'KW' '651';\n"); + grammarBuilder.append("KW652 : 'KW' '652';\n"); + grammarBuilder.append("KW653 : 'KW' '653';\n"); + grammarBuilder.append("KW654 : 'KW' '654';\n"); + grammarBuilder.append("KW655 : 'KW' '655';\n"); + grammarBuilder.append("KW656 : 'KW' '656';\n"); + grammarBuilder.append("KW657 : 'KW' '657';\n"); + grammarBuilder.append("KW658 : 'KW' '658';\n"); + grammarBuilder.append("KW659 : 'KW' '659';\n"); + grammarBuilder.append("KW660 : 'KW' '660';\n"); + grammarBuilder.append("KW661 : 'KW' '661';\n"); + grammarBuilder.append("KW662 : 'KW' '662';\n"); + grammarBuilder.append("KW663 : 'KW' '663';\n"); + grammarBuilder.append("KW664 : 'KW' '664';\n"); + grammarBuilder.append("KW665 : 'KW' '665';\n"); + grammarBuilder.append("KW666 : 'KW' '666';\n"); + grammarBuilder.append("KW667 : 'KW' '667';\n"); + grammarBuilder.append("KW668 : 'KW' '668';\n"); + grammarBuilder.append("KW669 : 'KW' '669';\n"); + grammarBuilder.append("KW670 : 'KW' '670';\n"); + grammarBuilder.append("KW671 : 'KW' '671';\n"); + grammarBuilder.append("KW672 : 'KW' '672';\n"); + grammarBuilder.append("KW673 : 'KW' '673';\n"); + grammarBuilder.append("KW674 : 'KW' '674';\n"); + grammarBuilder.append("KW675 : 'KW' '675';\n"); + grammarBuilder.append("KW676 : 'KW' '676';\n"); + grammarBuilder.append("KW677 : 'KW' '677';\n"); + grammarBuilder.append("KW678 : 'KW' '678';\n"); + grammarBuilder.append("KW679 : 'KW' '679';\n"); + grammarBuilder.append("KW680 : 'KW' '680';\n"); + grammarBuilder.append("KW681 : 'KW' '681';\n"); + grammarBuilder.append("KW682 : 'KW' '682';\n"); + grammarBuilder.append("KW683 : 'KW' '683';\n"); + grammarBuilder.append("KW684 : 'KW' '684';\n"); + grammarBuilder.append("KW685 : 'KW' '685';\n"); + grammarBuilder.append("KW686 : 'KW' '686';\n"); + grammarBuilder.append("KW687 : 'KW' '687';\n"); + grammarBuilder.append("KW688 : 'KW' '688';\n"); + grammarBuilder.append("KW689 : 'KW' '689';\n"); + grammarBuilder.append("KW690 : 'KW' '690';\n"); + grammarBuilder.append("KW691 : 'KW' '691';\n"); + grammarBuilder.append("KW692 : 'KW' '692';\n"); + grammarBuilder.append("KW693 : 'KW' '693';\n"); + grammarBuilder.append("KW694 : 'KW' '694';\n"); + grammarBuilder.append("KW695 : 'KW' '695';\n"); + grammarBuilder.append("KW696 : 'KW' '696';\n"); + grammarBuilder.append("KW697 : 'KW' '697';\n"); + grammarBuilder.append("KW698 : 'KW' '698';\n"); + grammarBuilder.append("KW699 : 'KW' '699';\n"); + grammarBuilder.append("KW700 : 'KW' '700';\n"); + grammarBuilder.append("KW701 : 'KW' '701';\n"); + grammarBuilder.append("KW702 : 'KW' '702';\n"); + grammarBuilder.append("KW703 : 'KW' '703';\n"); + grammarBuilder.append("KW704 : 'KW' '704';\n"); + grammarBuilder.append("KW705 : 'KW' '705';\n"); + grammarBuilder.append("KW706 : 'KW' '706';\n"); + grammarBuilder.append("KW707 : 'KW' '707';\n"); + grammarBuilder.append("KW708 : 'KW' '708';\n"); + grammarBuilder.append("KW709 : 'KW' '709';\n"); + grammarBuilder.append("KW710 : 'KW' '710';\n"); + grammarBuilder.append("KW711 : 'KW' '711';\n"); + grammarBuilder.append("KW712 : 'KW' '712';\n"); + grammarBuilder.append("KW713 : 'KW' '713';\n"); + grammarBuilder.append("KW714 : 'KW' '714';\n"); + grammarBuilder.append("KW715 : 'KW' '715';\n"); + grammarBuilder.append("KW716 : 'KW' '716';\n"); + grammarBuilder.append("KW717 : 'KW' '717';\n"); + grammarBuilder.append("KW718 : 'KW' '718';\n"); + grammarBuilder.append("KW719 : 'KW' '719';\n"); + grammarBuilder.append("KW720 : 'KW' '720';\n"); + grammarBuilder.append("KW721 : 'KW' '721';\n"); + grammarBuilder.append("KW722 : 'KW' '722';\n"); + grammarBuilder.append("KW723 : 'KW' '723';\n"); + grammarBuilder.append("KW724 : 'KW' '724';\n"); + grammarBuilder.append("KW725 : 'KW' '725';\n"); + grammarBuilder.append("KW726 : 'KW' '726';\n"); + grammarBuilder.append("KW727 : 'KW' '727';\n"); + grammarBuilder.append("KW728 : 'KW' '728';\n"); + grammarBuilder.append("KW729 : 'KW' '729';\n"); + grammarBuilder.append("KW730 : 'KW' '730';\n"); + grammarBuilder.append("KW731 : 'KW' '731';\n"); + grammarBuilder.append("KW732 : 'KW' '732';\n"); + grammarBuilder.append("KW733 : 'KW' '733';\n"); + grammarBuilder.append("KW734 : 'KW' '734';\n"); + grammarBuilder.append("KW735 : 'KW' '735';\n"); + grammarBuilder.append("KW736 : 'KW' '736';\n"); + grammarBuilder.append("KW737 : 'KW' '737';\n"); + grammarBuilder.append("KW738 : 'KW' '738';\n"); + grammarBuilder.append("KW739 : 'KW' '739';\n"); + grammarBuilder.append("KW740 : 'KW' '740';\n"); + grammarBuilder.append("KW741 : 'KW' '741';\n"); + grammarBuilder.append("KW742 : 'KW' '742';\n"); + grammarBuilder.append("KW743 : 'KW' '743';\n"); + grammarBuilder.append("KW744 : 'KW' '744';\n"); + grammarBuilder.append("KW745 : 'KW' '745';\n"); + grammarBuilder.append("KW746 : 'KW' '746';\n"); + grammarBuilder.append("KW747 : 'KW' '747';\n"); + grammarBuilder.append("KW748 : 'KW' '748';\n"); + grammarBuilder.append("KW749 : 'KW' '749';\n"); + grammarBuilder.append("KW750 : 'KW' '750';\n"); + grammarBuilder.append("KW751 : 'KW' '751';\n"); + grammarBuilder.append("KW752 : 'KW' '752';\n"); + grammarBuilder.append("KW753 : 'KW' '753';\n"); + grammarBuilder.append("KW754 : 'KW' '754';\n"); + grammarBuilder.append("KW755 : 'KW' '755';\n"); + grammarBuilder.append("KW756 : 'KW' '756';\n"); + grammarBuilder.append("KW757 : 'KW' '757';\n"); + grammarBuilder.append("KW758 : 'KW' '758';\n"); + grammarBuilder.append("KW759 : 'KW' '759';\n"); + grammarBuilder.append("KW760 : 'KW' '760';\n"); + grammarBuilder.append("KW761 : 'KW' '761';\n"); + grammarBuilder.append("KW762 : 'KW' '762';\n"); + grammarBuilder.append("KW763 : 'KW' '763';\n"); + grammarBuilder.append("KW764 : 'KW' '764';\n"); + grammarBuilder.append("KW765 : 'KW' '765';\n"); + grammarBuilder.append("KW766 : 'KW' '766';\n"); + grammarBuilder.append("KW767 : 'KW' '767';\n"); + grammarBuilder.append("KW768 : 'KW' '768';\n"); + grammarBuilder.append("KW769 : 'KW' '769';\n"); + grammarBuilder.append("KW770 : 'KW' '770';\n"); + grammarBuilder.append("KW771 : 'KW' '771';\n"); + grammarBuilder.append("KW772 : 'KW' '772';\n"); + grammarBuilder.append("KW773 : 'KW' '773';\n"); + grammarBuilder.append("KW774 : 'KW' '774';\n"); + grammarBuilder.append("KW775 : 'KW' '775';\n"); + grammarBuilder.append("KW776 : 'KW' '776';\n"); + grammarBuilder.append("KW777 : 'KW' '777';\n"); + grammarBuilder.append("KW778 : 'KW' '778';\n"); + grammarBuilder.append("KW779 : 'KW' '779';\n"); + grammarBuilder.append("KW780 : 'KW' '780';\n"); + grammarBuilder.append("KW781 : 'KW' '781';\n"); + grammarBuilder.append("KW782 : 'KW' '782';\n"); + grammarBuilder.append("KW783 : 'KW' '783';\n"); + grammarBuilder.append("KW784 : 'KW' '784';\n"); + grammarBuilder.append("KW785 : 'KW' '785';\n"); + grammarBuilder.append("KW786 : 'KW' '786';\n"); + grammarBuilder.append("KW787 : 'KW' '787';\n"); + grammarBuilder.append("KW788 : 'KW' '788';\n"); + grammarBuilder.append("KW789 : 'KW' '789';\n"); + grammarBuilder.append("KW790 : 'KW' '790';\n"); + grammarBuilder.append("KW791 : 'KW' '791';\n"); + grammarBuilder.append("KW792 : 'KW' '792';\n"); + grammarBuilder.append("KW793 : 'KW' '793';\n"); + grammarBuilder.append("KW794 : 'KW' '794';\n"); + grammarBuilder.append("KW795 : 'KW' '795';\n"); + grammarBuilder.append("KW796 : 'KW' '796';\n"); + grammarBuilder.append("KW797 : 'KW' '797';\n"); + grammarBuilder.append("KW798 : 'KW' '798';\n"); + grammarBuilder.append("KW799 : 'KW' '799';\n"); + grammarBuilder.append("KW800 : 'KW' '800';\n"); + grammarBuilder.append("KW801 : 'KW' '801';\n"); + grammarBuilder.append("KW802 : 'KW' '802';\n"); + grammarBuilder.append("KW803 : 'KW' '803';\n"); + grammarBuilder.append("KW804 : 'KW' '804';\n"); + grammarBuilder.append("KW805 : 'KW' '805';\n"); + grammarBuilder.append("KW806 : 'KW' '806';\n"); + grammarBuilder.append("KW807 : 'KW' '807';\n"); + grammarBuilder.append("KW808 : 'KW' '808';\n"); + grammarBuilder.append("KW809 : 'KW' '809';\n"); + grammarBuilder.append("KW810 : 'KW' '810';\n"); + grammarBuilder.append("KW811 : 'KW' '811';\n"); + grammarBuilder.append("KW812 : 'KW' '812';\n"); + grammarBuilder.append("KW813 : 'KW' '813';\n"); + grammarBuilder.append("KW814 : 'KW' '814';\n"); + grammarBuilder.append("KW815 : 'KW' '815';\n"); + grammarBuilder.append("KW816 : 'KW' '816';\n"); + grammarBuilder.append("KW817 : 'KW' '817';\n"); + grammarBuilder.append("KW818 : 'KW' '818';\n"); + grammarBuilder.append("KW819 : 'KW' '819';\n"); + grammarBuilder.append("KW820 : 'KW' '820';\n"); + grammarBuilder.append("KW821 : 'KW' '821';\n"); + grammarBuilder.append("KW822 : 'KW' '822';\n"); + grammarBuilder.append("KW823 : 'KW' '823';\n"); + grammarBuilder.append("KW824 : 'KW' '824';\n"); + grammarBuilder.append("KW825 : 'KW' '825';\n"); + grammarBuilder.append("KW826 : 'KW' '826';\n"); + grammarBuilder.append("KW827 : 'KW' '827';\n"); + grammarBuilder.append("KW828 : 'KW' '828';\n"); + grammarBuilder.append("KW829 : 'KW' '829';\n"); + grammarBuilder.append("KW830 : 'KW' '830';\n"); + grammarBuilder.append("KW831 : 'KW' '831';\n"); + grammarBuilder.append("KW832 : 'KW' '832';\n"); + grammarBuilder.append("KW833 : 'KW' '833';\n"); + grammarBuilder.append("KW834 : 'KW' '834';\n"); + grammarBuilder.append("KW835 : 'KW' '835';\n"); + grammarBuilder.append("KW836 : 'KW' '836';\n"); + grammarBuilder.append("KW837 : 'KW' '837';\n"); + grammarBuilder.append("KW838 : 'KW' '838';\n"); + grammarBuilder.append("KW839 : 'KW' '839';\n"); + grammarBuilder.append("KW840 : 'KW' '840';\n"); + grammarBuilder.append("KW841 : 'KW' '841';\n"); + grammarBuilder.append("KW842 : 'KW' '842';\n"); + grammarBuilder.append("KW843 : 'KW' '843';\n"); + grammarBuilder.append("KW844 : 'KW' '844';\n"); + grammarBuilder.append("KW845 : 'KW' '845';\n"); + grammarBuilder.append("KW846 : 'KW' '846';\n"); + grammarBuilder.append("KW847 : 'KW' '847';\n"); + grammarBuilder.append("KW848 : 'KW' '848';\n"); + grammarBuilder.append("KW849 : 'KW' '849';\n"); + grammarBuilder.append("KW850 : 'KW' '850';\n"); + grammarBuilder.append("KW851 : 'KW' '851';\n"); + grammarBuilder.append("KW852 : 'KW' '852';\n"); + grammarBuilder.append("KW853 : 'KW' '853';\n"); + grammarBuilder.append("KW854 : 'KW' '854';\n"); + grammarBuilder.append("KW855 : 'KW' '855';\n"); + grammarBuilder.append("KW856 : 'KW' '856';\n"); + grammarBuilder.append("KW857 : 'KW' '857';\n"); + grammarBuilder.append("KW858 : 'KW' '858';\n"); + grammarBuilder.append("KW859 : 'KW' '859';\n"); + grammarBuilder.append("KW860 : 'KW' '860';\n"); + grammarBuilder.append("KW861 : 'KW' '861';\n"); + grammarBuilder.append("KW862 : 'KW' '862';\n"); + grammarBuilder.append("KW863 : 'KW' '863';\n"); + grammarBuilder.append("KW864 : 'KW' '864';\n"); + grammarBuilder.append("KW865 : 'KW' '865';\n"); + grammarBuilder.append("KW866 : 'KW' '866';\n"); + grammarBuilder.append("KW867 : 'KW' '867';\n"); + grammarBuilder.append("KW868 : 'KW' '868';\n"); + grammarBuilder.append("KW869 : 'KW' '869';\n"); + grammarBuilder.append("KW870 : 'KW' '870';\n"); + grammarBuilder.append("KW871 : 'KW' '871';\n"); + grammarBuilder.append("KW872 : 'KW' '872';\n"); + grammarBuilder.append("KW873 : 'KW' '873';\n"); + grammarBuilder.append("KW874 : 'KW' '874';\n"); + grammarBuilder.append("KW875 : 'KW' '875';\n"); + grammarBuilder.append("KW876 : 'KW' '876';\n"); + grammarBuilder.append("KW877 : 'KW' '877';\n"); + grammarBuilder.append("KW878 : 'KW' '878';\n"); + grammarBuilder.append("KW879 : 'KW' '879';\n"); + grammarBuilder.append("KW880 : 'KW' '880';\n"); + grammarBuilder.append("KW881 : 'KW' '881';\n"); + grammarBuilder.append("KW882 : 'KW' '882';\n"); + grammarBuilder.append("KW883 : 'KW' '883';\n"); + grammarBuilder.append("KW884 : 'KW' '884';\n"); + grammarBuilder.append("KW885 : 'KW' '885';\n"); + grammarBuilder.append("KW886 : 'KW' '886';\n"); + grammarBuilder.append("KW887 : 'KW' '887';\n"); + grammarBuilder.append("KW888 : 'KW' '888';\n"); + grammarBuilder.append("KW889 : 'KW' '889';\n"); + grammarBuilder.append("KW890 : 'KW' '890';\n"); + grammarBuilder.append("KW891 : 'KW' '891';\n"); + grammarBuilder.append("KW892 : 'KW' '892';\n"); + grammarBuilder.append("KW893 : 'KW' '893';\n"); + grammarBuilder.append("KW894 : 'KW' '894';\n"); + grammarBuilder.append("KW895 : 'KW' '895';\n"); + grammarBuilder.append("KW896 : 'KW' '896';\n"); + grammarBuilder.append("KW897 : 'KW' '897';\n"); + grammarBuilder.append("KW898 : 'KW' '898';\n"); + grammarBuilder.append("KW899 : 'KW' '899';\n"); + grammarBuilder.append("KW900 : 'KW' '900';\n"); + grammarBuilder.append("KW901 : 'KW' '901';\n"); + grammarBuilder.append("KW902 : 'KW' '902';\n"); + grammarBuilder.append("KW903 : 'KW' '903';\n"); + grammarBuilder.append("KW904 : 'KW' '904';\n"); + grammarBuilder.append("KW905 : 'KW' '905';\n"); + grammarBuilder.append("KW906 : 'KW' '906';\n"); + grammarBuilder.append("KW907 : 'KW' '907';\n"); + grammarBuilder.append("KW908 : 'KW' '908';\n"); + grammarBuilder.append("KW909 : 'KW' '909';\n"); + grammarBuilder.append("KW910 : 'KW' '910';\n"); + grammarBuilder.append("KW911 : 'KW' '911';\n"); + grammarBuilder.append("KW912 : 'KW' '912';\n"); + grammarBuilder.append("KW913 : 'KW' '913';\n"); + grammarBuilder.append("KW914 : 'KW' '914';\n"); + grammarBuilder.append("KW915 : 'KW' '915';\n"); + grammarBuilder.append("KW916 : 'KW' '916';\n"); + grammarBuilder.append("KW917 : 'KW' '917';\n"); + grammarBuilder.append("KW918 : 'KW' '918';\n"); + grammarBuilder.append("KW919 : 'KW' '919';\n"); + grammarBuilder.append("KW920 : 'KW' '920';\n"); + grammarBuilder.append("KW921 : 'KW' '921';\n"); + grammarBuilder.append("KW922 : 'KW' '922';\n"); + grammarBuilder.append("KW923 : 'KW' '923';\n"); + grammarBuilder.append("KW924 : 'KW' '924';\n"); + grammarBuilder.append("KW925 : 'KW' '925';\n"); + grammarBuilder.append("KW926 : 'KW' '926';\n"); + grammarBuilder.append("KW927 : 'KW' '927';\n"); + grammarBuilder.append("KW928 : 'KW' '928';\n"); + grammarBuilder.append("KW929 : 'KW' '929';\n"); + grammarBuilder.append("KW930 : 'KW' '930';\n"); + grammarBuilder.append("KW931 : 'KW' '931';\n"); + grammarBuilder.append("KW932 : 'KW' '932';\n"); + grammarBuilder.append("KW933 : 'KW' '933';\n"); + grammarBuilder.append("KW934 : 'KW' '934';\n"); + grammarBuilder.append("KW935 : 'KW' '935';\n"); + grammarBuilder.append("KW936 : 'KW' '936';\n"); + grammarBuilder.append("KW937 : 'KW' '937';\n"); + grammarBuilder.append("KW938 : 'KW' '938';\n"); + grammarBuilder.append("KW939 : 'KW' '939';\n"); + grammarBuilder.append("KW940 : 'KW' '940';\n"); + grammarBuilder.append("KW941 : 'KW' '941';\n"); + grammarBuilder.append("KW942 : 'KW' '942';\n"); + grammarBuilder.append("KW943 : 'KW' '943';\n"); + grammarBuilder.append("KW944 : 'KW' '944';\n"); + grammarBuilder.append("KW945 : 'KW' '945';\n"); + grammarBuilder.append("KW946 : 'KW' '946';\n"); + grammarBuilder.append("KW947 : 'KW' '947';\n"); + grammarBuilder.append("KW948 : 'KW' '948';\n"); + grammarBuilder.append("KW949 : 'KW' '949';\n"); + grammarBuilder.append("KW950 : 'KW' '950';\n"); + grammarBuilder.append("KW951 : 'KW' '951';\n"); + grammarBuilder.append("KW952 : 'KW' '952';\n"); + grammarBuilder.append("KW953 : 'KW' '953';\n"); + grammarBuilder.append("KW954 : 'KW' '954';\n"); + grammarBuilder.append("KW955 : 'KW' '955';\n"); + grammarBuilder.append("KW956 : 'KW' '956';\n"); + grammarBuilder.append("KW957 : 'KW' '957';\n"); + grammarBuilder.append("KW958 : 'KW' '958';\n"); + grammarBuilder.append("KW959 : 'KW' '959';\n"); + grammarBuilder.append("KW960 : 'KW' '960';\n"); + grammarBuilder.append("KW961 : 'KW' '961';\n"); + grammarBuilder.append("KW962 : 'KW' '962';\n"); + grammarBuilder.append("KW963 : 'KW' '963';\n"); + grammarBuilder.append("KW964 : 'KW' '964';\n"); + grammarBuilder.append("KW965 : 'KW' '965';\n"); + grammarBuilder.append("KW966 : 'KW' '966';\n"); + grammarBuilder.append("KW967 : 'KW' '967';\n"); + grammarBuilder.append("KW968 : 'KW' '968';\n"); + grammarBuilder.append("KW969 : 'KW' '969';\n"); + grammarBuilder.append("KW970 : 'KW' '970';\n"); + grammarBuilder.append("KW971 : 'KW' '971';\n"); + grammarBuilder.append("KW972 : 'KW' '972';\n"); + grammarBuilder.append("KW973 : 'KW' '973';\n"); + grammarBuilder.append("KW974 : 'KW' '974';\n"); + grammarBuilder.append("KW975 : 'KW' '975';\n"); + grammarBuilder.append("KW976 : 'KW' '976';\n"); + grammarBuilder.append("KW977 : 'KW' '977';\n"); + grammarBuilder.append("KW978 : 'KW' '978';\n"); + grammarBuilder.append("KW979 : 'KW' '979';\n"); + grammarBuilder.append("KW980 : 'KW' '980';\n"); + grammarBuilder.append("KW981 : 'KW' '981';\n"); + grammarBuilder.append("KW982 : 'KW' '982';\n"); + grammarBuilder.append("KW983 : 'KW' '983';\n"); + grammarBuilder.append("KW984 : 'KW' '984';\n"); + grammarBuilder.append("KW985 : 'KW' '985';\n"); + grammarBuilder.append("KW986 : 'KW' '986';\n"); + grammarBuilder.append("KW987 : 'KW' '987';\n"); + grammarBuilder.append("KW988 : 'KW' '988';\n"); + grammarBuilder.append("KW989 : 'KW' '989';\n"); + grammarBuilder.append("KW990 : 'KW' '990';\n"); + grammarBuilder.append("KW991 : 'KW' '991';\n"); + grammarBuilder.append("KW992 : 'KW' '992';\n"); + grammarBuilder.append("KW993 : 'KW' '993';\n"); + grammarBuilder.append("KW994 : 'KW' '994';\n"); + grammarBuilder.append("KW995 : 'KW' '995';\n"); + grammarBuilder.append("KW996 : 'KW' '996';\n"); + grammarBuilder.append("KW997 : 'KW' '997';\n"); + grammarBuilder.append("KW998 : 'KW' '998';\n"); + grammarBuilder.append("KW999 : 'KW' '999';\n"); + grammarBuilder.append("KW1000 : 'KW' '1000';\n"); + grammarBuilder.append("KW1001 : 'KW' '1001';\n"); + grammarBuilder.append("KW1002 : 'KW' '1002';\n"); + grammarBuilder.append("KW1003 : 'KW' '1003';\n"); + grammarBuilder.append("KW1004 : 'KW' '1004';\n"); + grammarBuilder.append("KW1005 : 'KW' '1005';\n"); + grammarBuilder.append("KW1006 : 'KW' '1006';\n"); + grammarBuilder.append("KW1007 : 'KW' '1007';\n"); + grammarBuilder.append("KW1008 : 'KW' '1008';\n"); + grammarBuilder.append("KW1009 : 'KW' '1009';\n"); + grammarBuilder.append("KW1010 : 'KW' '1010';\n"); + grammarBuilder.append("KW1011 : 'KW' '1011';\n"); + grammarBuilder.append("KW1012 : 'KW' '1012';\n"); + grammarBuilder.append("KW1013 : 'KW' '1013';\n"); + grammarBuilder.append("KW1014 : 'KW' '1014';\n"); + grammarBuilder.append("KW1015 : 'KW' '1015';\n"); + grammarBuilder.append("KW1016 : 'KW' '1016';\n"); + grammarBuilder.append("KW1017 : 'KW' '1017';\n"); + grammarBuilder.append("KW1018 : 'KW' '1018';\n"); + grammarBuilder.append("KW1019 : 'KW' '1019';\n"); + grammarBuilder.append("KW1020 : 'KW' '1020';\n"); + grammarBuilder.append("KW1021 : 'KW' '1021';\n"); + grammarBuilder.append("KW1022 : 'KW' '1022';\n"); + grammarBuilder.append("KW1023 : 'KW' '1023';\n"); + grammarBuilder.append("KW1024 : 'KW' '1024';\n"); + grammarBuilder.append("KW1025 : 'KW' '1025';\n"); + grammarBuilder.append("KW1026 : 'KW' '1026';\n"); + grammarBuilder.append("KW1027 : 'KW' '1027';\n"); + grammarBuilder.append("KW1028 : 'KW' '1028';\n"); + grammarBuilder.append("KW1029 : 'KW' '1029';\n"); + grammarBuilder.append("KW1030 : 'KW' '1030';\n"); + grammarBuilder.append("KW1031 : 'KW' '1031';\n"); + grammarBuilder.append("KW1032 : 'KW' '1032';\n"); + grammarBuilder.append("KW1033 : 'KW' '1033';\n"); + grammarBuilder.append("KW1034 : 'KW' '1034';\n"); + grammarBuilder.append("KW1035 : 'KW' '1035';\n"); + grammarBuilder.append("KW1036 : 'KW' '1036';\n"); + grammarBuilder.append("KW1037 : 'KW' '1037';\n"); + grammarBuilder.append("KW1038 : 'KW' '1038';\n"); + grammarBuilder.append("KW1039 : 'KW' '1039';\n"); + grammarBuilder.append("KW1040 : 'KW' '1040';\n"); + grammarBuilder.append("KW1041 : 'KW' '1041';\n"); + grammarBuilder.append("KW1042 : 'KW' '1042';\n"); + grammarBuilder.append("KW1043 : 'KW' '1043';\n"); + grammarBuilder.append("KW1044 : 'KW' '1044';\n"); + grammarBuilder.append("KW1045 : 'KW' '1045';\n"); + grammarBuilder.append("KW1046 : 'KW' '1046';\n"); + grammarBuilder.append("KW1047 : 'KW' '1047';\n"); + grammarBuilder.append("KW1048 : 'KW' '1048';\n"); + grammarBuilder.append("KW1049 : 'KW' '1049';\n"); + grammarBuilder.append("KW1050 : 'KW' '1050';\n"); + grammarBuilder.append("KW1051 : 'KW' '1051';\n"); + grammarBuilder.append("KW1052 : 'KW' '1052';\n"); + grammarBuilder.append("KW1053 : 'KW' '1053';\n"); + grammarBuilder.append("KW1054 : 'KW' '1054';\n"); + grammarBuilder.append("KW1055 : 'KW' '1055';\n"); + grammarBuilder.append("KW1056 : 'KW' '1056';\n"); + grammarBuilder.append("KW1057 : 'KW' '1057';\n"); + grammarBuilder.append("KW1058 : 'KW' '1058';\n"); + grammarBuilder.append("KW1059 : 'KW' '1059';\n"); + grammarBuilder.append("KW1060 : 'KW' '1060';\n"); + grammarBuilder.append("KW1061 : 'KW' '1061';\n"); + grammarBuilder.append("KW1062 : 'KW' '1062';\n"); + grammarBuilder.append("KW1063 : 'KW' '1063';\n"); + grammarBuilder.append("KW1064 : 'KW' '1064';\n"); + grammarBuilder.append("KW1065 : 'KW' '1065';\n"); + grammarBuilder.append("KW1066 : 'KW' '1066';\n"); + grammarBuilder.append("KW1067 : 'KW' '1067';\n"); + grammarBuilder.append("KW1068 : 'KW' '1068';\n"); + grammarBuilder.append("KW1069 : 'KW' '1069';\n"); + grammarBuilder.append("KW1070 : 'KW' '1070';\n"); + grammarBuilder.append("KW1071 : 'KW' '1071';\n"); + grammarBuilder.append("KW1072 : 'KW' '1072';\n"); + grammarBuilder.append("KW1073 : 'KW' '1073';\n"); + grammarBuilder.append("KW1074 : 'KW' '1074';\n"); + grammarBuilder.append("KW1075 : 'KW' '1075';\n"); + grammarBuilder.append("KW1076 : 'KW' '1076';\n"); + grammarBuilder.append("KW1077 : 'KW' '1077';\n"); + grammarBuilder.append("KW1078 : 'KW' '1078';\n"); + grammarBuilder.append("KW1079 : 'KW' '1079';\n"); + grammarBuilder.append("KW1080 : 'KW' '1080';\n"); + grammarBuilder.append("KW1081 : 'KW' '1081';\n"); + grammarBuilder.append("KW1082 : 'KW' '1082';\n"); + grammarBuilder.append("KW1083 : 'KW' '1083';\n"); + grammarBuilder.append("KW1084 : 'KW' '1084';\n"); + grammarBuilder.append("KW1085 : 'KW' '1085';\n"); + grammarBuilder.append("KW1086 : 'KW' '1086';\n"); + grammarBuilder.append("KW1087 : 'KW' '1087';\n"); + grammarBuilder.append("KW1088 : 'KW' '1088';\n"); + grammarBuilder.append("KW1089 : 'KW' '1089';\n"); + grammarBuilder.append("KW1090 : 'KW' '1090';\n"); + grammarBuilder.append("KW1091 : 'KW' '1091';\n"); + grammarBuilder.append("KW1092 : 'KW' '1092';\n"); + grammarBuilder.append("KW1093 : 'KW' '1093';\n"); + grammarBuilder.append("KW1094 : 'KW' '1094';\n"); + grammarBuilder.append("KW1095 : 'KW' '1095';\n"); + grammarBuilder.append("KW1096 : 'KW' '1096';\n"); + grammarBuilder.append("KW1097 : 'KW' '1097';\n"); + grammarBuilder.append("KW1098 : 'KW' '1098';\n"); + grammarBuilder.append("KW1099 : 'KW' '1099';\n"); + grammarBuilder.append("KW1100 : 'KW' '1100';\n"); + grammarBuilder.append("KW1101 : 'KW' '1101';\n"); + grammarBuilder.append("KW1102 : 'KW' '1102';\n"); + grammarBuilder.append("KW1103 : 'KW' '1103';\n"); + grammarBuilder.append("KW1104 : 'KW' '1104';\n"); + grammarBuilder.append("KW1105 : 'KW' '1105';\n"); + grammarBuilder.append("KW1106 : 'KW' '1106';\n"); + grammarBuilder.append("KW1107 : 'KW' '1107';\n"); + grammarBuilder.append("KW1108 : 'KW' '1108';\n"); + grammarBuilder.append("KW1109 : 'KW' '1109';\n"); + grammarBuilder.append("KW1110 : 'KW' '1110';\n"); + grammarBuilder.append("KW1111 : 'KW' '1111';\n"); + grammarBuilder.append("KW1112 : 'KW' '1112';\n"); + grammarBuilder.append("KW1113 : 'KW' '1113';\n"); + grammarBuilder.append("KW1114 : 'KW' '1114';\n"); + grammarBuilder.append("KW1115 : 'KW' '1115';\n"); + grammarBuilder.append("KW1116 : 'KW' '1116';\n"); + grammarBuilder.append("KW1117 : 'KW' '1117';\n"); + grammarBuilder.append("KW1118 : 'KW' '1118';\n"); + grammarBuilder.append("KW1119 : 'KW' '1119';\n"); + grammarBuilder.append("KW1120 : 'KW' '1120';\n"); + grammarBuilder.append("KW1121 : 'KW' '1121';\n"); + grammarBuilder.append("KW1122 : 'KW' '1122';\n"); + grammarBuilder.append("KW1123 : 'KW' '1123';\n"); + grammarBuilder.append("KW1124 : 'KW' '1124';\n"); + grammarBuilder.append("KW1125 : 'KW' '1125';\n"); + grammarBuilder.append("KW1126 : 'KW' '1126';\n"); + grammarBuilder.append("KW1127 : 'KW' '1127';\n"); + grammarBuilder.append("KW1128 : 'KW' '1128';\n"); + grammarBuilder.append("KW1129 : 'KW' '1129';\n"); + grammarBuilder.append("KW1130 : 'KW' '1130';\n"); + grammarBuilder.append("KW1131 : 'KW' '1131';\n"); + grammarBuilder.append("KW1132 : 'KW' '1132';\n"); + grammarBuilder.append("KW1133 : 'KW' '1133';\n"); + grammarBuilder.append("KW1134 : 'KW' '1134';\n"); + grammarBuilder.append("KW1135 : 'KW' '1135';\n"); + grammarBuilder.append("KW1136 : 'KW' '1136';\n"); + grammarBuilder.append("KW1137 : 'KW' '1137';\n"); + grammarBuilder.append("KW1138 : 'KW' '1138';\n"); + grammarBuilder.append("KW1139 : 'KW' '1139';\n"); + grammarBuilder.append("KW1140 : 'KW' '1140';\n"); + grammarBuilder.append("KW1141 : 'KW' '1141';\n"); + grammarBuilder.append("KW1142 : 'KW' '1142';\n"); + grammarBuilder.append("KW1143 : 'KW' '1143';\n"); + grammarBuilder.append("KW1144 : 'KW' '1144';\n"); + grammarBuilder.append("KW1145 : 'KW' '1145';\n"); + grammarBuilder.append("KW1146 : 'KW' '1146';\n"); + grammarBuilder.append("KW1147 : 'KW' '1147';\n"); + grammarBuilder.append("KW1148 : 'KW' '1148';\n"); + grammarBuilder.append("KW1149 : 'KW' '1149';\n"); + grammarBuilder.append("KW1150 : 'KW' '1150';\n"); + grammarBuilder.append("KW1151 : 'KW' '1151';\n"); + grammarBuilder.append("KW1152 : 'KW' '1152';\n"); + grammarBuilder.append("KW1153 : 'KW' '1153';\n"); + grammarBuilder.append("KW1154 : 'KW' '1154';\n"); + grammarBuilder.append("KW1155 : 'KW' '1155';\n"); + grammarBuilder.append("KW1156 : 'KW' '1156';\n"); + grammarBuilder.append("KW1157 : 'KW' '1157';\n"); + grammarBuilder.append("KW1158 : 'KW' '1158';\n"); + grammarBuilder.append("KW1159 : 'KW' '1159';\n"); + grammarBuilder.append("KW1160 : 'KW' '1160';\n"); + grammarBuilder.append("KW1161 : 'KW' '1161';\n"); + grammarBuilder.append("KW1162 : 'KW' '1162';\n"); + grammarBuilder.append("KW1163 : 'KW' '1163';\n"); + grammarBuilder.append("KW1164 : 'KW' '1164';\n"); + grammarBuilder.append("KW1165 : 'KW' '1165';\n"); + grammarBuilder.append("KW1166 : 'KW' '1166';\n"); + grammarBuilder.append("KW1167 : 'KW' '1167';\n"); + grammarBuilder.append("KW1168 : 'KW' '1168';\n"); + grammarBuilder.append("KW1169 : 'KW' '1169';\n"); + grammarBuilder.append("KW1170 : 'KW' '1170';\n"); + grammarBuilder.append("KW1171 : 'KW' '1171';\n"); + grammarBuilder.append("KW1172 : 'KW' '1172';\n"); + grammarBuilder.append("KW1173 : 'KW' '1173';\n"); + grammarBuilder.append("KW1174 : 'KW' '1174';\n"); + grammarBuilder.append("KW1175 : 'KW' '1175';\n"); + grammarBuilder.append("KW1176 : 'KW' '1176';\n"); + grammarBuilder.append("KW1177 : 'KW' '1177';\n"); + grammarBuilder.append("KW1178 : 'KW' '1178';\n"); + grammarBuilder.append("KW1179 : 'KW' '1179';\n"); + grammarBuilder.append("KW1180 : 'KW' '1180';\n"); + grammarBuilder.append("KW1181 : 'KW' '1181';\n"); + grammarBuilder.append("KW1182 : 'KW' '1182';\n"); + grammarBuilder.append("KW1183 : 'KW' '1183';\n"); + grammarBuilder.append("KW1184 : 'KW' '1184';\n"); + grammarBuilder.append("KW1185 : 'KW' '1185';\n"); + grammarBuilder.append("KW1186 : 'KW' '1186';\n"); + grammarBuilder.append("KW1187 : 'KW' '1187';\n"); + grammarBuilder.append("KW1188 : 'KW' '1188';\n"); + grammarBuilder.append("KW1189 : 'KW' '1189';\n"); + grammarBuilder.append("KW1190 : 'KW' '1190';\n"); + grammarBuilder.append("KW1191 : 'KW' '1191';\n"); + grammarBuilder.append("KW1192 : 'KW' '1192';\n"); + grammarBuilder.append("KW1193 : 'KW' '1193';\n"); + grammarBuilder.append("KW1194 : 'KW' '1194';\n"); + grammarBuilder.append("KW1195 : 'KW' '1195';\n"); + grammarBuilder.append("KW1196 : 'KW' '1196';\n"); + grammarBuilder.append("KW1197 : 'KW' '1197';\n"); + grammarBuilder.append("KW1198 : 'KW' '1198';\n"); + grammarBuilder.append("KW1199 : 'KW' '1199';\n"); + grammarBuilder.append("KW1200 : 'KW' '1200';\n"); + grammarBuilder.append("KW1201 : 'KW' '1201';\n"); + grammarBuilder.append("KW1202 : 'KW' '1202';\n"); + grammarBuilder.append("KW1203 : 'KW' '1203';\n"); + grammarBuilder.append("KW1204 : 'KW' '1204';\n"); + grammarBuilder.append("KW1205 : 'KW' '1205';\n"); + grammarBuilder.append("KW1206 : 'KW' '1206';\n"); + grammarBuilder.append("KW1207 : 'KW' '1207';\n"); + grammarBuilder.append("KW1208 : 'KW' '1208';\n"); + grammarBuilder.append("KW1209 : 'KW' '1209';\n"); + grammarBuilder.append("KW1210 : 'KW' '1210';\n"); + grammarBuilder.append("KW1211 : 'KW' '1211';\n"); + grammarBuilder.append("KW1212 : 'KW' '1212';\n"); + grammarBuilder.append("KW1213 : 'KW' '1213';\n"); + grammarBuilder.append("KW1214 : 'KW' '1214';\n"); + grammarBuilder.append("KW1215 : 'KW' '1215';\n"); + grammarBuilder.append("KW1216 : 'KW' '1216';\n"); + grammarBuilder.append("KW1217 : 'KW' '1217';\n"); + grammarBuilder.append("KW1218 : 'KW' '1218';\n"); + grammarBuilder.append("KW1219 : 'KW' '1219';\n"); + grammarBuilder.append("KW1220 : 'KW' '1220';\n"); + grammarBuilder.append("KW1221 : 'KW' '1221';\n"); + grammarBuilder.append("KW1222 : 'KW' '1222';\n"); + grammarBuilder.append("KW1223 : 'KW' '1223';\n"); + grammarBuilder.append("KW1224 : 'KW' '1224';\n"); + grammarBuilder.append("KW1225 : 'KW' '1225';\n"); + grammarBuilder.append("KW1226 : 'KW' '1226';\n"); + grammarBuilder.append("KW1227 : 'KW' '1227';\n"); + grammarBuilder.append("KW1228 : 'KW' '1228';\n"); + grammarBuilder.append("KW1229 : 'KW' '1229';\n"); + grammarBuilder.append("KW1230 : 'KW' '1230';\n"); + grammarBuilder.append("KW1231 : 'KW' '1231';\n"); + grammarBuilder.append("KW1232 : 'KW' '1232';\n"); + grammarBuilder.append("KW1233 : 'KW' '1233';\n"); + grammarBuilder.append("KW1234 : 'KW' '1234';\n"); + grammarBuilder.append("KW1235 : 'KW' '1235';\n"); + grammarBuilder.append("KW1236 : 'KW' '1236';\n"); + grammarBuilder.append("KW1237 : 'KW' '1237';\n"); + grammarBuilder.append("KW1238 : 'KW' '1238';\n"); + grammarBuilder.append("KW1239 : 'KW' '1239';\n"); + grammarBuilder.append("KW1240 : 'KW' '1240';\n"); + grammarBuilder.append("KW1241 : 'KW' '1241';\n"); + grammarBuilder.append("KW1242 : 'KW' '1242';\n"); + grammarBuilder.append("KW1243 : 'KW' '1243';\n"); + grammarBuilder.append("KW1244 : 'KW' '1244';\n"); + grammarBuilder.append("KW1245 : 'KW' '1245';\n"); + grammarBuilder.append("KW1246 : 'KW' '1246';\n"); + grammarBuilder.append("KW1247 : 'KW' '1247';\n"); + grammarBuilder.append("KW1248 : 'KW' '1248';\n"); + grammarBuilder.append("KW1249 : 'KW' '1249';\n"); + grammarBuilder.append("KW1250 : 'KW' '1250';\n"); + grammarBuilder.append("KW1251 : 'KW' '1251';\n"); + grammarBuilder.append("KW1252 : 'KW' '1252';\n"); + grammarBuilder.append("KW1253 : 'KW' '1253';\n"); + grammarBuilder.append("KW1254 : 'KW' '1254';\n"); + grammarBuilder.append("KW1255 : 'KW' '1255';\n"); + grammarBuilder.append("KW1256 : 'KW' '1256';\n"); + grammarBuilder.append("KW1257 : 'KW' '1257';\n"); + grammarBuilder.append("KW1258 : 'KW' '1258';\n"); + grammarBuilder.append("KW1259 : 'KW' '1259';\n"); + grammarBuilder.append("KW1260 : 'KW' '1260';\n"); + grammarBuilder.append("KW1261 : 'KW' '1261';\n"); + grammarBuilder.append("KW1262 : 'KW' '1262';\n"); + grammarBuilder.append("KW1263 : 'KW' '1263';\n"); + grammarBuilder.append("KW1264 : 'KW' '1264';\n"); + grammarBuilder.append("KW1265 : 'KW' '1265';\n"); + grammarBuilder.append("KW1266 : 'KW' '1266';\n"); + grammarBuilder.append("KW1267 : 'KW' '1267';\n"); + grammarBuilder.append("KW1268 : 'KW' '1268';\n"); + grammarBuilder.append("KW1269 : 'KW' '1269';\n"); + grammarBuilder.append("KW1270 : 'KW' '1270';\n"); + grammarBuilder.append("KW1271 : 'KW' '1271';\n"); + grammarBuilder.append("KW1272 : 'KW' '1272';\n"); + grammarBuilder.append("KW1273 : 'KW' '1273';\n"); + grammarBuilder.append("KW1274 : 'KW' '1274';\n"); + grammarBuilder.append("KW1275 : 'KW' '1275';\n"); + grammarBuilder.append("KW1276 : 'KW' '1276';\n"); + grammarBuilder.append("KW1277 : 'KW' '1277';\n"); + grammarBuilder.append("KW1278 : 'KW' '1278';\n"); + grammarBuilder.append("KW1279 : 'KW' '1279';\n"); + grammarBuilder.append("KW1280 : 'KW' '1280';\n"); + grammarBuilder.append("KW1281 : 'KW' '1281';\n"); + grammarBuilder.append("KW1282 : 'KW' '1282';\n"); + grammarBuilder.append("KW1283 : 'KW' '1283';\n"); + grammarBuilder.append("KW1284 : 'KW' '1284';\n"); + grammarBuilder.append("KW1285 : 'KW' '1285';\n"); + grammarBuilder.append("KW1286 : 'KW' '1286';\n"); + grammarBuilder.append("KW1287 : 'KW' '1287';\n"); + grammarBuilder.append("KW1288 : 'KW' '1288';\n"); + grammarBuilder.append("KW1289 : 'KW' '1289';\n"); + grammarBuilder.append("KW1290 : 'KW' '1290';\n"); + grammarBuilder.append("KW1291 : 'KW' '1291';\n"); + grammarBuilder.append("KW1292 : 'KW' '1292';\n"); + grammarBuilder.append("KW1293 : 'KW' '1293';\n"); + grammarBuilder.append("KW1294 : 'KW' '1294';\n"); + grammarBuilder.append("KW1295 : 'KW' '1295';\n"); + grammarBuilder.append("KW1296 : 'KW' '1296';\n"); + grammarBuilder.append("KW1297 : 'KW' '1297';\n"); + grammarBuilder.append("KW1298 : 'KW' '1298';\n"); + grammarBuilder.append("KW1299 : 'KW' '1299';\n"); + grammarBuilder.append("KW1300 : 'KW' '1300';\n"); + grammarBuilder.append("KW1301 : 'KW' '1301';\n"); + grammarBuilder.append("KW1302 : 'KW' '1302';\n"); + grammarBuilder.append("KW1303 : 'KW' '1303';\n"); + grammarBuilder.append("KW1304 : 'KW' '1304';\n"); + grammarBuilder.append("KW1305 : 'KW' '1305';\n"); + grammarBuilder.append("KW1306 : 'KW' '1306';\n"); + grammarBuilder.append("KW1307 : 'KW' '1307';\n"); + grammarBuilder.append("KW1308 : 'KW' '1308';\n"); + grammarBuilder.append("KW1309 : 'KW' '1309';\n"); + grammarBuilder.append("KW1310 : 'KW' '1310';\n"); + grammarBuilder.append("KW1311 : 'KW' '1311';\n"); + grammarBuilder.append("KW1312 : 'KW' '1312';\n"); + grammarBuilder.append("KW1313 : 'KW' '1313';\n"); + grammarBuilder.append("KW1314 : 'KW' '1314';\n"); + grammarBuilder.append("KW1315 : 'KW' '1315';\n"); + grammarBuilder.append("KW1316 : 'KW' '1316';\n"); + grammarBuilder.append("KW1317 : 'KW' '1317';\n"); + grammarBuilder.append("KW1318 : 'KW' '1318';\n"); + grammarBuilder.append("KW1319 : 'KW' '1319';\n"); + grammarBuilder.append("KW1320 : 'KW' '1320';\n"); + grammarBuilder.append("KW1321 : 'KW' '1321';\n"); + grammarBuilder.append("KW1322 : 'KW' '1322';\n"); + grammarBuilder.append("KW1323 : 'KW' '1323';\n"); + grammarBuilder.append("KW1324 : 'KW' '1324';\n"); + grammarBuilder.append("KW1325 : 'KW' '1325';\n"); + grammarBuilder.append("KW1326 : 'KW' '1326';\n"); + grammarBuilder.append("KW1327 : 'KW' '1327';\n"); + grammarBuilder.append("KW1328 : 'KW' '1328';\n"); + grammarBuilder.append("KW1329 : 'KW' '1329';\n"); + grammarBuilder.append("KW1330 : 'KW' '1330';\n"); + grammarBuilder.append("KW1331 : 'KW' '1331';\n"); + grammarBuilder.append("KW1332 : 'KW' '1332';\n"); + grammarBuilder.append("KW1333 : 'KW' '1333';\n"); + grammarBuilder.append("KW1334 : 'KW' '1334';\n"); + grammarBuilder.append("KW1335 : 'KW' '1335';\n"); + grammarBuilder.append("KW1336 : 'KW' '1336';\n"); + grammarBuilder.append("KW1337 : 'KW' '1337';\n"); + grammarBuilder.append("KW1338 : 'KW' '1338';\n"); + grammarBuilder.append("KW1339 : 'KW' '1339';\n"); + grammarBuilder.append("KW1340 : 'KW' '1340';\n"); + grammarBuilder.append("KW1341 : 'KW' '1341';\n"); + grammarBuilder.append("KW1342 : 'KW' '1342';\n"); + grammarBuilder.append("KW1343 : 'KW' '1343';\n"); + grammarBuilder.append("KW1344 : 'KW' '1344';\n"); + grammarBuilder.append("KW1345 : 'KW' '1345';\n"); + grammarBuilder.append("KW1346 : 'KW' '1346';\n"); + grammarBuilder.append("KW1347 : 'KW' '1347';\n"); + grammarBuilder.append("KW1348 : 'KW' '1348';\n"); + grammarBuilder.append("KW1349 : 'KW' '1349';\n"); + grammarBuilder.append("KW1350 : 'KW' '1350';\n"); + grammarBuilder.append("KW1351 : 'KW' '1351';\n"); + grammarBuilder.append("KW1352 : 'KW' '1352';\n"); + grammarBuilder.append("KW1353 : 'KW' '1353';\n"); + grammarBuilder.append("KW1354 : 'KW' '1354';\n"); + grammarBuilder.append("KW1355 : 'KW' '1355';\n"); + grammarBuilder.append("KW1356 : 'KW' '1356';\n"); + grammarBuilder.append("KW1357 : 'KW' '1357';\n"); + grammarBuilder.append("KW1358 : 'KW' '1358';\n"); + grammarBuilder.append("KW1359 : 'KW' '1359';\n"); + grammarBuilder.append("KW1360 : 'KW' '1360';\n"); + grammarBuilder.append("KW1361 : 'KW' '1361';\n"); + grammarBuilder.append("KW1362 : 'KW' '1362';\n"); + grammarBuilder.append("KW1363 : 'KW' '1363';\n"); + grammarBuilder.append("KW1364 : 'KW' '1364';\n"); + grammarBuilder.append("KW1365 : 'KW' '1365';\n"); + grammarBuilder.append("KW1366 : 'KW' '1366';\n"); + grammarBuilder.append("KW1367 : 'KW' '1367';\n"); + grammarBuilder.append("KW1368 : 'KW' '1368';\n"); + grammarBuilder.append("KW1369 : 'KW' '1369';\n"); + grammarBuilder.append("KW1370 : 'KW' '1370';\n"); + grammarBuilder.append("KW1371 : 'KW' '1371';\n"); + grammarBuilder.append("KW1372 : 'KW' '1372';\n"); + grammarBuilder.append("KW1373 : 'KW' '1373';\n"); + grammarBuilder.append("KW1374 : 'KW' '1374';\n"); + grammarBuilder.append("KW1375 : 'KW' '1375';\n"); + grammarBuilder.append("KW1376 : 'KW' '1376';\n"); + grammarBuilder.append("KW1377 : 'KW' '1377';\n"); + grammarBuilder.append("KW1378 : 'KW' '1378';\n"); + grammarBuilder.append("KW1379 : 'KW' '1379';\n"); + grammarBuilder.append("KW1380 : 'KW' '1380';\n"); + grammarBuilder.append("KW1381 : 'KW' '1381';\n"); + grammarBuilder.append("KW1382 : 'KW' '1382';\n"); + grammarBuilder.append("KW1383 : 'KW' '1383';\n"); + grammarBuilder.append("KW1384 : 'KW' '1384';\n"); + grammarBuilder.append("KW1385 : 'KW' '1385';\n"); + grammarBuilder.append("KW1386 : 'KW' '1386';\n"); + grammarBuilder.append("KW1387 : 'KW' '1387';\n"); + grammarBuilder.append("KW1388 : 'KW' '1388';\n"); + grammarBuilder.append("KW1389 : 'KW' '1389';\n"); + grammarBuilder.append("KW1390 : 'KW' '1390';\n"); + grammarBuilder.append("KW1391 : 'KW' '1391';\n"); + grammarBuilder.append("KW1392 : 'KW' '1392';\n"); + grammarBuilder.append("KW1393 : 'KW' '1393';\n"); + grammarBuilder.append("KW1394 : 'KW' '1394';\n"); + grammarBuilder.append("KW1395 : 'KW' '1395';\n"); + grammarBuilder.append("KW1396 : 'KW' '1396';\n"); + grammarBuilder.append("KW1397 : 'KW' '1397';\n"); + grammarBuilder.append("KW1398 : 'KW' '1398';\n"); + grammarBuilder.append("KW1399 : 'KW' '1399';\n"); + grammarBuilder.append("KW1400 : 'KW' '1400';\n"); + grammarBuilder.append("KW1401 : 'KW' '1401';\n"); + grammarBuilder.append("KW1402 : 'KW' '1402';\n"); + grammarBuilder.append("KW1403 : 'KW' '1403';\n"); + grammarBuilder.append("KW1404 : 'KW' '1404';\n"); + grammarBuilder.append("KW1405 : 'KW' '1405';\n"); + grammarBuilder.append("KW1406 : 'KW' '1406';\n"); + grammarBuilder.append("KW1407 : 'KW' '1407';\n"); + grammarBuilder.append("KW1408 : 'KW' '1408';\n"); + grammarBuilder.append("KW1409 : 'KW' '1409';\n"); + grammarBuilder.append("KW1410 : 'KW' '1410';\n"); + grammarBuilder.append("KW1411 : 'KW' '1411';\n"); + grammarBuilder.append("KW1412 : 'KW' '1412';\n"); + grammarBuilder.append("KW1413 : 'KW' '1413';\n"); + grammarBuilder.append("KW1414 : 'KW' '1414';\n"); + grammarBuilder.append("KW1415 : 'KW' '1415';\n"); + grammarBuilder.append("KW1416 : 'KW' '1416';\n"); + grammarBuilder.append("KW1417 : 'KW' '1417';\n"); + grammarBuilder.append("KW1418 : 'KW' '1418';\n"); + grammarBuilder.append("KW1419 : 'KW' '1419';\n"); + grammarBuilder.append("KW1420 : 'KW' '1420';\n"); + grammarBuilder.append("KW1421 : 'KW' '1421';\n"); + grammarBuilder.append("KW1422 : 'KW' '1422';\n"); + grammarBuilder.append("KW1423 : 'KW' '1423';\n"); + grammarBuilder.append("KW1424 : 'KW' '1424';\n"); + grammarBuilder.append("KW1425 : 'KW' '1425';\n"); + grammarBuilder.append("KW1426 : 'KW' '1426';\n"); + grammarBuilder.append("KW1427 : 'KW' '1427';\n"); + grammarBuilder.append("KW1428 : 'KW' '1428';\n"); + grammarBuilder.append("KW1429 : 'KW' '1429';\n"); + grammarBuilder.append("KW1430 : 'KW' '1430';\n"); + grammarBuilder.append("KW1431 : 'KW' '1431';\n"); + grammarBuilder.append("KW1432 : 'KW' '1432';\n"); + grammarBuilder.append("KW1433 : 'KW' '1433';\n"); + grammarBuilder.append("KW1434 : 'KW' '1434';\n"); + grammarBuilder.append("KW1435 : 'KW' '1435';\n"); + grammarBuilder.append("KW1436 : 'KW' '1436';\n"); + grammarBuilder.append("KW1437 : 'KW' '1437';\n"); + grammarBuilder.append("KW1438 : 'KW' '1438';\n"); + grammarBuilder.append("KW1439 : 'KW' '1439';\n"); + grammarBuilder.append("KW1440 : 'KW' '1440';\n"); + grammarBuilder.append("KW1441 : 'KW' '1441';\n"); + grammarBuilder.append("KW1442 : 'KW' '1442';\n"); + grammarBuilder.append("KW1443 : 'KW' '1443';\n"); + grammarBuilder.append("KW1444 : 'KW' '1444';\n"); + grammarBuilder.append("KW1445 : 'KW' '1445';\n"); + grammarBuilder.append("KW1446 : 'KW' '1446';\n"); + grammarBuilder.append("KW1447 : 'KW' '1447';\n"); + grammarBuilder.append("KW1448 : 'KW' '1448';\n"); + grammarBuilder.append("KW1449 : 'KW' '1449';\n"); + grammarBuilder.append("KW1450 : 'KW' '1450';\n"); + grammarBuilder.append("KW1451 : 'KW' '1451';\n"); + grammarBuilder.append("KW1452 : 'KW' '1452';\n"); + grammarBuilder.append("KW1453 : 'KW' '1453';\n"); + grammarBuilder.append("KW1454 : 'KW' '1454';\n"); + grammarBuilder.append("KW1455 : 'KW' '1455';\n"); + grammarBuilder.append("KW1456 : 'KW' '1456';\n"); + grammarBuilder.append("KW1457 : 'KW' '1457';\n"); + grammarBuilder.append("KW1458 : 'KW' '1458';\n"); + grammarBuilder.append("KW1459 : 'KW' '1459';\n"); + grammarBuilder.append("KW1460 : 'KW' '1460';\n"); + grammarBuilder.append("KW1461 : 'KW' '1461';\n"); + grammarBuilder.append("KW1462 : 'KW' '1462';\n"); + grammarBuilder.append("KW1463 : 'KW' '1463';\n"); + grammarBuilder.append("KW1464 : 'KW' '1464';\n"); + grammarBuilder.append("KW1465 : 'KW' '1465';\n"); + grammarBuilder.append("KW1466 : 'KW' '1466';\n"); + grammarBuilder.append("KW1467 : 'KW' '1467';\n"); + grammarBuilder.append("KW1468 : 'KW' '1468';\n"); + grammarBuilder.append("KW1469 : 'KW' '1469';\n"); + grammarBuilder.append("KW1470 : 'KW' '1470';\n"); + grammarBuilder.append("KW1471 : 'KW' '1471';\n"); + grammarBuilder.append("KW1472 : 'KW' '1472';\n"); + grammarBuilder.append("KW1473 : 'KW' '1473';\n"); + grammarBuilder.append("KW1474 : 'KW' '1474';\n"); + grammarBuilder.append("KW1475 : 'KW' '1475';\n"); + grammarBuilder.append("KW1476 : 'KW' '1476';\n"); + grammarBuilder.append("KW1477 : 'KW' '1477';\n"); + grammarBuilder.append("KW1478 : 'KW' '1478';\n"); + grammarBuilder.append("KW1479 : 'KW' '1479';\n"); + grammarBuilder.append("KW1480 : 'KW' '1480';\n"); + grammarBuilder.append("KW1481 : 'KW' '1481';\n"); + grammarBuilder.append("KW1482 : 'KW' '1482';\n"); + grammarBuilder.append("KW1483 : 'KW' '1483';\n"); + grammarBuilder.append("KW1484 : 'KW' '1484';\n"); + grammarBuilder.append("KW1485 : 'KW' '1485';\n"); + grammarBuilder.append("KW1486 : 'KW' '1486';\n"); + grammarBuilder.append("KW1487 : 'KW' '1487';\n"); + grammarBuilder.append("KW1488 : 'KW' '1488';\n"); + grammarBuilder.append("KW1489 : 'KW' '1489';\n"); + grammarBuilder.append("KW1490 : 'KW' '1490';\n"); + grammarBuilder.append("KW1491 : 'KW' '1491';\n"); + grammarBuilder.append("KW1492 : 'KW' '1492';\n"); + grammarBuilder.append("KW1493 : 'KW' '1493';\n"); + grammarBuilder.append("KW1494 : 'KW' '1494';\n"); + grammarBuilder.append("KW1495 : 'KW' '1495';\n"); + grammarBuilder.append("KW1496 : 'KW' '1496';\n"); + grammarBuilder.append("KW1497 : 'KW' '1497';\n"); + grammarBuilder.append("KW1498 : 'KW' '1498';\n"); + grammarBuilder.append("KW1499 : 'KW' '1499';\n"); + grammarBuilder.append("KW1500 : 'KW' '1500';\n"); + grammarBuilder.append("KW1501 : 'KW' '1501';\n"); + grammarBuilder.append("KW1502 : 'KW' '1502';\n"); + grammarBuilder.append("KW1503 : 'KW' '1503';\n"); + grammarBuilder.append("KW1504 : 'KW' '1504';\n"); + grammarBuilder.append("KW1505 : 'KW' '1505';\n"); + grammarBuilder.append("KW1506 : 'KW' '1506';\n"); + grammarBuilder.append("KW1507 : 'KW' '1507';\n"); + grammarBuilder.append("KW1508 : 'KW' '1508';\n"); + grammarBuilder.append("KW1509 : 'KW' '1509';\n"); + grammarBuilder.append("KW1510 : 'KW' '1510';\n"); + grammarBuilder.append("KW1511 : 'KW' '1511';\n"); + grammarBuilder.append("KW1512 : 'KW' '1512';\n"); + grammarBuilder.append("KW1513 : 'KW' '1513';\n"); + grammarBuilder.append("KW1514 : 'KW' '1514';\n"); + grammarBuilder.append("KW1515 : 'KW' '1515';\n"); + grammarBuilder.append("KW1516 : 'KW' '1516';\n"); + grammarBuilder.append("KW1517 : 'KW' '1517';\n"); + grammarBuilder.append("KW1518 : 'KW' '1518';\n"); + grammarBuilder.append("KW1519 : 'KW' '1519';\n"); + grammarBuilder.append("KW1520 : 'KW' '1520';\n"); + grammarBuilder.append("KW1521 : 'KW' '1521';\n"); + grammarBuilder.append("KW1522 : 'KW' '1522';\n"); + grammarBuilder.append("KW1523 : 'KW' '1523';\n"); + grammarBuilder.append("KW1524 : 'KW' '1524';\n"); + grammarBuilder.append("KW1525 : 'KW' '1525';\n"); + grammarBuilder.append("KW1526 : 'KW' '1526';\n"); + grammarBuilder.append("KW1527 : 'KW' '1527';\n"); + grammarBuilder.append("KW1528 : 'KW' '1528';\n"); + grammarBuilder.append("KW1529 : 'KW' '1529';\n"); + grammarBuilder.append("KW1530 : 'KW' '1530';\n"); + grammarBuilder.append("KW1531 : 'KW' '1531';\n"); + grammarBuilder.append("KW1532 : 'KW' '1532';\n"); + grammarBuilder.append("KW1533 : 'KW' '1533';\n"); + grammarBuilder.append("KW1534 : 'KW' '1534';\n"); + grammarBuilder.append("KW1535 : 'KW' '1535';\n"); + grammarBuilder.append("KW1536 : 'KW' '1536';\n"); + grammarBuilder.append("KW1537 : 'KW' '1537';\n"); + grammarBuilder.append("KW1538 : 'KW' '1538';\n"); + grammarBuilder.append("KW1539 : 'KW' '1539';\n"); + grammarBuilder.append("KW1540 : 'KW' '1540';\n"); + grammarBuilder.append("KW1541 : 'KW' '1541';\n"); + grammarBuilder.append("KW1542 : 'KW' '1542';\n"); + grammarBuilder.append("KW1543 : 'KW' '1543';\n"); + grammarBuilder.append("KW1544 : 'KW' '1544';\n"); + grammarBuilder.append("KW1545 : 'KW' '1545';\n"); + grammarBuilder.append("KW1546 : 'KW' '1546';\n"); + grammarBuilder.append("KW1547 : 'KW' '1547';\n"); + grammarBuilder.append("KW1548 : 'KW' '1548';\n"); + grammarBuilder.append("KW1549 : 'KW' '1549';\n"); + grammarBuilder.append("KW1550 : 'KW' '1550';\n"); + grammarBuilder.append("KW1551 : 'KW' '1551';\n"); + grammarBuilder.append("KW1552 : 'KW' '1552';\n"); + grammarBuilder.append("KW1553 : 'KW' '1553';\n"); + grammarBuilder.append("KW1554 : 'KW' '1554';\n"); + grammarBuilder.append("KW1555 : 'KW' '1555';\n"); + grammarBuilder.append("KW1556 : 'KW' '1556';\n"); + grammarBuilder.append("KW1557 : 'KW' '1557';\n"); + grammarBuilder.append("KW1558 : 'KW' '1558';\n"); + grammarBuilder.append("KW1559 : 'KW' '1559';\n"); + grammarBuilder.append("KW1560 : 'KW' '1560';\n"); + grammarBuilder.append("KW1561 : 'KW' '1561';\n"); + grammarBuilder.append("KW1562 : 'KW' '1562';\n"); + grammarBuilder.append("KW1563 : 'KW' '1563';\n"); + grammarBuilder.append("KW1564 : 'KW' '1564';\n"); + grammarBuilder.append("KW1565 : 'KW' '1565';\n"); + grammarBuilder.append("KW1566 : 'KW' '1566';\n"); + grammarBuilder.append("KW1567 : 'KW' '1567';\n"); + grammarBuilder.append("KW1568 : 'KW' '1568';\n"); + grammarBuilder.append("KW1569 : 'KW' '1569';\n"); + grammarBuilder.append("KW1570 : 'KW' '1570';\n"); + grammarBuilder.append("KW1571 : 'KW' '1571';\n"); + grammarBuilder.append("KW1572 : 'KW' '1572';\n"); + grammarBuilder.append("KW1573 : 'KW' '1573';\n"); + grammarBuilder.append("KW1574 : 'KW' '1574';\n"); + grammarBuilder.append("KW1575 : 'KW' '1575';\n"); + grammarBuilder.append("KW1576 : 'KW' '1576';\n"); + grammarBuilder.append("KW1577 : 'KW' '1577';\n"); + grammarBuilder.append("KW1578 : 'KW' '1578';\n"); + grammarBuilder.append("KW1579 : 'KW' '1579';\n"); + grammarBuilder.append("KW1580 : 'KW' '1580';\n"); + grammarBuilder.append("KW1581 : 'KW' '1581';\n"); + grammarBuilder.append("KW1582 : 'KW' '1582';\n"); + grammarBuilder.append("KW1583 : 'KW' '1583';\n"); + grammarBuilder.append("KW1584 : 'KW' '1584';\n"); + grammarBuilder.append("KW1585 : 'KW' '1585';\n"); + grammarBuilder.append("KW1586 : 'KW' '1586';\n"); + grammarBuilder.append("KW1587 : 'KW' '1587';\n"); + grammarBuilder.append("KW1588 : 'KW' '1588';\n"); + grammarBuilder.append("KW1589 : 'KW' '1589';\n"); + grammarBuilder.append("KW1590 : 'KW' '1590';\n"); + grammarBuilder.append("KW1591 : 'KW' '1591';\n"); + grammarBuilder.append("KW1592 : 'KW' '1592';\n"); + grammarBuilder.append("KW1593 : 'KW' '1593';\n"); + grammarBuilder.append("KW1594 : 'KW' '1594';\n"); + grammarBuilder.append("KW1595 : 'KW' '1595';\n"); + grammarBuilder.append("KW1596 : 'KW' '1596';\n"); + grammarBuilder.append("KW1597 : 'KW' '1597';\n"); + grammarBuilder.append("KW1598 : 'KW' '1598';\n"); + grammarBuilder.append("KW1599 : 'KW' '1599';\n"); + grammarBuilder.append("KW1600 : 'KW' '1600';\n"); + grammarBuilder.append("KW1601 : 'KW' '1601';\n"); + grammarBuilder.append("KW1602 : 'KW' '1602';\n"); + grammarBuilder.append("KW1603 : 'KW' '1603';\n"); + grammarBuilder.append("KW1604 : 'KW' '1604';\n"); + grammarBuilder.append("KW1605 : 'KW' '1605';\n"); + grammarBuilder.append("KW1606 : 'KW' '1606';\n"); + grammarBuilder.append("KW1607 : 'KW' '1607';\n"); + grammarBuilder.append("KW1608 : 'KW' '1608';\n"); + grammarBuilder.append("KW1609 : 'KW' '1609';\n"); + grammarBuilder.append("KW1610 : 'KW' '1610';\n"); + grammarBuilder.append("KW1611 : 'KW' '1611';\n"); + grammarBuilder.append("KW1612 : 'KW' '1612';\n"); + grammarBuilder.append("KW1613 : 'KW' '1613';\n"); + grammarBuilder.append("KW1614 : 'KW' '1614';\n"); + grammarBuilder.append("KW1615 : 'KW' '1615';\n"); + grammarBuilder.append("KW1616 : 'KW' '1616';\n"); + grammarBuilder.append("KW1617 : 'KW' '1617';\n"); + grammarBuilder.append("KW1618 : 'KW' '1618';\n"); + grammarBuilder.append("KW1619 : 'KW' '1619';\n"); + grammarBuilder.append("KW1620 : 'KW' '1620';\n"); + grammarBuilder.append("KW1621 : 'KW' '1621';\n"); + grammarBuilder.append("KW1622 : 'KW' '1622';\n"); + grammarBuilder.append("KW1623 : 'KW' '1623';\n"); + grammarBuilder.append("KW1624 : 'KW' '1624';\n"); + grammarBuilder.append("KW1625 : 'KW' '1625';\n"); + grammarBuilder.append("KW1626 : 'KW' '1626';\n"); + grammarBuilder.append("KW1627 : 'KW' '1627';\n"); + grammarBuilder.append("KW1628 : 'KW' '1628';\n"); + grammarBuilder.append("KW1629 : 'KW' '1629';\n"); + grammarBuilder.append("KW1630 : 'KW' '1630';\n"); + grammarBuilder.append("KW1631 : 'KW' '1631';\n"); + grammarBuilder.append("KW1632 : 'KW' '1632';\n"); + grammarBuilder.append("KW1633 : 'KW' '1633';\n"); + grammarBuilder.append("KW1634 : 'KW' '1634';\n"); + grammarBuilder.append("KW1635 : 'KW' '1635';\n"); + grammarBuilder.append("KW1636 : 'KW' '1636';\n"); + grammarBuilder.append("KW1637 : 'KW' '1637';\n"); + grammarBuilder.append("KW1638 : 'KW' '1638';\n"); + grammarBuilder.append("KW1639 : 'KW' '1639';\n"); + grammarBuilder.append("KW1640 : 'KW' '1640';\n"); + grammarBuilder.append("KW1641 : 'KW' '1641';\n"); + grammarBuilder.append("KW1642 : 'KW' '1642';\n"); + grammarBuilder.append("KW1643 : 'KW' '1643';\n"); + grammarBuilder.append("KW1644 : 'KW' '1644';\n"); + grammarBuilder.append("KW1645 : 'KW' '1645';\n"); + grammarBuilder.append("KW1646 : 'KW' '1646';\n"); + grammarBuilder.append("KW1647 : 'KW' '1647';\n"); + grammarBuilder.append("KW1648 : 'KW' '1648';\n"); + grammarBuilder.append("KW1649 : 'KW' '1649';\n"); + grammarBuilder.append("KW1650 : 'KW' '1650';\n"); + grammarBuilder.append("KW1651 : 'KW' '1651';\n"); + grammarBuilder.append("KW1652 : 'KW' '1652';\n"); + grammarBuilder.append("KW1653 : 'KW' '1653';\n"); + grammarBuilder.append("KW1654 : 'KW' '1654';\n"); + grammarBuilder.append("KW1655 : 'KW' '1655';\n"); + grammarBuilder.append("KW1656 : 'KW' '1656';\n"); + grammarBuilder.append("KW1657 : 'KW' '1657';\n"); + grammarBuilder.append("KW1658 : 'KW' '1658';\n"); + grammarBuilder.append("KW1659 : 'KW' '1659';\n"); + grammarBuilder.append("KW1660 : 'KW' '1660';\n"); + grammarBuilder.append("KW1661 : 'KW' '1661';\n"); + grammarBuilder.append("KW1662 : 'KW' '1662';\n"); + grammarBuilder.append("KW1663 : 'KW' '1663';\n"); + grammarBuilder.append("KW1664 : 'KW' '1664';\n"); + grammarBuilder.append("KW1665 : 'KW' '1665';\n"); + grammarBuilder.append("KW1666 : 'KW' '1666';\n"); + grammarBuilder.append("KW1667 : 'KW' '1667';\n"); + grammarBuilder.append("KW1668 : 'KW' '1668';\n"); + grammarBuilder.append("KW1669 : 'KW' '1669';\n"); + grammarBuilder.append("KW1670 : 'KW' '1670';\n"); + grammarBuilder.append("KW1671 : 'KW' '1671';\n"); + grammarBuilder.append("KW1672 : 'KW' '1672';\n"); + grammarBuilder.append("KW1673 : 'KW' '1673';\n"); + grammarBuilder.append("KW1674 : 'KW' '1674';\n"); + grammarBuilder.append("KW1675 : 'KW' '1675';\n"); + grammarBuilder.append("KW1676 : 'KW' '1676';\n"); + grammarBuilder.append("KW1677 : 'KW' '1677';\n"); + grammarBuilder.append("KW1678 : 'KW' '1678';\n"); + grammarBuilder.append("KW1679 : 'KW' '1679';\n"); + grammarBuilder.append("KW1680 : 'KW' '1680';\n"); + grammarBuilder.append("KW1681 : 'KW' '1681';\n"); + grammarBuilder.append("KW1682 : 'KW' '1682';\n"); + grammarBuilder.append("KW1683 : 'KW' '1683';\n"); + grammarBuilder.append("KW1684 : 'KW' '1684';\n"); + grammarBuilder.append("KW1685 : 'KW' '1685';\n"); + grammarBuilder.append("KW1686 : 'KW' '1686';\n"); + grammarBuilder.append("KW1687 : 'KW' '1687';\n"); + grammarBuilder.append("KW1688 : 'KW' '1688';\n"); + grammarBuilder.append("KW1689 : 'KW' '1689';\n"); + grammarBuilder.append("KW1690 : 'KW' '1690';\n"); + grammarBuilder.append("KW1691 : 'KW' '1691';\n"); + grammarBuilder.append("KW1692 : 'KW' '1692';\n"); + grammarBuilder.append("KW1693 : 'KW' '1693';\n"); + grammarBuilder.append("KW1694 : 'KW' '1694';\n"); + grammarBuilder.append("KW1695 : 'KW' '1695';\n"); + grammarBuilder.append("KW1696 : 'KW' '1696';\n"); + grammarBuilder.append("KW1697 : 'KW' '1697';\n"); + grammarBuilder.append("KW1698 : 'KW' '1698';\n"); + grammarBuilder.append("KW1699 : 'KW' '1699';\n"); + grammarBuilder.append("KW1700 : 'KW' '1700';\n"); + grammarBuilder.append("KW1701 : 'KW' '1701';\n"); + grammarBuilder.append("KW1702 : 'KW' '1702';\n"); + grammarBuilder.append("KW1703 : 'KW' '1703';\n"); + grammarBuilder.append("KW1704 : 'KW' '1704';\n"); + grammarBuilder.append("KW1705 : 'KW' '1705';\n"); + grammarBuilder.append("KW1706 : 'KW' '1706';\n"); + grammarBuilder.append("KW1707 : 'KW' '1707';\n"); + grammarBuilder.append("KW1708 : 'KW' '1708';\n"); + grammarBuilder.append("KW1709 : 'KW' '1709';\n"); + grammarBuilder.append("KW1710 : 'KW' '1710';\n"); + grammarBuilder.append("KW1711 : 'KW' '1711';\n"); + grammarBuilder.append("KW1712 : 'KW' '1712';\n"); + grammarBuilder.append("KW1713 : 'KW' '1713';\n"); + grammarBuilder.append("KW1714 : 'KW' '1714';\n"); + grammarBuilder.append("KW1715 : 'KW' '1715';\n"); + grammarBuilder.append("KW1716 : 'KW' '1716';\n"); + grammarBuilder.append("KW1717 : 'KW' '1717';\n"); + grammarBuilder.append("KW1718 : 'KW' '1718';\n"); + grammarBuilder.append("KW1719 : 'KW' '1719';\n"); + grammarBuilder.append("KW1720 : 'KW' '1720';\n"); + grammarBuilder.append("KW1721 : 'KW' '1721';\n"); + grammarBuilder.append("KW1722 : 'KW' '1722';\n"); + grammarBuilder.append("KW1723 : 'KW' '1723';\n"); + grammarBuilder.append("KW1724 : 'KW' '1724';\n"); + grammarBuilder.append("KW1725 : 'KW' '1725';\n"); + grammarBuilder.append("KW1726 : 'KW' '1726';\n"); + grammarBuilder.append("KW1727 : 'KW' '1727';\n"); + grammarBuilder.append("KW1728 : 'KW' '1728';\n"); + grammarBuilder.append("KW1729 : 'KW' '1729';\n"); + grammarBuilder.append("KW1730 : 'KW' '1730';\n"); + grammarBuilder.append("KW1731 : 'KW' '1731';\n"); + grammarBuilder.append("KW1732 : 'KW' '1732';\n"); + grammarBuilder.append("KW1733 : 'KW' '1733';\n"); + grammarBuilder.append("KW1734 : 'KW' '1734';\n"); + grammarBuilder.append("KW1735 : 'KW' '1735';\n"); + grammarBuilder.append("KW1736 : 'KW' '1736';\n"); + grammarBuilder.append("KW1737 : 'KW' '1737';\n"); + grammarBuilder.append("KW1738 : 'KW' '1738';\n"); + grammarBuilder.append("KW1739 : 'KW' '1739';\n"); + grammarBuilder.append("KW1740 : 'KW' '1740';\n"); + grammarBuilder.append("KW1741 : 'KW' '1741';\n"); + grammarBuilder.append("KW1742 : 'KW' '1742';\n"); + grammarBuilder.append("KW1743 : 'KW' '1743';\n"); + grammarBuilder.append("KW1744 : 'KW' '1744';\n"); + grammarBuilder.append("KW1745 : 'KW' '1745';\n"); + grammarBuilder.append("KW1746 : 'KW' '1746';\n"); + grammarBuilder.append("KW1747 : 'KW' '1747';\n"); + grammarBuilder.append("KW1748 : 'KW' '1748';\n"); + grammarBuilder.append("KW1749 : 'KW' '1749';\n"); + grammarBuilder.append("KW1750 : 'KW' '1750';\n"); + grammarBuilder.append("KW1751 : 'KW' '1751';\n"); + grammarBuilder.append("KW1752 : 'KW' '1752';\n"); + grammarBuilder.append("KW1753 : 'KW' '1753';\n"); + grammarBuilder.append("KW1754 : 'KW' '1754';\n"); + grammarBuilder.append("KW1755 : 'KW' '1755';\n"); + grammarBuilder.append("KW1756 : 'KW' '1756';\n"); + grammarBuilder.append("KW1757 : 'KW' '1757';\n"); + grammarBuilder.append("KW1758 : 'KW' '1758';\n"); + grammarBuilder.append("KW1759 : 'KW' '1759';\n"); + grammarBuilder.append("KW1760 : 'KW' '1760';\n"); + grammarBuilder.append("KW1761 : 'KW' '1761';\n"); + grammarBuilder.append("KW1762 : 'KW' '1762';\n"); + grammarBuilder.append("KW1763 : 'KW' '1763';\n"); + grammarBuilder.append("KW1764 : 'KW' '1764';\n"); + grammarBuilder.append("KW1765 : 'KW' '1765';\n"); + grammarBuilder.append("KW1766 : 'KW' '1766';\n"); + grammarBuilder.append("KW1767 : 'KW' '1767';\n"); + grammarBuilder.append("KW1768 : 'KW' '1768';\n"); + grammarBuilder.append("KW1769 : 'KW' '1769';\n"); + grammarBuilder.append("KW1770 : 'KW' '1770';\n"); + grammarBuilder.append("KW1771 : 'KW' '1771';\n"); + grammarBuilder.append("KW1772 : 'KW' '1772';\n"); + grammarBuilder.append("KW1773 : 'KW' '1773';\n"); + grammarBuilder.append("KW1774 : 'KW' '1774';\n"); + grammarBuilder.append("KW1775 : 'KW' '1775';\n"); + grammarBuilder.append("KW1776 : 'KW' '1776';\n"); + grammarBuilder.append("KW1777 : 'KW' '1777';\n"); + grammarBuilder.append("KW1778 : 'KW' '1778';\n"); + grammarBuilder.append("KW1779 : 'KW' '1779';\n"); + grammarBuilder.append("KW1780 : 'KW' '1780';\n"); + grammarBuilder.append("KW1781 : 'KW' '1781';\n"); + grammarBuilder.append("KW1782 : 'KW' '1782';\n"); + grammarBuilder.append("KW1783 : 'KW' '1783';\n"); + grammarBuilder.append("KW1784 : 'KW' '1784';\n"); + grammarBuilder.append("KW1785 : 'KW' '1785';\n"); + grammarBuilder.append("KW1786 : 'KW' '1786';\n"); + grammarBuilder.append("KW1787 : 'KW' '1787';\n"); + grammarBuilder.append("KW1788 : 'KW' '1788';\n"); + grammarBuilder.append("KW1789 : 'KW' '1789';\n"); + grammarBuilder.append("KW1790 : 'KW' '1790';\n"); + grammarBuilder.append("KW1791 : 'KW' '1791';\n"); + grammarBuilder.append("KW1792 : 'KW' '1792';\n"); + grammarBuilder.append("KW1793 : 'KW' '1793';\n"); + grammarBuilder.append("KW1794 : 'KW' '1794';\n"); + grammarBuilder.append("KW1795 : 'KW' '1795';\n"); + grammarBuilder.append("KW1796 : 'KW' '1796';\n"); + grammarBuilder.append("KW1797 : 'KW' '1797';\n"); + grammarBuilder.append("KW1798 : 'KW' '1798';\n"); + grammarBuilder.append("KW1799 : 'KW' '1799';\n"); + grammarBuilder.append("KW1800 : 'KW' '1800';\n"); + grammarBuilder.append("KW1801 : 'KW' '1801';\n"); + grammarBuilder.append("KW1802 : 'KW' '1802';\n"); + grammarBuilder.append("KW1803 : 'KW' '1803';\n"); + grammarBuilder.append("KW1804 : 'KW' '1804';\n"); + grammarBuilder.append("KW1805 : 'KW' '1805';\n"); + grammarBuilder.append("KW1806 : 'KW' '1806';\n"); + grammarBuilder.append("KW1807 : 'KW' '1807';\n"); + grammarBuilder.append("KW1808 : 'KW' '1808';\n"); + grammarBuilder.append("KW1809 : 'KW' '1809';\n"); + grammarBuilder.append("KW1810 : 'KW' '1810';\n"); + grammarBuilder.append("KW1811 : 'KW' '1811';\n"); + grammarBuilder.append("KW1812 : 'KW' '1812';\n"); + grammarBuilder.append("KW1813 : 'KW' '1813';\n"); + grammarBuilder.append("KW1814 : 'KW' '1814';\n"); + grammarBuilder.append("KW1815 : 'KW' '1815';\n"); + grammarBuilder.append("KW1816 : 'KW' '1816';\n"); + grammarBuilder.append("KW1817 : 'KW' '1817';\n"); + grammarBuilder.append("KW1818 : 'KW' '1818';\n"); + grammarBuilder.append("KW1819 : 'KW' '1819';\n"); + grammarBuilder.append("KW1820 : 'KW' '1820';\n"); + grammarBuilder.append("KW1821 : 'KW' '1821';\n"); + grammarBuilder.append("KW1822 : 'KW' '1822';\n"); + grammarBuilder.append("KW1823 : 'KW' '1823';\n"); + grammarBuilder.append("KW1824 : 'KW' '1824';\n"); + grammarBuilder.append("KW1825 : 'KW' '1825';\n"); + grammarBuilder.append("KW1826 : 'KW' '1826';\n"); + grammarBuilder.append("KW1827 : 'KW' '1827';\n"); + grammarBuilder.append("KW1828 : 'KW' '1828';\n"); + grammarBuilder.append("KW1829 : 'KW' '1829';\n"); + grammarBuilder.append("KW1830 : 'KW' '1830';\n"); + grammarBuilder.append("KW1831 : 'KW' '1831';\n"); + grammarBuilder.append("KW1832 : 'KW' '1832';\n"); + grammarBuilder.append("KW1833 : 'KW' '1833';\n"); + grammarBuilder.append("KW1834 : 'KW' '1834';\n"); + grammarBuilder.append("KW1835 : 'KW' '1835';\n"); + grammarBuilder.append("KW1836 : 'KW' '1836';\n"); + grammarBuilder.append("KW1837 : 'KW' '1837';\n"); + grammarBuilder.append("KW1838 : 'KW' '1838';\n"); + grammarBuilder.append("KW1839 : 'KW' '1839';\n"); + grammarBuilder.append("KW1840 : 'KW' '1840';\n"); + grammarBuilder.append("KW1841 : 'KW' '1841';\n"); + grammarBuilder.append("KW1842 : 'KW' '1842';\n"); + grammarBuilder.append("KW1843 : 'KW' '1843';\n"); + grammarBuilder.append("KW1844 : 'KW' '1844';\n"); + grammarBuilder.append("KW1845 : 'KW' '1845';\n"); + grammarBuilder.append("KW1846 : 'KW' '1846';\n"); + grammarBuilder.append("KW1847 : 'KW' '1847';\n"); + grammarBuilder.append("KW1848 : 'KW' '1848';\n"); + grammarBuilder.append("KW1849 : 'KW' '1849';\n"); + grammarBuilder.append("KW1850 : 'KW' '1850';\n"); + grammarBuilder.append("KW1851 : 'KW' '1851';\n"); + grammarBuilder.append("KW1852 : 'KW' '1852';\n"); + grammarBuilder.append("KW1853 : 'KW' '1853';\n"); + grammarBuilder.append("KW1854 : 'KW' '1854';\n"); + grammarBuilder.append("KW1855 : 'KW' '1855';\n"); + grammarBuilder.append("KW1856 : 'KW' '1856';\n"); + grammarBuilder.append("KW1857 : 'KW' '1857';\n"); + grammarBuilder.append("KW1858 : 'KW' '1858';\n"); + grammarBuilder.append("KW1859 : 'KW' '1859';\n"); + grammarBuilder.append("KW1860 : 'KW' '1860';\n"); + grammarBuilder.append("KW1861 : 'KW' '1861';\n"); + grammarBuilder.append("KW1862 : 'KW' '1862';\n"); + grammarBuilder.append("KW1863 : 'KW' '1863';\n"); + grammarBuilder.append("KW1864 : 'KW' '1864';\n"); + grammarBuilder.append("KW1865 : 'KW' '1865';\n"); + grammarBuilder.append("KW1866 : 'KW' '1866';\n"); + grammarBuilder.append("KW1867 : 'KW' '1867';\n"); + grammarBuilder.append("KW1868 : 'KW' '1868';\n"); + grammarBuilder.append("KW1869 : 'KW' '1869';\n"); + grammarBuilder.append("KW1870 : 'KW' '1870';\n"); + grammarBuilder.append("KW1871 : 'KW' '1871';\n"); + grammarBuilder.append("KW1872 : 'KW' '1872';\n"); + grammarBuilder.append("KW1873 : 'KW' '1873';\n"); + grammarBuilder.append("KW1874 : 'KW' '1874';\n"); + grammarBuilder.append("KW1875 : 'KW' '1875';\n"); + grammarBuilder.append("KW1876 : 'KW' '1876';\n"); + grammarBuilder.append("KW1877 : 'KW' '1877';\n"); + grammarBuilder.append("KW1878 : 'KW' '1878';\n"); + grammarBuilder.append("KW1879 : 'KW' '1879';\n"); + grammarBuilder.append("KW1880 : 'KW' '1880';\n"); + grammarBuilder.append("KW1881 : 'KW' '1881';\n"); + grammarBuilder.append("KW1882 : 'KW' '1882';\n"); + grammarBuilder.append("KW1883 : 'KW' '1883';\n"); + grammarBuilder.append("KW1884 : 'KW' '1884';\n"); + grammarBuilder.append("KW1885 : 'KW' '1885';\n"); + grammarBuilder.append("KW1886 : 'KW' '1886';\n"); + grammarBuilder.append("KW1887 : 'KW' '1887';\n"); + grammarBuilder.append("KW1888 : 'KW' '1888';\n"); + grammarBuilder.append("KW1889 : 'KW' '1889';\n"); + grammarBuilder.append("KW1890 : 'KW' '1890';\n"); + grammarBuilder.append("KW1891 : 'KW' '1891';\n"); + grammarBuilder.append("KW1892 : 'KW' '1892';\n"); + grammarBuilder.append("KW1893 : 'KW' '1893';\n"); + grammarBuilder.append("KW1894 : 'KW' '1894';\n"); + grammarBuilder.append("KW1895 : 'KW' '1895';\n"); + grammarBuilder.append("KW1896 : 'KW' '1896';\n"); + grammarBuilder.append("KW1897 : 'KW' '1897';\n"); + grammarBuilder.append("KW1898 : 'KW' '1898';\n"); + grammarBuilder.append("KW1899 : 'KW' '1899';\n"); + grammarBuilder.append("KW1900 : 'KW' '1900';\n"); + grammarBuilder.append("KW1901 : 'KW' '1901';\n"); + grammarBuilder.append("KW1902 : 'KW' '1902';\n"); + grammarBuilder.append("KW1903 : 'KW' '1903';\n"); + grammarBuilder.append("KW1904 : 'KW' '1904';\n"); + grammarBuilder.append("KW1905 : 'KW' '1905';\n"); + grammarBuilder.append("KW1906 : 'KW' '1906';\n"); + grammarBuilder.append("KW1907 : 'KW' '1907';\n"); + grammarBuilder.append("KW1908 : 'KW' '1908';\n"); + grammarBuilder.append("KW1909 : 'KW' '1909';\n"); + grammarBuilder.append("KW1910 : 'KW' '1910';\n"); + grammarBuilder.append("KW1911 : 'KW' '1911';\n"); + grammarBuilder.append("KW1912 : 'KW' '1912';\n"); + grammarBuilder.append("KW1913 : 'KW' '1913';\n"); + grammarBuilder.append("KW1914 : 'KW' '1914';\n"); + grammarBuilder.append("KW1915 : 'KW' '1915';\n"); + grammarBuilder.append("KW1916 : 'KW' '1916';\n"); + grammarBuilder.append("KW1917 : 'KW' '1917';\n"); + grammarBuilder.append("KW1918 : 'KW' '1918';\n"); + grammarBuilder.append("KW1919 : 'KW' '1919';\n"); + grammarBuilder.append("KW1920 : 'KW' '1920';\n"); + grammarBuilder.append("KW1921 : 'KW' '1921';\n"); + grammarBuilder.append("KW1922 : 'KW' '1922';\n"); + grammarBuilder.append("KW1923 : 'KW' '1923';\n"); + grammarBuilder.append("KW1924 : 'KW' '1924';\n"); + grammarBuilder.append("KW1925 : 'KW' '1925';\n"); + grammarBuilder.append("KW1926 : 'KW' '1926';\n"); + grammarBuilder.append("KW1927 : 'KW' '1927';\n"); + grammarBuilder.append("KW1928 : 'KW' '1928';\n"); + grammarBuilder.append("KW1929 : 'KW' '1929';\n"); + grammarBuilder.append("KW1930 : 'KW' '1930';\n"); + grammarBuilder.append("KW1931 : 'KW' '1931';\n"); + grammarBuilder.append("KW1932 : 'KW' '1932';\n"); + grammarBuilder.append("KW1933 : 'KW' '1933';\n"); + grammarBuilder.append("KW1934 : 'KW' '1934';\n"); + grammarBuilder.append("KW1935 : 'KW' '1935';\n"); + grammarBuilder.append("KW1936 : 'KW' '1936';\n"); + grammarBuilder.append("KW1937 : 'KW' '1937';\n"); + grammarBuilder.append("KW1938 : 'KW' '1938';\n"); + grammarBuilder.append("KW1939 : 'KW' '1939';\n"); + grammarBuilder.append("KW1940 : 'KW' '1940';\n"); + grammarBuilder.append("KW1941 : 'KW' '1941';\n"); + grammarBuilder.append("KW1942 : 'KW' '1942';\n"); + grammarBuilder.append("KW1943 : 'KW' '1943';\n"); + grammarBuilder.append("KW1944 : 'KW' '1944';\n"); + grammarBuilder.append("KW1945 : 'KW' '1945';\n"); + grammarBuilder.append("KW1946 : 'KW' '1946';\n"); + grammarBuilder.append("KW1947 : 'KW' '1947';\n"); + grammarBuilder.append("KW1948 : 'KW' '1948';\n"); + grammarBuilder.append("KW1949 : 'KW' '1949';\n"); + grammarBuilder.append("KW1950 : 'KW' '1950';\n"); + grammarBuilder.append("KW1951 : 'KW' '1951';\n"); + grammarBuilder.append("KW1952 : 'KW' '1952';\n"); + grammarBuilder.append("KW1953 : 'KW' '1953';\n"); + grammarBuilder.append("KW1954 : 'KW' '1954';\n"); + grammarBuilder.append("KW1955 : 'KW' '1955';\n"); + grammarBuilder.append("KW1956 : 'KW' '1956';\n"); + grammarBuilder.append("KW1957 : 'KW' '1957';\n"); + grammarBuilder.append("KW1958 : 'KW' '1958';\n"); + grammarBuilder.append("KW1959 : 'KW' '1959';\n"); + grammarBuilder.append("KW1960 : 'KW' '1960';\n"); + grammarBuilder.append("KW1961 : 'KW' '1961';\n"); + grammarBuilder.append("KW1962 : 'KW' '1962';\n"); + grammarBuilder.append("KW1963 : 'KW' '1963';\n"); + grammarBuilder.append("KW1964 : 'KW' '1964';\n"); + grammarBuilder.append("KW1965 : 'KW' '1965';\n"); + grammarBuilder.append("KW1966 : 'KW' '1966';\n"); + grammarBuilder.append("KW1967 : 'KW' '1967';\n"); + grammarBuilder.append("KW1968 : 'KW' '1968';\n"); + grammarBuilder.append("KW1969 : 'KW' '1969';\n"); + grammarBuilder.append("KW1970 : 'KW' '1970';\n"); + grammarBuilder.append("KW1971 : 'KW' '1971';\n"); + grammarBuilder.append("KW1972 : 'KW' '1972';\n"); + grammarBuilder.append("KW1973 : 'KW' '1973';\n"); + grammarBuilder.append("KW1974 : 'KW' '1974';\n"); + grammarBuilder.append("KW1975 : 'KW' '1975';\n"); + grammarBuilder.append("KW1976 : 'KW' '1976';\n"); + grammarBuilder.append("KW1977 : 'KW' '1977';\n"); + grammarBuilder.append("KW1978 : 'KW' '1978';\n"); + grammarBuilder.append("KW1979 : 'KW' '1979';\n"); + grammarBuilder.append("KW1980 : 'KW' '1980';\n"); + grammarBuilder.append("KW1981 : 'KW' '1981';\n"); + grammarBuilder.append("KW1982 : 'KW' '1982';\n"); + grammarBuilder.append("KW1983 : 'KW' '1983';\n"); + grammarBuilder.append("KW1984 : 'KW' '1984';\n"); + grammarBuilder.append("KW1985 : 'KW' '1985';\n"); + grammarBuilder.append("KW1986 : 'KW' '1986';\n"); + grammarBuilder.append("KW1987 : 'KW' '1987';\n"); + grammarBuilder.append("KW1988 : 'KW' '1988';\n"); + grammarBuilder.append("KW1989 : 'KW' '1989';\n"); + grammarBuilder.append("KW1990 : 'KW' '1990';\n"); + grammarBuilder.append("KW1991 : 'KW' '1991';\n"); + grammarBuilder.append("KW1992 : 'KW' '1992';\n"); + grammarBuilder.append("KW1993 : 'KW' '1993';\n"); + grammarBuilder.append("KW1994 : 'KW' '1994';\n"); + grammarBuilder.append("KW1995 : 'KW' '1995';\n"); + grammarBuilder.append("KW1996 : 'KW' '1996';\n"); + grammarBuilder.append("KW1997 : 'KW' '1997';\n"); + grammarBuilder.append("KW1998 : 'KW' '1998';\n"); + grammarBuilder.append("KW1999 : 'KW' '1999';\n"); + grammarBuilder.append("KW2000 : 'KW' '2000';\n"); + grammarBuilder.append("KW2001 : 'KW' '2001';\n"); + grammarBuilder.append("KW2002 : 'KW' '2002';\n"); + grammarBuilder.append("KW2003 : 'KW' '2003';\n"); + grammarBuilder.append("KW2004 : 'KW' '2004';\n"); + grammarBuilder.append("KW2005 : 'KW' '2005';\n"); + grammarBuilder.append("KW2006 : 'KW' '2006';\n"); + grammarBuilder.append("KW2007 : 'KW' '2007';\n"); + grammarBuilder.append("KW2008 : 'KW' '2008';\n"); + grammarBuilder.append("KW2009 : 'KW' '2009';\n"); + grammarBuilder.append("KW2010 : 'KW' '2010';\n"); + grammarBuilder.append("KW2011 : 'KW' '2011';\n"); + grammarBuilder.append("KW2012 : 'KW' '2012';\n"); + grammarBuilder.append("KW2013 : 'KW' '2013';\n"); + grammarBuilder.append("KW2014 : 'KW' '2014';\n"); + grammarBuilder.append("KW2015 : 'KW' '2015';\n"); + grammarBuilder.append("KW2016 : 'KW' '2016';\n"); + grammarBuilder.append("KW2017 : 'KW' '2017';\n"); + grammarBuilder.append("KW2018 : 'KW' '2018';\n"); + grammarBuilder.append("KW2019 : 'KW' '2019';\n"); + grammarBuilder.append("KW2020 : 'KW' '2020';\n"); + grammarBuilder.append("KW2021 : 'KW' '2021';\n"); + grammarBuilder.append("KW2022 : 'KW' '2022';\n"); + grammarBuilder.append("KW2023 : 'KW' '2023';\n"); + grammarBuilder.append("KW2024 : 'KW' '2024';\n"); + grammarBuilder.append("KW2025 : 'KW' '2025';\n"); + grammarBuilder.append("KW2026 : 'KW' '2026';\n"); + grammarBuilder.append("KW2027 : 'KW' '2027';\n"); + grammarBuilder.append("KW2028 : 'KW' '2028';\n"); + grammarBuilder.append("KW2029 : 'KW' '2029';\n"); + grammarBuilder.append("KW2030 : 'KW' '2030';\n"); + grammarBuilder.append("KW2031 : 'KW' '2031';\n"); + grammarBuilder.append("KW2032 : 'KW' '2032';\n"); + grammarBuilder.append("KW2033 : 'KW' '2033';\n"); + grammarBuilder.append("KW2034 : 'KW' '2034';\n"); + grammarBuilder.append("KW2035 : 'KW' '2035';\n"); + grammarBuilder.append("KW2036 : 'KW' '2036';\n"); + grammarBuilder.append("KW2037 : 'KW' '2037';\n"); + grammarBuilder.append("KW2038 : 'KW' '2038';\n"); + grammarBuilder.append("KW2039 : 'KW' '2039';\n"); + grammarBuilder.append("KW2040 : 'KW' '2040';\n"); + grammarBuilder.append("KW2041 : 'KW' '2041';\n"); + grammarBuilder.append("KW2042 : 'KW' '2042';\n"); + grammarBuilder.append("KW2043 : 'KW' '2043';\n"); + grammarBuilder.append("KW2044 : 'KW' '2044';\n"); + grammarBuilder.append("KW2045 : 'KW' '2045';\n"); + grammarBuilder.append("KW2046 : 'KW' '2046';\n"); + grammarBuilder.append("KW2047 : 'KW' '2047';\n"); + grammarBuilder.append("KW2048 : 'KW' '2048';\n"); + grammarBuilder.append("KW2049 : 'KW' '2049';\n"); + grammarBuilder.append("KW2050 : 'KW' '2050';\n"); + grammarBuilder.append("KW2051 : 'KW' '2051';\n"); + grammarBuilder.append("KW2052 : 'KW' '2052';\n"); + grammarBuilder.append("KW2053 : 'KW' '2053';\n"); + grammarBuilder.append("KW2054 : 'KW' '2054';\n"); + grammarBuilder.append("KW2055 : 'KW' '2055';\n"); + grammarBuilder.append("KW2056 : 'KW' '2056';\n"); + grammarBuilder.append("KW2057 : 'KW' '2057';\n"); + grammarBuilder.append("KW2058 : 'KW' '2058';\n"); + grammarBuilder.append("KW2059 : 'KW' '2059';\n"); + grammarBuilder.append("KW2060 : 'KW' '2060';\n"); + grammarBuilder.append("KW2061 : 'KW' '2061';\n"); + grammarBuilder.append("KW2062 : 'KW' '2062';\n"); + grammarBuilder.append("KW2063 : 'KW' '2063';\n"); + grammarBuilder.append("KW2064 : 'KW' '2064';\n"); + grammarBuilder.append("KW2065 : 'KW' '2065';\n"); + grammarBuilder.append("KW2066 : 'KW' '2066';\n"); + grammarBuilder.append("KW2067 : 'KW' '2067';\n"); + grammarBuilder.append("KW2068 : 'KW' '2068';\n"); + grammarBuilder.append("KW2069 : 'KW' '2069';\n"); + grammarBuilder.append("KW2070 : 'KW' '2070';\n"); + grammarBuilder.append("KW2071 : 'KW' '2071';\n"); + grammarBuilder.append("KW2072 : 'KW' '2072';\n"); + grammarBuilder.append("KW2073 : 'KW' '2073';\n"); + grammarBuilder.append("KW2074 : 'KW' '2074';\n"); + grammarBuilder.append("KW2075 : 'KW' '2075';\n"); + grammarBuilder.append("KW2076 : 'KW' '2076';\n"); + grammarBuilder.append("KW2077 : 'KW' '2077';\n"); + grammarBuilder.append("KW2078 : 'KW' '2078';\n"); + grammarBuilder.append("KW2079 : 'KW' '2079';\n"); + grammarBuilder.append("KW2080 : 'KW' '2080';\n"); + grammarBuilder.append("KW2081 : 'KW' '2081';\n"); + grammarBuilder.append("KW2082 : 'KW' '2082';\n"); + grammarBuilder.append("KW2083 : 'KW' '2083';\n"); + grammarBuilder.append("KW2084 : 'KW' '2084';\n"); + grammarBuilder.append("KW2085 : 'KW' '2085';\n"); + grammarBuilder.append("KW2086 : 'KW' '2086';\n"); + grammarBuilder.append("KW2087 : 'KW' '2087';\n"); + grammarBuilder.append("KW2088 : 'KW' '2088';\n"); + grammarBuilder.append("KW2089 : 'KW' '2089';\n"); + grammarBuilder.append("KW2090 : 'KW' '2090';\n"); + grammarBuilder.append("KW2091 : 'KW' '2091';\n"); + grammarBuilder.append("KW2092 : 'KW' '2092';\n"); + grammarBuilder.append("KW2093 : 'KW' '2093';\n"); + grammarBuilder.append("KW2094 : 'KW' '2094';\n"); + grammarBuilder.append("KW2095 : 'KW' '2095';\n"); + grammarBuilder.append("KW2096 : 'KW' '2096';\n"); + grammarBuilder.append("KW2097 : 'KW' '2097';\n"); + grammarBuilder.append("KW2098 : 'KW' '2098';\n"); + grammarBuilder.append("KW2099 : 'KW' '2099';\n"); + grammarBuilder.append("KW2100 : 'KW' '2100';\n"); + grammarBuilder.append("KW2101 : 'KW' '2101';\n"); + grammarBuilder.append("KW2102 : 'KW' '2102';\n"); + grammarBuilder.append("KW2103 : 'KW' '2103';\n"); + grammarBuilder.append("KW2104 : 'KW' '2104';\n"); + grammarBuilder.append("KW2105 : 'KW' '2105';\n"); + grammarBuilder.append("KW2106 : 'KW' '2106';\n"); + grammarBuilder.append("KW2107 : 'KW' '2107';\n"); + grammarBuilder.append("KW2108 : 'KW' '2108';\n"); + grammarBuilder.append("KW2109 : 'KW' '2109';\n"); + grammarBuilder.append("KW2110 : 'KW' '2110';\n"); + grammarBuilder.append("KW2111 : 'KW' '2111';\n"); + grammarBuilder.append("KW2112 : 'KW' '2112';\n"); + grammarBuilder.append("KW2113 : 'KW' '2113';\n"); + grammarBuilder.append("KW2114 : 'KW' '2114';\n"); + grammarBuilder.append("KW2115 : 'KW' '2115';\n"); + grammarBuilder.append("KW2116 : 'KW' '2116';\n"); + grammarBuilder.append("KW2117 : 'KW' '2117';\n"); + grammarBuilder.append("KW2118 : 'KW' '2118';\n"); + grammarBuilder.append("KW2119 : 'KW' '2119';\n"); + grammarBuilder.append("KW2120 : 'KW' '2120';\n"); + grammarBuilder.append("KW2121 : 'KW' '2121';\n"); + grammarBuilder.append("KW2122 : 'KW' '2122';\n"); + grammarBuilder.append("KW2123 : 'KW' '2123';\n"); + grammarBuilder.append("KW2124 : 'KW' '2124';\n"); + grammarBuilder.append("KW2125 : 'KW' '2125';\n"); + grammarBuilder.append("KW2126 : 'KW' '2126';\n"); + grammarBuilder.append("KW2127 : 'KW' '2127';\n"); + grammarBuilder.append("KW2128 : 'KW' '2128';\n"); + grammarBuilder.append("KW2129 : 'KW' '2129';\n"); + grammarBuilder.append("KW2130 : 'KW' '2130';\n"); + grammarBuilder.append("KW2131 : 'KW' '2131';\n"); + grammarBuilder.append("KW2132 : 'KW' '2132';\n"); + grammarBuilder.append("KW2133 : 'KW' '2133';\n"); + grammarBuilder.append("KW2134 : 'KW' '2134';\n"); + grammarBuilder.append("KW2135 : 'KW' '2135';\n"); + grammarBuilder.append("KW2136 : 'KW' '2136';\n"); + grammarBuilder.append("KW2137 : 'KW' '2137';\n"); + grammarBuilder.append("KW2138 : 'KW' '2138';\n"); + grammarBuilder.append("KW2139 : 'KW' '2139';\n"); + grammarBuilder.append("KW2140 : 'KW' '2140';\n"); + grammarBuilder.append("KW2141 : 'KW' '2141';\n"); + grammarBuilder.append("KW2142 : 'KW' '2142';\n"); + grammarBuilder.append("KW2143 : 'KW' '2143';\n"); + grammarBuilder.append("KW2144 : 'KW' '2144';\n"); + grammarBuilder.append("KW2145 : 'KW' '2145';\n"); + grammarBuilder.append("KW2146 : 'KW' '2146';\n"); + grammarBuilder.append("KW2147 : 'KW' '2147';\n"); + grammarBuilder.append("KW2148 : 'KW' '2148';\n"); + grammarBuilder.append("KW2149 : 'KW' '2149';\n"); + grammarBuilder.append("KW2150 : 'KW' '2150';\n"); + grammarBuilder.append("KW2151 : 'KW' '2151';\n"); + grammarBuilder.append("KW2152 : 'KW' '2152';\n"); + grammarBuilder.append("KW2153 : 'KW' '2153';\n"); + grammarBuilder.append("KW2154 : 'KW' '2154';\n"); + grammarBuilder.append("KW2155 : 'KW' '2155';\n"); + grammarBuilder.append("KW2156 : 'KW' '2156';\n"); + grammarBuilder.append("KW2157 : 'KW' '2157';\n"); + grammarBuilder.append("KW2158 : 'KW' '2158';\n"); + grammarBuilder.append("KW2159 : 'KW' '2159';\n"); + grammarBuilder.append("KW2160 : 'KW' '2160';\n"); + grammarBuilder.append("KW2161 : 'KW' '2161';\n"); + grammarBuilder.append("KW2162 : 'KW' '2162';\n"); + grammarBuilder.append("KW2163 : 'KW' '2163';\n"); + grammarBuilder.append("KW2164 : 'KW' '2164';\n"); + grammarBuilder.append("KW2165 : 'KW' '2165';\n"); + grammarBuilder.append("KW2166 : 'KW' '2166';\n"); + grammarBuilder.append("KW2167 : 'KW' '2167';\n"); + grammarBuilder.append("KW2168 : 'KW' '2168';\n"); + grammarBuilder.append("KW2169 : 'KW' '2169';\n"); + grammarBuilder.append("KW2170 : 'KW' '2170';\n"); + grammarBuilder.append("KW2171 : 'KW' '2171';\n"); + grammarBuilder.append("KW2172 : 'KW' '2172';\n"); + grammarBuilder.append("KW2173 : 'KW' '2173';\n"); + grammarBuilder.append("KW2174 : 'KW' '2174';\n"); + grammarBuilder.append("KW2175 : 'KW' '2175';\n"); + grammarBuilder.append("KW2176 : 'KW' '2176';\n"); + grammarBuilder.append("KW2177 : 'KW' '2177';\n"); + grammarBuilder.append("KW2178 : 'KW' '2178';\n"); + grammarBuilder.append("KW2179 : 'KW' '2179';\n"); + grammarBuilder.append("KW2180 : 'KW' '2180';\n"); + grammarBuilder.append("KW2181 : 'KW' '2181';\n"); + grammarBuilder.append("KW2182 : 'KW' '2182';\n"); + grammarBuilder.append("KW2183 : 'KW' '2183';\n"); + grammarBuilder.append("KW2184 : 'KW' '2184';\n"); + grammarBuilder.append("KW2185 : 'KW' '2185';\n"); + grammarBuilder.append("KW2186 : 'KW' '2186';\n"); + grammarBuilder.append("KW2187 : 'KW' '2187';\n"); + grammarBuilder.append("KW2188 : 'KW' '2188';\n"); + grammarBuilder.append("KW2189 : 'KW' '2189';\n"); + grammarBuilder.append("KW2190 : 'KW' '2190';\n"); + grammarBuilder.append("KW2191 : 'KW' '2191';\n"); + grammarBuilder.append("KW2192 : 'KW' '2192';\n"); + grammarBuilder.append("KW2193 : 'KW' '2193';\n"); + grammarBuilder.append("KW2194 : 'KW' '2194';\n"); + grammarBuilder.append("KW2195 : 'KW' '2195';\n"); + grammarBuilder.append("KW2196 : 'KW' '2196';\n"); + grammarBuilder.append("KW2197 : 'KW' '2197';\n"); + grammarBuilder.append("KW2198 : 'KW' '2198';\n"); + grammarBuilder.append("KW2199 : 'KW' '2199';\n"); + grammarBuilder.append("KW2200 : 'KW' '2200';\n"); + grammarBuilder.append("KW2201 : 'KW' '2201';\n"); + grammarBuilder.append("KW2202 : 'KW' '2202';\n"); + grammarBuilder.append("KW2203 : 'KW' '2203';\n"); + grammarBuilder.append("KW2204 : 'KW' '2204';\n"); + grammarBuilder.append("KW2205 : 'KW' '2205';\n"); + grammarBuilder.append("KW2206 : 'KW' '2206';\n"); + grammarBuilder.append("KW2207 : 'KW' '2207';\n"); + grammarBuilder.append("KW2208 : 'KW' '2208';\n"); + grammarBuilder.append("KW2209 : 'KW' '2209';\n"); + grammarBuilder.append("KW2210 : 'KW' '2210';\n"); + grammarBuilder.append("KW2211 : 'KW' '2211';\n"); + grammarBuilder.append("KW2212 : 'KW' '2212';\n"); + grammarBuilder.append("KW2213 : 'KW' '2213';\n"); + grammarBuilder.append("KW2214 : 'KW' '2214';\n"); + grammarBuilder.append("KW2215 : 'KW' '2215';\n"); + grammarBuilder.append("KW2216 : 'KW' '2216';\n"); + grammarBuilder.append("KW2217 : 'KW' '2217';\n"); + grammarBuilder.append("KW2218 : 'KW' '2218';\n"); + grammarBuilder.append("KW2219 : 'KW' '2219';\n"); + grammarBuilder.append("KW2220 : 'KW' '2220';\n"); + grammarBuilder.append("KW2221 : 'KW' '2221';\n"); + grammarBuilder.append("KW2222 : 'KW' '2222';\n"); + grammarBuilder.append("KW2223 : 'KW' '2223';\n"); + grammarBuilder.append("KW2224 : 'KW' '2224';\n"); + grammarBuilder.append("KW2225 : 'KW' '2225';\n"); + grammarBuilder.append("KW2226 : 'KW' '2226';\n"); + grammarBuilder.append("KW2227 : 'KW' '2227';\n"); + grammarBuilder.append("KW2228 : 'KW' '2228';\n"); + grammarBuilder.append("KW2229 : 'KW' '2229';\n"); + grammarBuilder.append("KW2230 : 'KW' '2230';\n"); + grammarBuilder.append("KW2231 : 'KW' '2231';\n"); + grammarBuilder.append("KW2232 : 'KW' '2232';\n"); + grammarBuilder.append("KW2233 : 'KW' '2233';\n"); + grammarBuilder.append("KW2234 : 'KW' '2234';\n"); + grammarBuilder.append("KW2235 : 'KW' '2235';\n"); + grammarBuilder.append("KW2236 : 'KW' '2236';\n"); + grammarBuilder.append("KW2237 : 'KW' '2237';\n"); + grammarBuilder.append("KW2238 : 'KW' '2238';\n"); + grammarBuilder.append("KW2239 : 'KW' '2239';\n"); + grammarBuilder.append("KW2240 : 'KW' '2240';\n"); + grammarBuilder.append("KW2241 : 'KW' '2241';\n"); + grammarBuilder.append("KW2242 : 'KW' '2242';\n"); + grammarBuilder.append("KW2243 : 'KW' '2243';\n"); + grammarBuilder.append("KW2244 : 'KW' '2244';\n"); + grammarBuilder.append("KW2245 : 'KW' '2245';\n"); + grammarBuilder.append("KW2246 : 'KW' '2246';\n"); + grammarBuilder.append("KW2247 : 'KW' '2247';\n"); + grammarBuilder.append("KW2248 : 'KW' '2248';\n"); + grammarBuilder.append("KW2249 : 'KW' '2249';\n"); + grammarBuilder.append("KW2250 : 'KW' '2250';\n"); + grammarBuilder.append("KW2251 : 'KW' '2251';\n"); + grammarBuilder.append("KW2252 : 'KW' '2252';\n"); + grammarBuilder.append("KW2253 : 'KW' '2253';\n"); + grammarBuilder.append("KW2254 : 'KW' '2254';\n"); + grammarBuilder.append("KW2255 : 'KW' '2255';\n"); + grammarBuilder.append("KW2256 : 'KW' '2256';\n"); + grammarBuilder.append("KW2257 : 'KW' '2257';\n"); + grammarBuilder.append("KW2258 : 'KW' '2258';\n"); + grammarBuilder.append("KW2259 : 'KW' '2259';\n"); + grammarBuilder.append("KW2260 : 'KW' '2260';\n"); + grammarBuilder.append("KW2261 : 'KW' '2261';\n"); + grammarBuilder.append("KW2262 : 'KW' '2262';\n"); + grammarBuilder.append("KW2263 : 'KW' '2263';\n"); + grammarBuilder.append("KW2264 : 'KW' '2264';\n"); + grammarBuilder.append("KW2265 : 'KW' '2265';\n"); + grammarBuilder.append("KW2266 : 'KW' '2266';\n"); + grammarBuilder.append("KW2267 : 'KW' '2267';\n"); + grammarBuilder.append("KW2268 : 'KW' '2268';\n"); + grammarBuilder.append("KW2269 : 'KW' '2269';\n"); + grammarBuilder.append("KW2270 : 'KW' '2270';\n"); + grammarBuilder.append("KW2271 : 'KW' '2271';\n"); + grammarBuilder.append("KW2272 : 'KW' '2272';\n"); + grammarBuilder.append("KW2273 : 'KW' '2273';\n"); + grammarBuilder.append("KW2274 : 'KW' '2274';\n"); + grammarBuilder.append("KW2275 : 'KW' '2275';\n"); + grammarBuilder.append("KW2276 : 'KW' '2276';\n"); + grammarBuilder.append("KW2277 : 'KW' '2277';\n"); + grammarBuilder.append("KW2278 : 'KW' '2278';\n"); + grammarBuilder.append("KW2279 : 'KW' '2279';\n"); + grammarBuilder.append("KW2280 : 'KW' '2280';\n"); + grammarBuilder.append("KW2281 : 'KW' '2281';\n"); + grammarBuilder.append("KW2282 : 'KW' '2282';\n"); + grammarBuilder.append("KW2283 : 'KW' '2283';\n"); + grammarBuilder.append("KW2284 : 'KW' '2284';\n"); + grammarBuilder.append("KW2285 : 'KW' '2285';\n"); + grammarBuilder.append("KW2286 : 'KW' '2286';\n"); + grammarBuilder.append("KW2287 : 'KW' '2287';\n"); + grammarBuilder.append("KW2288 : 'KW' '2288';\n"); + grammarBuilder.append("KW2289 : 'KW' '2289';\n"); + grammarBuilder.append("KW2290 : 'KW' '2290';\n"); + grammarBuilder.append("KW2291 : 'KW' '2291';\n"); + grammarBuilder.append("KW2292 : 'KW' '2292';\n"); + grammarBuilder.append("KW2293 : 'KW' '2293';\n"); + grammarBuilder.append("KW2294 : 'KW' '2294';\n"); + grammarBuilder.append("KW2295 : 'KW' '2295';\n"); + grammarBuilder.append("KW2296 : 'KW' '2296';\n"); + grammarBuilder.append("KW2297 : 'KW' '2297';\n"); + grammarBuilder.append("KW2298 : 'KW' '2298';\n"); + grammarBuilder.append("KW2299 : 'KW' '2299';\n"); + grammarBuilder.append("KW2300 : 'KW' '2300';\n"); + grammarBuilder.append("KW2301 : 'KW' '2301';\n"); + grammarBuilder.append("KW2302 : 'KW' '2302';\n"); + grammarBuilder.append("KW2303 : 'KW' '2303';\n"); + grammarBuilder.append("KW2304 : 'KW' '2304';\n"); + grammarBuilder.append("KW2305 : 'KW' '2305';\n"); + grammarBuilder.append("KW2306 : 'KW' '2306';\n"); + grammarBuilder.append("KW2307 : 'KW' '2307';\n"); + grammarBuilder.append("KW2308 : 'KW' '2308';\n"); + grammarBuilder.append("KW2309 : 'KW' '2309';\n"); + grammarBuilder.append("KW2310 : 'KW' '2310';\n"); + grammarBuilder.append("KW2311 : 'KW' '2311';\n"); + grammarBuilder.append("KW2312 : 'KW' '2312';\n"); + grammarBuilder.append("KW2313 : 'KW' '2313';\n"); + grammarBuilder.append("KW2314 : 'KW' '2314';\n"); + grammarBuilder.append("KW2315 : 'KW' '2315';\n"); + grammarBuilder.append("KW2316 : 'KW' '2316';\n"); + grammarBuilder.append("KW2317 : 'KW' '2317';\n"); + grammarBuilder.append("KW2318 : 'KW' '2318';\n"); + grammarBuilder.append("KW2319 : 'KW' '2319';\n"); + grammarBuilder.append("KW2320 : 'KW' '2320';\n"); + grammarBuilder.append("KW2321 : 'KW' '2321';\n"); + grammarBuilder.append("KW2322 : 'KW' '2322';\n"); + grammarBuilder.append("KW2323 : 'KW' '2323';\n"); + grammarBuilder.append("KW2324 : 'KW' '2324';\n"); + grammarBuilder.append("KW2325 : 'KW' '2325';\n"); + grammarBuilder.append("KW2326 : 'KW' '2326';\n"); + grammarBuilder.append("KW2327 : 'KW' '2327';\n"); + grammarBuilder.append("KW2328 : 'KW' '2328';\n"); + grammarBuilder.append("KW2329 : 'KW' '2329';\n"); + grammarBuilder.append("KW2330 : 'KW' '2330';\n"); + grammarBuilder.append("KW2331 : 'KW' '2331';\n"); + grammarBuilder.append("KW2332 : 'KW' '2332';\n"); + grammarBuilder.append("KW2333 : 'KW' '2333';\n"); + grammarBuilder.append("KW2334 : 'KW' '2334';\n"); + grammarBuilder.append("KW2335 : 'KW' '2335';\n"); + grammarBuilder.append("KW2336 : 'KW' '2336';\n"); + grammarBuilder.append("KW2337 : 'KW' '2337';\n"); + grammarBuilder.append("KW2338 : 'KW' '2338';\n"); + grammarBuilder.append("KW2339 : 'KW' '2339';\n"); + grammarBuilder.append("KW2340 : 'KW' '2340';\n"); + grammarBuilder.append("KW2341 : 'KW' '2341';\n"); + grammarBuilder.append("KW2342 : 'KW' '2342';\n"); + grammarBuilder.append("KW2343 : 'KW' '2343';\n"); + grammarBuilder.append("KW2344 : 'KW' '2344';\n"); + grammarBuilder.append("KW2345 : 'KW' '2345';\n"); + grammarBuilder.append("KW2346 : 'KW' '2346';\n"); + grammarBuilder.append("KW2347 : 'KW' '2347';\n"); + grammarBuilder.append("KW2348 : 'KW' '2348';\n"); + grammarBuilder.append("KW2349 : 'KW' '2349';\n"); + grammarBuilder.append("KW2350 : 'KW' '2350';\n"); + grammarBuilder.append("KW2351 : 'KW' '2351';\n"); + grammarBuilder.append("KW2352 : 'KW' '2352';\n"); + grammarBuilder.append("KW2353 : 'KW' '2353';\n"); + grammarBuilder.append("KW2354 : 'KW' '2354';\n"); + grammarBuilder.append("KW2355 : 'KW' '2355';\n"); + grammarBuilder.append("KW2356 : 'KW' '2356';\n"); + grammarBuilder.append("KW2357 : 'KW' '2357';\n"); + grammarBuilder.append("KW2358 : 'KW' '2358';\n"); + grammarBuilder.append("KW2359 : 'KW' '2359';\n"); + grammarBuilder.append("KW2360 : 'KW' '2360';\n"); + grammarBuilder.append("KW2361 : 'KW' '2361';\n"); + grammarBuilder.append("KW2362 : 'KW' '2362';\n"); + grammarBuilder.append("KW2363 : 'KW' '2363';\n"); + grammarBuilder.append("KW2364 : 'KW' '2364';\n"); + grammarBuilder.append("KW2365 : 'KW' '2365';\n"); + grammarBuilder.append("KW2366 : 'KW' '2366';\n"); + grammarBuilder.append("KW2367 : 'KW' '2367';\n"); + grammarBuilder.append("KW2368 : 'KW' '2368';\n"); + grammarBuilder.append("KW2369 : 'KW' '2369';\n"); + grammarBuilder.append("KW2370 : 'KW' '2370';\n"); + grammarBuilder.append("KW2371 : 'KW' '2371';\n"); + grammarBuilder.append("KW2372 : 'KW' '2372';\n"); + grammarBuilder.append("KW2373 : 'KW' '2373';\n"); + grammarBuilder.append("KW2374 : 'KW' '2374';\n"); + grammarBuilder.append("KW2375 : 'KW' '2375';\n"); + grammarBuilder.append("KW2376 : 'KW' '2376';\n"); + grammarBuilder.append("KW2377 : 'KW' '2377';\n"); + grammarBuilder.append("KW2378 : 'KW' '2378';\n"); + grammarBuilder.append("KW2379 : 'KW' '2379';\n"); + grammarBuilder.append("KW2380 : 'KW' '2380';\n"); + grammarBuilder.append("KW2381 : 'KW' '2381';\n"); + grammarBuilder.append("KW2382 : 'KW' '2382';\n"); + grammarBuilder.append("KW2383 : 'KW' '2383';\n"); + grammarBuilder.append("KW2384 : 'KW' '2384';\n"); + grammarBuilder.append("KW2385 : 'KW' '2385';\n"); + grammarBuilder.append("KW2386 : 'KW' '2386';\n"); + grammarBuilder.append("KW2387 : 'KW' '2387';\n"); + grammarBuilder.append("KW2388 : 'KW' '2388';\n"); + grammarBuilder.append("KW2389 : 'KW' '2389';\n"); + grammarBuilder.append("KW2390 : 'KW' '2390';\n"); + grammarBuilder.append("KW2391 : 'KW' '2391';\n"); + grammarBuilder.append("KW2392 : 'KW' '2392';\n"); + grammarBuilder.append("KW2393 : 'KW' '2393';\n"); + grammarBuilder.append("KW2394 : 'KW' '2394';\n"); + grammarBuilder.append("KW2395 : 'KW' '2395';\n"); + grammarBuilder.append("KW2396 : 'KW' '2396';\n"); + grammarBuilder.append("KW2397 : 'KW' '2397';\n"); + grammarBuilder.append("KW2398 : 'KW' '2398';\n"); + grammarBuilder.append("KW2399 : 'KW' '2399';\n"); + grammarBuilder.append("KW2400 : 'KW' '2400';\n"); + grammarBuilder.append("KW2401 : 'KW' '2401';\n"); + grammarBuilder.append("KW2402 : 'KW' '2402';\n"); + grammarBuilder.append("KW2403 : 'KW' '2403';\n"); + grammarBuilder.append("KW2404 : 'KW' '2404';\n"); + grammarBuilder.append("KW2405 : 'KW' '2405';\n"); + grammarBuilder.append("KW2406 : 'KW' '2406';\n"); + grammarBuilder.append("KW2407 : 'KW' '2407';\n"); + grammarBuilder.append("KW2408 : 'KW' '2408';\n"); + grammarBuilder.append("KW2409 : 'KW' '2409';\n"); + grammarBuilder.append("KW2410 : 'KW' '2410';\n"); + grammarBuilder.append("KW2411 : 'KW' '2411';\n"); + grammarBuilder.append("KW2412 : 'KW' '2412';\n"); + grammarBuilder.append("KW2413 : 'KW' '2413';\n"); + grammarBuilder.append("KW2414 : 'KW' '2414';\n"); + grammarBuilder.append("KW2415 : 'KW' '2415';\n"); + grammarBuilder.append("KW2416 : 'KW' '2416';\n"); + grammarBuilder.append("KW2417 : 'KW' '2417';\n"); + grammarBuilder.append("KW2418 : 'KW' '2418';\n"); + grammarBuilder.append("KW2419 : 'KW' '2419';\n"); + grammarBuilder.append("KW2420 : 'KW' '2420';\n"); + grammarBuilder.append("KW2421 : 'KW' '2421';\n"); + grammarBuilder.append("KW2422 : 'KW' '2422';\n"); + grammarBuilder.append("KW2423 : 'KW' '2423';\n"); + grammarBuilder.append("KW2424 : 'KW' '2424';\n"); + grammarBuilder.append("KW2425 : 'KW' '2425';\n"); + grammarBuilder.append("KW2426 : 'KW' '2426';\n"); + grammarBuilder.append("KW2427 : 'KW' '2427';\n"); + grammarBuilder.append("KW2428 : 'KW' '2428';\n"); + grammarBuilder.append("KW2429 : 'KW' '2429';\n"); + grammarBuilder.append("KW2430 : 'KW' '2430';\n"); + grammarBuilder.append("KW2431 : 'KW' '2431';\n"); + grammarBuilder.append("KW2432 : 'KW' '2432';\n"); + grammarBuilder.append("KW2433 : 'KW' '2433';\n"); + grammarBuilder.append("KW2434 : 'KW' '2434';\n"); + grammarBuilder.append("KW2435 : 'KW' '2435';\n"); + grammarBuilder.append("KW2436 : 'KW' '2436';\n"); + grammarBuilder.append("KW2437 : 'KW' '2437';\n"); + grammarBuilder.append("KW2438 : 'KW' '2438';\n"); + grammarBuilder.append("KW2439 : 'KW' '2439';\n"); + grammarBuilder.append("KW2440 : 'KW' '2440';\n"); + grammarBuilder.append("KW2441 : 'KW' '2441';\n"); + grammarBuilder.append("KW2442 : 'KW' '2442';\n"); + grammarBuilder.append("KW2443 : 'KW' '2443';\n"); + grammarBuilder.append("KW2444 : 'KW' '2444';\n"); + grammarBuilder.append("KW2445 : 'KW' '2445';\n"); + grammarBuilder.append("KW2446 : 'KW' '2446';\n"); + grammarBuilder.append("KW2447 : 'KW' '2447';\n"); + grammarBuilder.append("KW2448 : 'KW' '2448';\n"); + grammarBuilder.append("KW2449 : 'KW' '2449';\n"); + grammarBuilder.append("KW2450 : 'KW' '2450';\n"); + grammarBuilder.append("KW2451 : 'KW' '2451';\n"); + grammarBuilder.append("KW2452 : 'KW' '2452';\n"); + grammarBuilder.append("KW2453 : 'KW' '2453';\n"); + grammarBuilder.append("KW2454 : 'KW' '2454';\n"); + grammarBuilder.append("KW2455 : 'KW' '2455';\n"); + grammarBuilder.append("KW2456 : 'KW' '2456';\n"); + grammarBuilder.append("KW2457 : 'KW' '2457';\n"); + grammarBuilder.append("KW2458 : 'KW' '2458';\n"); + grammarBuilder.append("KW2459 : 'KW' '2459';\n"); + grammarBuilder.append("KW2460 : 'KW' '2460';\n"); + grammarBuilder.append("KW2461 : 'KW' '2461';\n"); + grammarBuilder.append("KW2462 : 'KW' '2462';\n"); + grammarBuilder.append("KW2463 : 'KW' '2463';\n"); + grammarBuilder.append("KW2464 : 'KW' '2464';\n"); + grammarBuilder.append("KW2465 : 'KW' '2465';\n"); + grammarBuilder.append("KW2466 : 'KW' '2466';\n"); + grammarBuilder.append("KW2467 : 'KW' '2467';\n"); + grammarBuilder.append("KW2468 : 'KW' '2468';\n"); + grammarBuilder.append("KW2469 : 'KW' '2469';\n"); + grammarBuilder.append("KW2470 : 'KW' '2470';\n"); + grammarBuilder.append("KW2471 : 'KW' '2471';\n"); + grammarBuilder.append("KW2472 : 'KW' '2472';\n"); + grammarBuilder.append("KW2473 : 'KW' '2473';\n"); + grammarBuilder.append("KW2474 : 'KW' '2474';\n"); + grammarBuilder.append("KW2475 : 'KW' '2475';\n"); + grammarBuilder.append("KW2476 : 'KW' '2476';\n"); + grammarBuilder.append("KW2477 : 'KW' '2477';\n"); + grammarBuilder.append("KW2478 : 'KW' '2478';\n"); + grammarBuilder.append("KW2479 : 'KW' '2479';\n"); + grammarBuilder.append("KW2480 : 'KW' '2480';\n"); + grammarBuilder.append("KW2481 : 'KW' '2481';\n"); + grammarBuilder.append("KW2482 : 'KW' '2482';\n"); + grammarBuilder.append("KW2483 : 'KW' '2483';\n"); + grammarBuilder.append("KW2484 : 'KW' '2484';\n"); + grammarBuilder.append("KW2485 : 'KW' '2485';\n"); + grammarBuilder.append("KW2486 : 'KW' '2486';\n"); + grammarBuilder.append("KW2487 : 'KW' '2487';\n"); + grammarBuilder.append("KW2488 : 'KW' '2488';\n"); + grammarBuilder.append("KW2489 : 'KW' '2489';\n"); + grammarBuilder.append("KW2490 : 'KW' '2490';\n"); + grammarBuilder.append("KW2491 : 'KW' '2491';\n"); + grammarBuilder.append("KW2492 : 'KW' '2492';\n"); + grammarBuilder.append("KW2493 : 'KW' '2493';\n"); + grammarBuilder.append("KW2494 : 'KW' '2494';\n"); + grammarBuilder.append("KW2495 : 'KW' '2495';\n"); + grammarBuilder.append("KW2496 : 'KW' '2496';\n"); + grammarBuilder.append("KW2497 : 'KW' '2497';\n"); + grammarBuilder.append("KW2498 : 'KW' '2498';\n"); + grammarBuilder.append("KW2499 : 'KW' '2499';\n"); + grammarBuilder.append("KW2500 : 'KW' '2500';\n"); + grammarBuilder.append("KW2501 : 'KW' '2501';\n"); + grammarBuilder.append("KW2502 : 'KW' '2502';\n"); + grammarBuilder.append("KW2503 : 'KW' '2503';\n"); + grammarBuilder.append("KW2504 : 'KW' '2504';\n"); + grammarBuilder.append("KW2505 : 'KW' '2505';\n"); + grammarBuilder.append("KW2506 : 'KW' '2506';\n"); + grammarBuilder.append("KW2507 : 'KW' '2507';\n"); + grammarBuilder.append("KW2508 : 'KW' '2508';\n"); + grammarBuilder.append("KW2509 : 'KW' '2509';\n"); + grammarBuilder.append("KW2510 : 'KW' '2510';\n"); + grammarBuilder.append("KW2511 : 'KW' '2511';\n"); + grammarBuilder.append("KW2512 : 'KW' '2512';\n"); + grammarBuilder.append("KW2513 : 'KW' '2513';\n"); + grammarBuilder.append("KW2514 : 'KW' '2514';\n"); + grammarBuilder.append("KW2515 : 'KW' '2515';\n"); + grammarBuilder.append("KW2516 : 'KW' '2516';\n"); + grammarBuilder.append("KW2517 : 'KW' '2517';\n"); + grammarBuilder.append("KW2518 : 'KW' '2518';\n"); + grammarBuilder.append("KW2519 : 'KW' '2519';\n"); + grammarBuilder.append("KW2520 : 'KW' '2520';\n"); + grammarBuilder.append("KW2521 : 'KW' '2521';\n"); + grammarBuilder.append("KW2522 : 'KW' '2522';\n"); + grammarBuilder.append("KW2523 : 'KW' '2523';\n"); + grammarBuilder.append("KW2524 : 'KW' '2524';\n"); + grammarBuilder.append("KW2525 : 'KW' '2525';\n"); + grammarBuilder.append("KW2526 : 'KW' '2526';\n"); + grammarBuilder.append("KW2527 : 'KW' '2527';\n"); + grammarBuilder.append("KW2528 : 'KW' '2528';\n"); + grammarBuilder.append("KW2529 : 'KW' '2529';\n"); + grammarBuilder.append("KW2530 : 'KW' '2530';\n"); + grammarBuilder.append("KW2531 : 'KW' '2531';\n"); + grammarBuilder.append("KW2532 : 'KW' '2532';\n"); + grammarBuilder.append("KW2533 : 'KW' '2533';\n"); + grammarBuilder.append("KW2534 : 'KW' '2534';\n"); + grammarBuilder.append("KW2535 : 'KW' '2535';\n"); + grammarBuilder.append("KW2536 : 'KW' '2536';\n"); + grammarBuilder.append("KW2537 : 'KW' '2537';\n"); + grammarBuilder.append("KW2538 : 'KW' '2538';\n"); + grammarBuilder.append("KW2539 : 'KW' '2539';\n"); + grammarBuilder.append("KW2540 : 'KW' '2540';\n"); + grammarBuilder.append("KW2541 : 'KW' '2541';\n"); + grammarBuilder.append("KW2542 : 'KW' '2542';\n"); + grammarBuilder.append("KW2543 : 'KW' '2543';\n"); + grammarBuilder.append("KW2544 : 'KW' '2544';\n"); + grammarBuilder.append("KW2545 : 'KW' '2545';\n"); + grammarBuilder.append("KW2546 : 'KW' '2546';\n"); + grammarBuilder.append("KW2547 : 'KW' '2547';\n"); + grammarBuilder.append("KW2548 : 'KW' '2548';\n"); + grammarBuilder.append("KW2549 : 'KW' '2549';\n"); + grammarBuilder.append("KW2550 : 'KW' '2550';\n"); + grammarBuilder.append("KW2551 : 'KW' '2551';\n"); + grammarBuilder.append("KW2552 : 'KW' '2552';\n"); + grammarBuilder.append("KW2553 : 'KW' '2553';\n"); + grammarBuilder.append("KW2554 : 'KW' '2554';\n"); + grammarBuilder.append("KW2555 : 'KW' '2555';\n"); + grammarBuilder.append("KW2556 : 'KW' '2556';\n"); + grammarBuilder.append("KW2557 : 'KW' '2557';\n"); + grammarBuilder.append("KW2558 : 'KW' '2558';\n"); + grammarBuilder.append("KW2559 : 'KW' '2559';\n"); + grammarBuilder.append("KW2560 : 'KW' '2560';\n"); + grammarBuilder.append("KW2561 : 'KW' '2561';\n"); + grammarBuilder.append("KW2562 : 'KW' '2562';\n"); + grammarBuilder.append("KW2563 : 'KW' '2563';\n"); + grammarBuilder.append("KW2564 : 'KW' '2564';\n"); + grammarBuilder.append("KW2565 : 'KW' '2565';\n"); + grammarBuilder.append("KW2566 : 'KW' '2566';\n"); + grammarBuilder.append("KW2567 : 'KW' '2567';\n"); + grammarBuilder.append("KW2568 : 'KW' '2568';\n"); + grammarBuilder.append("KW2569 : 'KW' '2569';\n"); + grammarBuilder.append("KW2570 : 'KW' '2570';\n"); + grammarBuilder.append("KW2571 : 'KW' '2571';\n"); + grammarBuilder.append("KW2572 : 'KW' '2572';\n"); + grammarBuilder.append("KW2573 : 'KW' '2573';\n"); + grammarBuilder.append("KW2574 : 'KW' '2574';\n"); + grammarBuilder.append("KW2575 : 'KW' '2575';\n"); + grammarBuilder.append("KW2576 : 'KW' '2576';\n"); + grammarBuilder.append("KW2577 : 'KW' '2577';\n"); + grammarBuilder.append("KW2578 : 'KW' '2578';\n"); + grammarBuilder.append("KW2579 : 'KW' '2579';\n"); + grammarBuilder.append("KW2580 : 'KW' '2580';\n"); + grammarBuilder.append("KW2581 : 'KW' '2581';\n"); + grammarBuilder.append("KW2582 : 'KW' '2582';\n"); + grammarBuilder.append("KW2583 : 'KW' '2583';\n"); + grammarBuilder.append("KW2584 : 'KW' '2584';\n"); + grammarBuilder.append("KW2585 : 'KW' '2585';\n"); + grammarBuilder.append("KW2586 : 'KW' '2586';\n"); + grammarBuilder.append("KW2587 : 'KW' '2587';\n"); + grammarBuilder.append("KW2588 : 'KW' '2588';\n"); + grammarBuilder.append("KW2589 : 'KW' '2589';\n"); + grammarBuilder.append("KW2590 : 'KW' '2590';\n"); + grammarBuilder.append("KW2591 : 'KW' '2591';\n"); + grammarBuilder.append("KW2592 : 'KW' '2592';\n"); + grammarBuilder.append("KW2593 : 'KW' '2593';\n"); + grammarBuilder.append("KW2594 : 'KW' '2594';\n"); + grammarBuilder.append("KW2595 : 'KW' '2595';\n"); + grammarBuilder.append("KW2596 : 'KW' '2596';\n"); + grammarBuilder.append("KW2597 : 'KW' '2597';\n"); + grammarBuilder.append("KW2598 : 'KW' '2598';\n"); + grammarBuilder.append("KW2599 : 'KW' '2599';\n"); + grammarBuilder.append("KW2600 : 'KW' '2600';\n"); + grammarBuilder.append("KW2601 : 'KW' '2601';\n"); + grammarBuilder.append("KW2602 : 'KW' '2602';\n"); + grammarBuilder.append("KW2603 : 'KW' '2603';\n"); + grammarBuilder.append("KW2604 : 'KW' '2604';\n"); + grammarBuilder.append("KW2605 : 'KW' '2605';\n"); + grammarBuilder.append("KW2606 : 'KW' '2606';\n"); + grammarBuilder.append("KW2607 : 'KW' '2607';\n"); + grammarBuilder.append("KW2608 : 'KW' '2608';\n"); + grammarBuilder.append("KW2609 : 'KW' '2609';\n"); + grammarBuilder.append("KW2610 : 'KW' '2610';\n"); + grammarBuilder.append("KW2611 : 'KW' '2611';\n"); + grammarBuilder.append("KW2612 : 'KW' '2612';\n"); + grammarBuilder.append("KW2613 : 'KW' '2613';\n"); + grammarBuilder.append("KW2614 : 'KW' '2614';\n"); + grammarBuilder.append("KW2615 : 'KW' '2615';\n"); + grammarBuilder.append("KW2616 : 'KW' '2616';\n"); + grammarBuilder.append("KW2617 : 'KW' '2617';\n"); + grammarBuilder.append("KW2618 : 'KW' '2618';\n"); + grammarBuilder.append("KW2619 : 'KW' '2619';\n"); + grammarBuilder.append("KW2620 : 'KW' '2620';\n"); + grammarBuilder.append("KW2621 : 'KW' '2621';\n"); + grammarBuilder.append("KW2622 : 'KW' '2622';\n"); + grammarBuilder.append("KW2623 : 'KW' '2623';\n"); + grammarBuilder.append("KW2624 : 'KW' '2624';\n"); + grammarBuilder.append("KW2625 : 'KW' '2625';\n"); + grammarBuilder.append("KW2626 : 'KW' '2626';\n"); + grammarBuilder.append("KW2627 : 'KW' '2627';\n"); + grammarBuilder.append("KW2628 : 'KW' '2628';\n"); + grammarBuilder.append("KW2629 : 'KW' '2629';\n"); + grammarBuilder.append("KW2630 : 'KW' '2630';\n"); + grammarBuilder.append("KW2631 : 'KW' '2631';\n"); + grammarBuilder.append("KW2632 : 'KW' '2632';\n"); + grammarBuilder.append("KW2633 : 'KW' '2633';\n"); + grammarBuilder.append("KW2634 : 'KW' '2634';\n"); + grammarBuilder.append("KW2635 : 'KW' '2635';\n"); + grammarBuilder.append("KW2636 : 'KW' '2636';\n"); + grammarBuilder.append("KW2637 : 'KW' '2637';\n"); + grammarBuilder.append("KW2638 : 'KW' '2638';\n"); + grammarBuilder.append("KW2639 : 'KW' '2639';\n"); + grammarBuilder.append("KW2640 : 'KW' '2640';\n"); + grammarBuilder.append("KW2641 : 'KW' '2641';\n"); + grammarBuilder.append("KW2642 : 'KW' '2642';\n"); + grammarBuilder.append("KW2643 : 'KW' '2643';\n"); + grammarBuilder.append("KW2644 : 'KW' '2644';\n"); + grammarBuilder.append("KW2645 : 'KW' '2645';\n"); + grammarBuilder.append("KW2646 : 'KW' '2646';\n"); + grammarBuilder.append("KW2647 : 'KW' '2647';\n"); + grammarBuilder.append("KW2648 : 'KW' '2648';\n"); + grammarBuilder.append("KW2649 : 'KW' '2649';\n"); + grammarBuilder.append("KW2650 : 'KW' '2650';\n"); + grammarBuilder.append("KW2651 : 'KW' '2651';\n"); + grammarBuilder.append("KW2652 : 'KW' '2652';\n"); + grammarBuilder.append("KW2653 : 'KW' '2653';\n"); + grammarBuilder.append("KW2654 : 'KW' '2654';\n"); + grammarBuilder.append("KW2655 : 'KW' '2655';\n"); + grammarBuilder.append("KW2656 : 'KW' '2656';\n"); + grammarBuilder.append("KW2657 : 'KW' '2657';\n"); + grammarBuilder.append("KW2658 : 'KW' '2658';\n"); + grammarBuilder.append("KW2659 : 'KW' '2659';\n"); + grammarBuilder.append("KW2660 : 'KW' '2660';\n"); + grammarBuilder.append("KW2661 : 'KW' '2661';\n"); + grammarBuilder.append("KW2662 : 'KW' '2662';\n"); + grammarBuilder.append("KW2663 : 'KW' '2663';\n"); + grammarBuilder.append("KW2664 : 'KW' '2664';\n"); + grammarBuilder.append("KW2665 : 'KW' '2665';\n"); + grammarBuilder.append("KW2666 : 'KW' '2666';\n"); + grammarBuilder.append("KW2667 : 'KW' '2667';\n"); + grammarBuilder.append("KW2668 : 'KW' '2668';\n"); + grammarBuilder.append("KW2669 : 'KW' '2669';\n"); + grammarBuilder.append("KW2670 : 'KW' '2670';\n"); + grammarBuilder.append("KW2671 : 'KW' '2671';\n"); + grammarBuilder.append("KW2672 : 'KW' '2672';\n"); + grammarBuilder.append("KW2673 : 'KW' '2673';\n"); + grammarBuilder.append("KW2674 : 'KW' '2674';\n"); + grammarBuilder.append("KW2675 : 'KW' '2675';\n"); + grammarBuilder.append("KW2676 : 'KW' '2676';\n"); + grammarBuilder.append("KW2677 : 'KW' '2677';\n"); + grammarBuilder.append("KW2678 : 'KW' '2678';\n"); + grammarBuilder.append("KW2679 : 'KW' '2679';\n"); + grammarBuilder.append("KW2680 : 'KW' '2680';\n"); + grammarBuilder.append("KW2681 : 'KW' '2681';\n"); + grammarBuilder.append("KW2682 : 'KW' '2682';\n"); + grammarBuilder.append("KW2683 : 'KW' '2683';\n"); + grammarBuilder.append("KW2684 : 'KW' '2684';\n"); + grammarBuilder.append("KW2685 : 'KW' '2685';\n"); + grammarBuilder.append("KW2686 : 'KW' '2686';\n"); + grammarBuilder.append("KW2687 : 'KW' '2687';\n"); + grammarBuilder.append("KW2688 : 'KW' '2688';\n"); + grammarBuilder.append("KW2689 : 'KW' '2689';\n"); + grammarBuilder.append("KW2690 : 'KW' '2690';\n"); + grammarBuilder.append("KW2691 : 'KW' '2691';\n"); + grammarBuilder.append("KW2692 : 'KW' '2692';\n"); + grammarBuilder.append("KW2693 : 'KW' '2693';\n"); + grammarBuilder.append("KW2694 : 'KW' '2694';\n"); + grammarBuilder.append("KW2695 : 'KW' '2695';\n"); + grammarBuilder.append("KW2696 : 'KW' '2696';\n"); + grammarBuilder.append("KW2697 : 'KW' '2697';\n"); + grammarBuilder.append("KW2698 : 'KW' '2698';\n"); + grammarBuilder.append("KW2699 : 'KW' '2699';\n"); + grammarBuilder.append("KW2700 : 'KW' '2700';\n"); + grammarBuilder.append("KW2701 : 'KW' '2701';\n"); + grammarBuilder.append("KW2702 : 'KW' '2702';\n"); + grammarBuilder.append("KW2703 : 'KW' '2703';\n"); + grammarBuilder.append("KW2704 : 'KW' '2704';\n"); + grammarBuilder.append("KW2705 : 'KW' '2705';\n"); + grammarBuilder.append("KW2706 : 'KW' '2706';\n"); + grammarBuilder.append("KW2707 : 'KW' '2707';\n"); + grammarBuilder.append("KW2708 : 'KW' '2708';\n"); + grammarBuilder.append("KW2709 : 'KW' '2709';\n"); + grammarBuilder.append("KW2710 : 'KW' '2710';\n"); + grammarBuilder.append("KW2711 : 'KW' '2711';\n"); + grammarBuilder.append("KW2712 : 'KW' '2712';\n"); + grammarBuilder.append("KW2713 : 'KW' '2713';\n"); + grammarBuilder.append("KW2714 : 'KW' '2714';\n"); + grammarBuilder.append("KW2715 : 'KW' '2715';\n"); + grammarBuilder.append("KW2716 : 'KW' '2716';\n"); + grammarBuilder.append("KW2717 : 'KW' '2717';\n"); + grammarBuilder.append("KW2718 : 'KW' '2718';\n"); + grammarBuilder.append("KW2719 : 'KW' '2719';\n"); + grammarBuilder.append("KW2720 : 'KW' '2720';\n"); + grammarBuilder.append("KW2721 : 'KW' '2721';\n"); + grammarBuilder.append("KW2722 : 'KW' '2722';\n"); + grammarBuilder.append("KW2723 : 'KW' '2723';\n"); + grammarBuilder.append("KW2724 : 'KW' '2724';\n"); + grammarBuilder.append("KW2725 : 'KW' '2725';\n"); + grammarBuilder.append("KW2726 : 'KW' '2726';\n"); + grammarBuilder.append("KW2727 : 'KW' '2727';\n"); + grammarBuilder.append("KW2728 : 'KW' '2728';\n"); + grammarBuilder.append("KW2729 : 'KW' '2729';\n"); + grammarBuilder.append("KW2730 : 'KW' '2730';\n"); + grammarBuilder.append("KW2731 : 'KW' '2731';\n"); + grammarBuilder.append("KW2732 : 'KW' '2732';\n"); + grammarBuilder.append("KW2733 : 'KW' '2733';\n"); + grammarBuilder.append("KW2734 : 'KW' '2734';\n"); + grammarBuilder.append("KW2735 : 'KW' '2735';\n"); + grammarBuilder.append("KW2736 : 'KW' '2736';\n"); + grammarBuilder.append("KW2737 : 'KW' '2737';\n"); + grammarBuilder.append("KW2738 : 'KW' '2738';\n"); + grammarBuilder.append("KW2739 : 'KW' '2739';\n"); + grammarBuilder.append("KW2740 : 'KW' '2740';\n"); + grammarBuilder.append("KW2741 : 'KW' '2741';\n"); + grammarBuilder.append("KW2742 : 'KW' '2742';\n"); + grammarBuilder.append("KW2743 : 'KW' '2743';\n"); + grammarBuilder.append("KW2744 : 'KW' '2744';\n"); + grammarBuilder.append("KW2745 : 'KW' '2745';\n"); + grammarBuilder.append("KW2746 : 'KW' '2746';\n"); + grammarBuilder.append("KW2747 : 'KW' '2747';\n"); + grammarBuilder.append("KW2748 : 'KW' '2748';\n"); + grammarBuilder.append("KW2749 : 'KW' '2749';\n"); + grammarBuilder.append("KW2750 : 'KW' '2750';\n"); + grammarBuilder.append("KW2751 : 'KW' '2751';\n"); + grammarBuilder.append("KW2752 : 'KW' '2752';\n"); + grammarBuilder.append("KW2753 : 'KW' '2753';\n"); + grammarBuilder.append("KW2754 : 'KW' '2754';\n"); + grammarBuilder.append("KW2755 : 'KW' '2755';\n"); + grammarBuilder.append("KW2756 : 'KW' '2756';\n"); + grammarBuilder.append("KW2757 : 'KW' '2757';\n"); + grammarBuilder.append("KW2758 : 'KW' '2758';\n"); + grammarBuilder.append("KW2759 : 'KW' '2759';\n"); + grammarBuilder.append("KW2760 : 'KW' '2760';\n"); + grammarBuilder.append("KW2761 : 'KW' '2761';\n"); + grammarBuilder.append("KW2762 : 'KW' '2762';\n"); + grammarBuilder.append("KW2763 : 'KW' '2763';\n"); + grammarBuilder.append("KW2764 : 'KW' '2764';\n"); + grammarBuilder.append("KW2765 : 'KW' '2765';\n"); + grammarBuilder.append("KW2766 : 'KW' '2766';\n"); + grammarBuilder.append("KW2767 : 'KW' '2767';\n"); + grammarBuilder.append("KW2768 : 'KW' '2768';\n"); + grammarBuilder.append("KW2769 : 'KW' '2769';\n"); + grammarBuilder.append("KW2770 : 'KW' '2770';\n"); + grammarBuilder.append("KW2771 : 'KW' '2771';\n"); + grammarBuilder.append("KW2772 : 'KW' '2772';\n"); + grammarBuilder.append("KW2773 : 'KW' '2773';\n"); + grammarBuilder.append("KW2774 : 'KW' '2774';\n"); + grammarBuilder.append("KW2775 : 'KW' '2775';\n"); + grammarBuilder.append("KW2776 : 'KW' '2776';\n"); + grammarBuilder.append("KW2777 : 'KW' '2777';\n"); + grammarBuilder.append("KW2778 : 'KW' '2778';\n"); + grammarBuilder.append("KW2779 : 'KW' '2779';\n"); + grammarBuilder.append("KW2780 : 'KW' '2780';\n"); + grammarBuilder.append("KW2781 : 'KW' '2781';\n"); + grammarBuilder.append("KW2782 : 'KW' '2782';\n"); + grammarBuilder.append("KW2783 : 'KW' '2783';\n"); + grammarBuilder.append("KW2784 : 'KW' '2784';\n"); + grammarBuilder.append("KW2785 : 'KW' '2785';\n"); + grammarBuilder.append("KW2786 : 'KW' '2786';\n"); + grammarBuilder.append("KW2787 : 'KW' '2787';\n"); + grammarBuilder.append("KW2788 : 'KW' '2788';\n"); + grammarBuilder.append("KW2789 : 'KW' '2789';\n"); + grammarBuilder.append("KW2790 : 'KW' '2790';\n"); + grammarBuilder.append("KW2791 : 'KW' '2791';\n"); + grammarBuilder.append("KW2792 : 'KW' '2792';\n"); + grammarBuilder.append("KW2793 : 'KW' '2793';\n"); + grammarBuilder.append("KW2794 : 'KW' '2794';\n"); + grammarBuilder.append("KW2795 : 'KW' '2795';\n"); + grammarBuilder.append("KW2796 : 'KW' '2796';\n"); + grammarBuilder.append("KW2797 : 'KW' '2797';\n"); + grammarBuilder.append("KW2798 : 'KW' '2798';\n"); + grammarBuilder.append("KW2799 : 'KW' '2799';\n"); + grammarBuilder.append("KW2800 : 'KW' '2800';\n"); + grammarBuilder.append("KW2801 : 'KW' '2801';\n"); + grammarBuilder.append("KW2802 : 'KW' '2802';\n"); + grammarBuilder.append("KW2803 : 'KW' '2803';\n"); + grammarBuilder.append("KW2804 : 'KW' '2804';\n"); + grammarBuilder.append("KW2805 : 'KW' '2805';\n"); + grammarBuilder.append("KW2806 : 'KW' '2806';\n"); + grammarBuilder.append("KW2807 : 'KW' '2807';\n"); + grammarBuilder.append("KW2808 : 'KW' '2808';\n"); + grammarBuilder.append("KW2809 : 'KW' '2809';\n"); + grammarBuilder.append("KW2810 : 'KW' '2810';\n"); + grammarBuilder.append("KW2811 : 'KW' '2811';\n"); + grammarBuilder.append("KW2812 : 'KW' '2812';\n"); + grammarBuilder.append("KW2813 : 'KW' '2813';\n"); + grammarBuilder.append("KW2814 : 'KW' '2814';\n"); + grammarBuilder.append("KW2815 : 'KW' '2815';\n"); + grammarBuilder.append("KW2816 : 'KW' '2816';\n"); + grammarBuilder.append("KW2817 : 'KW' '2817';\n"); + grammarBuilder.append("KW2818 : 'KW' '2818';\n"); + grammarBuilder.append("KW2819 : 'KW' '2819';\n"); + grammarBuilder.append("KW2820 : 'KW' '2820';\n"); + grammarBuilder.append("KW2821 : 'KW' '2821';\n"); + grammarBuilder.append("KW2822 : 'KW' '2822';\n"); + grammarBuilder.append("KW2823 : 'KW' '2823';\n"); + grammarBuilder.append("KW2824 : 'KW' '2824';\n"); + grammarBuilder.append("KW2825 : 'KW' '2825';\n"); + grammarBuilder.append("KW2826 : 'KW' '2826';\n"); + grammarBuilder.append("KW2827 : 'KW' '2827';\n"); + grammarBuilder.append("KW2828 : 'KW' '2828';\n"); + grammarBuilder.append("KW2829 : 'KW' '2829';\n"); + grammarBuilder.append("KW2830 : 'KW' '2830';\n"); + grammarBuilder.append("KW2831 : 'KW' '2831';\n"); + grammarBuilder.append("KW2832 : 'KW' '2832';\n"); + grammarBuilder.append("KW2833 : 'KW' '2833';\n"); + grammarBuilder.append("KW2834 : 'KW' '2834';\n"); + grammarBuilder.append("KW2835 : 'KW' '2835';\n"); + grammarBuilder.append("KW2836 : 'KW' '2836';\n"); + grammarBuilder.append("KW2837 : 'KW' '2837';\n"); + grammarBuilder.append("KW2838 : 'KW' '2838';\n"); + grammarBuilder.append("KW2839 : 'KW' '2839';\n"); + grammarBuilder.append("KW2840 : 'KW' '2840';\n"); + grammarBuilder.append("KW2841 : 'KW' '2841';\n"); + grammarBuilder.append("KW2842 : 'KW' '2842';\n"); + grammarBuilder.append("KW2843 : 'KW' '2843';\n"); + grammarBuilder.append("KW2844 : 'KW' '2844';\n"); + grammarBuilder.append("KW2845 : 'KW' '2845';\n"); + grammarBuilder.append("KW2846 : 'KW' '2846';\n"); + grammarBuilder.append("KW2847 : 'KW' '2847';\n"); + grammarBuilder.append("KW2848 : 'KW' '2848';\n"); + grammarBuilder.append("KW2849 : 'KW' '2849';\n"); + grammarBuilder.append("KW2850 : 'KW' '2850';\n"); + grammarBuilder.append("KW2851 : 'KW' '2851';\n"); + grammarBuilder.append("KW2852 : 'KW' '2852';\n"); + grammarBuilder.append("KW2853 : 'KW' '2853';\n"); + grammarBuilder.append("KW2854 : 'KW' '2854';\n"); + grammarBuilder.append("KW2855 : 'KW' '2855';\n"); + grammarBuilder.append("KW2856 : 'KW' '2856';\n"); + grammarBuilder.append("KW2857 : 'KW' '2857';\n"); + grammarBuilder.append("KW2858 : 'KW' '2858';\n"); + grammarBuilder.append("KW2859 : 'KW' '2859';\n"); + grammarBuilder.append("KW2860 : 'KW' '2860';\n"); + grammarBuilder.append("KW2861 : 'KW' '2861';\n"); + grammarBuilder.append("KW2862 : 'KW' '2862';\n"); + grammarBuilder.append("KW2863 : 'KW' '2863';\n"); + grammarBuilder.append("KW2864 : 'KW' '2864';\n"); + grammarBuilder.append("KW2865 : 'KW' '2865';\n"); + grammarBuilder.append("KW2866 : 'KW' '2866';\n"); + grammarBuilder.append("KW2867 : 'KW' '2867';\n"); + grammarBuilder.append("KW2868 : 'KW' '2868';\n"); + grammarBuilder.append("KW2869 : 'KW' '2869';\n"); + grammarBuilder.append("KW2870 : 'KW' '2870';\n"); + grammarBuilder.append("KW2871 : 'KW' '2871';\n"); + grammarBuilder.append("KW2872 : 'KW' '2872';\n"); + grammarBuilder.append("KW2873 : 'KW' '2873';\n"); + grammarBuilder.append("KW2874 : 'KW' '2874';\n"); + grammarBuilder.append("KW2875 : 'KW' '2875';\n"); + grammarBuilder.append("KW2876 : 'KW' '2876';\n"); + grammarBuilder.append("KW2877 : 'KW' '2877';\n"); + grammarBuilder.append("KW2878 : 'KW' '2878';\n"); + grammarBuilder.append("KW2879 : 'KW' '2879';\n"); + grammarBuilder.append("KW2880 : 'KW' '2880';\n"); + grammarBuilder.append("KW2881 : 'KW' '2881';\n"); + grammarBuilder.append("KW2882 : 'KW' '2882';\n"); + grammarBuilder.append("KW2883 : 'KW' '2883';\n"); + grammarBuilder.append("KW2884 : 'KW' '2884';\n"); + grammarBuilder.append("KW2885 : 'KW' '2885';\n"); + grammarBuilder.append("KW2886 : 'KW' '2886';\n"); + grammarBuilder.append("KW2887 : 'KW' '2887';\n"); + grammarBuilder.append("KW2888 : 'KW' '2888';\n"); + grammarBuilder.append("KW2889 : 'KW' '2889';\n"); + grammarBuilder.append("KW2890 : 'KW' '2890';\n"); + grammarBuilder.append("KW2891 : 'KW' '2891';\n"); + grammarBuilder.append("KW2892 : 'KW' '2892';\n"); + grammarBuilder.append("KW2893 : 'KW' '2893';\n"); + grammarBuilder.append("KW2894 : 'KW' '2894';\n"); + grammarBuilder.append("KW2895 : 'KW' '2895';\n"); + grammarBuilder.append("KW2896 : 'KW' '2896';\n"); + grammarBuilder.append("KW2897 : 'KW' '2897';\n"); + grammarBuilder.append("KW2898 : 'KW' '2898';\n"); + grammarBuilder.append("KW2899 : 'KW' '2899';\n"); + grammarBuilder.append("KW2900 : 'KW' '2900';\n"); + grammarBuilder.append("KW2901 : 'KW' '2901';\n"); + grammarBuilder.append("KW2902 : 'KW' '2902';\n"); + grammarBuilder.append("KW2903 : 'KW' '2903';\n"); + grammarBuilder.append("KW2904 : 'KW' '2904';\n"); + grammarBuilder.append("KW2905 : 'KW' '2905';\n"); + grammarBuilder.append("KW2906 : 'KW' '2906';\n"); + grammarBuilder.append("KW2907 : 'KW' '2907';\n"); + grammarBuilder.append("KW2908 : 'KW' '2908';\n"); + grammarBuilder.append("KW2909 : 'KW' '2909';\n"); + grammarBuilder.append("KW2910 : 'KW' '2910';\n"); + grammarBuilder.append("KW2911 : 'KW' '2911';\n"); + grammarBuilder.append("KW2912 : 'KW' '2912';\n"); + grammarBuilder.append("KW2913 : 'KW' '2913';\n"); + grammarBuilder.append("KW2914 : 'KW' '2914';\n"); + grammarBuilder.append("KW2915 : 'KW' '2915';\n"); + grammarBuilder.append("KW2916 : 'KW' '2916';\n"); + grammarBuilder.append("KW2917 : 'KW' '2917';\n"); + grammarBuilder.append("KW2918 : 'KW' '2918';\n"); + grammarBuilder.append("KW2919 : 'KW' '2919';\n"); + grammarBuilder.append("KW2920 : 'KW' '2920';\n"); + grammarBuilder.append("KW2921 : 'KW' '2921';\n"); + grammarBuilder.append("KW2922 : 'KW' '2922';\n"); + grammarBuilder.append("KW2923 : 'KW' '2923';\n"); + grammarBuilder.append("KW2924 : 'KW' '2924';\n"); + grammarBuilder.append("KW2925 : 'KW' '2925';\n"); + grammarBuilder.append("KW2926 : 'KW' '2926';\n"); + grammarBuilder.append("KW2927 : 'KW' '2927';\n"); + grammarBuilder.append("KW2928 : 'KW' '2928';\n"); + grammarBuilder.append("KW2929 : 'KW' '2929';\n"); + grammarBuilder.append("KW2930 : 'KW' '2930';\n"); + grammarBuilder.append("KW2931 : 'KW' '2931';\n"); + grammarBuilder.append("KW2932 : 'KW' '2932';\n"); + grammarBuilder.append("KW2933 : 'KW' '2933';\n"); + grammarBuilder.append("KW2934 : 'KW' '2934';\n"); + grammarBuilder.append("KW2935 : 'KW' '2935';\n"); + grammarBuilder.append("KW2936 : 'KW' '2936';\n"); + grammarBuilder.append("KW2937 : 'KW' '2937';\n"); + grammarBuilder.append("KW2938 : 'KW' '2938';\n"); + grammarBuilder.append("KW2939 : 'KW' '2939';\n"); + grammarBuilder.append("KW2940 : 'KW' '2940';\n"); + grammarBuilder.append("KW2941 : 'KW' '2941';\n"); + grammarBuilder.append("KW2942 : 'KW' '2942';\n"); + grammarBuilder.append("KW2943 : 'KW' '2943';\n"); + grammarBuilder.append("KW2944 : 'KW' '2944';\n"); + grammarBuilder.append("KW2945 : 'KW' '2945';\n"); + grammarBuilder.append("KW2946 : 'KW' '2946';\n"); + grammarBuilder.append("KW2947 : 'KW' '2947';\n"); + grammarBuilder.append("KW2948 : 'KW' '2948';\n"); + grammarBuilder.append("KW2949 : 'KW' '2949';\n"); + grammarBuilder.append("KW2950 : 'KW' '2950';\n"); + grammarBuilder.append("KW2951 : 'KW' '2951';\n"); + grammarBuilder.append("KW2952 : 'KW' '2952';\n"); + grammarBuilder.append("KW2953 : 'KW' '2953';\n"); + grammarBuilder.append("KW2954 : 'KW' '2954';\n"); + grammarBuilder.append("KW2955 : 'KW' '2955';\n"); + grammarBuilder.append("KW2956 : 'KW' '2956';\n"); + grammarBuilder.append("KW2957 : 'KW' '2957';\n"); + grammarBuilder.append("KW2958 : 'KW' '2958';\n"); + grammarBuilder.append("KW2959 : 'KW' '2959';\n"); + grammarBuilder.append("KW2960 : 'KW' '2960';\n"); + grammarBuilder.append("KW2961 : 'KW' '2961';\n"); + grammarBuilder.append("KW2962 : 'KW' '2962';\n"); + grammarBuilder.append("KW2963 : 'KW' '2963';\n"); + grammarBuilder.append("KW2964 : 'KW' '2964';\n"); + grammarBuilder.append("KW2965 : 'KW' '2965';\n"); + grammarBuilder.append("KW2966 : 'KW' '2966';\n"); + grammarBuilder.append("KW2967 : 'KW' '2967';\n"); + grammarBuilder.append("KW2968 : 'KW' '2968';\n"); + grammarBuilder.append("KW2969 : 'KW' '2969';\n"); + grammarBuilder.append("KW2970 : 'KW' '2970';\n"); + grammarBuilder.append("KW2971 : 'KW' '2971';\n"); + grammarBuilder.append("KW2972 : 'KW' '2972';\n"); + grammarBuilder.append("KW2973 : 'KW' '2973';\n"); + grammarBuilder.append("KW2974 : 'KW' '2974';\n"); + grammarBuilder.append("KW2975 : 'KW' '2975';\n"); + grammarBuilder.append("KW2976 : 'KW' '2976';\n"); + grammarBuilder.append("KW2977 : 'KW' '2977';\n"); + grammarBuilder.append("KW2978 : 'KW' '2978';\n"); + grammarBuilder.append("KW2979 : 'KW' '2979';\n"); + grammarBuilder.append("KW2980 : 'KW' '2980';\n"); + grammarBuilder.append("KW2981 : 'KW' '2981';\n"); + grammarBuilder.append("KW2982 : 'KW' '2982';\n"); + grammarBuilder.append("KW2983 : 'KW' '2983';\n"); + grammarBuilder.append("KW2984 : 'KW' '2984';\n"); + grammarBuilder.append("KW2985 : 'KW' '2985';\n"); + grammarBuilder.append("KW2986 : 'KW' '2986';\n"); + grammarBuilder.append("KW2987 : 'KW' '2987';\n"); + grammarBuilder.append("KW2988 : 'KW' '2988';\n"); + grammarBuilder.append("KW2989 : 'KW' '2989';\n"); + grammarBuilder.append("KW2990 : 'KW' '2990';\n"); + grammarBuilder.append("KW2991 : 'KW' '2991';\n"); + grammarBuilder.append("KW2992 : 'KW' '2992';\n"); + grammarBuilder.append("KW2993 : 'KW' '2993';\n"); + grammarBuilder.append("KW2994 : 'KW' '2994';\n"); + grammarBuilder.append("KW2995 : 'KW' '2995';\n"); + grammarBuilder.append("KW2996 : 'KW' '2996';\n"); + grammarBuilder.append("KW2997 : 'KW' '2997';\n"); + grammarBuilder.append("KW2998 : 'KW' '2998';\n"); + grammarBuilder.append("KW2999 : 'KW' '2999';\n"); + grammarBuilder.append("KW3000 : 'KW' '3000';\n"); + grammarBuilder.append("KW3001 : 'KW' '3001';\n"); + grammarBuilder.append("KW3002 : 'KW' '3002';\n"); + grammarBuilder.append("KW3003 : 'KW' '3003';\n"); + grammarBuilder.append("KW3004 : 'KW' '3004';\n"); + grammarBuilder.append("KW3005 : 'KW' '3005';\n"); + grammarBuilder.append("KW3006 : 'KW' '3006';\n"); + grammarBuilder.append("KW3007 : 'KW' '3007';\n"); + grammarBuilder.append("KW3008 : 'KW' '3008';\n"); + grammarBuilder.append("KW3009 : 'KW' '3009';\n"); + grammarBuilder.append("KW3010 : 'KW' '3010';\n"); + grammarBuilder.append("KW3011 : 'KW' '3011';\n"); + grammarBuilder.append("KW3012 : 'KW' '3012';\n"); + grammarBuilder.append("KW3013 : 'KW' '3013';\n"); + grammarBuilder.append("KW3014 : 'KW' '3014';\n"); + grammarBuilder.append("KW3015 : 'KW' '3015';\n"); + grammarBuilder.append("KW3016 : 'KW' '3016';\n"); + grammarBuilder.append("KW3017 : 'KW' '3017';\n"); + grammarBuilder.append("KW3018 : 'KW' '3018';\n"); + grammarBuilder.append("KW3019 : 'KW' '3019';\n"); + grammarBuilder.append("KW3020 : 'KW' '3020';\n"); + grammarBuilder.append("KW3021 : 'KW' '3021';\n"); + grammarBuilder.append("KW3022 : 'KW' '3022';\n"); + grammarBuilder.append("KW3023 : 'KW' '3023';\n"); + grammarBuilder.append("KW3024 : 'KW' '3024';\n"); + grammarBuilder.append("KW3025 : 'KW' '3025';\n"); + grammarBuilder.append("KW3026 : 'KW' '3026';\n"); + grammarBuilder.append("KW3027 : 'KW' '3027';\n"); + grammarBuilder.append("KW3028 : 'KW' '3028';\n"); + grammarBuilder.append("KW3029 : 'KW' '3029';\n"); + grammarBuilder.append("KW3030 : 'KW' '3030';\n"); + grammarBuilder.append("KW3031 : 'KW' '3031';\n"); + grammarBuilder.append("KW3032 : 'KW' '3032';\n"); + grammarBuilder.append("KW3033 : 'KW' '3033';\n"); + grammarBuilder.append("KW3034 : 'KW' '3034';\n"); + grammarBuilder.append("KW3035 : 'KW' '3035';\n"); + grammarBuilder.append("KW3036 : 'KW' '3036';\n"); + grammarBuilder.append("KW3037 : 'KW' '3037';\n"); + grammarBuilder.append("KW3038 : 'KW' '3038';\n"); + grammarBuilder.append("KW3039 : 'KW' '3039';\n"); + grammarBuilder.append("KW3040 : 'KW' '3040';\n"); + grammarBuilder.append("KW3041 : 'KW' '3041';\n"); + grammarBuilder.append("KW3042 : 'KW' '3042';\n"); + grammarBuilder.append("KW3043 : 'KW' '3043';\n"); + grammarBuilder.append("KW3044 : 'KW' '3044';\n"); + grammarBuilder.append("KW3045 : 'KW' '3045';\n"); + grammarBuilder.append("KW3046 : 'KW' '3046';\n"); + grammarBuilder.append("KW3047 : 'KW' '3047';\n"); + grammarBuilder.append("KW3048 : 'KW' '3048';\n"); + grammarBuilder.append("KW3049 : 'KW' '3049';\n"); + grammarBuilder.append("KW3050 : 'KW' '3050';\n"); + grammarBuilder.append("KW3051 : 'KW' '3051';\n"); + grammarBuilder.append("KW3052 : 'KW' '3052';\n"); + grammarBuilder.append("KW3053 : 'KW' '3053';\n"); + grammarBuilder.append("KW3054 : 'KW' '3054';\n"); + grammarBuilder.append("KW3055 : 'KW' '3055';\n"); + grammarBuilder.append("KW3056 : 'KW' '3056';\n"); + grammarBuilder.append("KW3057 : 'KW' '3057';\n"); + grammarBuilder.append("KW3058 : 'KW' '3058';\n"); + grammarBuilder.append("KW3059 : 'KW' '3059';\n"); + grammarBuilder.append("KW3060 : 'KW' '3060';\n"); + grammarBuilder.append("KW3061 : 'KW' '3061';\n"); + grammarBuilder.append("KW3062 : 'KW' '3062';\n"); + grammarBuilder.append("KW3063 : 'KW' '3063';\n"); + grammarBuilder.append("KW3064 : 'KW' '3064';\n"); + grammarBuilder.append("KW3065 : 'KW' '3065';\n"); + grammarBuilder.append("KW3066 : 'KW' '3066';\n"); + grammarBuilder.append("KW3067 : 'KW' '3067';\n"); + grammarBuilder.append("KW3068 : 'KW' '3068';\n"); + grammarBuilder.append("KW3069 : 'KW' '3069';\n"); + grammarBuilder.append("KW3070 : 'KW' '3070';\n"); + grammarBuilder.append("KW3071 : 'KW' '3071';\n"); + grammarBuilder.append("KW3072 : 'KW' '3072';\n"); + grammarBuilder.append("KW3073 : 'KW' '3073';\n"); + grammarBuilder.append("KW3074 : 'KW' '3074';\n"); + grammarBuilder.append("KW3075 : 'KW' '3075';\n"); + grammarBuilder.append("KW3076 : 'KW' '3076';\n"); + grammarBuilder.append("KW3077 : 'KW' '3077';\n"); + grammarBuilder.append("KW3078 : 'KW' '3078';\n"); + grammarBuilder.append("KW3079 : 'KW' '3079';\n"); + grammarBuilder.append("KW3080 : 'KW' '3080';\n"); + grammarBuilder.append("KW3081 : 'KW' '3081';\n"); + grammarBuilder.append("KW3082 : 'KW' '3082';\n"); + grammarBuilder.append("KW3083 : 'KW' '3083';\n"); + grammarBuilder.append("KW3084 : 'KW' '3084';\n"); + grammarBuilder.append("KW3085 : 'KW' '3085';\n"); + grammarBuilder.append("KW3086 : 'KW' '3086';\n"); + grammarBuilder.append("KW3087 : 'KW' '3087';\n"); + grammarBuilder.append("KW3088 : 'KW' '3088';\n"); + grammarBuilder.append("KW3089 : 'KW' '3089';\n"); + grammarBuilder.append("KW3090 : 'KW' '3090';\n"); + grammarBuilder.append("KW3091 : 'KW' '3091';\n"); + grammarBuilder.append("KW3092 : 'KW' '3092';\n"); + grammarBuilder.append("KW3093 : 'KW' '3093';\n"); + grammarBuilder.append("KW3094 : 'KW' '3094';\n"); + grammarBuilder.append("KW3095 : 'KW' '3095';\n"); + grammarBuilder.append("KW3096 : 'KW' '3096';\n"); + grammarBuilder.append("KW3097 : 'KW' '3097';\n"); + grammarBuilder.append("KW3098 : 'KW' '3098';\n"); + grammarBuilder.append("KW3099 : 'KW' '3099';\n"); + grammarBuilder.append("KW3100 : 'KW' '3100';\n"); + grammarBuilder.append("KW3101 : 'KW' '3101';\n"); + grammarBuilder.append("KW3102 : 'KW' '3102';\n"); + grammarBuilder.append("KW3103 : 'KW' '3103';\n"); + grammarBuilder.append("KW3104 : 'KW' '3104';\n"); + grammarBuilder.append("KW3105 : 'KW' '3105';\n"); + grammarBuilder.append("KW3106 : 'KW' '3106';\n"); + grammarBuilder.append("KW3107 : 'KW' '3107';\n"); + grammarBuilder.append("KW3108 : 'KW' '3108';\n"); + grammarBuilder.append("KW3109 : 'KW' '3109';\n"); + grammarBuilder.append("KW3110 : 'KW' '3110';\n"); + grammarBuilder.append("KW3111 : 'KW' '3111';\n"); + grammarBuilder.append("KW3112 : 'KW' '3112';\n"); + grammarBuilder.append("KW3113 : 'KW' '3113';\n"); + grammarBuilder.append("KW3114 : 'KW' '3114';\n"); + grammarBuilder.append("KW3115 : 'KW' '3115';\n"); + grammarBuilder.append("KW3116 : 'KW' '3116';\n"); + grammarBuilder.append("KW3117 : 'KW' '3117';\n"); + grammarBuilder.append("KW3118 : 'KW' '3118';\n"); + grammarBuilder.append("KW3119 : 'KW' '3119';\n"); + grammarBuilder.append("KW3120 : 'KW' '3120';\n"); + grammarBuilder.append("KW3121 : 'KW' '3121';\n"); + grammarBuilder.append("KW3122 : 'KW' '3122';\n"); + grammarBuilder.append("KW3123 : 'KW' '3123';\n"); + grammarBuilder.append("KW3124 : 'KW' '3124';\n"); + grammarBuilder.append("KW3125 : 'KW' '3125';\n"); + grammarBuilder.append("KW3126 : 'KW' '3126';\n"); + grammarBuilder.append("KW3127 : 'KW' '3127';\n"); + grammarBuilder.append("KW3128 : 'KW' '3128';\n"); + grammarBuilder.append("KW3129 : 'KW' '3129';\n"); + grammarBuilder.append("KW3130 : 'KW' '3130';\n"); + grammarBuilder.append("KW3131 : 'KW' '3131';\n"); + grammarBuilder.append("KW3132 : 'KW' '3132';\n"); + grammarBuilder.append("KW3133 : 'KW' '3133';\n"); + grammarBuilder.append("KW3134 : 'KW' '3134';\n"); + grammarBuilder.append("KW3135 : 'KW' '3135';\n"); + grammarBuilder.append("KW3136 : 'KW' '3136';\n"); + grammarBuilder.append("KW3137 : 'KW' '3137';\n"); + grammarBuilder.append("KW3138 : 'KW' '3138';\n"); + grammarBuilder.append("KW3139 : 'KW' '3139';\n"); + grammarBuilder.append("KW3140 : 'KW' '3140';\n"); + grammarBuilder.append("KW3141 : 'KW' '3141';\n"); + grammarBuilder.append("KW3142 : 'KW' '3142';\n"); + grammarBuilder.append("KW3143 : 'KW' '3143';\n"); + grammarBuilder.append("KW3144 : 'KW' '3144';\n"); + grammarBuilder.append("KW3145 : 'KW' '3145';\n"); + grammarBuilder.append("KW3146 : 'KW' '3146';\n"); + grammarBuilder.append("KW3147 : 'KW' '3147';\n"); + grammarBuilder.append("KW3148 : 'KW' '3148';\n"); + grammarBuilder.append("KW3149 : 'KW' '3149';\n"); + grammarBuilder.append("KW3150 : 'KW' '3150';\n"); + grammarBuilder.append("KW3151 : 'KW' '3151';\n"); + grammarBuilder.append("KW3152 : 'KW' '3152';\n"); + grammarBuilder.append("KW3153 : 'KW' '3153';\n"); + grammarBuilder.append("KW3154 : 'KW' '3154';\n"); + grammarBuilder.append("KW3155 : 'KW' '3155';\n"); + grammarBuilder.append("KW3156 : 'KW' '3156';\n"); + grammarBuilder.append("KW3157 : 'KW' '3157';\n"); + grammarBuilder.append("KW3158 : 'KW' '3158';\n"); + grammarBuilder.append("KW3159 : 'KW' '3159';\n"); + grammarBuilder.append("KW3160 : 'KW' '3160';\n"); + grammarBuilder.append("KW3161 : 'KW' '3161';\n"); + grammarBuilder.append("KW3162 : 'KW' '3162';\n"); + grammarBuilder.append("KW3163 : 'KW' '3163';\n"); + grammarBuilder.append("KW3164 : 'KW' '3164';\n"); + grammarBuilder.append("KW3165 : 'KW' '3165';\n"); + grammarBuilder.append("KW3166 : 'KW' '3166';\n"); + grammarBuilder.append("KW3167 : 'KW' '3167';\n"); + grammarBuilder.append("KW3168 : 'KW' '3168';\n"); + grammarBuilder.append("KW3169 : 'KW' '3169';\n"); + grammarBuilder.append("KW3170 : 'KW' '3170';\n"); + grammarBuilder.append("KW3171 : 'KW' '3171';\n"); + grammarBuilder.append("KW3172 : 'KW' '3172';\n"); + grammarBuilder.append("KW3173 : 'KW' '3173';\n"); + grammarBuilder.append("KW3174 : 'KW' '3174';\n"); + grammarBuilder.append("KW3175 : 'KW' '3175';\n"); + grammarBuilder.append("KW3176 : 'KW' '3176';\n"); + grammarBuilder.append("KW3177 : 'KW' '3177';\n"); + grammarBuilder.append("KW3178 : 'KW' '3178';\n"); + grammarBuilder.append("KW3179 : 'KW' '3179';\n"); + grammarBuilder.append("KW3180 : 'KW' '3180';\n"); + grammarBuilder.append("KW3181 : 'KW' '3181';\n"); + grammarBuilder.append("KW3182 : 'KW' '3182';\n"); + grammarBuilder.append("KW3183 : 'KW' '3183';\n"); + grammarBuilder.append("KW3184 : 'KW' '3184';\n"); + grammarBuilder.append("KW3185 : 'KW' '3185';\n"); + grammarBuilder.append("KW3186 : 'KW' '3186';\n"); + grammarBuilder.append("KW3187 : 'KW' '3187';\n"); + grammarBuilder.append("KW3188 : 'KW' '3188';\n"); + grammarBuilder.append("KW3189 : 'KW' '3189';\n"); + grammarBuilder.append("KW3190 : 'KW' '3190';\n"); + grammarBuilder.append("KW3191 : 'KW' '3191';\n"); + grammarBuilder.append("KW3192 : 'KW' '3192';\n"); + grammarBuilder.append("KW3193 : 'KW' '3193';\n"); + grammarBuilder.append("KW3194 : 'KW' '3194';\n"); + grammarBuilder.append("KW3195 : 'KW' '3195';\n"); + grammarBuilder.append("KW3196 : 'KW' '3196';\n"); + grammarBuilder.append("KW3197 : 'KW' '3197';\n"); + grammarBuilder.append("KW3198 : 'KW' '3198';\n"); + grammarBuilder.append("KW3199 : 'KW' '3199';\n"); + grammarBuilder.append("KW3200 : 'KW' '3200';\n"); + grammarBuilder.append("KW3201 : 'KW' '3201';\n"); + grammarBuilder.append("KW3202 : 'KW' '3202';\n"); + grammarBuilder.append("KW3203 : 'KW' '3203';\n"); + grammarBuilder.append("KW3204 : 'KW' '3204';\n"); + grammarBuilder.append("KW3205 : 'KW' '3205';\n"); + grammarBuilder.append("KW3206 : 'KW' '3206';\n"); + grammarBuilder.append("KW3207 : 'KW' '3207';\n"); + grammarBuilder.append("KW3208 : 'KW' '3208';\n"); + grammarBuilder.append("KW3209 : 'KW' '3209';\n"); + grammarBuilder.append("KW3210 : 'KW' '3210';\n"); + grammarBuilder.append("KW3211 : 'KW' '3211';\n"); + grammarBuilder.append("KW3212 : 'KW' '3212';\n"); + grammarBuilder.append("KW3213 : 'KW' '3213';\n"); + grammarBuilder.append("KW3214 : 'KW' '3214';\n"); + grammarBuilder.append("KW3215 : 'KW' '3215';\n"); + grammarBuilder.append("KW3216 : 'KW' '3216';\n"); + grammarBuilder.append("KW3217 : 'KW' '3217';\n"); + grammarBuilder.append("KW3218 : 'KW' '3218';\n"); + grammarBuilder.append("KW3219 : 'KW' '3219';\n"); + grammarBuilder.append("KW3220 : 'KW' '3220';\n"); + grammarBuilder.append("KW3221 : 'KW' '3221';\n"); + grammarBuilder.append("KW3222 : 'KW' '3222';\n"); + grammarBuilder.append("KW3223 : 'KW' '3223';\n"); + grammarBuilder.append("KW3224 : 'KW' '3224';\n"); + grammarBuilder.append("KW3225 : 'KW' '3225';\n"); + grammarBuilder.append("KW3226 : 'KW' '3226';\n"); + grammarBuilder.append("KW3227 : 'KW' '3227';\n"); + grammarBuilder.append("KW3228 : 'KW' '3228';\n"); + grammarBuilder.append("KW3229 : 'KW' '3229';\n"); + grammarBuilder.append("KW3230 : 'KW' '3230';\n"); + grammarBuilder.append("KW3231 : 'KW' '3231';\n"); + grammarBuilder.append("KW3232 : 'KW' '3232';\n"); + grammarBuilder.append("KW3233 : 'KW' '3233';\n"); + grammarBuilder.append("KW3234 : 'KW' '3234';\n"); + grammarBuilder.append("KW3235 : 'KW' '3235';\n"); + grammarBuilder.append("KW3236 : 'KW' '3236';\n"); + grammarBuilder.append("KW3237 : 'KW' '3237';\n"); + grammarBuilder.append("KW3238 : 'KW' '3238';\n"); + grammarBuilder.append("KW3239 : 'KW' '3239';\n"); + grammarBuilder.append("KW3240 : 'KW' '3240';\n"); + grammarBuilder.append("KW3241 : 'KW' '3241';\n"); + grammarBuilder.append("KW3242 : 'KW' '3242';\n"); + grammarBuilder.append("KW3243 : 'KW' '3243';\n"); + grammarBuilder.append("KW3244 : 'KW' '3244';\n"); + grammarBuilder.append("KW3245 : 'KW' '3245';\n"); + grammarBuilder.append("KW3246 : 'KW' '3246';\n"); + grammarBuilder.append("KW3247 : 'KW' '3247';\n"); + grammarBuilder.append("KW3248 : 'KW' '3248';\n"); + grammarBuilder.append("KW3249 : 'KW' '3249';\n"); + grammarBuilder.append("KW3250 : 'KW' '3250';\n"); + grammarBuilder.append("KW3251 : 'KW' '3251';\n"); + grammarBuilder.append("KW3252 : 'KW' '3252';\n"); + grammarBuilder.append("KW3253 : 'KW' '3253';\n"); + grammarBuilder.append("KW3254 : 'KW' '3254';\n"); + grammarBuilder.append("KW3255 : 'KW' '3255';\n"); + grammarBuilder.append("KW3256 : 'KW' '3256';\n"); + grammarBuilder.append("KW3257 : 'KW' '3257';\n"); + grammarBuilder.append("KW3258 : 'KW' '3258';\n"); + grammarBuilder.append("KW3259 : 'KW' '3259';\n"); + grammarBuilder.append("KW3260 : 'KW' '3260';\n"); + grammarBuilder.append("KW3261 : 'KW' '3261';\n"); + grammarBuilder.append("KW3262 : 'KW' '3262';\n"); + grammarBuilder.append("KW3263 : 'KW' '3263';\n"); + grammarBuilder.append("KW3264 : 'KW' '3264';\n"); + grammarBuilder.append("KW3265 : 'KW' '3265';\n"); + grammarBuilder.append("KW3266 : 'KW' '3266';\n"); + grammarBuilder.append("KW3267 : 'KW' '3267';\n"); + grammarBuilder.append("KW3268 : 'KW' '3268';\n"); + grammarBuilder.append("KW3269 : 'KW' '3269';\n"); + grammarBuilder.append("KW3270 : 'KW' '3270';\n"); + grammarBuilder.append("KW3271 : 'KW' '3271';\n"); + grammarBuilder.append("KW3272 : 'KW' '3272';\n"); + grammarBuilder.append("KW3273 : 'KW' '3273';\n"); + grammarBuilder.append("KW3274 : 'KW' '3274';\n"); + grammarBuilder.append("KW3275 : 'KW' '3275';\n"); + grammarBuilder.append("KW3276 : 'KW' '3276';\n"); + grammarBuilder.append("KW3277 : 'KW' '3277';\n"); + grammarBuilder.append("KW3278 : 'KW' '3278';\n"); + grammarBuilder.append("KW3279 : 'KW' '3279';\n"); + grammarBuilder.append("KW3280 : 'KW' '3280';\n"); + grammarBuilder.append("KW3281 : 'KW' '3281';\n"); + grammarBuilder.append("KW3282 : 'KW' '3282';\n"); + grammarBuilder.append("KW3283 : 'KW' '3283';\n"); + grammarBuilder.append("KW3284 : 'KW' '3284';\n"); + grammarBuilder.append("KW3285 : 'KW' '3285';\n"); + grammarBuilder.append("KW3286 : 'KW' '3286';\n"); + grammarBuilder.append("KW3287 : 'KW' '3287';\n"); + grammarBuilder.append("KW3288 : 'KW' '3288';\n"); + grammarBuilder.append("KW3289 : 'KW' '3289';\n"); + grammarBuilder.append("KW3290 : 'KW' '3290';\n"); + grammarBuilder.append("KW3291 : 'KW' '3291';\n"); + grammarBuilder.append("KW3292 : 'KW' '3292';\n"); + grammarBuilder.append("KW3293 : 'KW' '3293';\n"); + grammarBuilder.append("KW3294 : 'KW' '3294';\n"); + grammarBuilder.append("KW3295 : 'KW' '3295';\n"); + grammarBuilder.append("KW3296 : 'KW' '3296';\n"); + grammarBuilder.append("KW3297 : 'KW' '3297';\n"); + grammarBuilder.append("KW3298 : 'KW' '3298';\n"); + grammarBuilder.append("KW3299 : 'KW' '3299';\n"); + grammarBuilder.append("KW3300 : 'KW' '3300';\n"); + grammarBuilder.append("KW3301 : 'KW' '3301';\n"); + grammarBuilder.append("KW3302 : 'KW' '3302';\n"); + grammarBuilder.append("KW3303 : 'KW' '3303';\n"); + grammarBuilder.append("KW3304 : 'KW' '3304';\n"); + grammarBuilder.append("KW3305 : 'KW' '3305';\n"); + grammarBuilder.append("KW3306 : 'KW' '3306';\n"); + grammarBuilder.append("KW3307 : 'KW' '3307';\n"); + grammarBuilder.append("KW3308 : 'KW' '3308';\n"); + grammarBuilder.append("KW3309 : 'KW' '3309';\n"); + grammarBuilder.append("KW3310 : 'KW' '3310';\n"); + grammarBuilder.append("KW3311 : 'KW' '3311';\n"); + grammarBuilder.append("KW3312 : 'KW' '3312';\n"); + grammarBuilder.append("KW3313 : 'KW' '3313';\n"); + grammarBuilder.append("KW3314 : 'KW' '3314';\n"); + grammarBuilder.append("KW3315 : 'KW' '3315';\n"); + grammarBuilder.append("KW3316 : 'KW' '3316';\n"); + grammarBuilder.append("KW3317 : 'KW' '3317';\n"); + grammarBuilder.append("KW3318 : 'KW' '3318';\n"); + grammarBuilder.append("KW3319 : 'KW' '3319';\n"); + grammarBuilder.append("KW3320 : 'KW' '3320';\n"); + grammarBuilder.append("KW3321 : 'KW' '3321';\n"); + grammarBuilder.append("KW3322 : 'KW' '3322';\n"); + grammarBuilder.append("KW3323 : 'KW' '3323';\n"); + grammarBuilder.append("KW3324 : 'KW' '3324';\n"); + grammarBuilder.append("KW3325 : 'KW' '3325';\n"); + grammarBuilder.append("KW3326 : 'KW' '3326';\n"); + grammarBuilder.append("KW3327 : 'KW' '3327';\n"); + grammarBuilder.append("KW3328 : 'KW' '3328';\n"); + grammarBuilder.append("KW3329 : 'KW' '3329';\n"); + grammarBuilder.append("KW3330 : 'KW' '3330';\n"); + grammarBuilder.append("KW3331 : 'KW' '3331';\n"); + grammarBuilder.append("KW3332 : 'KW' '3332';\n"); + grammarBuilder.append("KW3333 : 'KW' '3333';\n"); + grammarBuilder.append("KW3334 : 'KW' '3334';\n"); + grammarBuilder.append("KW3335 : 'KW' '3335';\n"); + grammarBuilder.append("KW3336 : 'KW' '3336';\n"); + grammarBuilder.append("KW3337 : 'KW' '3337';\n"); + grammarBuilder.append("KW3338 : 'KW' '3338';\n"); + grammarBuilder.append("KW3339 : 'KW' '3339';\n"); + grammarBuilder.append("KW3340 : 'KW' '3340';\n"); + grammarBuilder.append("KW3341 : 'KW' '3341';\n"); + grammarBuilder.append("KW3342 : 'KW' '3342';\n"); + grammarBuilder.append("KW3343 : 'KW' '3343';\n"); + grammarBuilder.append("KW3344 : 'KW' '3344';\n"); + grammarBuilder.append("KW3345 : 'KW' '3345';\n"); + grammarBuilder.append("KW3346 : 'KW' '3346';\n"); + grammarBuilder.append("KW3347 : 'KW' '3347';\n"); + grammarBuilder.append("KW3348 : 'KW' '3348';\n"); + grammarBuilder.append("KW3349 : 'KW' '3349';\n"); + grammarBuilder.append("KW3350 : 'KW' '3350';\n"); + grammarBuilder.append("KW3351 : 'KW' '3351';\n"); + grammarBuilder.append("KW3352 : 'KW' '3352';\n"); + grammarBuilder.append("KW3353 : 'KW' '3353';\n"); + grammarBuilder.append("KW3354 : 'KW' '3354';\n"); + grammarBuilder.append("KW3355 : 'KW' '3355';\n"); + grammarBuilder.append("KW3356 : 'KW' '3356';\n"); + grammarBuilder.append("KW3357 : 'KW' '3357';\n"); + grammarBuilder.append("KW3358 : 'KW' '3358';\n"); + grammarBuilder.append("KW3359 : 'KW' '3359';\n"); + grammarBuilder.append("KW3360 : 'KW' '3360';\n"); + grammarBuilder.append("KW3361 : 'KW' '3361';\n"); + grammarBuilder.append("KW3362 : 'KW' '3362';\n"); + grammarBuilder.append("KW3363 : 'KW' '3363';\n"); + grammarBuilder.append("KW3364 : 'KW' '3364';\n"); + grammarBuilder.append("KW3365 : 'KW' '3365';\n"); + grammarBuilder.append("KW3366 : 'KW' '3366';\n"); + grammarBuilder.append("KW3367 : 'KW' '3367';\n"); + grammarBuilder.append("KW3368 : 'KW' '3368';\n"); + grammarBuilder.append("KW3369 : 'KW' '3369';\n"); + grammarBuilder.append("KW3370 : 'KW' '3370';\n"); + grammarBuilder.append("KW3371 : 'KW' '3371';\n"); + grammarBuilder.append("KW3372 : 'KW' '3372';\n"); + grammarBuilder.append("KW3373 : 'KW' '3373';\n"); + grammarBuilder.append("KW3374 : 'KW' '3374';\n"); + grammarBuilder.append("KW3375 : 'KW' '3375';\n"); + grammarBuilder.append("KW3376 : 'KW' '3376';\n"); + grammarBuilder.append("KW3377 : 'KW' '3377';\n"); + grammarBuilder.append("KW3378 : 'KW' '3378';\n"); + grammarBuilder.append("KW3379 : 'KW' '3379';\n"); + grammarBuilder.append("KW3380 : 'KW' '3380';\n"); + grammarBuilder.append("KW3381 : 'KW' '3381';\n"); + grammarBuilder.append("KW3382 : 'KW' '3382';\n"); + grammarBuilder.append("KW3383 : 'KW' '3383';\n"); + grammarBuilder.append("KW3384 : 'KW' '3384';\n"); + grammarBuilder.append("KW3385 : 'KW' '3385';\n"); + grammarBuilder.append("KW3386 : 'KW' '3386';\n"); + grammarBuilder.append("KW3387 : 'KW' '3387';\n"); + grammarBuilder.append("KW3388 : 'KW' '3388';\n"); + grammarBuilder.append("KW3389 : 'KW' '3389';\n"); + grammarBuilder.append("KW3390 : 'KW' '3390';\n"); + grammarBuilder.append("KW3391 : 'KW' '3391';\n"); + grammarBuilder.append("KW3392 : 'KW' '3392';\n"); + grammarBuilder.append("KW3393 : 'KW' '3393';\n"); + grammarBuilder.append("KW3394 : 'KW' '3394';\n"); + grammarBuilder.append("KW3395 : 'KW' '3395';\n"); + grammarBuilder.append("KW3396 : 'KW' '3396';\n"); + grammarBuilder.append("KW3397 : 'KW' '3397';\n"); + grammarBuilder.append("KW3398 : 'KW' '3398';\n"); + grammarBuilder.append("KW3399 : 'KW' '3399';\n"); + grammarBuilder.append("KW3400 : 'KW' '3400';\n"); + grammarBuilder.append("KW3401 : 'KW' '3401';\n"); + grammarBuilder.append("KW3402 : 'KW' '3402';\n"); + grammarBuilder.append("KW3403 : 'KW' '3403';\n"); + grammarBuilder.append("KW3404 : 'KW' '3404';\n"); + grammarBuilder.append("KW3405 : 'KW' '3405';\n"); + grammarBuilder.append("KW3406 : 'KW' '3406';\n"); + grammarBuilder.append("KW3407 : 'KW' '3407';\n"); + grammarBuilder.append("KW3408 : 'KW' '3408';\n"); + grammarBuilder.append("KW3409 : 'KW' '3409';\n"); + grammarBuilder.append("KW3410 : 'KW' '3410';\n"); + grammarBuilder.append("KW3411 : 'KW' '3411';\n"); + grammarBuilder.append("KW3412 : 'KW' '3412';\n"); + grammarBuilder.append("KW3413 : 'KW' '3413';\n"); + grammarBuilder.append("KW3414 : 'KW' '3414';\n"); + grammarBuilder.append("KW3415 : 'KW' '3415';\n"); + grammarBuilder.append("KW3416 : 'KW' '3416';\n"); + grammarBuilder.append("KW3417 : 'KW' '3417';\n"); + grammarBuilder.append("KW3418 : 'KW' '3418';\n"); + grammarBuilder.append("KW3419 : 'KW' '3419';\n"); + grammarBuilder.append("KW3420 : 'KW' '3420';\n"); + grammarBuilder.append("KW3421 : 'KW' '3421';\n"); + grammarBuilder.append("KW3422 : 'KW' '3422';\n"); + grammarBuilder.append("KW3423 : 'KW' '3423';\n"); + grammarBuilder.append("KW3424 : 'KW' '3424';\n"); + grammarBuilder.append("KW3425 : 'KW' '3425';\n"); + grammarBuilder.append("KW3426 : 'KW' '3426';\n"); + grammarBuilder.append("KW3427 : 'KW' '3427';\n"); + grammarBuilder.append("KW3428 : 'KW' '3428';\n"); + grammarBuilder.append("KW3429 : 'KW' '3429';\n"); + grammarBuilder.append("KW3430 : 'KW' '3430';\n"); + grammarBuilder.append("KW3431 : 'KW' '3431';\n"); + grammarBuilder.append("KW3432 : 'KW' '3432';\n"); + grammarBuilder.append("KW3433 : 'KW' '3433';\n"); + grammarBuilder.append("KW3434 : 'KW' '3434';\n"); + grammarBuilder.append("KW3435 : 'KW' '3435';\n"); + grammarBuilder.append("KW3436 : 'KW' '3436';\n"); + grammarBuilder.append("KW3437 : 'KW' '3437';\n"); + grammarBuilder.append("KW3438 : 'KW' '3438';\n"); + grammarBuilder.append("KW3439 : 'KW' '3439';\n"); + grammarBuilder.append("KW3440 : 'KW' '3440';\n"); + grammarBuilder.append("KW3441 : 'KW' '3441';\n"); + grammarBuilder.append("KW3442 : 'KW' '3442';\n"); + grammarBuilder.append("KW3443 : 'KW' '3443';\n"); + grammarBuilder.append("KW3444 : 'KW' '3444';\n"); + grammarBuilder.append("KW3445 : 'KW' '3445';\n"); + grammarBuilder.append("KW3446 : 'KW' '3446';\n"); + grammarBuilder.append("KW3447 : 'KW' '3447';\n"); + grammarBuilder.append("KW3448 : 'KW' '3448';\n"); + grammarBuilder.append("KW3449 : 'KW' '3449';\n"); + grammarBuilder.append("KW3450 : 'KW' '3450';\n"); + grammarBuilder.append("KW3451 : 'KW' '3451';\n"); + grammarBuilder.append("KW3452 : 'KW' '3452';\n"); + grammarBuilder.append("KW3453 : 'KW' '3453';\n"); + grammarBuilder.append("KW3454 : 'KW' '3454';\n"); + grammarBuilder.append("KW3455 : 'KW' '3455';\n"); + grammarBuilder.append("KW3456 : 'KW' '3456';\n"); + grammarBuilder.append("KW3457 : 'KW' '3457';\n"); + grammarBuilder.append("KW3458 : 'KW' '3458';\n"); + grammarBuilder.append("KW3459 : 'KW' '3459';\n"); + grammarBuilder.append("KW3460 : 'KW' '3460';\n"); + grammarBuilder.append("KW3461 : 'KW' '3461';\n"); + grammarBuilder.append("KW3462 : 'KW' '3462';\n"); + grammarBuilder.append("KW3463 : 'KW' '3463';\n"); + grammarBuilder.append("KW3464 : 'KW' '3464';\n"); + grammarBuilder.append("KW3465 : 'KW' '3465';\n"); + grammarBuilder.append("KW3466 : 'KW' '3466';\n"); + grammarBuilder.append("KW3467 : 'KW' '3467';\n"); + grammarBuilder.append("KW3468 : 'KW' '3468';\n"); + grammarBuilder.append("KW3469 : 'KW' '3469';\n"); + grammarBuilder.append("KW3470 : 'KW' '3470';\n"); + grammarBuilder.append("KW3471 : 'KW' '3471';\n"); + grammarBuilder.append("KW3472 : 'KW' '3472';\n"); + grammarBuilder.append("KW3473 : 'KW' '3473';\n"); + grammarBuilder.append("KW3474 : 'KW' '3474';\n"); + grammarBuilder.append("KW3475 : 'KW' '3475';\n"); + grammarBuilder.append("KW3476 : 'KW' '3476';\n"); + grammarBuilder.append("KW3477 : 'KW' '3477';\n"); + grammarBuilder.append("KW3478 : 'KW' '3478';\n"); + grammarBuilder.append("KW3479 : 'KW' '3479';\n"); + grammarBuilder.append("KW3480 : 'KW' '3480';\n"); + grammarBuilder.append("KW3481 : 'KW' '3481';\n"); + grammarBuilder.append("KW3482 : 'KW' '3482';\n"); + grammarBuilder.append("KW3483 : 'KW' '3483';\n"); + grammarBuilder.append("KW3484 : 'KW' '3484';\n"); + grammarBuilder.append("KW3485 : 'KW' '3485';\n"); + grammarBuilder.append("KW3486 : 'KW' '3486';\n"); + grammarBuilder.append("KW3487 : 'KW' '3487';\n"); + grammarBuilder.append("KW3488 : 'KW' '3488';\n"); + grammarBuilder.append("KW3489 : 'KW' '3489';\n"); + grammarBuilder.append("KW3490 : 'KW' '3490';\n"); + grammarBuilder.append("KW3491 : 'KW' '3491';\n"); + grammarBuilder.append("KW3492 : 'KW' '3492';\n"); + grammarBuilder.append("KW3493 : 'KW' '3493';\n"); + grammarBuilder.append("KW3494 : 'KW' '3494';\n"); + grammarBuilder.append("KW3495 : 'KW' '3495';\n"); + grammarBuilder.append("KW3496 : 'KW' '3496';\n"); + grammarBuilder.append("KW3497 : 'KW' '3497';\n"); + grammarBuilder.append("KW3498 : 'KW' '3498';\n"); + grammarBuilder.append("KW3499 : 'KW' '3499';\n"); + grammarBuilder.append("KW3500 : 'KW' '3500';\n"); + grammarBuilder.append("KW3501 : 'KW' '3501';\n"); + grammarBuilder.append("KW3502 : 'KW' '3502';\n"); + grammarBuilder.append("KW3503 : 'KW' '3503';\n"); + grammarBuilder.append("KW3504 : 'KW' '3504';\n"); + grammarBuilder.append("KW3505 : 'KW' '3505';\n"); + grammarBuilder.append("KW3506 : 'KW' '3506';\n"); + grammarBuilder.append("KW3507 : 'KW' '3507';\n"); + grammarBuilder.append("KW3508 : 'KW' '3508';\n"); + grammarBuilder.append("KW3509 : 'KW' '3509';\n"); + grammarBuilder.append("KW3510 : 'KW' '3510';\n"); + grammarBuilder.append("KW3511 : 'KW' '3511';\n"); + grammarBuilder.append("KW3512 : 'KW' '3512';\n"); + grammarBuilder.append("KW3513 : 'KW' '3513';\n"); + grammarBuilder.append("KW3514 : 'KW' '3514';\n"); + grammarBuilder.append("KW3515 : 'KW' '3515';\n"); + grammarBuilder.append("KW3516 : 'KW' '3516';\n"); + grammarBuilder.append("KW3517 : 'KW' '3517';\n"); + grammarBuilder.append("KW3518 : 'KW' '3518';\n"); + grammarBuilder.append("KW3519 : 'KW' '3519';\n"); + grammarBuilder.append("KW3520 : 'KW' '3520';\n"); + grammarBuilder.append("KW3521 : 'KW' '3521';\n"); + grammarBuilder.append("KW3522 : 'KW' '3522';\n"); + grammarBuilder.append("KW3523 : 'KW' '3523';\n"); + grammarBuilder.append("KW3524 : 'KW' '3524';\n"); + grammarBuilder.append("KW3525 : 'KW' '3525';\n"); + grammarBuilder.append("KW3526 : 'KW' '3526';\n"); + grammarBuilder.append("KW3527 : 'KW' '3527';\n"); + grammarBuilder.append("KW3528 : 'KW' '3528';\n"); + grammarBuilder.append("KW3529 : 'KW' '3529';\n"); + grammarBuilder.append("KW3530 : 'KW' '3530';\n"); + grammarBuilder.append("KW3531 : 'KW' '3531';\n"); + grammarBuilder.append("KW3532 : 'KW' '3532';\n"); + grammarBuilder.append("KW3533 : 'KW' '3533';\n"); + grammarBuilder.append("KW3534 : 'KW' '3534';\n"); + grammarBuilder.append("KW3535 : 'KW' '3535';\n"); + grammarBuilder.append("KW3536 : 'KW' '3536';\n"); + grammarBuilder.append("KW3537 : 'KW' '3537';\n"); + grammarBuilder.append("KW3538 : 'KW' '3538';\n"); + grammarBuilder.append("KW3539 : 'KW' '3539';\n"); + grammarBuilder.append("KW3540 : 'KW' '3540';\n"); + grammarBuilder.append("KW3541 : 'KW' '3541';\n"); + grammarBuilder.append("KW3542 : 'KW' '3542';\n"); + grammarBuilder.append("KW3543 : 'KW' '3543';\n"); + grammarBuilder.append("KW3544 : 'KW' '3544';\n"); + grammarBuilder.append("KW3545 : 'KW' '3545';\n"); + grammarBuilder.append("KW3546 : 'KW' '3546';\n"); + grammarBuilder.append("KW3547 : 'KW' '3547';\n"); + grammarBuilder.append("KW3548 : 'KW' '3548';\n"); + grammarBuilder.append("KW3549 : 'KW' '3549';\n"); + grammarBuilder.append("KW3550 : 'KW' '3550';\n"); + grammarBuilder.append("KW3551 : 'KW' '3551';\n"); + grammarBuilder.append("KW3552 : 'KW' '3552';\n"); + grammarBuilder.append("KW3553 : 'KW' '3553';\n"); + grammarBuilder.append("KW3554 : 'KW' '3554';\n"); + grammarBuilder.append("KW3555 : 'KW' '3555';\n"); + grammarBuilder.append("KW3556 : 'KW' '3556';\n"); + grammarBuilder.append("KW3557 : 'KW' '3557';\n"); + grammarBuilder.append("KW3558 : 'KW' '3558';\n"); + grammarBuilder.append("KW3559 : 'KW' '3559';\n"); + grammarBuilder.append("KW3560 : 'KW' '3560';\n"); + grammarBuilder.append("KW3561 : 'KW' '3561';\n"); + grammarBuilder.append("KW3562 : 'KW' '3562';\n"); + grammarBuilder.append("KW3563 : 'KW' '3563';\n"); + grammarBuilder.append("KW3564 : 'KW' '3564';\n"); + grammarBuilder.append("KW3565 : 'KW' '3565';\n"); + grammarBuilder.append("KW3566 : 'KW' '3566';\n"); + grammarBuilder.append("KW3567 : 'KW' '3567';\n"); + grammarBuilder.append("KW3568 : 'KW' '3568';\n"); + grammarBuilder.append("KW3569 : 'KW' '3569';\n"); + grammarBuilder.append("KW3570 : 'KW' '3570';\n"); + grammarBuilder.append("KW3571 : 'KW' '3571';\n"); + grammarBuilder.append("KW3572 : 'KW' '3572';\n"); + grammarBuilder.append("KW3573 : 'KW' '3573';\n"); + grammarBuilder.append("KW3574 : 'KW' '3574';\n"); + grammarBuilder.append("KW3575 : 'KW' '3575';\n"); + grammarBuilder.append("KW3576 : 'KW' '3576';\n"); + grammarBuilder.append("KW3577 : 'KW' '3577';\n"); + grammarBuilder.append("KW3578 : 'KW' '3578';\n"); + grammarBuilder.append("KW3579 : 'KW' '3579';\n"); + grammarBuilder.append("KW3580 : 'KW' '3580';\n"); + grammarBuilder.append("KW3581 : 'KW' '3581';\n"); + grammarBuilder.append("KW3582 : 'KW' '3582';\n"); + grammarBuilder.append("KW3583 : 'KW' '3583';\n"); + grammarBuilder.append("KW3584 : 'KW' '3584';\n"); + grammarBuilder.append("KW3585 : 'KW' '3585';\n"); + grammarBuilder.append("KW3586 : 'KW' '3586';\n"); + grammarBuilder.append("KW3587 : 'KW' '3587';\n"); + grammarBuilder.append("KW3588 : 'KW' '3588';\n"); + grammarBuilder.append("KW3589 : 'KW' '3589';\n"); + grammarBuilder.append("KW3590 : 'KW' '3590';\n"); + grammarBuilder.append("KW3591 : 'KW' '3591';\n"); + grammarBuilder.append("KW3592 : 'KW' '3592';\n"); + grammarBuilder.append("KW3593 : 'KW' '3593';\n"); + grammarBuilder.append("KW3594 : 'KW' '3594';\n"); + grammarBuilder.append("KW3595 : 'KW' '3595';\n"); + grammarBuilder.append("KW3596 : 'KW' '3596';\n"); + grammarBuilder.append("KW3597 : 'KW' '3597';\n"); + grammarBuilder.append("KW3598 : 'KW' '3598';\n"); + grammarBuilder.append("KW3599 : 'KW' '3599';\n"); + grammarBuilder.append("KW3600 : 'KW' '3600';\n"); + grammarBuilder.append("KW3601 : 'KW' '3601';\n"); + grammarBuilder.append("KW3602 : 'KW' '3602';\n"); + grammarBuilder.append("KW3603 : 'KW' '3603';\n"); + grammarBuilder.append("KW3604 : 'KW' '3604';\n"); + grammarBuilder.append("KW3605 : 'KW' '3605';\n"); + grammarBuilder.append("KW3606 : 'KW' '3606';\n"); + grammarBuilder.append("KW3607 : 'KW' '3607';\n"); + grammarBuilder.append("KW3608 : 'KW' '3608';\n"); + grammarBuilder.append("KW3609 : 'KW' '3609';\n"); + grammarBuilder.append("KW3610 : 'KW' '3610';\n"); + grammarBuilder.append("KW3611 : 'KW' '3611';\n"); + grammarBuilder.append("KW3612 : 'KW' '3612';\n"); + grammarBuilder.append("KW3613 : 'KW' '3613';\n"); + grammarBuilder.append("KW3614 : 'KW' '3614';\n"); + grammarBuilder.append("KW3615 : 'KW' '3615';\n"); + grammarBuilder.append("KW3616 : 'KW' '3616';\n"); + grammarBuilder.append("KW3617 : 'KW' '3617';\n"); + grammarBuilder.append("KW3618 : 'KW' '3618';\n"); + grammarBuilder.append("KW3619 : 'KW' '3619';\n"); + grammarBuilder.append("KW3620 : 'KW' '3620';\n"); + grammarBuilder.append("KW3621 : 'KW' '3621';\n"); + grammarBuilder.append("KW3622 : 'KW' '3622';\n"); + grammarBuilder.append("KW3623 : 'KW' '3623';\n"); + grammarBuilder.append("KW3624 : 'KW' '3624';\n"); + grammarBuilder.append("KW3625 : 'KW' '3625';\n"); + grammarBuilder.append("KW3626 : 'KW' '3626';\n"); + grammarBuilder.append("KW3627 : 'KW' '3627';\n"); + grammarBuilder.append("KW3628 : 'KW' '3628';\n"); + grammarBuilder.append("KW3629 : 'KW' '3629';\n"); + grammarBuilder.append("KW3630 : 'KW' '3630';\n"); + grammarBuilder.append("KW3631 : 'KW' '3631';\n"); + grammarBuilder.append("KW3632 : 'KW' '3632';\n"); + grammarBuilder.append("KW3633 : 'KW' '3633';\n"); + grammarBuilder.append("KW3634 : 'KW' '3634';\n"); + grammarBuilder.append("KW3635 : 'KW' '3635';\n"); + grammarBuilder.append("KW3636 : 'KW' '3636';\n"); + grammarBuilder.append("KW3637 : 'KW' '3637';\n"); + grammarBuilder.append("KW3638 : 'KW' '3638';\n"); + grammarBuilder.append("KW3639 : 'KW' '3639';\n"); + grammarBuilder.append("KW3640 : 'KW' '3640';\n"); + grammarBuilder.append("KW3641 : 'KW' '3641';\n"); + grammarBuilder.append("KW3642 : 'KW' '3642';\n"); + grammarBuilder.append("KW3643 : 'KW' '3643';\n"); + grammarBuilder.append("KW3644 : 'KW' '3644';\n"); + grammarBuilder.append("KW3645 : 'KW' '3645';\n"); + grammarBuilder.append("KW3646 : 'KW' '3646';\n"); + grammarBuilder.append("KW3647 : 'KW' '3647';\n"); + grammarBuilder.append("KW3648 : 'KW' '3648';\n"); + grammarBuilder.append("KW3649 : 'KW' '3649';\n"); + grammarBuilder.append("KW3650 : 'KW' '3650';\n"); + grammarBuilder.append("KW3651 : 'KW' '3651';\n"); + grammarBuilder.append("KW3652 : 'KW' '3652';\n"); + grammarBuilder.append("KW3653 : 'KW' '3653';\n"); + grammarBuilder.append("KW3654 : 'KW' '3654';\n"); + grammarBuilder.append("KW3655 : 'KW' '3655';\n"); + grammarBuilder.append("KW3656 : 'KW' '3656';\n"); + grammarBuilder.append("KW3657 : 'KW' '3657';\n"); + grammarBuilder.append("KW3658 : 'KW' '3658';\n"); + grammarBuilder.append("KW3659 : 'KW' '3659';\n"); + grammarBuilder.append("KW3660 : 'KW' '3660';\n"); + grammarBuilder.append("KW3661 : 'KW' '3661';\n"); + grammarBuilder.append("KW3662 : 'KW' '3662';\n"); + grammarBuilder.append("KW3663 : 'KW' '3663';\n"); + grammarBuilder.append("KW3664 : 'KW' '3664';\n"); + grammarBuilder.append("KW3665 : 'KW' '3665';\n"); + grammarBuilder.append("KW3666 : 'KW' '3666';\n"); + grammarBuilder.append("KW3667 : 'KW' '3667';\n"); + grammarBuilder.append("KW3668 : 'KW' '3668';\n"); + grammarBuilder.append("KW3669 : 'KW' '3669';\n"); + grammarBuilder.append("KW3670 : 'KW' '3670';\n"); + grammarBuilder.append("KW3671 : 'KW' '3671';\n"); + grammarBuilder.append("KW3672 : 'KW' '3672';\n"); + grammarBuilder.append("KW3673 : 'KW' '3673';\n"); + grammarBuilder.append("KW3674 : 'KW' '3674';\n"); + grammarBuilder.append("KW3675 : 'KW' '3675';\n"); + grammarBuilder.append("KW3676 : 'KW' '3676';\n"); + grammarBuilder.append("KW3677 : 'KW' '3677';\n"); + grammarBuilder.append("KW3678 : 'KW' '3678';\n"); + grammarBuilder.append("KW3679 : 'KW' '3679';\n"); + grammarBuilder.append("KW3680 : 'KW' '3680';\n"); + grammarBuilder.append("KW3681 : 'KW' '3681';\n"); + grammarBuilder.append("KW3682 : 'KW' '3682';\n"); + grammarBuilder.append("KW3683 : 'KW' '3683';\n"); + grammarBuilder.append("KW3684 : 'KW' '3684';\n"); + grammarBuilder.append("KW3685 : 'KW' '3685';\n"); + grammarBuilder.append("KW3686 : 'KW' '3686';\n"); + grammarBuilder.append("KW3687 : 'KW' '3687';\n"); + grammarBuilder.append("KW3688 : 'KW' '3688';\n"); + grammarBuilder.append("KW3689 : 'KW' '3689';\n"); + grammarBuilder.append("KW3690 : 'KW' '3690';\n"); + grammarBuilder.append("KW3691 : 'KW' '3691';\n"); + grammarBuilder.append("KW3692 : 'KW' '3692';\n"); + grammarBuilder.append("KW3693 : 'KW' '3693';\n"); + grammarBuilder.append("KW3694 : 'KW' '3694';\n"); + grammarBuilder.append("KW3695 : 'KW' '3695';\n"); + grammarBuilder.append("KW3696 : 'KW' '3696';\n"); + grammarBuilder.append("KW3697 : 'KW' '3697';\n"); + grammarBuilder.append("KW3698 : 'KW' '3698';\n"); + grammarBuilder.append("KW3699 : 'KW' '3699';\n"); + grammarBuilder.append("KW3700 : 'KW' '3700';\n"); + grammarBuilder.append("KW3701 : 'KW' '3701';\n"); + grammarBuilder.append("KW3702 : 'KW' '3702';\n"); + grammarBuilder.append("KW3703 : 'KW' '3703';\n"); + grammarBuilder.append("KW3704 : 'KW' '3704';\n"); + grammarBuilder.append("KW3705 : 'KW' '3705';\n"); + grammarBuilder.append("KW3706 : 'KW' '3706';\n"); + grammarBuilder.append("KW3707 : 'KW' '3707';\n"); + grammarBuilder.append("KW3708 : 'KW' '3708';\n"); + grammarBuilder.append("KW3709 : 'KW' '3709';\n"); + grammarBuilder.append("KW3710 : 'KW' '3710';\n"); + grammarBuilder.append("KW3711 : 'KW' '3711';\n"); + grammarBuilder.append("KW3712 : 'KW' '3712';\n"); + grammarBuilder.append("KW3713 : 'KW' '3713';\n"); + grammarBuilder.append("KW3714 : 'KW' '3714';\n"); + grammarBuilder.append("KW3715 : 'KW' '3715';\n"); + grammarBuilder.append("KW3716 : 'KW' '3716';\n"); + grammarBuilder.append("KW3717 : 'KW' '3717';\n"); + grammarBuilder.append("KW3718 : 'KW' '3718';\n"); + grammarBuilder.append("KW3719 : 'KW' '3719';\n"); + grammarBuilder.append("KW3720 : 'KW' '3720';\n"); + grammarBuilder.append("KW3721 : 'KW' '3721';\n"); + grammarBuilder.append("KW3722 : 'KW' '3722';\n"); + grammarBuilder.append("KW3723 : 'KW' '3723';\n"); + grammarBuilder.append("KW3724 : 'KW' '3724';\n"); + grammarBuilder.append("KW3725 : 'KW' '3725';\n"); + grammarBuilder.append("KW3726 : 'KW' '3726';\n"); + grammarBuilder.append("KW3727 : 'KW' '3727';\n"); + grammarBuilder.append("KW3728 : 'KW' '3728';\n"); + grammarBuilder.append("KW3729 : 'KW' '3729';\n"); + grammarBuilder.append("KW3730 : 'KW' '3730';\n"); + grammarBuilder.append("KW3731 : 'KW' '3731';\n"); + grammarBuilder.append("KW3732 : 'KW' '3732';\n"); + grammarBuilder.append("KW3733 : 'KW' '3733';\n"); + grammarBuilder.append("KW3734 : 'KW' '3734';\n"); + grammarBuilder.append("KW3735 : 'KW' '3735';\n"); + grammarBuilder.append("KW3736 : 'KW' '3736';\n"); + grammarBuilder.append("KW3737 : 'KW' '3737';\n"); + grammarBuilder.append("KW3738 : 'KW' '3738';\n"); + grammarBuilder.append("KW3739 : 'KW' '3739';\n"); + grammarBuilder.append("KW3740 : 'KW' '3740';\n"); + grammarBuilder.append("KW3741 : 'KW' '3741';\n"); + grammarBuilder.append("KW3742 : 'KW' '3742';\n"); + grammarBuilder.append("KW3743 : 'KW' '3743';\n"); + grammarBuilder.append("KW3744 : 'KW' '3744';\n"); + grammarBuilder.append("KW3745 : 'KW' '3745';\n"); + grammarBuilder.append("KW3746 : 'KW' '3746';\n"); + grammarBuilder.append("KW3747 : 'KW' '3747';\n"); + grammarBuilder.append("KW3748 : 'KW' '3748';\n"); + grammarBuilder.append("KW3749 : 'KW' '3749';\n"); + grammarBuilder.append("KW3750 : 'KW' '3750';\n"); + grammarBuilder.append("KW3751 : 'KW' '3751';\n"); + grammarBuilder.append("KW3752 : 'KW' '3752';\n"); + grammarBuilder.append("KW3753 : 'KW' '3753';\n"); + grammarBuilder.append("KW3754 : 'KW' '3754';\n"); + grammarBuilder.append("KW3755 : 'KW' '3755';\n"); + grammarBuilder.append("KW3756 : 'KW' '3756';\n"); + grammarBuilder.append("KW3757 : 'KW' '3757';\n"); + grammarBuilder.append("KW3758 : 'KW' '3758';\n"); + grammarBuilder.append("KW3759 : 'KW' '3759';\n"); + grammarBuilder.append("KW3760 : 'KW' '3760';\n"); + grammarBuilder.append("KW3761 : 'KW' '3761';\n"); + grammarBuilder.append("KW3762 : 'KW' '3762';\n"); + grammarBuilder.append("KW3763 : 'KW' '3763';\n"); + grammarBuilder.append("KW3764 : 'KW' '3764';\n"); + grammarBuilder.append("KW3765 : 'KW' '3765';\n"); + grammarBuilder.append("KW3766 : 'KW' '3766';\n"); + grammarBuilder.append("KW3767 : 'KW' '3767';\n"); + grammarBuilder.append("KW3768 : 'KW' '3768';\n"); + grammarBuilder.append("KW3769 : 'KW' '3769';\n"); + grammarBuilder.append("KW3770 : 'KW' '3770';\n"); + grammarBuilder.append("KW3771 : 'KW' '3771';\n"); + grammarBuilder.append("KW3772 : 'KW' '3772';\n"); + grammarBuilder.append("KW3773 : 'KW' '3773';\n"); + grammarBuilder.append("KW3774 : 'KW' '3774';\n"); + grammarBuilder.append("KW3775 : 'KW' '3775';\n"); + grammarBuilder.append("KW3776 : 'KW' '3776';\n"); + grammarBuilder.append("KW3777 : 'KW' '3777';\n"); + grammarBuilder.append("KW3778 : 'KW' '3778';\n"); + grammarBuilder.append("KW3779 : 'KW' '3779';\n"); + grammarBuilder.append("KW3780 : 'KW' '3780';\n"); + grammarBuilder.append("KW3781 : 'KW' '3781';\n"); + grammarBuilder.append("KW3782 : 'KW' '3782';\n"); + grammarBuilder.append("KW3783 : 'KW' '3783';\n"); + grammarBuilder.append("KW3784 : 'KW' '3784';\n"); + grammarBuilder.append("KW3785 : 'KW' '3785';\n"); + grammarBuilder.append("KW3786 : 'KW' '3786';\n"); + grammarBuilder.append("KW3787 : 'KW' '3787';\n"); + grammarBuilder.append("KW3788 : 'KW' '3788';\n"); + grammarBuilder.append("KW3789 : 'KW' '3789';\n"); + grammarBuilder.append("KW3790 : 'KW' '3790';\n"); + grammarBuilder.append("KW3791 : 'KW' '3791';\n"); + grammarBuilder.append("KW3792 : 'KW' '3792';\n"); + grammarBuilder.append("KW3793 : 'KW' '3793';\n"); + grammarBuilder.append("KW3794 : 'KW' '3794';\n"); + grammarBuilder.append("KW3795 : 'KW' '3795';\n"); + grammarBuilder.append("KW3796 : 'KW' '3796';\n"); + grammarBuilder.append("KW3797 : 'KW' '3797';\n"); + grammarBuilder.append("KW3798 : 'KW' '3798';\n"); + grammarBuilder.append("KW3799 : 'KW' '3799';\n"); + grammarBuilder.append("KW3800 : 'KW' '3800';\n"); + grammarBuilder.append("KW3801 : 'KW' '3801';\n"); + grammarBuilder.append("KW3802 : 'KW' '3802';\n"); + grammarBuilder.append("KW3803 : 'KW' '3803';\n"); + grammarBuilder.append("KW3804 : 'KW' '3804';\n"); + grammarBuilder.append("KW3805 : 'KW' '3805';\n"); + grammarBuilder.append("KW3806 : 'KW' '3806';\n"); + grammarBuilder.append("KW3807 : 'KW' '3807';\n"); + grammarBuilder.append("KW3808 : 'KW' '3808';\n"); + grammarBuilder.append("KW3809 : 'KW' '3809';\n"); + grammarBuilder.append("KW3810 : 'KW' '3810';\n"); + grammarBuilder.append("KW3811 : 'KW' '3811';\n"); + grammarBuilder.append("KW3812 : 'KW' '3812';\n"); + grammarBuilder.append("KW3813 : 'KW' '3813';\n"); + grammarBuilder.append("KW3814 : 'KW' '3814';\n"); + grammarBuilder.append("KW3815 : 'KW' '3815';\n"); + grammarBuilder.append("KW3816 : 'KW' '3816';\n"); + grammarBuilder.append("KW3817 : 'KW' '3817';\n"); + grammarBuilder.append("KW3818 : 'KW' '3818';\n"); + grammarBuilder.append("KW3819 : 'KW' '3819';\n"); + grammarBuilder.append("KW3820 : 'KW' '3820';\n"); + grammarBuilder.append("KW3821 : 'KW' '3821';\n"); + grammarBuilder.append("KW3822 : 'KW' '3822';\n"); + grammarBuilder.append("KW3823 : 'KW' '3823';\n"); + grammarBuilder.append("KW3824 : 'KW' '3824';\n"); + grammarBuilder.append("KW3825 : 'KW' '3825';\n"); + grammarBuilder.append("KW3826 : 'KW' '3826';\n"); + grammarBuilder.append("KW3827 : 'KW' '3827';\n"); + grammarBuilder.append("KW3828 : 'KW' '3828';\n"); + grammarBuilder.append("KW3829 : 'KW' '3829';\n"); + grammarBuilder.append("KW3830 : 'KW' '3830';\n"); + grammarBuilder.append("KW3831 : 'KW' '3831';\n"); + grammarBuilder.append("KW3832 : 'KW' '3832';\n"); + grammarBuilder.append("KW3833 : 'KW' '3833';\n"); + grammarBuilder.append("KW3834 : 'KW' '3834';\n"); + grammarBuilder.append("KW3835 : 'KW' '3835';\n"); + grammarBuilder.append("KW3836 : 'KW' '3836';\n"); + grammarBuilder.append("KW3837 : 'KW' '3837';\n"); + grammarBuilder.append("KW3838 : 'KW' '3838';\n"); + grammarBuilder.append("KW3839 : 'KW' '3839';\n"); + grammarBuilder.append("KW3840 : 'KW' '3840';\n"); + grammarBuilder.append("KW3841 : 'KW' '3841';\n"); + grammarBuilder.append("KW3842 : 'KW' '3842';\n"); + grammarBuilder.append("KW3843 : 'KW' '3843';\n"); + grammarBuilder.append("KW3844 : 'KW' '3844';\n"); + grammarBuilder.append("KW3845 : 'KW' '3845';\n"); + grammarBuilder.append("KW3846 : 'KW' '3846';\n"); + grammarBuilder.append("KW3847 : 'KW' '3847';\n"); + grammarBuilder.append("KW3848 : 'KW' '3848';\n"); + grammarBuilder.append("KW3849 : 'KW' '3849';\n"); + grammarBuilder.append("KW3850 : 'KW' '3850';\n"); + grammarBuilder.append("KW3851 : 'KW' '3851';\n"); + grammarBuilder.append("KW3852 : 'KW' '3852';\n"); + grammarBuilder.append("KW3853 : 'KW' '3853';\n"); + grammarBuilder.append("KW3854 : 'KW' '3854';\n"); + grammarBuilder.append("KW3855 : 'KW' '3855';\n"); + grammarBuilder.append("KW3856 : 'KW' '3856';\n"); + grammarBuilder.append("KW3857 : 'KW' '3857';\n"); + grammarBuilder.append("KW3858 : 'KW' '3858';\n"); + grammarBuilder.append("KW3859 : 'KW' '3859';\n"); + grammarBuilder.append("KW3860 : 'KW' '3860';\n"); + grammarBuilder.append("KW3861 : 'KW' '3861';\n"); + grammarBuilder.append("KW3862 : 'KW' '3862';\n"); + grammarBuilder.append("KW3863 : 'KW' '3863';\n"); + grammarBuilder.append("KW3864 : 'KW' '3864';\n"); + grammarBuilder.append("KW3865 : 'KW' '3865';\n"); + grammarBuilder.append("KW3866 : 'KW' '3866';\n"); + grammarBuilder.append("KW3867 : 'KW' '3867';\n"); + grammarBuilder.append("KW3868 : 'KW' '3868';\n"); + grammarBuilder.append("KW3869 : 'KW' '3869';\n"); + grammarBuilder.append("KW3870 : 'KW' '3870';\n"); + grammarBuilder.append("KW3871 : 'KW' '3871';\n"); + grammarBuilder.append("KW3872 : 'KW' '3872';\n"); + grammarBuilder.append("KW3873 : 'KW' '3873';\n"); + grammarBuilder.append("KW3874 : 'KW' '3874';\n"); + grammarBuilder.append("KW3875 : 'KW' '3875';\n"); + grammarBuilder.append("KW3876 : 'KW' '3876';\n"); + grammarBuilder.append("KW3877 : 'KW' '3877';\n"); + grammarBuilder.append("KW3878 : 'KW' '3878';\n"); + grammarBuilder.append("KW3879 : 'KW' '3879';\n"); + grammarBuilder.append("KW3880 : 'KW' '3880';\n"); + grammarBuilder.append("KW3881 : 'KW' '3881';\n"); + grammarBuilder.append("KW3882 : 'KW' '3882';\n"); + grammarBuilder.append("KW3883 : 'KW' '3883';\n"); + grammarBuilder.append("KW3884 : 'KW' '3884';\n"); + grammarBuilder.append("KW3885 : 'KW' '3885';\n"); + grammarBuilder.append("KW3886 : 'KW' '3886';\n"); + grammarBuilder.append("KW3887 : 'KW' '3887';\n"); + grammarBuilder.append("KW3888 : 'KW' '3888';\n"); + grammarBuilder.append("KW3889 : 'KW' '3889';\n"); + grammarBuilder.append("KW3890 : 'KW' '3890';\n"); + grammarBuilder.append("KW3891 : 'KW' '3891';\n"); + grammarBuilder.append("KW3892 : 'KW' '3892';\n"); + grammarBuilder.append("KW3893 : 'KW' '3893';\n"); + grammarBuilder.append("KW3894 : 'KW' '3894';\n"); + grammarBuilder.append("KW3895 : 'KW' '3895';\n"); + grammarBuilder.append("KW3896 : 'KW' '3896';\n"); + grammarBuilder.append("KW3897 : 'KW' '3897';\n"); + grammarBuilder.append("KW3898 : 'KW' '3898';\n"); + grammarBuilder.append("KW3899 : 'KW' '3899';\n"); + grammarBuilder.append("KW3900 : 'KW' '3900';\n"); + grammarBuilder.append("KW3901 : 'KW' '3901';\n"); + grammarBuilder.append("KW3902 : 'KW' '3902';\n"); + grammarBuilder.append("KW3903 : 'KW' '3903';\n"); + grammarBuilder.append("KW3904 : 'KW' '3904';\n"); + grammarBuilder.append("KW3905 : 'KW' '3905';\n"); + grammarBuilder.append("KW3906 : 'KW' '3906';\n"); + grammarBuilder.append("KW3907 : 'KW' '3907';\n"); + grammarBuilder.append("KW3908 : 'KW' '3908';\n"); + grammarBuilder.append("KW3909 : 'KW' '3909';\n"); + grammarBuilder.append("KW3910 : 'KW' '3910';\n"); + grammarBuilder.append("KW3911 : 'KW' '3911';\n"); + grammarBuilder.append("KW3912 : 'KW' '3912';\n"); + grammarBuilder.append("KW3913 : 'KW' '3913';\n"); + grammarBuilder.append("KW3914 : 'KW' '3914';\n"); + grammarBuilder.append("KW3915 : 'KW' '3915';\n"); + grammarBuilder.append("KW3916 : 'KW' '3916';\n"); + grammarBuilder.append("KW3917 : 'KW' '3917';\n"); + grammarBuilder.append("KW3918 : 'KW' '3918';\n"); + grammarBuilder.append("KW3919 : 'KW' '3919';\n"); + grammarBuilder.append("KW3920 : 'KW' '3920';\n"); + grammarBuilder.append("KW3921 : 'KW' '3921';\n"); + grammarBuilder.append("KW3922 : 'KW' '3922';\n"); + grammarBuilder.append("KW3923 : 'KW' '3923';\n"); + grammarBuilder.append("KW3924 : 'KW' '3924';\n"); + grammarBuilder.append("KW3925 : 'KW' '3925';\n"); + grammarBuilder.append("KW3926 : 'KW' '3926';\n"); + grammarBuilder.append("KW3927 : 'KW' '3927';\n"); + grammarBuilder.append("KW3928 : 'KW' '3928';\n"); + grammarBuilder.append("KW3929 : 'KW' '3929';\n"); + grammarBuilder.append("KW3930 : 'KW' '3930';\n"); + grammarBuilder.append("KW3931 : 'KW' '3931';\n"); + grammarBuilder.append("KW3932 : 'KW' '3932';\n"); + grammarBuilder.append("KW3933 : 'KW' '3933';\n"); + grammarBuilder.append("KW3934 : 'KW' '3934';\n"); + grammarBuilder.append("KW3935 : 'KW' '3935';\n"); + grammarBuilder.append("KW3936 : 'KW' '3936';\n"); + grammarBuilder.append("KW3937 : 'KW' '3937';\n"); + grammarBuilder.append("KW3938 : 'KW' '3938';\n"); + grammarBuilder.append("KW3939 : 'KW' '3939';\n"); + grammarBuilder.append("KW3940 : 'KW' '3940';\n"); + grammarBuilder.append("KW3941 : 'KW' '3941';\n"); + grammarBuilder.append("KW3942 : 'KW' '3942';\n"); + grammarBuilder.append("KW3943 : 'KW' '3943';\n"); + grammarBuilder.append("KW3944 : 'KW' '3944';\n"); + grammarBuilder.append("KW3945 : 'KW' '3945';\n"); + grammarBuilder.append("KW3946 : 'KW' '3946';\n"); + grammarBuilder.append("KW3947 : 'KW' '3947';\n"); + grammarBuilder.append("KW3948 : 'KW' '3948';\n"); + grammarBuilder.append("KW3949 : 'KW' '3949';\n"); + grammarBuilder.append("KW3950 : 'KW' '3950';\n"); + grammarBuilder.append("KW3951 : 'KW' '3951';\n"); + grammarBuilder.append("KW3952 : 'KW' '3952';\n"); + grammarBuilder.append("KW3953 : 'KW' '3953';\n"); + grammarBuilder.append("KW3954 : 'KW' '3954';\n"); + grammarBuilder.append("KW3955 : 'KW' '3955';\n"); + grammarBuilder.append("KW3956 : 'KW' '3956';\n"); + grammarBuilder.append("KW3957 : 'KW' '3957';\n"); + grammarBuilder.append("KW3958 : 'KW' '3958';\n"); + grammarBuilder.append("KW3959 : 'KW' '3959';\n"); + grammarBuilder.append("KW3960 : 'KW' '3960';\n"); + grammarBuilder.append("KW3961 : 'KW' '3961';\n"); + grammarBuilder.append("KW3962 : 'KW' '3962';\n"); + grammarBuilder.append("KW3963 : 'KW' '3963';\n"); + grammarBuilder.append("KW3964 : 'KW' '3964';\n"); + grammarBuilder.append("KW3965 : 'KW' '3965';\n"); + grammarBuilder.append("KW3966 : 'KW' '3966';\n"); + grammarBuilder.append("KW3967 : 'KW' '3967';\n"); + grammarBuilder.append("KW3968 : 'KW' '3968';\n"); + grammarBuilder.append("KW3969 : 'KW' '3969';\n"); + grammarBuilder.append("KW3970 : 'KW' '3970';\n"); + grammarBuilder.append("KW3971 : 'KW' '3971';\n"); + grammarBuilder.append("KW3972 : 'KW' '3972';\n"); + grammarBuilder.append("KW3973 : 'KW' '3973';\n"); + grammarBuilder.append("KW3974 : 'KW' '3974';\n"); + grammarBuilder.append("KW3975 : 'KW' '3975';\n"); + grammarBuilder.append("KW3976 : 'KW' '3976';\n"); + grammarBuilder.append("KW3977 : 'KW' '3977';\n"); + grammarBuilder.append("KW3978 : 'KW' '3978';\n"); + grammarBuilder.append("KW3979 : 'KW' '3979';\n"); + grammarBuilder.append("KW3980 : 'KW' '3980';\n"); + grammarBuilder.append("KW3981 : 'KW' '3981';\n"); + grammarBuilder.append("KW3982 : 'KW' '3982';\n"); + grammarBuilder.append("KW3983 : 'KW' '3983';\n"); + grammarBuilder.append("KW3984 : 'KW' '3984';\n"); + grammarBuilder.append("KW3985 : 'KW' '3985';\n"); + grammarBuilder.append("KW3986 : 'KW' '3986';\n"); + grammarBuilder.append("KW3987 : 'KW' '3987';\n"); + grammarBuilder.append("KW3988 : 'KW' '3988';\n"); + grammarBuilder.append("KW3989 : 'KW' '3989';\n"); + grammarBuilder.append("KW3990 : 'KW' '3990';\n"); + grammarBuilder.append("KW3991 : 'KW' '3991';\n"); + grammarBuilder.append("KW3992 : 'KW' '3992';\n"); + grammarBuilder.append("KW3993 : 'KW' '3993';\n"); + grammarBuilder.append("KW3994 : 'KW' '3994';\n"); + grammarBuilder.append("KW3995 : 'KW' '3995';\n"); + grammarBuilder.append("KW3996 : 'KW' '3996';\n"); + grammarBuilder.append("KW3997 : 'KW' '3997';\n"); + grammarBuilder.append("KW3998 : 'KW' '3998';\n"); + grammarBuilder.append("KW3999 : 'KW' '3999';"); + String grammar = grammarBuilder.toString(); + + String input ="KW400"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='KW400',<402>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(136); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : .*? ('a' | 'ab') {Console.WriteLine(this.Text);} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : . {Console.WriteLine(this.Text);};"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "a\n" + + "b\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:1='b',<3>,1:1]\n" + + "[@2,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"hi\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:3='\"hi\"',<1>,1:0]\n" + + "[@1,4:8='\"mom\"',<1>,1:4]\n" + + "[@2,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParentheses() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("START_BLOCK: '-.-.-';\n"); + grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); + grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); + grammarBuilder.append("fragment L_A: '.-';\n"); + grammarBuilder.append("fragment L_K: '-.-';\n"); + grammarBuilder.append("SEPARATOR: '!';"); + String grammar = grammarBuilder.toString(); + + String input ="-.-.-!"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='-.-.-',<1>,1:0]\n" + + "[@1,5:5='!',<3>,1:5]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPositionAdjustingLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(2208); + grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("public override IToken NextToken() {\n"); + grammarBuilder.append(" if (!(Interpreter is PositionAdjustingLexerATNSimulator)) {\n"); + grammarBuilder.append(" Interpreter = new PositionAdjustingLexerATNSimulator(this, _ATN);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return base.NextToken();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("public override IToken Emit() {\n"); + grammarBuilder.append(" switch (Type) {\n"); + grammarBuilder.append(" case TOKENS:\n"); + grammarBuilder.append(" HandleAcceptPositionForKeyword(\"tokens\");\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" case LABEL:\n"); + grammarBuilder.append(" HandleAcceptPositionForIdentifier();\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" default:\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return base.Emit();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("private bool HandleAcceptPositionForIdentifier() {\n"); + grammarBuilder.append(" string tokenText = this.Text;\n"); + grammarBuilder.append(" int identifierLength = 0;\n"); + grammarBuilder.append(" while (identifierLength < tokenText.Length && IsIdentifierChar(tokenText[identifierLength])) {\n"); + grammarBuilder.append(" identifierLength++;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" if (InputStream.Index > TokenStartCharIndex + identifierLength) {\n"); + grammarBuilder.append(" int offset = identifierLength - 1;\n"); + grammarBuilder.append(" getInterpreter().ResetAcceptPosition((ICharStream)InputStream, TokenStartCharIndex + offset, TokenStartLine, TokenStartColumn + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("private bool HandleAcceptPositionForKeyword(string keyword) {\n"); + grammarBuilder.append(" if (InputStream.Index > TokenStartCharIndex + keyword.Length) {\n"); + grammarBuilder.append(" int offset = keyword.Length - 1;\n"); + grammarBuilder.append(" getInterpreter().ResetAcceptPosition((ICharStream)InputStream, TokenStartCharIndex + offset, TokenStartLine, TokenStartColumn + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("public PositionAdjustingLexerATNSimulator getInterpreter() {\n"); + grammarBuilder.append(" return (PositionAdjustingLexerATNSimulator)base.Interpreter;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("private static bool IsIdentifierChar(char c) {\n"); + grammarBuilder.append(" return Char.IsLetterOrDigit(c) || c == '_';\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("public class PositionAdjustingLexerATNSimulator : LexerATNSimulator {\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" public PositionAdjustingLexerATNSimulator(Lexer recog, ATN atn)\n"); + grammarBuilder.append(" : base(recog, atn)\n"); + grammarBuilder.append(" {\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" public void ResetAcceptPosition(ICharStream input, int index, int line, int column) {\n"); + grammarBuilder.append(" input.Seek(index);\n"); + grammarBuilder.append(" this.Line = line;\n"); + grammarBuilder.append(" this.Column = column;\n"); + grammarBuilder.append(" Consume(input);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ASSIGN : '=' ;\n"); + grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); + grammarBuilder.append("LCURLY: '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// 'tokens' followed by '{'\n"); + grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); + grammarBuilder.append("LABEL\n"); + grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("IDENTIFIER\n"); + grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("IGNORED\n"); + grammarBuilder.append(" : [ \\t\\r\\n]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("NEWLINE\n"); + grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS\n"); + grammarBuilder.append(" : [ \\t]+ -> skip\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + String input = + "tokens\n" + + "tokens {\n" + + "notLabel\n" + + "label1 =\n" + + "label2 +=\n" + + "notLabel\n"; + String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); + assertEquals( + "[@0,0:5='tokens',<6>,1:0]\n" + + "[@1,7:12='tokens',<4>,2:0]\n" + + "[@2,14:14='{',<3>,2:7]\n" + + "[@3,16:23='notLabel',<6>,3:0]\n" + + "[@4,25:30='label1',<5>,4:0]\n" + + "[@5,32:32='=',<1>,4:7]\n" + + "[@6,34:39='label2',<5>,5:0]\n" + + "[@7,41:42='+=',<2>,5:7]\n" + + "[@8,44:51='notLabel',<6>,6:0]\n" + + "[@9,53:52='',<-1>,7:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testQuoteTranslation() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); + String grammar = grammarBuilder.toString(); + + String input ="\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\"',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : '-' I ;\n"); + grammarBuilder.append("I : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 -21 3"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='34',<2>,1:0]\n" + + "[@1,3:5='-21',<1>,1:3]\n" + + "[@2,7:7='3',<2>,1:7]\n" + + "[@3,8:7='',<-1>,1:8]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSlashes() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("Backslash : '\\\\';\n"); + grammarBuilder.append("Slash : '/';\n"); + grammarBuilder.append("Vee : '\\\\/';\n"); + grammarBuilder.append("Wedge : '/\\\\';\n"); + grammarBuilder.append("WS : [ \\t] -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="\\ / \\/ /\\"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\\',<1>,1:0]\n" + + "[@1,2:2='/',<2>,1:2]\n" + + "[@2,4:5='\\/',<3>,1:4]\n" + + "[@3,7:8='/\\',<4>,1:7]\n" + + "[@4,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testZeroLengthToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("BeginString\n"); + grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("mode StringMode;\n"); + grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); + grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); + grammarBuilder.append("mode EndStringMode; \n"); + grammarBuilder.append(" EndString : '\\'' -> popMode;"); + String grammar = grammarBuilder.toString(); + + String input ="'xxx'"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4=''xxx'',<1>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestListeners.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestListeners.java new file mode 100644 index 000000000..172bbddff --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestListeners.java @@ -0,0 +1,378 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestListeners extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(438); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class LeafListener : TBaseListener {\n"); + grammarBuilder.append(" public override void VisitTerminal(ITerminalNode node) {\n"); + grammarBuilder.append(" Console.WriteLine(node.Symbol.Text);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1\n" + + "2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLR() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(592); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class LeafListener : TBaseListener {\n"); + grammarBuilder.append(" public override void ExitE(TParser.EContext ctx) {\n"); + grammarBuilder.append(" if (ctx.ChildCount==3) {\n"); + grammarBuilder.append(" Console.Write(\"{0} {1} {2}\\n\",ctx.e(0).Start.Text,\n"); + grammarBuilder.append(" ctx.e(1).Start.Text, ctx.e()[0].Start.Text);\n"); + grammarBuilder.append(" } else\n"); + grammarBuilder.append(" Console.WriteLine(ctx.INT().Symbol.Text);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e op='*' e\n"); + grammarBuilder.append(" | e op='+' e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) + (e (e 2) * (e 3)))\n" + + "1\n" + + "2\n" + + "3\n" + + "2 3 2\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLRWithLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(616); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class LeafListener : TBaseListener {\n"); + grammarBuilder.append(" public override void ExitCall(TParser.CallContext ctx) {\n"); + grammarBuilder.append(" Console.Write(\"{0} {1}\",ctx.e().Start.Text,ctx.eList());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" public override void ExitInt(TParser.IntContext ctx) {\n"); + grammarBuilder.append(" Console.WriteLine(ctx.INT().Symbol.Text);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e '(' eList ')' # Call\n"); + grammarBuilder.append(" | INT # Int\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("eList : e (',' e)* ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1(2,3)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + + "1\n" + + "2\n" + + "3\n" + + "1 [13 6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(614); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class LeafListener : TBaseListener {\n"); + grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.ChildCount==2) {\n"); + grammarBuilder.append(" Console.Write(\"{0} {1} {2}\",ctx.b(0).Start.Text,\n"); + grammarBuilder.append(" ctx.b(1).Start.Text,ctx.b()[0].Start.Text);\n"); + grammarBuilder.append(" } else\n"); + grammarBuilder.append(" Console.WriteLine(ctx.b(0).Start.Text);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b 1) (b 2))\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(614); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class LeafListener : TBaseListener {\n"); + grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.ChildCount==2) {\n"); + grammarBuilder.append(" Console.Write(\"{0} {1} {2}\",ctx.b(0).Start.Text,\n"); + grammarBuilder.append(" ctx.b(1).Start.Text,ctx.b()[0].Start.Text);\n"); + grammarBuilder.append(" } else\n"); + grammarBuilder.append(" Console.WriteLine(ctx.b(0).Start.Text);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b abc))\n" + + "abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(781); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class LeafListener : TBaseListener {\n"); + grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.ChildCount==2)\n"); + grammarBuilder.append(" {\n"); + grammarBuilder.append(" StringBuilder sb = new StringBuilder (\"[\");\n"); + grammarBuilder.append(" foreach (ITerminalNode node in ctx.INT ()) {\n"); + grammarBuilder.append(" sb.Append (node.ToString ());\n"); + grammarBuilder.append(" sb.Append (\", \");\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" sb.Length = sb.Length - 2;\n"); + grammarBuilder.append(" sb.Append (\"]\");\n"); + grammarBuilder.append(" Console.Write (\"{0} {1} {2}\", ctx.INT (0).Symbol.Text,\n"); + grammarBuilder.append(" ctx.INT (1).Symbol.Text, sb.ToString());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" else\n"); + grammarBuilder.append(" Console.WriteLine(ctx.ID().Symbol);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1 2 [1, 2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(781); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class LeafListener : TBaseListener {\n"); + grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.ChildCount==2)\n"); + grammarBuilder.append(" {\n"); + grammarBuilder.append(" StringBuilder sb = new StringBuilder (\"[\");\n"); + grammarBuilder.append(" foreach (ITerminalNode node in ctx.INT ()) {\n"); + grammarBuilder.append(" sb.Append (node.ToString ());\n"); + grammarBuilder.append(" sb.Append (\", \");\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" sb.Length = sb.Length - 2;\n"); + grammarBuilder.append(" sb.Append (\"]\");\n"); + grammarBuilder.append(" Console.Write (\"{0} {1} {2}\", ctx.INT (0).Symbol.Text,\n"); + grammarBuilder.append(" ctx.INT (1).Symbol.Text, sb.ToString());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" else\n"); + grammarBuilder.append(" Console.WriteLine(ctx.ID().Symbol);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a abc)\n" + + "[@0,0:2='abc',<4>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParseTrees.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParseTrees.java new file mode 100644 index 000000000..8e69a31ba --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParseTrees.java @@ -0,0 +1,307 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestParseTrees extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2AltLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyyxyxz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y y x y x z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2Alts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAltNum() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(547); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public class MyRuleNode : ParserRuleContext {\n"); + grammarBuilder.append(" public int altNum;\n"); + grammarBuilder.append(" public MyRuleNode(ParserRuleContext parent, int invokingStateNumber): base(parent, invokingStateNumber)\n"); + grammarBuilder.append(" {\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" public override int getAltNumber() { return altNum; }\n"); + grammarBuilder.append(" public override void setAltNumber(int altNum) { this.altNum = altNum; }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("a : 'f'\n"); + grammarBuilder.append(" | 'g'\n"); + grammarBuilder.append(" | 'x' b 'z'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'e' {} | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a:3 x (b:2 y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExtraToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(148); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="xzy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a z)\n", found); + + assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleRef() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(144); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b 'x'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'y' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="yx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a (b y) x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSync() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(151); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'* '!'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xzyy!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y y !)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToken2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(133); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenAndRuleContextString() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.BuildParseTree = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' { \n"); + grammarBuilder.append("Console.WriteLine(GetRuleInvocationStackAsString());\n"); + grammarBuilder.append("} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "[a, s]\n" + + "(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserErrors.java new file mode 100644 index 000000000..512dc579c --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserErrors.java @@ -0,0 +1,749 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestParserErrors extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x='b' {Console.WriteLine(\"conjured=\" + $x);} 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpTokenFromSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(75); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x=('b'|'c') {Console.WriteLine(\"conjured=\" + $x);} 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testContextListGetters() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(187); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members{\n"); + grammarBuilder.append("void foo() {\n"); + grammarBuilder.append(" SContext s = null;\n"); + grammarBuilder.append(" AContext[] a = s.a();\n"); + grammarBuilder.append(" BContext[] b = s.b();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : (a | b)+;\n"); + grammarBuilder.append("a : 'a' {Console.Write(\"a\");};\n"); + grammarBuilder.append("b : 'b' {Console.Write(\"b\");};"); + String grammar = grammarBuilder.toString(); + + + String input ="abab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("abab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidATNStateRemoval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input ="x:x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidEmptyInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID+;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + + assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1ErrorInfo() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(305); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); + grammarBuilder.append("animal : (DOG | CAT );\n"); + grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); + grammarBuilder.append("AND : 'and';\n"); + grammarBuilder.append("DOG : 'dog';\n"); + grammarBuilder.append("CAT : 'cat';\n"); + grammarBuilder.append("HARDWARE: 'hardware';\n"); + grammarBuilder.append("SOFTWARE: 'software';\n"); + grammarBuilder.append("WS : ' ' -> skip ;\n"); + grammarBuilder.append("acClass\n"); + grammarBuilder.append("@init\n"); + grammarBuilder.append("{Console.WriteLine(this.GetExpectedTokens().ToString(this.Vocabulary));}\n"); + grammarBuilder.append(" : ;"); + String grammar = grammarBuilder.toString(); + + + String input ="dog and software"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("{'hardware', 'software'}\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'\n"); + grammarBuilder.append(" | 'a' 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(55); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c'\n"); + grammarBuilder.append(" | 'a' 'b' 'd'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abe"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLLStar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aaae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAltAvoidance() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e '!' ;\n"); + grammarBuilder.append("e : 'a' 'b'\n"); + grammarBuilder.append(" | 'a'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a."; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(34); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {Console.WriteLine(\"\" + $myset.stop);} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@0,0:0='a',<3>,1:0]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('b' | 'c')\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'a'\n"); + grammarBuilder.append(";"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(25); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(32); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforePredict() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="caaab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {Console.WriteLine(\"\" + $myset.stop);} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="aabd"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@2,2:2='b',<1>,1:2]\n", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionExpectingSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); + grammarBuilder.append("expr: ID '=' STR ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="( ~FORCE_ERROR~ "; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserExec.java new file mode 100644 index 000000000..c44437ed1 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestParserExec.java @@ -0,0 +1,820 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestParserExec extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID+ {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)+ {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorB() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(148); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID {\n"); + grammarBuilder.append("Console.WriteLine(\"alt 1\");\n"); + grammarBuilder.append("} | INT {\n"); + grammarBuilder.append("Console.WriteLine(\"alt 2\");\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})+ {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(111); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID INT {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFInClosure() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : stat EOF;\n"); + grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(199); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(199); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(200); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(199); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(116); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(116); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("Console.WriteLine($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(183); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : a* EOF;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : label=subrule {Console.WriteLine($label.text);} #One\n"); + grammarBuilder.append(" | label='y' {Console.WriteLine($label.text);} #Two\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("subrule : 'x';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "x\n" + + "y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); + grammarBuilder.append("b : id_=ID val+=INT*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelForClosureContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(479); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("ifStatement\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.Collections.IList __ttt__ = $ctx.elseIfStatement();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : 'if' expression\n"); + grammarBuilder.append(" ( ( 'then'\n"); + grammarBuilder.append(" executableStatement*\n"); + grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); + grammarBuilder.append(" elseStatement?\n"); + grammarBuilder.append(" 'end' 'if'\n"); + grammarBuilder.append(" ) | executableStatement )\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("elseIfStatement\n"); + grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expression : 'a' ;\n"); + grammarBuilder.append("executableStatement : 'a' ;\n"); + grammarBuilder.append("elseStatement : 'a' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelsOnSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b b* ';' ;\n"); + grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleEOFHandling() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(42); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserProperty() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(163); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("bool Property() {\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("a : {$parser.Property()}? ID {Console.WriteLine(\"valid\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("valid\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedIfIfElse() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(180); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : stmt EOF ;\n"); + grammarBuilder.append("stmt : ifStmt | ID;\n"); + grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { this.InputStream.La(1)!=TParser.ELSE }?);\n"); + grammarBuilder.append("ELSE : 'else';\n"); + grammarBuilder.append("ID : [a-zA-Z]+;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x if x a else b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredictionIssue334() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_ @init{\n"); + grammarBuilder.append("ErrorHandler = new BailErrorStrategy();\n"); + grammarBuilder.append("} \n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("Console.WriteLine($ctx.ToStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); + grammarBuilder.append("item : A B?;\n"); + grammarBuilder.append("SEMICOLON: ';';\n"); + grammarBuilder.append("A : 'a'|'A';\n"); + grammarBuilder.append("B : 'b'|'B';\n"); + grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); + + assertEquals("(file_ (item a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {Console.WriteLine($text);} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {Console.WriteLine($text);} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestPerformance.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestPerformance.java new file mode 100644 index 000000000..1f99924f4 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestPerformance.java @@ -0,0 +1,217 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestPerformance extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalLexer.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalLexer.java new file mode 100644 index 000000000..1078baa04 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalLexer.java @@ -0,0 +1,215 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestSemPredEvalLexer extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisableRule() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("E1 : 'enum' { false }? ;\n"); + grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<3>,1:5]\n" + + "[@2,8:7='',<-1>,1:8]\n" + + "s0-' '->:s5=>4\n" + + "s0-'a'->:s6=>3\n" + + "s0-'e'->:s1=>3\n" + + ":s1=>3-'n'->:s2=>3\n" + + ":s2=>3-'u'->:s3=>3\n" + + ":s6=>3-'b'->:s6=>3\n" + + ":s6=>3-'c'->:s6=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnumNotID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(103); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { this.Text.Equals(\"enum\") }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<1>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s3=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDnotEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s2=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDvsEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s5=>3\n" + + "s0-'a'->:s4=>2\n" + + "s0-'e'->:s1=>2\n" + + ":s1=>2-'n'->:s2=>2\n" + + ":s2=>2-'u'->:s3=>2\n" + + ":s4=>2-'b'->:s4=>2\n" + + ":s4=>2-'c'->:s4=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndent() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(147); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("INDENT : [ \\t]+ { this.TokenStartColumn==0 }?\n"); + grammarBuilder.append(" { Console.WriteLine(\"INDENT\"); } ;\n"); + grammarBuilder.append("NL : '\\n';\n"); + grammarBuilder.append("WS : [ \\t]+ ;"); + String grammar = grammarBuilder.toString(); + + String input = + "abc\n" + + " def \n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "INDENT\n" + + "[@0,0:2='abc',<1>,1:0]\n" + + "[@1,3:3='\\n',<3>,1:3]\n" + + "[@2,4:5=' ',<2>,2:0]\n" + + "[@3,6:8='def',<1>,2:2]\n" + + "[@4,9:10=' ',<4>,2:5]\n" + + "[@5,11:11='\\n',<3>,2:7]\n" + + "[@6,12:11='',<-1>,3:0]\n" + + "s0-'\n" + + "'->:s2=>3\n" + + "s0-'a'->:s1=>1\n" + + "s0-'d'->:s1=>1\n" + + ":s1=>1-'b'->:s1=>1\n" + + ":s1=>1-'c'->:s1=>1\n" + + ":s1=>1-'e'->:s1=>1\n" + + ":s1=>1-'f'->:s1=>1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerInputPositionSensitivePredicates() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(232); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WORD1 : ID1+ { Console.WriteLine(this.Text); } ;\n"); + grammarBuilder.append("WORD2 : ID2+ { Console.WriteLine(this.Text); } ;\n"); + grammarBuilder.append("fragment ID1 : { this.Column < 2 }? [a-zA-Z];\n"); + grammarBuilder.append("fragment ID2 : { this.Column >= 2 }? [a-zA-Z];\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input = + "a cde\n" + + "abcde\n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "a\n" + + "cde\n" + + "ab\n" + + "cde\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:4='cde',<2>,1:2]\n" + + "[@2,6:7='ab',<1>,2:0]\n" + + "[@3,8:10='cde',<2>,2:2]\n" + + "[@4,12:11='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedKeywords() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(175); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { this.Text.Equals(\"enum\") }? { Console.WriteLine(\"enum!\"); } ;\n"); + grammarBuilder.append("ID : [a-z]+ { Console.WriteLine(\"ID \" + this.Text); } ;\n"); + grammarBuilder.append("WS : [ \\n] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="enum enu a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "enum!\n" + + "ID enu\n" + + "ID a\n" + + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='enu',<2>,1:5]\n" + + "[@2,9:9='a',<2>,1:9]\n" + + "[@3,10:9='',<-1>,1:10]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalParser.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalParser.java new file mode 100644 index 000000000..61dc7bba5 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSemPredEvalParser.java @@ -0,0 +1,786 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestSemPredEvalParser extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAlts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(311); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;} a ';' a; // do 2x: once in ATN, next in DFA\n"); + grammarBuilder.append("a : ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" | {false}? ID {Console.WriteLine(\"alt 3\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + + assertEquals( + "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + + "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(369); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;} a ';' a ';' a;\n"); + grammarBuilder.append("a : INT {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | ID {Console.WriteLine(\"alt 2\");} // must pick this one for ID since pred is false\n"); + grammarBuilder.append(" | ID {Console.WriteLine(\"alt 3\");}\n"); + grammarBuilder.append(" | {false}? ID {Console.WriteLine(\"alt 4\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34; x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 2\n" + + "alt 2\n", found); + + assertEquals( + "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + + "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionHidesPreds() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(245); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a+ ;\n"); + grammarBuilder.append("a : {this.i = 1;} ID {this.i == 1}? {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {this.i = 2;} ID {this.i == 2}? {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionsHidePredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(312); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append(" Console.WriteLine(\"eval=\"+v.ToString().ToLower());\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {} {this.pred(true)}? {Console.WriteLine(\"parse\");} '!' ;\n"); + grammarBuilder.append("t : e {} {this.pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAtomWithClosureInTranslatedLRRule() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : e[0] EOF;\n"); + grammarBuilder.append("e[int _p]\n"); + grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); + grammarBuilder.append(" ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b+a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDepedentPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(335); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append(" Console.WriteLine(\"eval=\"+v.ToString().ToLower());\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : a[99] ;\n"); + grammarBuilder.append("a[int i] : e {this.pred($i==99)}? {Console.WriteLine(\"parse\");} '!' ;\n"); + grammarBuilder.append("b[int i] : e {this.pred($i==99)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(282); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); + grammarBuilder.append("b[int i] : a[i] ;\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {$i==2}? ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisabledAlternative() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); + grammarBuilder.append("content: anything | {false}? .;\n"); + grammarBuilder.append("anything: ANY_CHAR;\n"); + grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); + String grammar = grammarBuilder.toString(); + + + String input ="hello"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(195); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b ';' | b '.' ;\n"); + grammarBuilder.append("b : a ;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoTruePredsThrowsNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(183); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {false}? ID INT {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {false}? ID INT {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOrder() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(309); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); + grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); + grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); + grammarBuilder.append("a : ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {Console.WriteLine($ctx.ToStringTree(this));}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{this.InputStream.La(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); + + assertEquals( + "line 5:0 mismatched input '' expecting '\n" + + "'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {Console.WriteLine($ctx.ToStringTree(this));}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{this.InputStream.La(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n" + + "\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(221); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {Console.WriteLine(\"ID \"+$ID.text);}\n"); + grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {Console.WriteLine(\"enum\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("ID abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(221); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {Console.WriteLine(\"ID \"+$ID.text);}\n"); + grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {Console.WriteLine(\"enum\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="enum"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(220); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {$i==2}? ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID \n"); + grammarBuilder.append(" | {$i==2}? ID \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(306); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append(" Console.WriteLine(\"eval=\"+v.ToString().ToLower());\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {this.pred(true)}? {Console.WriteLine(\"parse\");} '!' ;\n"); + grammarBuilder.append("t : e {this.pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRewindBeforePredEval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(251); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {this.TokenStream.Lt(1).Text.Equals(\"x\")}? ID INT {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {this.TokenStream.Lt(1).Text.Equals(\"y\")}? ID INT {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(274); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); + grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" | INT {Console.WriteLine(\"alt 3\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y 3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(176); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(179); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a;\n"); + grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="3 4 x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n", found); + + assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeft() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(176); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append(" s : a+ ;\n"); + grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeftWithVaryingPredicate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : ({this.i += 1;\n"); + grammarBuilder.append("Console.Write(\"i=\");\n"); + grammarBuilder.append("Console.WriteLine(this.i);} a)+ ;\n"); + grammarBuilder.append("a : {this.i % 2 == 0}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {this.i % 2 != 0}? ID {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "i=1\n" + + "alt 2\n" + + "i=2\n" + + "alt 1\n" + + "i=3\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testUnpredicatedPathsInAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(195); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | b {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("a : {false}? ID INT\n"); + grammarBuilder.append(" | ID INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testValidateInDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(344); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ';' a;\n"); + grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); + grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); + grammarBuilder.append("// throws an exception if the validating predicate fails\n"); + grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {Console.WriteLine(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x ; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 no viable alternative at input 'x'\n" + + "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSets.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSets.java new file mode 100644 index 000000000..66f2c2846 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestSets.java @@ -0,0 +1,497 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestSets extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetLiteral() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (A {Console.WriteLine($A.text);})+ ;\n"); + grammarBuilder.append("A : [AaBb] ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="A a B b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals( + "A\n" + + "a\n" + + "B\n" + + "b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testComplementSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("parse : ~NEW_LINE;\n"); + grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 token recognition error at: 'a'\n" + + "line 1:1 missing {} at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotChar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); + grammarBuilder.append("A : ~'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(65); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); + grammarBuilder.append("A : ~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(67); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); + grammarBuilder.append("A : h=~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithRuleRef3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); + grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("B : ~('a'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : 'b'? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')? 'c' {Console.WriteLine(this.TokenStream.GetText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A? 'c' {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~('x'|'y') 'z' {Console.WriteLine($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(74); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ~'x' 'z' {Console.WriteLine(this.TokenStream.GetText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("zz\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotTokenWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~'x' 'z' {Console.WriteLine($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=('x'|'y') {Console.WriteLine($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : 'b'+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {Console.WriteLine(this.TokenStream.GetText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleAsSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(87); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {Console.WriteLine(this.TokenStream.GetText());} : 'a' | 'b' |'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSeqDoesNotBecomeSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(124); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : C {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("fragment A : '1' | '2';\n"); + grammarBuilder.append("fragment B : '3' '4';\n"); + grammarBuilder.append("C : A | B;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')* 'c' {Console.WriteLine(this.TokenStream.GetText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestVisitors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestVisitors.java new file mode 100644 index 000000000..2e57c4b39 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/csharp/TestVisitors.java @@ -0,0 +1,53 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.csharp; + +import org.junit.Ignore; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestVisitors extends BaseCSharpTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testBasic() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLR() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLRWithLabels() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_2() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_2() throws Exception { + } + + +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/BaseGoTest.java similarity index 95% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseTest.java rename to runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/BaseGoTest.java index 04ef6bd56..ad76e406a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseTest.java +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/BaseGoTest.java @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.antlr.v4.test.runtime.go; +package org.antlr.v4.test.runtime.legacy.go; import org.antlr.v4.Tool; import org.antlr.v4.automata.ATNFactory; @@ -55,7 +55,7 @@ import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntegerList; import org.antlr.v4.runtime.misc.Interval; import org.antlr.v4.semantics.SemanticPipeline; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; import org.antlr.v4.tool.ANTLRMessage; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.DefaultToolListener; @@ -102,13 +102,13 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public abstract class BaseTest { +public abstract class BaseGoTest { // -J-Dorg.antlr.v4.test.BaseTest.level=FINE // private static final Logger LOGGER = // Logger.getLogger(BaseTest.class.getName()); - public File tmpdir = null; - public File parserpkgdir = null; // this is where the parser package is stored, typically inside the tmpdir + public File overall_tmpdir = null; + public File tmpdir = null; // this is where the parser package is stored, typically inside the tmpdir private static File tmpGopath = null; private static final String GO_RUNTIME_IMPORT_PATH = "github.com/antlr/antlr4/runtime/Go/antlr"; // TODO: Change this before merging with upstream @@ -202,18 +202,18 @@ public abstract class BaseTest { // new output dir for each test String prop = System.getProperty("antlr-go-test-dir"); if (prop != null && prop.length() > 0) - tmpdir = new File(prop); + overall_tmpdir = new File(prop); else - tmpdir = new File(System.getProperty("java.io.tmpdir"), - getClass().getSimpleName() + "-" + System.currentTimeMillis()); + overall_tmpdir = new File(System.getProperty("java.io.tmpdir"), + getClass().getSimpleName() + "-" + System.currentTimeMillis()); - if (tmpdir.exists()) + if ( overall_tmpdir.exists()) + this.eraseDirectory(overall_tmpdir); + + tmpdir = new File(overall_tmpdir, "parser"); + + if ( tmpdir.exists()) { this.eraseDirectory(tmpdir); - - parserpkgdir = new File(tmpdir, "parser"); - - if (parserpkgdir.exists()) { - this.eraseDirectory(parserpkgdir); } } @@ -222,7 +222,7 @@ public abstract class BaseTest { } protected Tool newTool() { - return new Tool(new String[]{"-o", parserpkgdir.getPath()}); + return new Tool(new String[]{"-o", tmpdir.getPath()}); } protected ATN createATN(Grammar g, boolean useSerializer) { @@ -319,18 +319,18 @@ public abstract class BaseTest { protected ErrorQueue antlr(String fileName, String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { if(grammarStr!=null) { - System.out.println("dir " + parserpkgdir); - mkdir(parserpkgdir); - writeFile(parserpkgdir, fileName, grammarStr); + System.out.println("dir " +tmpdir); + mkdir(tmpdir); + writeFile(tmpdir, fileName, grammarStr); } final List options = new ArrayList(); Collections.addAll(options, extraOptions); options.add("-Dlanguage=Go"); options.add("-o"); - options.add(parserpkgdir.getPath()); + options.add(tmpdir.getPath()); options.add("-lib"); - options.add(parserpkgdir.getPath()); - options.add(new File(parserpkgdir, grammarFileName).getPath()); + options.add(tmpdir.getPath()); + options.add(new File(tmpdir, grammarFileName).getPath()); final String[] optionsA = new String[options.size()]; options.toArray(optionsA); @@ -373,7 +373,7 @@ public abstract class BaseTest { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, null, lexerName, "-no-listener"); assertTrue(success); - writeFile(tmpdir, "input", input); + writeFile(overall_tmpdir, "input", input); writeLexerTestFile(lexerName, showDFA); String output = execModule("Test.go"); if (stderrDuringParse != null && stderrDuringParse.length() > 0) { @@ -389,7 +389,7 @@ public abstract class BaseTest { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, "-visitor"); assertTrue(success); - writeFile(tmpdir, "input", input); + writeFile(overall_tmpdir, "input", input); rawBuildRecognizerTestFile(parserName, lexerName, listenerName, visitorName, startRuleName, debug); return execRecognizer(); @@ -450,12 +450,12 @@ public abstract class BaseTest { public String execModule(String fileName) { String goExecutable = locateGo(); - String modulePath = new File(tmpdir, fileName).getAbsolutePath(); - String inputPath = new File(tmpdir, "input").getAbsolutePath(); + String modulePath = new File(overall_tmpdir, fileName).getAbsolutePath(); + String inputPath = new File(overall_tmpdir, "input").getAbsolutePath(); try { ProcessBuilder builder = new ProcessBuilder(goExecutable, "run", modulePath, inputPath); builder.environment().put("GOPATH", tmpGopath.getPath()); - builder.directory(tmpdir); + builder.directory(overall_tmpdir); Process process = builder.start(); StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); @@ -544,7 +544,7 @@ public abstract class BaseTest { ErrorQueue equeue = antlr(fileName, fileName, input, false); String actual = equeue.toString(true); - actual = actual.replace(tmpdir + File.separator, ""); + actual = actual.replace(overall_tmpdir+ File.separator, ""); System.err.println(actual); String msg = input; msg = msg.replace("\n", "\\n"); @@ -885,7 +885,7 @@ public abstract class BaseTest { outputFileST.add("listenerName", listenerName); outputFileST.add("visitorName", visitorName); outputFileST.add("parserStartRuleName", parserStartRuleName.substring(0, 1).toUpperCase() + parserStartRuleName.substring(1) ); - writeFile(tmpdir, "Test.go", outputFileST.render()); + writeFile(overall_tmpdir, "Test.go", outputFileST.render()); } @@ -913,7 +913,7 @@ public abstract class BaseTest { + "}\n" + "\n"); outputFileST.add("lexerName", lexerName); - writeFile(tmpdir, "Test.go", outputFileST.render()); + writeFile(overall_tmpdir, "Test.go", outputFileST.render()); } public void writeRecognizer(String parserName, String lexerName, @@ -928,7 +928,7 @@ public abstract class BaseTest { } protected void eraseFilesEndingWith(final String filesEndingWith) { - File[] files = tmpdir.listFiles(new FileFilter() { + File[] files = overall_tmpdir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(filesEndingWith); @@ -960,8 +960,8 @@ public abstract class BaseTest { if (prop != null && prop.length() > 0) doErase = Boolean.getBoolean(prop); if (doErase) { - if (tmpdir.exists()) { - eraseDirectory(tmpdir); + if ( overall_tmpdir.exists()) { + eraseDirectory(overall_tmpdir); } } } diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeLexers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeLexers.java new file mode 100644 index 000000000..943eb64ad --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeLexers.java @@ -0,0 +1,71 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeLexers extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {fmt.Println(\"S.A\")};\n" + + "C : 'c' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="abc"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "S.A\n" + + "[@0,0:0='a',<3>,1:0]\n" + + "[@1,1:1='b',<1>,1:1]\n" + + "[@2,2:2='c',<4>,1:2]\n" + + "[@3,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {fmt.Println(\"S.A\")} ;\n" + + "B : 'b' {fmt.Println(\"S.B\")} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("A : 'a' B {fmt.Println(\"M.A\")} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "M.A\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeParsers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeParsers.java new file mode 100644 index 000000000..80d558d5a --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestCompositeParsers.java @@ -0,0 +1,504 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.Grammar; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeParsers extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBringInLiteralsFromDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : '=' 'a' {fmt.Print(\"S.a\")};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="=a"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCombinedImportsCombined() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : 'x' INT {fmt.Println(\"S.x\")};\n" + + "INT : '0'..'9'+ ;\n" + + "WS : (' '|'\\n') -> skip ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(31); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : x INT;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + + + String input ="x 34 9"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatesSeeSameTokenType() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { C, B, A } // reverse order\n" + + "y : A {fmt.Println(\"T.y\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : A {fmt.Println(\"S.x\")};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(598); + grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); + grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); + grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); + grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); + grammarBuilder.append("// mapping in each parser:\n"); + grammarBuilder.append("// public static final int C=6;\n"); + grammarBuilder.append("// public static final int EOF=-1;\n"); + grammarBuilder.append("// public static final int B=5;\n"); + grammarBuilder.append("// public static final int WS=7;\n"); + grammarBuilder.append("// public static final int A=4;\n"); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); + grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); + grammarBuilder.append("A : 'a' ; \n"); + grammarBuilder.append("C : 'c' ; \n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + + + String input ="aa"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals( + "S.x\n" + + "T.y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorAccessesDelegateMembers() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "@parser::members {\n" + + "func foo() {\n" + + " fmt.Println(\"foo\")\n" + + "}\n" + + "}\n" + + "a : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M; // uses no rules from the import\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : 'b' {foo()} ; // gS is import pointer\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("foo\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {fmt.Println(\"S.a\")};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a[int x] returns [int y] : B {fmt.Print(\"S.a\")} {$y=1000;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(137); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : label=a[3] {fmt.Println($label.y)} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a1000\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {fmt.Print(\"S.a\")} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(125); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a {fmt.Print($a.text)} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.ab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "a : B {fmt.Println(\"T.a\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {fmt.Println(\"S.a\")};\n" + + "b : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : b {fmt.Print(\"S.a\")};\n" + + "b : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("b : 'b'|'c';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegates() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { A }\n" + + "b : 'b' {fmt.Println(\"T.b\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {fmt.Println(\"S.a\")};\n" + + "b : 'b' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(87); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S, T;\n"); + grammarBuilder.append("b : 'b'|'c' {fmt.Println(\"M.b\")}|B|A;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.b\n" + + "S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "type_ : 'int' ;\n" + + "decl : type_ ID ';'\n" + + " | type_ ID init ';' {fmt.Print(\"JavaDecl: \" + $text)};\n" + + "init : '=' INT;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("prog : decl ;\n"); + grammarBuilder.append("type_ : 'int' | 'float' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="float x = 3;"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); + + assertEquals("JavaDecl: floatx=3;\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportLexerWithOnlyFragmentRules() throws Exception { + mkdir(tmpdir); + + String slave_Unicode = + "lexer grammar Unicode;\n" + + "\n" + + "fragment\n" + + "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + + " | '\\u2000'..'\\u200A'\n" + + " | '\\u202F' | '\\u205F' | '\\u3000'\n" + + " ;\n"; + writeFile(tmpdir, "Unicode.g4", slave_Unicode); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar Test;\n"); + grammarBuilder.append("import Unicode;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program : 'test' 'test';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="test test"; + String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedGrammarWithEmptyOptions() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "options {}\n" + + "a : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedRuleWithAction() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a @after {var x int = 0; var _ int = x; } : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordVSIDOrder() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "ID : 'a'..'z'+;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(125); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("a : A {fmt.Println(\"M.a: \" + fmt.Sprint($A))};\n"); + grammarBuilder.append("A : 'abc' {fmt.Println(\"M.A\")};\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.A\n" + + "M.a: [@0,0:2='abc',<1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestFullContextParsing.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestFullContextParsing.java new file mode 100644 index 000000000..e6ec7aea4 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestFullContextParsing.java @@ -0,0 +1,522 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestFullContextParsing extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigYieldsCtxSensitiveDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(97); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {p.DumpDFA()}\n"); + grammarBuilder.append(" : ID | ID {} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-ID->:s1^=>1\n", found); + + assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbiguityNoLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(217); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append(" : expr expr {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: '@'\n"); + grammarBuilder.append(" | ID '@'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a@"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("alt 1\n", found); + + assertEquals( + "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + + "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + + "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFATwoDiffInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(161); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {p.DumpDFA()}\n"); + grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc @ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 2:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + + "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(158); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(158); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="@ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(293); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append(": expr[0] {fmt.Println($expr.ctx.ToStringTree(nil, p))};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(293); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append(": expr[0] {fmt.Println($expr.ctx.ToStringTree(nil, p))};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b * (expr c)))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + + "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + + "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(242); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append("@after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s1=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(242); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append("@after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(242); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append("@after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(242); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append("@after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo else bar }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + + "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(242); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append("@after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(242); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append("@after {p.DumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLoopsSimulateTailRecursion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(316); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); + grammarBuilder.append(" : expr_or_assign*;\n"); + grammarBuilder.append("expr_or_assign\n"); + grammarBuilder.append(" : expr '++' {fmt.Println(\"fail.\")}\n"); + grammarBuilder.append(" | expr {fmt.Println(\"pass: \"+$expr.text)}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); + grammarBuilder.append("expr_primary\n"); + grammarBuilder.append(" : '(' ID ')'\n"); + grammarBuilder.append(" | ID '(' ID ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a(i)<-x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("pass: a(i)<-x\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + + "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSLLSeesEOFInLLGrammar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(145); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {p.DumpDFA()}\n"); + grammarBuilder.append(" : a;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + + "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLeftRecursion.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLeftRecursion.java new file mode 100644 index 000000000..cfb3405a2 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLeftRecursion.java @@ -0,0 +1,3502 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLeftRecursion extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="1\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a = 5\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="b = 6\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*2\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(*a)[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="**a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[3]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator b) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator ( (declarator a) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[]()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[][]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(393); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a x) y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a (a x) y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 1) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) - (e 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.this"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . this) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e - (e a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a|b&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f(x)==T.c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_11() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f().g(x,1)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_12() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new T[((n-1) * x) + 1]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a|b)&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a > b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) > (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a >> b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) >> (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a^b^c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new A().b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)t.f()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(172); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(172); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(172); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(179); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(179); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(179); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(595); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(595); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(595); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(595); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrecedenceFilterConsidersContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(144); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog \n"); + grammarBuilder.append("@after {fmt.Println($ctx.ToStringTree(nil, p))}\n"); + grammarBuilder.append(": statement* EOF {};\n"); + grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); + grammarBuilder.append("letterA: 'a';"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(218); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (literal - 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(218); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1 + -1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(335); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(335); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a+b)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(335); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b+c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("((a=b)+c)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(453); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(453); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(453); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(453); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(302); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(302); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(302); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(302); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(319); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(319); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(319); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(319); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v, []string ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v, []string ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v, []string ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(249); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); + grammarBuilder.append("e returns [int v, []string ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("9\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPred() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(137); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); + grammarBuilder.append("a : a {true}? ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPredFailOption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(161); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); + grammarBuilder.append("a : a ID {false}?\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y z))\n", found); + + assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(129); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a x))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(129); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(129); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(285); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(260); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1,3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1, 3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerErrors.java new file mode 100644 index 000000000..0fd0b493b --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerErrors.java @@ -0,0 +1,259 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerErrors extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatFailsBackToDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(39); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:3='ab',<1>,1:2]\n" + + "[@2,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;\n"); + grammarBuilder.append("C : 'abcd' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababcx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:4='abc',<2>,1:2]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { } }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='{ { } }',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testErrorInMiddle() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStart() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,1:0='',<-1>,1:1]\n", found); + + assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStartAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,2:1='',<-1>,1:2]\n", found); + + assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInTokenAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + + assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerExecDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar L;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + String input ="x : x"; + String found = execLexer("L.g4", grammar, "LLexer", input, false); + assertEquals( + "[@0,0:0='x',<3>,1:0]\n" + + "[@1,2:2=':',<1>,1:2]\n" + + "[@2,4:4='x',<3>,1:4]\n" + + "[@3,5:4='',<-1>,1:5]\n", found); + + assertEquals( + "line 1:1 token recognition error at: ' '\n" + + "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo\"]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerExec.java new file mode 100644 index 000000000..1398ed481 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestLexerExec.java @@ -0,0 +1,5024 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerExec extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionPlacement() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(268); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ({fmt.Println(\"stuff fail: \" + l.GetText())} 'a'\n"); + grammarBuilder.append("| {fmt.Println(\"stuff0: \" + l.GetText())}\n"); + grammarBuilder.append(" 'a' {fmt.Println(\"stuff1: \" + l.GetText())}\n"); + grammarBuilder.append(" 'b' {fmt.Println(\"stuff2: \" + l.GetText())})\n"); + grammarBuilder.append(" {fmt.Println(l.GetText())} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "stuff0: \n" + + "stuff1: a\n" + + "stuff2: ab\n" + + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {fmt.Println(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetInSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : (~[ab \\n]|'a') {fmt.Println(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="a x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:2='x',<1>,1:2]\n" + + "[@2,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetNot() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {fmt.Println(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="xaf"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:2='xaf',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetPlus() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(79); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {fmt.Println(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {fmt.Println(\"I\")} ;\n"); + grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {fmt.Println(\"ID\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34 a2 abc \n" + + " "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "ID\n" + + "ID\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,7:8='a2',<2>,2:4]\n" + + "[@3,10:12='abc',<2>,2:7]\n" + + "[@4,18:17='',<-1>,3:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithEscapedChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(87); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DASHBRACK : [\\-\\]]+ {fmt.Println(\"DASHBRACK\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="- ] "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "DASHBRACK\n" + + "DASHBRACK\n" + + "[@0,0:0='-',<1>,1:0]\n" + + "[@1,2:2=']',<1>,1:2]\n" + + "[@2,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEndRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(75); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-]+ {fmt.Println(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="00\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='00',<1>,1:0]\n" + + "[@1,3:2='',<-1>,2:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEscapeChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {fmt.Println(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(73); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"a-z]+ {fmt.Println(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:2='b\"a',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(74); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"\\\\ab]+ {fmt.Println(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"\\a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:3='b\"\\a',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithReversedRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(71); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [z-a9]+ {fmt.Println(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="9"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:0='9',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFByItself() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DONE : EOF ;\n"); + grammarBuilder.append("A : 'a';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:-1='',<1>,1:0]\n" + + "[@1,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input ="a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ('a' | 'ab') {fmt.Println(l.GetText())} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testHexVsID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); + grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); + grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="x 0 1 a.b a.l"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='x',<5>,1:0]\n" + + "[@1,1:1=' ',<6>,1:1]\n" + + "[@2,2:2='0',<2>,1:2]\n" + + "[@3,3:3=' ',<6>,1:3]\n" + + "[@4,4:4='1',<2>,1:4]\n" + + "[@5,5:5=' ',<6>,1:5]\n" + + "[@6,6:6='a',<5>,1:6]\n" + + "[@7,7:7='.',<4>,1:7]\n" + + "[@8,8:8='b',<5>,1:8]\n" + + "[@9,9:9=' ',<6>,1:9]\n" + + "[@10,10:10='a',<5>,1:10]\n" + + "[@11,11:11='.',<4>,1:11]\n" + + "[@12,12:12='l',<5>,1:12]\n" + + "[@13,13:12='',<-1>,1:13]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("KEND : 'end' ; // has priority\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="end eend ending a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:2='end',<1>,1:0]\n" + + "[@1,3:3=' ',<3>,1:3]\n" + + "[@2,4:7='eend',<2>,1:4]\n" + + "[@3,8:8=' ',<3>,1:8]\n" + + "[@4,9:14='ending',<2>,1:9]\n" + + "[@5,15:15=' ',<3>,1:15]\n" + + "[@6,16:16='a',<2>,1:16]\n" + + "[@7,17:16='',<-1>,1:17]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLargeLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85821); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); + grammarBuilder.append("KW0 : 'KW' '0';\n"); + grammarBuilder.append("KW1 : 'KW' '1';\n"); + grammarBuilder.append("KW2 : 'KW' '2';\n"); + grammarBuilder.append("KW3 : 'KW' '3';\n"); + grammarBuilder.append("KW4 : 'KW' '4';\n"); + grammarBuilder.append("KW5 : 'KW' '5';\n"); + grammarBuilder.append("KW6 : 'KW' '6';\n"); + grammarBuilder.append("KW7 : 'KW' '7';\n"); + grammarBuilder.append("KW8 : 'KW' '8';\n"); + grammarBuilder.append("KW9 : 'KW' '9';\n"); + grammarBuilder.append("KW10 : 'KW' '10';\n"); + grammarBuilder.append("KW11 : 'KW' '11';\n"); + grammarBuilder.append("KW12 : 'KW' '12';\n"); + grammarBuilder.append("KW13 : 'KW' '13';\n"); + grammarBuilder.append("KW14 : 'KW' '14';\n"); + grammarBuilder.append("KW15 : 'KW' '15';\n"); + grammarBuilder.append("KW16 : 'KW' '16';\n"); + grammarBuilder.append("KW17 : 'KW' '17';\n"); + grammarBuilder.append("KW18 : 'KW' '18';\n"); + grammarBuilder.append("KW19 : 'KW' '19';\n"); + grammarBuilder.append("KW20 : 'KW' '20';\n"); + grammarBuilder.append("KW21 : 'KW' '21';\n"); + grammarBuilder.append("KW22 : 'KW' '22';\n"); + grammarBuilder.append("KW23 : 'KW' '23';\n"); + grammarBuilder.append("KW24 : 'KW' '24';\n"); + grammarBuilder.append("KW25 : 'KW' '25';\n"); + grammarBuilder.append("KW26 : 'KW' '26';\n"); + grammarBuilder.append("KW27 : 'KW' '27';\n"); + grammarBuilder.append("KW28 : 'KW' '28';\n"); + grammarBuilder.append("KW29 : 'KW' '29';\n"); + grammarBuilder.append("KW30 : 'KW' '30';\n"); + grammarBuilder.append("KW31 : 'KW' '31';\n"); + grammarBuilder.append("KW32 : 'KW' '32';\n"); + grammarBuilder.append("KW33 : 'KW' '33';\n"); + grammarBuilder.append("KW34 : 'KW' '34';\n"); + grammarBuilder.append("KW35 : 'KW' '35';\n"); + grammarBuilder.append("KW36 : 'KW' '36';\n"); + grammarBuilder.append("KW37 : 'KW' '37';\n"); + grammarBuilder.append("KW38 : 'KW' '38';\n"); + grammarBuilder.append("KW39 : 'KW' '39';\n"); + grammarBuilder.append("KW40 : 'KW' '40';\n"); + grammarBuilder.append("KW41 : 'KW' '41';\n"); + grammarBuilder.append("KW42 : 'KW' '42';\n"); + grammarBuilder.append("KW43 : 'KW' '43';\n"); + grammarBuilder.append("KW44 : 'KW' '44';\n"); + grammarBuilder.append("KW45 : 'KW' '45';\n"); + grammarBuilder.append("KW46 : 'KW' '46';\n"); + grammarBuilder.append("KW47 : 'KW' '47';\n"); + grammarBuilder.append("KW48 : 'KW' '48';\n"); + grammarBuilder.append("KW49 : 'KW' '49';\n"); + grammarBuilder.append("KW50 : 'KW' '50';\n"); + grammarBuilder.append("KW51 : 'KW' '51';\n"); + grammarBuilder.append("KW52 : 'KW' '52';\n"); + grammarBuilder.append("KW53 : 'KW' '53';\n"); + grammarBuilder.append("KW54 : 'KW' '54';\n"); + grammarBuilder.append("KW55 : 'KW' '55';\n"); + grammarBuilder.append("KW56 : 'KW' '56';\n"); + grammarBuilder.append("KW57 : 'KW' '57';\n"); + grammarBuilder.append("KW58 : 'KW' '58';\n"); + grammarBuilder.append("KW59 : 'KW' '59';\n"); + grammarBuilder.append("KW60 : 'KW' '60';\n"); + grammarBuilder.append("KW61 : 'KW' '61';\n"); + grammarBuilder.append("KW62 : 'KW' '62';\n"); + grammarBuilder.append("KW63 : 'KW' '63';\n"); + grammarBuilder.append("KW64 : 'KW' '64';\n"); + grammarBuilder.append("KW65 : 'KW' '65';\n"); + grammarBuilder.append("KW66 : 'KW' '66';\n"); + grammarBuilder.append("KW67 : 'KW' '67';\n"); + grammarBuilder.append("KW68 : 'KW' '68';\n"); + grammarBuilder.append("KW69 : 'KW' '69';\n"); + grammarBuilder.append("KW70 : 'KW' '70';\n"); + grammarBuilder.append("KW71 : 'KW' '71';\n"); + grammarBuilder.append("KW72 : 'KW' '72';\n"); + grammarBuilder.append("KW73 : 'KW' '73';\n"); + grammarBuilder.append("KW74 : 'KW' '74';\n"); + grammarBuilder.append("KW75 : 'KW' '75';\n"); + grammarBuilder.append("KW76 : 'KW' '76';\n"); + grammarBuilder.append("KW77 : 'KW' '77';\n"); + grammarBuilder.append("KW78 : 'KW' '78';\n"); + grammarBuilder.append("KW79 : 'KW' '79';\n"); + grammarBuilder.append("KW80 : 'KW' '80';\n"); + grammarBuilder.append("KW81 : 'KW' '81';\n"); + grammarBuilder.append("KW82 : 'KW' '82';\n"); + grammarBuilder.append("KW83 : 'KW' '83';\n"); + grammarBuilder.append("KW84 : 'KW' '84';\n"); + grammarBuilder.append("KW85 : 'KW' '85';\n"); + grammarBuilder.append("KW86 : 'KW' '86';\n"); + grammarBuilder.append("KW87 : 'KW' '87';\n"); + grammarBuilder.append("KW88 : 'KW' '88';\n"); + grammarBuilder.append("KW89 : 'KW' '89';\n"); + grammarBuilder.append("KW90 : 'KW' '90';\n"); + grammarBuilder.append("KW91 : 'KW' '91';\n"); + grammarBuilder.append("KW92 : 'KW' '92';\n"); + grammarBuilder.append("KW93 : 'KW' '93';\n"); + grammarBuilder.append("KW94 : 'KW' '94';\n"); + grammarBuilder.append("KW95 : 'KW' '95';\n"); + grammarBuilder.append("KW96 : 'KW' '96';\n"); + grammarBuilder.append("KW97 : 'KW' '97';\n"); + grammarBuilder.append("KW98 : 'KW' '98';\n"); + grammarBuilder.append("KW99 : 'KW' '99';\n"); + grammarBuilder.append("KW100 : 'KW' '100';\n"); + grammarBuilder.append("KW101 : 'KW' '101';\n"); + grammarBuilder.append("KW102 : 'KW' '102';\n"); + grammarBuilder.append("KW103 : 'KW' '103';\n"); + grammarBuilder.append("KW104 : 'KW' '104';\n"); + grammarBuilder.append("KW105 : 'KW' '105';\n"); + grammarBuilder.append("KW106 : 'KW' '106';\n"); + grammarBuilder.append("KW107 : 'KW' '107';\n"); + grammarBuilder.append("KW108 : 'KW' '108';\n"); + grammarBuilder.append("KW109 : 'KW' '109';\n"); + grammarBuilder.append("KW110 : 'KW' '110';\n"); + grammarBuilder.append("KW111 : 'KW' '111';\n"); + grammarBuilder.append("KW112 : 'KW' '112';\n"); + grammarBuilder.append("KW113 : 'KW' '113';\n"); + grammarBuilder.append("KW114 : 'KW' '114';\n"); + grammarBuilder.append("KW115 : 'KW' '115';\n"); + grammarBuilder.append("KW116 : 'KW' '116';\n"); + grammarBuilder.append("KW117 : 'KW' '117';\n"); + grammarBuilder.append("KW118 : 'KW' '118';\n"); + grammarBuilder.append("KW119 : 'KW' '119';\n"); + grammarBuilder.append("KW120 : 'KW' '120';\n"); + grammarBuilder.append("KW121 : 'KW' '121';\n"); + grammarBuilder.append("KW122 : 'KW' '122';\n"); + grammarBuilder.append("KW123 : 'KW' '123';\n"); + grammarBuilder.append("KW124 : 'KW' '124';\n"); + grammarBuilder.append("KW125 : 'KW' '125';\n"); + grammarBuilder.append("KW126 : 'KW' '126';\n"); + grammarBuilder.append("KW127 : 'KW' '127';\n"); + grammarBuilder.append("KW128 : 'KW' '128';\n"); + grammarBuilder.append("KW129 : 'KW' '129';\n"); + grammarBuilder.append("KW130 : 'KW' '130';\n"); + grammarBuilder.append("KW131 : 'KW' '131';\n"); + grammarBuilder.append("KW132 : 'KW' '132';\n"); + grammarBuilder.append("KW133 : 'KW' '133';\n"); + grammarBuilder.append("KW134 : 'KW' '134';\n"); + grammarBuilder.append("KW135 : 'KW' '135';\n"); + grammarBuilder.append("KW136 : 'KW' '136';\n"); + grammarBuilder.append("KW137 : 'KW' '137';\n"); + grammarBuilder.append("KW138 : 'KW' '138';\n"); + grammarBuilder.append("KW139 : 'KW' '139';\n"); + grammarBuilder.append("KW140 : 'KW' '140';\n"); + grammarBuilder.append("KW141 : 'KW' '141';\n"); + grammarBuilder.append("KW142 : 'KW' '142';\n"); + grammarBuilder.append("KW143 : 'KW' '143';\n"); + grammarBuilder.append("KW144 : 'KW' '144';\n"); + grammarBuilder.append("KW145 : 'KW' '145';\n"); + grammarBuilder.append("KW146 : 'KW' '146';\n"); + grammarBuilder.append("KW147 : 'KW' '147';\n"); + grammarBuilder.append("KW148 : 'KW' '148';\n"); + grammarBuilder.append("KW149 : 'KW' '149';\n"); + grammarBuilder.append("KW150 : 'KW' '150';\n"); + grammarBuilder.append("KW151 : 'KW' '151';\n"); + grammarBuilder.append("KW152 : 'KW' '152';\n"); + grammarBuilder.append("KW153 : 'KW' '153';\n"); + grammarBuilder.append("KW154 : 'KW' '154';\n"); + grammarBuilder.append("KW155 : 'KW' '155';\n"); + grammarBuilder.append("KW156 : 'KW' '156';\n"); + grammarBuilder.append("KW157 : 'KW' '157';\n"); + grammarBuilder.append("KW158 : 'KW' '158';\n"); + grammarBuilder.append("KW159 : 'KW' '159';\n"); + grammarBuilder.append("KW160 : 'KW' '160';\n"); + grammarBuilder.append("KW161 : 'KW' '161';\n"); + grammarBuilder.append("KW162 : 'KW' '162';\n"); + grammarBuilder.append("KW163 : 'KW' '163';\n"); + grammarBuilder.append("KW164 : 'KW' '164';\n"); + grammarBuilder.append("KW165 : 'KW' '165';\n"); + grammarBuilder.append("KW166 : 'KW' '166';\n"); + grammarBuilder.append("KW167 : 'KW' '167';\n"); + grammarBuilder.append("KW168 : 'KW' '168';\n"); + grammarBuilder.append("KW169 : 'KW' '169';\n"); + grammarBuilder.append("KW170 : 'KW' '170';\n"); + grammarBuilder.append("KW171 : 'KW' '171';\n"); + grammarBuilder.append("KW172 : 'KW' '172';\n"); + grammarBuilder.append("KW173 : 'KW' '173';\n"); + grammarBuilder.append("KW174 : 'KW' '174';\n"); + grammarBuilder.append("KW175 : 'KW' '175';\n"); + grammarBuilder.append("KW176 : 'KW' '176';\n"); + grammarBuilder.append("KW177 : 'KW' '177';\n"); + grammarBuilder.append("KW178 : 'KW' '178';\n"); + grammarBuilder.append("KW179 : 'KW' '179';\n"); + grammarBuilder.append("KW180 : 'KW' '180';\n"); + grammarBuilder.append("KW181 : 'KW' '181';\n"); + grammarBuilder.append("KW182 : 'KW' '182';\n"); + grammarBuilder.append("KW183 : 'KW' '183';\n"); + grammarBuilder.append("KW184 : 'KW' '184';\n"); + grammarBuilder.append("KW185 : 'KW' '185';\n"); + grammarBuilder.append("KW186 : 'KW' '186';\n"); + grammarBuilder.append("KW187 : 'KW' '187';\n"); + grammarBuilder.append("KW188 : 'KW' '188';\n"); + grammarBuilder.append("KW189 : 'KW' '189';\n"); + grammarBuilder.append("KW190 : 'KW' '190';\n"); + grammarBuilder.append("KW191 : 'KW' '191';\n"); + grammarBuilder.append("KW192 : 'KW' '192';\n"); + grammarBuilder.append("KW193 : 'KW' '193';\n"); + grammarBuilder.append("KW194 : 'KW' '194';\n"); + grammarBuilder.append("KW195 : 'KW' '195';\n"); + grammarBuilder.append("KW196 : 'KW' '196';\n"); + grammarBuilder.append("KW197 : 'KW' '197';\n"); + grammarBuilder.append("KW198 : 'KW' '198';\n"); + grammarBuilder.append("KW199 : 'KW' '199';\n"); + grammarBuilder.append("KW200 : 'KW' '200';\n"); + grammarBuilder.append("KW201 : 'KW' '201';\n"); + grammarBuilder.append("KW202 : 'KW' '202';\n"); + grammarBuilder.append("KW203 : 'KW' '203';\n"); + grammarBuilder.append("KW204 : 'KW' '204';\n"); + grammarBuilder.append("KW205 : 'KW' '205';\n"); + grammarBuilder.append("KW206 : 'KW' '206';\n"); + grammarBuilder.append("KW207 : 'KW' '207';\n"); + grammarBuilder.append("KW208 : 'KW' '208';\n"); + grammarBuilder.append("KW209 : 'KW' '209';\n"); + grammarBuilder.append("KW210 : 'KW' '210';\n"); + grammarBuilder.append("KW211 : 'KW' '211';\n"); + grammarBuilder.append("KW212 : 'KW' '212';\n"); + grammarBuilder.append("KW213 : 'KW' '213';\n"); + grammarBuilder.append("KW214 : 'KW' '214';\n"); + grammarBuilder.append("KW215 : 'KW' '215';\n"); + grammarBuilder.append("KW216 : 'KW' '216';\n"); + grammarBuilder.append("KW217 : 'KW' '217';\n"); + grammarBuilder.append("KW218 : 'KW' '218';\n"); + grammarBuilder.append("KW219 : 'KW' '219';\n"); + grammarBuilder.append("KW220 : 'KW' '220';\n"); + grammarBuilder.append("KW221 : 'KW' '221';\n"); + grammarBuilder.append("KW222 : 'KW' '222';\n"); + grammarBuilder.append("KW223 : 'KW' '223';\n"); + grammarBuilder.append("KW224 : 'KW' '224';\n"); + grammarBuilder.append("KW225 : 'KW' '225';\n"); + grammarBuilder.append("KW226 : 'KW' '226';\n"); + grammarBuilder.append("KW227 : 'KW' '227';\n"); + grammarBuilder.append("KW228 : 'KW' '228';\n"); + grammarBuilder.append("KW229 : 'KW' '229';\n"); + grammarBuilder.append("KW230 : 'KW' '230';\n"); + grammarBuilder.append("KW231 : 'KW' '231';\n"); + grammarBuilder.append("KW232 : 'KW' '232';\n"); + grammarBuilder.append("KW233 : 'KW' '233';\n"); + grammarBuilder.append("KW234 : 'KW' '234';\n"); + grammarBuilder.append("KW235 : 'KW' '235';\n"); + grammarBuilder.append("KW236 : 'KW' '236';\n"); + grammarBuilder.append("KW237 : 'KW' '237';\n"); + grammarBuilder.append("KW238 : 'KW' '238';\n"); + grammarBuilder.append("KW239 : 'KW' '239';\n"); + grammarBuilder.append("KW240 : 'KW' '240';\n"); + grammarBuilder.append("KW241 : 'KW' '241';\n"); + grammarBuilder.append("KW242 : 'KW' '242';\n"); + grammarBuilder.append("KW243 : 'KW' '243';\n"); + grammarBuilder.append("KW244 : 'KW' '244';\n"); + grammarBuilder.append("KW245 : 'KW' '245';\n"); + grammarBuilder.append("KW246 : 'KW' '246';\n"); + grammarBuilder.append("KW247 : 'KW' '247';\n"); + grammarBuilder.append("KW248 : 'KW' '248';\n"); + grammarBuilder.append("KW249 : 'KW' '249';\n"); + grammarBuilder.append("KW250 : 'KW' '250';\n"); + grammarBuilder.append("KW251 : 'KW' '251';\n"); + grammarBuilder.append("KW252 : 'KW' '252';\n"); + grammarBuilder.append("KW253 : 'KW' '253';\n"); + grammarBuilder.append("KW254 : 'KW' '254';\n"); + grammarBuilder.append("KW255 : 'KW' '255';\n"); + grammarBuilder.append("KW256 : 'KW' '256';\n"); + grammarBuilder.append("KW257 : 'KW' '257';\n"); + grammarBuilder.append("KW258 : 'KW' '258';\n"); + grammarBuilder.append("KW259 : 'KW' '259';\n"); + grammarBuilder.append("KW260 : 'KW' '260';\n"); + grammarBuilder.append("KW261 : 'KW' '261';\n"); + grammarBuilder.append("KW262 : 'KW' '262';\n"); + grammarBuilder.append("KW263 : 'KW' '263';\n"); + grammarBuilder.append("KW264 : 'KW' '264';\n"); + grammarBuilder.append("KW265 : 'KW' '265';\n"); + grammarBuilder.append("KW266 : 'KW' '266';\n"); + grammarBuilder.append("KW267 : 'KW' '267';\n"); + grammarBuilder.append("KW268 : 'KW' '268';\n"); + grammarBuilder.append("KW269 : 'KW' '269';\n"); + grammarBuilder.append("KW270 : 'KW' '270';\n"); + grammarBuilder.append("KW271 : 'KW' '271';\n"); + grammarBuilder.append("KW272 : 'KW' '272';\n"); + grammarBuilder.append("KW273 : 'KW' '273';\n"); + grammarBuilder.append("KW274 : 'KW' '274';\n"); + grammarBuilder.append("KW275 : 'KW' '275';\n"); + grammarBuilder.append("KW276 : 'KW' '276';\n"); + grammarBuilder.append("KW277 : 'KW' '277';\n"); + grammarBuilder.append("KW278 : 'KW' '278';\n"); + grammarBuilder.append("KW279 : 'KW' '279';\n"); + grammarBuilder.append("KW280 : 'KW' '280';\n"); + grammarBuilder.append("KW281 : 'KW' '281';\n"); + grammarBuilder.append("KW282 : 'KW' '282';\n"); + grammarBuilder.append("KW283 : 'KW' '283';\n"); + grammarBuilder.append("KW284 : 'KW' '284';\n"); + grammarBuilder.append("KW285 : 'KW' '285';\n"); + grammarBuilder.append("KW286 : 'KW' '286';\n"); + grammarBuilder.append("KW287 : 'KW' '287';\n"); + grammarBuilder.append("KW288 : 'KW' '288';\n"); + grammarBuilder.append("KW289 : 'KW' '289';\n"); + grammarBuilder.append("KW290 : 'KW' '290';\n"); + grammarBuilder.append("KW291 : 'KW' '291';\n"); + grammarBuilder.append("KW292 : 'KW' '292';\n"); + grammarBuilder.append("KW293 : 'KW' '293';\n"); + grammarBuilder.append("KW294 : 'KW' '294';\n"); + grammarBuilder.append("KW295 : 'KW' '295';\n"); + grammarBuilder.append("KW296 : 'KW' '296';\n"); + grammarBuilder.append("KW297 : 'KW' '297';\n"); + grammarBuilder.append("KW298 : 'KW' '298';\n"); + grammarBuilder.append("KW299 : 'KW' '299';\n"); + grammarBuilder.append("KW300 : 'KW' '300';\n"); + grammarBuilder.append("KW301 : 'KW' '301';\n"); + grammarBuilder.append("KW302 : 'KW' '302';\n"); + grammarBuilder.append("KW303 : 'KW' '303';\n"); + grammarBuilder.append("KW304 : 'KW' '304';\n"); + grammarBuilder.append("KW305 : 'KW' '305';\n"); + grammarBuilder.append("KW306 : 'KW' '306';\n"); + grammarBuilder.append("KW307 : 'KW' '307';\n"); + grammarBuilder.append("KW308 : 'KW' '308';\n"); + grammarBuilder.append("KW309 : 'KW' '309';\n"); + grammarBuilder.append("KW310 : 'KW' '310';\n"); + grammarBuilder.append("KW311 : 'KW' '311';\n"); + grammarBuilder.append("KW312 : 'KW' '312';\n"); + grammarBuilder.append("KW313 : 'KW' '313';\n"); + grammarBuilder.append("KW314 : 'KW' '314';\n"); + grammarBuilder.append("KW315 : 'KW' '315';\n"); + grammarBuilder.append("KW316 : 'KW' '316';\n"); + grammarBuilder.append("KW317 : 'KW' '317';\n"); + grammarBuilder.append("KW318 : 'KW' '318';\n"); + grammarBuilder.append("KW319 : 'KW' '319';\n"); + grammarBuilder.append("KW320 : 'KW' '320';\n"); + grammarBuilder.append("KW321 : 'KW' '321';\n"); + grammarBuilder.append("KW322 : 'KW' '322';\n"); + grammarBuilder.append("KW323 : 'KW' '323';\n"); + grammarBuilder.append("KW324 : 'KW' '324';\n"); + grammarBuilder.append("KW325 : 'KW' '325';\n"); + grammarBuilder.append("KW326 : 'KW' '326';\n"); + grammarBuilder.append("KW327 : 'KW' '327';\n"); + grammarBuilder.append("KW328 : 'KW' '328';\n"); + grammarBuilder.append("KW329 : 'KW' '329';\n"); + grammarBuilder.append("KW330 : 'KW' '330';\n"); + grammarBuilder.append("KW331 : 'KW' '331';\n"); + grammarBuilder.append("KW332 : 'KW' '332';\n"); + grammarBuilder.append("KW333 : 'KW' '333';\n"); + grammarBuilder.append("KW334 : 'KW' '334';\n"); + grammarBuilder.append("KW335 : 'KW' '335';\n"); + grammarBuilder.append("KW336 : 'KW' '336';\n"); + grammarBuilder.append("KW337 : 'KW' '337';\n"); + grammarBuilder.append("KW338 : 'KW' '338';\n"); + grammarBuilder.append("KW339 : 'KW' '339';\n"); + grammarBuilder.append("KW340 : 'KW' '340';\n"); + grammarBuilder.append("KW341 : 'KW' '341';\n"); + grammarBuilder.append("KW342 : 'KW' '342';\n"); + grammarBuilder.append("KW343 : 'KW' '343';\n"); + grammarBuilder.append("KW344 : 'KW' '344';\n"); + grammarBuilder.append("KW345 : 'KW' '345';\n"); + grammarBuilder.append("KW346 : 'KW' '346';\n"); + grammarBuilder.append("KW347 : 'KW' '347';\n"); + grammarBuilder.append("KW348 : 'KW' '348';\n"); + grammarBuilder.append("KW349 : 'KW' '349';\n"); + grammarBuilder.append("KW350 : 'KW' '350';\n"); + grammarBuilder.append("KW351 : 'KW' '351';\n"); + grammarBuilder.append("KW352 : 'KW' '352';\n"); + grammarBuilder.append("KW353 : 'KW' '353';\n"); + grammarBuilder.append("KW354 : 'KW' '354';\n"); + grammarBuilder.append("KW355 : 'KW' '355';\n"); + grammarBuilder.append("KW356 : 'KW' '356';\n"); + grammarBuilder.append("KW357 : 'KW' '357';\n"); + grammarBuilder.append("KW358 : 'KW' '358';\n"); + grammarBuilder.append("KW359 : 'KW' '359';\n"); + grammarBuilder.append("KW360 : 'KW' '360';\n"); + grammarBuilder.append("KW361 : 'KW' '361';\n"); + grammarBuilder.append("KW362 : 'KW' '362';\n"); + grammarBuilder.append("KW363 : 'KW' '363';\n"); + grammarBuilder.append("KW364 : 'KW' '364';\n"); + grammarBuilder.append("KW365 : 'KW' '365';\n"); + grammarBuilder.append("KW366 : 'KW' '366';\n"); + grammarBuilder.append("KW367 : 'KW' '367';\n"); + grammarBuilder.append("KW368 : 'KW' '368';\n"); + grammarBuilder.append("KW369 : 'KW' '369';\n"); + grammarBuilder.append("KW370 : 'KW' '370';\n"); + grammarBuilder.append("KW371 : 'KW' '371';\n"); + grammarBuilder.append("KW372 : 'KW' '372';\n"); + grammarBuilder.append("KW373 : 'KW' '373';\n"); + grammarBuilder.append("KW374 : 'KW' '374';\n"); + grammarBuilder.append("KW375 : 'KW' '375';\n"); + grammarBuilder.append("KW376 : 'KW' '376';\n"); + grammarBuilder.append("KW377 : 'KW' '377';\n"); + grammarBuilder.append("KW378 : 'KW' '378';\n"); + grammarBuilder.append("KW379 : 'KW' '379';\n"); + grammarBuilder.append("KW380 : 'KW' '380';\n"); + grammarBuilder.append("KW381 : 'KW' '381';\n"); + grammarBuilder.append("KW382 : 'KW' '382';\n"); + grammarBuilder.append("KW383 : 'KW' '383';\n"); + grammarBuilder.append("KW384 : 'KW' '384';\n"); + grammarBuilder.append("KW385 : 'KW' '385';\n"); + grammarBuilder.append("KW386 : 'KW' '386';\n"); + grammarBuilder.append("KW387 : 'KW' '387';\n"); + grammarBuilder.append("KW388 : 'KW' '388';\n"); + grammarBuilder.append("KW389 : 'KW' '389';\n"); + grammarBuilder.append("KW390 : 'KW' '390';\n"); + grammarBuilder.append("KW391 : 'KW' '391';\n"); + grammarBuilder.append("KW392 : 'KW' '392';\n"); + grammarBuilder.append("KW393 : 'KW' '393';\n"); + grammarBuilder.append("KW394 : 'KW' '394';\n"); + grammarBuilder.append("KW395 : 'KW' '395';\n"); + grammarBuilder.append("KW396 : 'KW' '396';\n"); + grammarBuilder.append("KW397 : 'KW' '397';\n"); + grammarBuilder.append("KW398 : 'KW' '398';\n"); + grammarBuilder.append("KW399 : 'KW' '399';\n"); + grammarBuilder.append("KW400 : 'KW' '400';\n"); + grammarBuilder.append("KW401 : 'KW' '401';\n"); + grammarBuilder.append("KW402 : 'KW' '402';\n"); + grammarBuilder.append("KW403 : 'KW' '403';\n"); + grammarBuilder.append("KW404 : 'KW' '404';\n"); + grammarBuilder.append("KW405 : 'KW' '405';\n"); + grammarBuilder.append("KW406 : 'KW' '406';\n"); + grammarBuilder.append("KW407 : 'KW' '407';\n"); + grammarBuilder.append("KW408 : 'KW' '408';\n"); + grammarBuilder.append("KW409 : 'KW' '409';\n"); + grammarBuilder.append("KW410 : 'KW' '410';\n"); + grammarBuilder.append("KW411 : 'KW' '411';\n"); + grammarBuilder.append("KW412 : 'KW' '412';\n"); + grammarBuilder.append("KW413 : 'KW' '413';\n"); + grammarBuilder.append("KW414 : 'KW' '414';\n"); + grammarBuilder.append("KW415 : 'KW' '415';\n"); + grammarBuilder.append("KW416 : 'KW' '416';\n"); + grammarBuilder.append("KW417 : 'KW' '417';\n"); + grammarBuilder.append("KW418 : 'KW' '418';\n"); + grammarBuilder.append("KW419 : 'KW' '419';\n"); + grammarBuilder.append("KW420 : 'KW' '420';\n"); + grammarBuilder.append("KW421 : 'KW' '421';\n"); + grammarBuilder.append("KW422 : 'KW' '422';\n"); + grammarBuilder.append("KW423 : 'KW' '423';\n"); + grammarBuilder.append("KW424 : 'KW' '424';\n"); + grammarBuilder.append("KW425 : 'KW' '425';\n"); + grammarBuilder.append("KW426 : 'KW' '426';\n"); + grammarBuilder.append("KW427 : 'KW' '427';\n"); + grammarBuilder.append("KW428 : 'KW' '428';\n"); + grammarBuilder.append("KW429 : 'KW' '429';\n"); + grammarBuilder.append("KW430 : 'KW' '430';\n"); + grammarBuilder.append("KW431 : 'KW' '431';\n"); + grammarBuilder.append("KW432 : 'KW' '432';\n"); + grammarBuilder.append("KW433 : 'KW' '433';\n"); + grammarBuilder.append("KW434 : 'KW' '434';\n"); + grammarBuilder.append("KW435 : 'KW' '435';\n"); + grammarBuilder.append("KW436 : 'KW' '436';\n"); + grammarBuilder.append("KW437 : 'KW' '437';\n"); + grammarBuilder.append("KW438 : 'KW' '438';\n"); + grammarBuilder.append("KW439 : 'KW' '439';\n"); + grammarBuilder.append("KW440 : 'KW' '440';\n"); + grammarBuilder.append("KW441 : 'KW' '441';\n"); + grammarBuilder.append("KW442 : 'KW' '442';\n"); + grammarBuilder.append("KW443 : 'KW' '443';\n"); + grammarBuilder.append("KW444 : 'KW' '444';\n"); + grammarBuilder.append("KW445 : 'KW' '445';\n"); + grammarBuilder.append("KW446 : 'KW' '446';\n"); + grammarBuilder.append("KW447 : 'KW' '447';\n"); + grammarBuilder.append("KW448 : 'KW' '448';\n"); + grammarBuilder.append("KW449 : 'KW' '449';\n"); + grammarBuilder.append("KW450 : 'KW' '450';\n"); + grammarBuilder.append("KW451 : 'KW' '451';\n"); + grammarBuilder.append("KW452 : 'KW' '452';\n"); + grammarBuilder.append("KW453 : 'KW' '453';\n"); + grammarBuilder.append("KW454 : 'KW' '454';\n"); + grammarBuilder.append("KW455 : 'KW' '455';\n"); + grammarBuilder.append("KW456 : 'KW' '456';\n"); + grammarBuilder.append("KW457 : 'KW' '457';\n"); + grammarBuilder.append("KW458 : 'KW' '458';\n"); + grammarBuilder.append("KW459 : 'KW' '459';\n"); + grammarBuilder.append("KW460 : 'KW' '460';\n"); + grammarBuilder.append("KW461 : 'KW' '461';\n"); + grammarBuilder.append("KW462 : 'KW' '462';\n"); + grammarBuilder.append("KW463 : 'KW' '463';\n"); + grammarBuilder.append("KW464 : 'KW' '464';\n"); + grammarBuilder.append("KW465 : 'KW' '465';\n"); + grammarBuilder.append("KW466 : 'KW' '466';\n"); + grammarBuilder.append("KW467 : 'KW' '467';\n"); + grammarBuilder.append("KW468 : 'KW' '468';\n"); + grammarBuilder.append("KW469 : 'KW' '469';\n"); + grammarBuilder.append("KW470 : 'KW' '470';\n"); + grammarBuilder.append("KW471 : 'KW' '471';\n"); + grammarBuilder.append("KW472 : 'KW' '472';\n"); + grammarBuilder.append("KW473 : 'KW' '473';\n"); + grammarBuilder.append("KW474 : 'KW' '474';\n"); + grammarBuilder.append("KW475 : 'KW' '475';\n"); + grammarBuilder.append("KW476 : 'KW' '476';\n"); + grammarBuilder.append("KW477 : 'KW' '477';\n"); + grammarBuilder.append("KW478 : 'KW' '478';\n"); + grammarBuilder.append("KW479 : 'KW' '479';\n"); + grammarBuilder.append("KW480 : 'KW' '480';\n"); + grammarBuilder.append("KW481 : 'KW' '481';\n"); + grammarBuilder.append("KW482 : 'KW' '482';\n"); + grammarBuilder.append("KW483 : 'KW' '483';\n"); + grammarBuilder.append("KW484 : 'KW' '484';\n"); + grammarBuilder.append("KW485 : 'KW' '485';\n"); + grammarBuilder.append("KW486 : 'KW' '486';\n"); + grammarBuilder.append("KW487 : 'KW' '487';\n"); + grammarBuilder.append("KW488 : 'KW' '488';\n"); + grammarBuilder.append("KW489 : 'KW' '489';\n"); + grammarBuilder.append("KW490 : 'KW' '490';\n"); + grammarBuilder.append("KW491 : 'KW' '491';\n"); + grammarBuilder.append("KW492 : 'KW' '492';\n"); + grammarBuilder.append("KW493 : 'KW' '493';\n"); + grammarBuilder.append("KW494 : 'KW' '494';\n"); + grammarBuilder.append("KW495 : 'KW' '495';\n"); + grammarBuilder.append("KW496 : 'KW' '496';\n"); + grammarBuilder.append("KW497 : 'KW' '497';\n"); + grammarBuilder.append("KW498 : 'KW' '498';\n"); + grammarBuilder.append("KW499 : 'KW' '499';\n"); + grammarBuilder.append("KW500 : 'KW' '500';\n"); + grammarBuilder.append("KW501 : 'KW' '501';\n"); + grammarBuilder.append("KW502 : 'KW' '502';\n"); + grammarBuilder.append("KW503 : 'KW' '503';\n"); + grammarBuilder.append("KW504 : 'KW' '504';\n"); + grammarBuilder.append("KW505 : 'KW' '505';\n"); + grammarBuilder.append("KW506 : 'KW' '506';\n"); + grammarBuilder.append("KW507 : 'KW' '507';\n"); + grammarBuilder.append("KW508 : 'KW' '508';\n"); + grammarBuilder.append("KW509 : 'KW' '509';\n"); + grammarBuilder.append("KW510 : 'KW' '510';\n"); + grammarBuilder.append("KW511 : 'KW' '511';\n"); + grammarBuilder.append("KW512 : 'KW' '512';\n"); + grammarBuilder.append("KW513 : 'KW' '513';\n"); + grammarBuilder.append("KW514 : 'KW' '514';\n"); + grammarBuilder.append("KW515 : 'KW' '515';\n"); + grammarBuilder.append("KW516 : 'KW' '516';\n"); + grammarBuilder.append("KW517 : 'KW' '517';\n"); + grammarBuilder.append("KW518 : 'KW' '518';\n"); + grammarBuilder.append("KW519 : 'KW' '519';\n"); + grammarBuilder.append("KW520 : 'KW' '520';\n"); + grammarBuilder.append("KW521 : 'KW' '521';\n"); + grammarBuilder.append("KW522 : 'KW' '522';\n"); + grammarBuilder.append("KW523 : 'KW' '523';\n"); + grammarBuilder.append("KW524 : 'KW' '524';\n"); + grammarBuilder.append("KW525 : 'KW' '525';\n"); + grammarBuilder.append("KW526 : 'KW' '526';\n"); + grammarBuilder.append("KW527 : 'KW' '527';\n"); + grammarBuilder.append("KW528 : 'KW' '528';\n"); + grammarBuilder.append("KW529 : 'KW' '529';\n"); + grammarBuilder.append("KW530 : 'KW' '530';\n"); + grammarBuilder.append("KW531 : 'KW' '531';\n"); + grammarBuilder.append("KW532 : 'KW' '532';\n"); + grammarBuilder.append("KW533 : 'KW' '533';\n"); + grammarBuilder.append("KW534 : 'KW' '534';\n"); + grammarBuilder.append("KW535 : 'KW' '535';\n"); + grammarBuilder.append("KW536 : 'KW' '536';\n"); + grammarBuilder.append("KW537 : 'KW' '537';\n"); + grammarBuilder.append("KW538 : 'KW' '538';\n"); + grammarBuilder.append("KW539 : 'KW' '539';\n"); + grammarBuilder.append("KW540 : 'KW' '540';\n"); + grammarBuilder.append("KW541 : 'KW' '541';\n"); + grammarBuilder.append("KW542 : 'KW' '542';\n"); + grammarBuilder.append("KW543 : 'KW' '543';\n"); + grammarBuilder.append("KW544 : 'KW' '544';\n"); + grammarBuilder.append("KW545 : 'KW' '545';\n"); + grammarBuilder.append("KW546 : 'KW' '546';\n"); + grammarBuilder.append("KW547 : 'KW' '547';\n"); + grammarBuilder.append("KW548 : 'KW' '548';\n"); + grammarBuilder.append("KW549 : 'KW' '549';\n"); + grammarBuilder.append("KW550 : 'KW' '550';\n"); + grammarBuilder.append("KW551 : 'KW' '551';\n"); + grammarBuilder.append("KW552 : 'KW' '552';\n"); + grammarBuilder.append("KW553 : 'KW' '553';\n"); + grammarBuilder.append("KW554 : 'KW' '554';\n"); + grammarBuilder.append("KW555 : 'KW' '555';\n"); + grammarBuilder.append("KW556 : 'KW' '556';\n"); + grammarBuilder.append("KW557 : 'KW' '557';\n"); + grammarBuilder.append("KW558 : 'KW' '558';\n"); + grammarBuilder.append("KW559 : 'KW' '559';\n"); + grammarBuilder.append("KW560 : 'KW' '560';\n"); + grammarBuilder.append("KW561 : 'KW' '561';\n"); + grammarBuilder.append("KW562 : 'KW' '562';\n"); + grammarBuilder.append("KW563 : 'KW' '563';\n"); + grammarBuilder.append("KW564 : 'KW' '564';\n"); + grammarBuilder.append("KW565 : 'KW' '565';\n"); + grammarBuilder.append("KW566 : 'KW' '566';\n"); + grammarBuilder.append("KW567 : 'KW' '567';\n"); + grammarBuilder.append("KW568 : 'KW' '568';\n"); + grammarBuilder.append("KW569 : 'KW' '569';\n"); + grammarBuilder.append("KW570 : 'KW' '570';\n"); + grammarBuilder.append("KW571 : 'KW' '571';\n"); + grammarBuilder.append("KW572 : 'KW' '572';\n"); + grammarBuilder.append("KW573 : 'KW' '573';\n"); + grammarBuilder.append("KW574 : 'KW' '574';\n"); + grammarBuilder.append("KW575 : 'KW' '575';\n"); + grammarBuilder.append("KW576 : 'KW' '576';\n"); + grammarBuilder.append("KW577 : 'KW' '577';\n"); + grammarBuilder.append("KW578 : 'KW' '578';\n"); + grammarBuilder.append("KW579 : 'KW' '579';\n"); + grammarBuilder.append("KW580 : 'KW' '580';\n"); + grammarBuilder.append("KW581 : 'KW' '581';\n"); + grammarBuilder.append("KW582 : 'KW' '582';\n"); + grammarBuilder.append("KW583 : 'KW' '583';\n"); + grammarBuilder.append("KW584 : 'KW' '584';\n"); + grammarBuilder.append("KW585 : 'KW' '585';\n"); + grammarBuilder.append("KW586 : 'KW' '586';\n"); + grammarBuilder.append("KW587 : 'KW' '587';\n"); + grammarBuilder.append("KW588 : 'KW' '588';\n"); + grammarBuilder.append("KW589 : 'KW' '589';\n"); + grammarBuilder.append("KW590 : 'KW' '590';\n"); + grammarBuilder.append("KW591 : 'KW' '591';\n"); + grammarBuilder.append("KW592 : 'KW' '592';\n"); + grammarBuilder.append("KW593 : 'KW' '593';\n"); + grammarBuilder.append("KW594 : 'KW' '594';\n"); + grammarBuilder.append("KW595 : 'KW' '595';\n"); + grammarBuilder.append("KW596 : 'KW' '596';\n"); + grammarBuilder.append("KW597 : 'KW' '597';\n"); + grammarBuilder.append("KW598 : 'KW' '598';\n"); + grammarBuilder.append("KW599 : 'KW' '599';\n"); + grammarBuilder.append("KW600 : 'KW' '600';\n"); + grammarBuilder.append("KW601 : 'KW' '601';\n"); + grammarBuilder.append("KW602 : 'KW' '602';\n"); + grammarBuilder.append("KW603 : 'KW' '603';\n"); + grammarBuilder.append("KW604 : 'KW' '604';\n"); + grammarBuilder.append("KW605 : 'KW' '605';\n"); + grammarBuilder.append("KW606 : 'KW' '606';\n"); + grammarBuilder.append("KW607 : 'KW' '607';\n"); + grammarBuilder.append("KW608 : 'KW' '608';\n"); + grammarBuilder.append("KW609 : 'KW' '609';\n"); + grammarBuilder.append("KW610 : 'KW' '610';\n"); + grammarBuilder.append("KW611 : 'KW' '611';\n"); + grammarBuilder.append("KW612 : 'KW' '612';\n"); + grammarBuilder.append("KW613 : 'KW' '613';\n"); + grammarBuilder.append("KW614 : 'KW' '614';\n"); + grammarBuilder.append("KW615 : 'KW' '615';\n"); + grammarBuilder.append("KW616 : 'KW' '616';\n"); + grammarBuilder.append("KW617 : 'KW' '617';\n"); + grammarBuilder.append("KW618 : 'KW' '618';\n"); + grammarBuilder.append("KW619 : 'KW' '619';\n"); + grammarBuilder.append("KW620 : 'KW' '620';\n"); + grammarBuilder.append("KW621 : 'KW' '621';\n"); + grammarBuilder.append("KW622 : 'KW' '622';\n"); + grammarBuilder.append("KW623 : 'KW' '623';\n"); + grammarBuilder.append("KW624 : 'KW' '624';\n"); + grammarBuilder.append("KW625 : 'KW' '625';\n"); + grammarBuilder.append("KW626 : 'KW' '626';\n"); + grammarBuilder.append("KW627 : 'KW' '627';\n"); + grammarBuilder.append("KW628 : 'KW' '628';\n"); + grammarBuilder.append("KW629 : 'KW' '629';\n"); + grammarBuilder.append("KW630 : 'KW' '630';\n"); + grammarBuilder.append("KW631 : 'KW' '631';\n"); + grammarBuilder.append("KW632 : 'KW' '632';\n"); + grammarBuilder.append("KW633 : 'KW' '633';\n"); + grammarBuilder.append("KW634 : 'KW' '634';\n"); + grammarBuilder.append("KW635 : 'KW' '635';\n"); + grammarBuilder.append("KW636 : 'KW' '636';\n"); + grammarBuilder.append("KW637 : 'KW' '637';\n"); + grammarBuilder.append("KW638 : 'KW' '638';\n"); + grammarBuilder.append("KW639 : 'KW' '639';\n"); + grammarBuilder.append("KW640 : 'KW' '640';\n"); + grammarBuilder.append("KW641 : 'KW' '641';\n"); + grammarBuilder.append("KW642 : 'KW' '642';\n"); + grammarBuilder.append("KW643 : 'KW' '643';\n"); + grammarBuilder.append("KW644 : 'KW' '644';\n"); + grammarBuilder.append("KW645 : 'KW' '645';\n"); + grammarBuilder.append("KW646 : 'KW' '646';\n"); + grammarBuilder.append("KW647 : 'KW' '647';\n"); + grammarBuilder.append("KW648 : 'KW' '648';\n"); + grammarBuilder.append("KW649 : 'KW' '649';\n"); + grammarBuilder.append("KW650 : 'KW' '650';\n"); + grammarBuilder.append("KW651 : 'KW' '651';\n"); + grammarBuilder.append("KW652 : 'KW' '652';\n"); + grammarBuilder.append("KW653 : 'KW' '653';\n"); + grammarBuilder.append("KW654 : 'KW' '654';\n"); + grammarBuilder.append("KW655 : 'KW' '655';\n"); + grammarBuilder.append("KW656 : 'KW' '656';\n"); + grammarBuilder.append("KW657 : 'KW' '657';\n"); + grammarBuilder.append("KW658 : 'KW' '658';\n"); + grammarBuilder.append("KW659 : 'KW' '659';\n"); + grammarBuilder.append("KW660 : 'KW' '660';\n"); + grammarBuilder.append("KW661 : 'KW' '661';\n"); + grammarBuilder.append("KW662 : 'KW' '662';\n"); + grammarBuilder.append("KW663 : 'KW' '663';\n"); + grammarBuilder.append("KW664 : 'KW' '664';\n"); + grammarBuilder.append("KW665 : 'KW' '665';\n"); + grammarBuilder.append("KW666 : 'KW' '666';\n"); + grammarBuilder.append("KW667 : 'KW' '667';\n"); + grammarBuilder.append("KW668 : 'KW' '668';\n"); + grammarBuilder.append("KW669 : 'KW' '669';\n"); + grammarBuilder.append("KW670 : 'KW' '670';\n"); + grammarBuilder.append("KW671 : 'KW' '671';\n"); + grammarBuilder.append("KW672 : 'KW' '672';\n"); + grammarBuilder.append("KW673 : 'KW' '673';\n"); + grammarBuilder.append("KW674 : 'KW' '674';\n"); + grammarBuilder.append("KW675 : 'KW' '675';\n"); + grammarBuilder.append("KW676 : 'KW' '676';\n"); + grammarBuilder.append("KW677 : 'KW' '677';\n"); + grammarBuilder.append("KW678 : 'KW' '678';\n"); + grammarBuilder.append("KW679 : 'KW' '679';\n"); + grammarBuilder.append("KW680 : 'KW' '680';\n"); + grammarBuilder.append("KW681 : 'KW' '681';\n"); + grammarBuilder.append("KW682 : 'KW' '682';\n"); + grammarBuilder.append("KW683 : 'KW' '683';\n"); + grammarBuilder.append("KW684 : 'KW' '684';\n"); + grammarBuilder.append("KW685 : 'KW' '685';\n"); + grammarBuilder.append("KW686 : 'KW' '686';\n"); + grammarBuilder.append("KW687 : 'KW' '687';\n"); + grammarBuilder.append("KW688 : 'KW' '688';\n"); + grammarBuilder.append("KW689 : 'KW' '689';\n"); + grammarBuilder.append("KW690 : 'KW' '690';\n"); + grammarBuilder.append("KW691 : 'KW' '691';\n"); + grammarBuilder.append("KW692 : 'KW' '692';\n"); + grammarBuilder.append("KW693 : 'KW' '693';\n"); + grammarBuilder.append("KW694 : 'KW' '694';\n"); + grammarBuilder.append("KW695 : 'KW' '695';\n"); + grammarBuilder.append("KW696 : 'KW' '696';\n"); + grammarBuilder.append("KW697 : 'KW' '697';\n"); + grammarBuilder.append("KW698 : 'KW' '698';\n"); + grammarBuilder.append("KW699 : 'KW' '699';\n"); + grammarBuilder.append("KW700 : 'KW' '700';\n"); + grammarBuilder.append("KW701 : 'KW' '701';\n"); + grammarBuilder.append("KW702 : 'KW' '702';\n"); + grammarBuilder.append("KW703 : 'KW' '703';\n"); + grammarBuilder.append("KW704 : 'KW' '704';\n"); + grammarBuilder.append("KW705 : 'KW' '705';\n"); + grammarBuilder.append("KW706 : 'KW' '706';\n"); + grammarBuilder.append("KW707 : 'KW' '707';\n"); + grammarBuilder.append("KW708 : 'KW' '708';\n"); + grammarBuilder.append("KW709 : 'KW' '709';\n"); + grammarBuilder.append("KW710 : 'KW' '710';\n"); + grammarBuilder.append("KW711 : 'KW' '711';\n"); + grammarBuilder.append("KW712 : 'KW' '712';\n"); + grammarBuilder.append("KW713 : 'KW' '713';\n"); + grammarBuilder.append("KW714 : 'KW' '714';\n"); + grammarBuilder.append("KW715 : 'KW' '715';\n"); + grammarBuilder.append("KW716 : 'KW' '716';\n"); + grammarBuilder.append("KW717 : 'KW' '717';\n"); + grammarBuilder.append("KW718 : 'KW' '718';\n"); + grammarBuilder.append("KW719 : 'KW' '719';\n"); + grammarBuilder.append("KW720 : 'KW' '720';\n"); + grammarBuilder.append("KW721 : 'KW' '721';\n"); + grammarBuilder.append("KW722 : 'KW' '722';\n"); + grammarBuilder.append("KW723 : 'KW' '723';\n"); + grammarBuilder.append("KW724 : 'KW' '724';\n"); + grammarBuilder.append("KW725 : 'KW' '725';\n"); + grammarBuilder.append("KW726 : 'KW' '726';\n"); + grammarBuilder.append("KW727 : 'KW' '727';\n"); + grammarBuilder.append("KW728 : 'KW' '728';\n"); + grammarBuilder.append("KW729 : 'KW' '729';\n"); + grammarBuilder.append("KW730 : 'KW' '730';\n"); + grammarBuilder.append("KW731 : 'KW' '731';\n"); + grammarBuilder.append("KW732 : 'KW' '732';\n"); + grammarBuilder.append("KW733 : 'KW' '733';\n"); + grammarBuilder.append("KW734 : 'KW' '734';\n"); + grammarBuilder.append("KW735 : 'KW' '735';\n"); + grammarBuilder.append("KW736 : 'KW' '736';\n"); + grammarBuilder.append("KW737 : 'KW' '737';\n"); + grammarBuilder.append("KW738 : 'KW' '738';\n"); + grammarBuilder.append("KW739 : 'KW' '739';\n"); + grammarBuilder.append("KW740 : 'KW' '740';\n"); + grammarBuilder.append("KW741 : 'KW' '741';\n"); + grammarBuilder.append("KW742 : 'KW' '742';\n"); + grammarBuilder.append("KW743 : 'KW' '743';\n"); + grammarBuilder.append("KW744 : 'KW' '744';\n"); + grammarBuilder.append("KW745 : 'KW' '745';\n"); + grammarBuilder.append("KW746 : 'KW' '746';\n"); + grammarBuilder.append("KW747 : 'KW' '747';\n"); + grammarBuilder.append("KW748 : 'KW' '748';\n"); + grammarBuilder.append("KW749 : 'KW' '749';\n"); + grammarBuilder.append("KW750 : 'KW' '750';\n"); + grammarBuilder.append("KW751 : 'KW' '751';\n"); + grammarBuilder.append("KW752 : 'KW' '752';\n"); + grammarBuilder.append("KW753 : 'KW' '753';\n"); + grammarBuilder.append("KW754 : 'KW' '754';\n"); + grammarBuilder.append("KW755 : 'KW' '755';\n"); + grammarBuilder.append("KW756 : 'KW' '756';\n"); + grammarBuilder.append("KW757 : 'KW' '757';\n"); + grammarBuilder.append("KW758 : 'KW' '758';\n"); + grammarBuilder.append("KW759 : 'KW' '759';\n"); + grammarBuilder.append("KW760 : 'KW' '760';\n"); + grammarBuilder.append("KW761 : 'KW' '761';\n"); + grammarBuilder.append("KW762 : 'KW' '762';\n"); + grammarBuilder.append("KW763 : 'KW' '763';\n"); + grammarBuilder.append("KW764 : 'KW' '764';\n"); + grammarBuilder.append("KW765 : 'KW' '765';\n"); + grammarBuilder.append("KW766 : 'KW' '766';\n"); + grammarBuilder.append("KW767 : 'KW' '767';\n"); + grammarBuilder.append("KW768 : 'KW' '768';\n"); + grammarBuilder.append("KW769 : 'KW' '769';\n"); + grammarBuilder.append("KW770 : 'KW' '770';\n"); + grammarBuilder.append("KW771 : 'KW' '771';\n"); + grammarBuilder.append("KW772 : 'KW' '772';\n"); + grammarBuilder.append("KW773 : 'KW' '773';\n"); + grammarBuilder.append("KW774 : 'KW' '774';\n"); + grammarBuilder.append("KW775 : 'KW' '775';\n"); + grammarBuilder.append("KW776 : 'KW' '776';\n"); + grammarBuilder.append("KW777 : 'KW' '777';\n"); + grammarBuilder.append("KW778 : 'KW' '778';\n"); + grammarBuilder.append("KW779 : 'KW' '779';\n"); + grammarBuilder.append("KW780 : 'KW' '780';\n"); + grammarBuilder.append("KW781 : 'KW' '781';\n"); + grammarBuilder.append("KW782 : 'KW' '782';\n"); + grammarBuilder.append("KW783 : 'KW' '783';\n"); + grammarBuilder.append("KW784 : 'KW' '784';\n"); + grammarBuilder.append("KW785 : 'KW' '785';\n"); + grammarBuilder.append("KW786 : 'KW' '786';\n"); + grammarBuilder.append("KW787 : 'KW' '787';\n"); + grammarBuilder.append("KW788 : 'KW' '788';\n"); + grammarBuilder.append("KW789 : 'KW' '789';\n"); + grammarBuilder.append("KW790 : 'KW' '790';\n"); + grammarBuilder.append("KW791 : 'KW' '791';\n"); + grammarBuilder.append("KW792 : 'KW' '792';\n"); + grammarBuilder.append("KW793 : 'KW' '793';\n"); + grammarBuilder.append("KW794 : 'KW' '794';\n"); + grammarBuilder.append("KW795 : 'KW' '795';\n"); + grammarBuilder.append("KW796 : 'KW' '796';\n"); + grammarBuilder.append("KW797 : 'KW' '797';\n"); + grammarBuilder.append("KW798 : 'KW' '798';\n"); + grammarBuilder.append("KW799 : 'KW' '799';\n"); + grammarBuilder.append("KW800 : 'KW' '800';\n"); + grammarBuilder.append("KW801 : 'KW' '801';\n"); + grammarBuilder.append("KW802 : 'KW' '802';\n"); + grammarBuilder.append("KW803 : 'KW' '803';\n"); + grammarBuilder.append("KW804 : 'KW' '804';\n"); + grammarBuilder.append("KW805 : 'KW' '805';\n"); + grammarBuilder.append("KW806 : 'KW' '806';\n"); + grammarBuilder.append("KW807 : 'KW' '807';\n"); + grammarBuilder.append("KW808 : 'KW' '808';\n"); + grammarBuilder.append("KW809 : 'KW' '809';\n"); + grammarBuilder.append("KW810 : 'KW' '810';\n"); + grammarBuilder.append("KW811 : 'KW' '811';\n"); + grammarBuilder.append("KW812 : 'KW' '812';\n"); + grammarBuilder.append("KW813 : 'KW' '813';\n"); + grammarBuilder.append("KW814 : 'KW' '814';\n"); + grammarBuilder.append("KW815 : 'KW' '815';\n"); + grammarBuilder.append("KW816 : 'KW' '816';\n"); + grammarBuilder.append("KW817 : 'KW' '817';\n"); + grammarBuilder.append("KW818 : 'KW' '818';\n"); + grammarBuilder.append("KW819 : 'KW' '819';\n"); + grammarBuilder.append("KW820 : 'KW' '820';\n"); + grammarBuilder.append("KW821 : 'KW' '821';\n"); + grammarBuilder.append("KW822 : 'KW' '822';\n"); + grammarBuilder.append("KW823 : 'KW' '823';\n"); + grammarBuilder.append("KW824 : 'KW' '824';\n"); + grammarBuilder.append("KW825 : 'KW' '825';\n"); + grammarBuilder.append("KW826 : 'KW' '826';\n"); + grammarBuilder.append("KW827 : 'KW' '827';\n"); + grammarBuilder.append("KW828 : 'KW' '828';\n"); + grammarBuilder.append("KW829 : 'KW' '829';\n"); + grammarBuilder.append("KW830 : 'KW' '830';\n"); + grammarBuilder.append("KW831 : 'KW' '831';\n"); + grammarBuilder.append("KW832 : 'KW' '832';\n"); + grammarBuilder.append("KW833 : 'KW' '833';\n"); + grammarBuilder.append("KW834 : 'KW' '834';\n"); + grammarBuilder.append("KW835 : 'KW' '835';\n"); + grammarBuilder.append("KW836 : 'KW' '836';\n"); + grammarBuilder.append("KW837 : 'KW' '837';\n"); + grammarBuilder.append("KW838 : 'KW' '838';\n"); + grammarBuilder.append("KW839 : 'KW' '839';\n"); + grammarBuilder.append("KW840 : 'KW' '840';\n"); + grammarBuilder.append("KW841 : 'KW' '841';\n"); + grammarBuilder.append("KW842 : 'KW' '842';\n"); + grammarBuilder.append("KW843 : 'KW' '843';\n"); + grammarBuilder.append("KW844 : 'KW' '844';\n"); + grammarBuilder.append("KW845 : 'KW' '845';\n"); + grammarBuilder.append("KW846 : 'KW' '846';\n"); + grammarBuilder.append("KW847 : 'KW' '847';\n"); + grammarBuilder.append("KW848 : 'KW' '848';\n"); + grammarBuilder.append("KW849 : 'KW' '849';\n"); + grammarBuilder.append("KW850 : 'KW' '850';\n"); + grammarBuilder.append("KW851 : 'KW' '851';\n"); + grammarBuilder.append("KW852 : 'KW' '852';\n"); + grammarBuilder.append("KW853 : 'KW' '853';\n"); + grammarBuilder.append("KW854 : 'KW' '854';\n"); + grammarBuilder.append("KW855 : 'KW' '855';\n"); + grammarBuilder.append("KW856 : 'KW' '856';\n"); + grammarBuilder.append("KW857 : 'KW' '857';\n"); + grammarBuilder.append("KW858 : 'KW' '858';\n"); + grammarBuilder.append("KW859 : 'KW' '859';\n"); + grammarBuilder.append("KW860 : 'KW' '860';\n"); + grammarBuilder.append("KW861 : 'KW' '861';\n"); + grammarBuilder.append("KW862 : 'KW' '862';\n"); + grammarBuilder.append("KW863 : 'KW' '863';\n"); + grammarBuilder.append("KW864 : 'KW' '864';\n"); + grammarBuilder.append("KW865 : 'KW' '865';\n"); + grammarBuilder.append("KW866 : 'KW' '866';\n"); + grammarBuilder.append("KW867 : 'KW' '867';\n"); + grammarBuilder.append("KW868 : 'KW' '868';\n"); + grammarBuilder.append("KW869 : 'KW' '869';\n"); + grammarBuilder.append("KW870 : 'KW' '870';\n"); + grammarBuilder.append("KW871 : 'KW' '871';\n"); + grammarBuilder.append("KW872 : 'KW' '872';\n"); + grammarBuilder.append("KW873 : 'KW' '873';\n"); + grammarBuilder.append("KW874 : 'KW' '874';\n"); + grammarBuilder.append("KW875 : 'KW' '875';\n"); + grammarBuilder.append("KW876 : 'KW' '876';\n"); + grammarBuilder.append("KW877 : 'KW' '877';\n"); + grammarBuilder.append("KW878 : 'KW' '878';\n"); + grammarBuilder.append("KW879 : 'KW' '879';\n"); + grammarBuilder.append("KW880 : 'KW' '880';\n"); + grammarBuilder.append("KW881 : 'KW' '881';\n"); + grammarBuilder.append("KW882 : 'KW' '882';\n"); + grammarBuilder.append("KW883 : 'KW' '883';\n"); + grammarBuilder.append("KW884 : 'KW' '884';\n"); + grammarBuilder.append("KW885 : 'KW' '885';\n"); + grammarBuilder.append("KW886 : 'KW' '886';\n"); + grammarBuilder.append("KW887 : 'KW' '887';\n"); + grammarBuilder.append("KW888 : 'KW' '888';\n"); + grammarBuilder.append("KW889 : 'KW' '889';\n"); + grammarBuilder.append("KW890 : 'KW' '890';\n"); + grammarBuilder.append("KW891 : 'KW' '891';\n"); + grammarBuilder.append("KW892 : 'KW' '892';\n"); + grammarBuilder.append("KW893 : 'KW' '893';\n"); + grammarBuilder.append("KW894 : 'KW' '894';\n"); + grammarBuilder.append("KW895 : 'KW' '895';\n"); + grammarBuilder.append("KW896 : 'KW' '896';\n"); + grammarBuilder.append("KW897 : 'KW' '897';\n"); + grammarBuilder.append("KW898 : 'KW' '898';\n"); + grammarBuilder.append("KW899 : 'KW' '899';\n"); + grammarBuilder.append("KW900 : 'KW' '900';\n"); + grammarBuilder.append("KW901 : 'KW' '901';\n"); + grammarBuilder.append("KW902 : 'KW' '902';\n"); + grammarBuilder.append("KW903 : 'KW' '903';\n"); + grammarBuilder.append("KW904 : 'KW' '904';\n"); + grammarBuilder.append("KW905 : 'KW' '905';\n"); + grammarBuilder.append("KW906 : 'KW' '906';\n"); + grammarBuilder.append("KW907 : 'KW' '907';\n"); + grammarBuilder.append("KW908 : 'KW' '908';\n"); + grammarBuilder.append("KW909 : 'KW' '909';\n"); + grammarBuilder.append("KW910 : 'KW' '910';\n"); + grammarBuilder.append("KW911 : 'KW' '911';\n"); + grammarBuilder.append("KW912 : 'KW' '912';\n"); + grammarBuilder.append("KW913 : 'KW' '913';\n"); + grammarBuilder.append("KW914 : 'KW' '914';\n"); + grammarBuilder.append("KW915 : 'KW' '915';\n"); + grammarBuilder.append("KW916 : 'KW' '916';\n"); + grammarBuilder.append("KW917 : 'KW' '917';\n"); + grammarBuilder.append("KW918 : 'KW' '918';\n"); + grammarBuilder.append("KW919 : 'KW' '919';\n"); + grammarBuilder.append("KW920 : 'KW' '920';\n"); + grammarBuilder.append("KW921 : 'KW' '921';\n"); + grammarBuilder.append("KW922 : 'KW' '922';\n"); + grammarBuilder.append("KW923 : 'KW' '923';\n"); + grammarBuilder.append("KW924 : 'KW' '924';\n"); + grammarBuilder.append("KW925 : 'KW' '925';\n"); + grammarBuilder.append("KW926 : 'KW' '926';\n"); + grammarBuilder.append("KW927 : 'KW' '927';\n"); + grammarBuilder.append("KW928 : 'KW' '928';\n"); + grammarBuilder.append("KW929 : 'KW' '929';\n"); + grammarBuilder.append("KW930 : 'KW' '930';\n"); + grammarBuilder.append("KW931 : 'KW' '931';\n"); + grammarBuilder.append("KW932 : 'KW' '932';\n"); + grammarBuilder.append("KW933 : 'KW' '933';\n"); + grammarBuilder.append("KW934 : 'KW' '934';\n"); + grammarBuilder.append("KW935 : 'KW' '935';\n"); + grammarBuilder.append("KW936 : 'KW' '936';\n"); + grammarBuilder.append("KW937 : 'KW' '937';\n"); + grammarBuilder.append("KW938 : 'KW' '938';\n"); + grammarBuilder.append("KW939 : 'KW' '939';\n"); + grammarBuilder.append("KW940 : 'KW' '940';\n"); + grammarBuilder.append("KW941 : 'KW' '941';\n"); + grammarBuilder.append("KW942 : 'KW' '942';\n"); + grammarBuilder.append("KW943 : 'KW' '943';\n"); + grammarBuilder.append("KW944 : 'KW' '944';\n"); + grammarBuilder.append("KW945 : 'KW' '945';\n"); + grammarBuilder.append("KW946 : 'KW' '946';\n"); + grammarBuilder.append("KW947 : 'KW' '947';\n"); + grammarBuilder.append("KW948 : 'KW' '948';\n"); + grammarBuilder.append("KW949 : 'KW' '949';\n"); + grammarBuilder.append("KW950 : 'KW' '950';\n"); + grammarBuilder.append("KW951 : 'KW' '951';\n"); + grammarBuilder.append("KW952 : 'KW' '952';\n"); + grammarBuilder.append("KW953 : 'KW' '953';\n"); + grammarBuilder.append("KW954 : 'KW' '954';\n"); + grammarBuilder.append("KW955 : 'KW' '955';\n"); + grammarBuilder.append("KW956 : 'KW' '956';\n"); + grammarBuilder.append("KW957 : 'KW' '957';\n"); + grammarBuilder.append("KW958 : 'KW' '958';\n"); + grammarBuilder.append("KW959 : 'KW' '959';\n"); + grammarBuilder.append("KW960 : 'KW' '960';\n"); + grammarBuilder.append("KW961 : 'KW' '961';\n"); + grammarBuilder.append("KW962 : 'KW' '962';\n"); + grammarBuilder.append("KW963 : 'KW' '963';\n"); + grammarBuilder.append("KW964 : 'KW' '964';\n"); + grammarBuilder.append("KW965 : 'KW' '965';\n"); + grammarBuilder.append("KW966 : 'KW' '966';\n"); + grammarBuilder.append("KW967 : 'KW' '967';\n"); + grammarBuilder.append("KW968 : 'KW' '968';\n"); + grammarBuilder.append("KW969 : 'KW' '969';\n"); + grammarBuilder.append("KW970 : 'KW' '970';\n"); + grammarBuilder.append("KW971 : 'KW' '971';\n"); + grammarBuilder.append("KW972 : 'KW' '972';\n"); + grammarBuilder.append("KW973 : 'KW' '973';\n"); + grammarBuilder.append("KW974 : 'KW' '974';\n"); + grammarBuilder.append("KW975 : 'KW' '975';\n"); + grammarBuilder.append("KW976 : 'KW' '976';\n"); + grammarBuilder.append("KW977 : 'KW' '977';\n"); + grammarBuilder.append("KW978 : 'KW' '978';\n"); + grammarBuilder.append("KW979 : 'KW' '979';\n"); + grammarBuilder.append("KW980 : 'KW' '980';\n"); + grammarBuilder.append("KW981 : 'KW' '981';\n"); + grammarBuilder.append("KW982 : 'KW' '982';\n"); + grammarBuilder.append("KW983 : 'KW' '983';\n"); + grammarBuilder.append("KW984 : 'KW' '984';\n"); + grammarBuilder.append("KW985 : 'KW' '985';\n"); + grammarBuilder.append("KW986 : 'KW' '986';\n"); + grammarBuilder.append("KW987 : 'KW' '987';\n"); + grammarBuilder.append("KW988 : 'KW' '988';\n"); + grammarBuilder.append("KW989 : 'KW' '989';\n"); + grammarBuilder.append("KW990 : 'KW' '990';\n"); + grammarBuilder.append("KW991 : 'KW' '991';\n"); + grammarBuilder.append("KW992 : 'KW' '992';\n"); + grammarBuilder.append("KW993 : 'KW' '993';\n"); + grammarBuilder.append("KW994 : 'KW' '994';\n"); + grammarBuilder.append("KW995 : 'KW' '995';\n"); + grammarBuilder.append("KW996 : 'KW' '996';\n"); + grammarBuilder.append("KW997 : 'KW' '997';\n"); + grammarBuilder.append("KW998 : 'KW' '998';\n"); + grammarBuilder.append("KW999 : 'KW' '999';\n"); + grammarBuilder.append("KW1000 : 'KW' '1000';\n"); + grammarBuilder.append("KW1001 : 'KW' '1001';\n"); + grammarBuilder.append("KW1002 : 'KW' '1002';\n"); + grammarBuilder.append("KW1003 : 'KW' '1003';\n"); + grammarBuilder.append("KW1004 : 'KW' '1004';\n"); + grammarBuilder.append("KW1005 : 'KW' '1005';\n"); + grammarBuilder.append("KW1006 : 'KW' '1006';\n"); + grammarBuilder.append("KW1007 : 'KW' '1007';\n"); + grammarBuilder.append("KW1008 : 'KW' '1008';\n"); + grammarBuilder.append("KW1009 : 'KW' '1009';\n"); + grammarBuilder.append("KW1010 : 'KW' '1010';\n"); + grammarBuilder.append("KW1011 : 'KW' '1011';\n"); + grammarBuilder.append("KW1012 : 'KW' '1012';\n"); + grammarBuilder.append("KW1013 : 'KW' '1013';\n"); + grammarBuilder.append("KW1014 : 'KW' '1014';\n"); + grammarBuilder.append("KW1015 : 'KW' '1015';\n"); + grammarBuilder.append("KW1016 : 'KW' '1016';\n"); + grammarBuilder.append("KW1017 : 'KW' '1017';\n"); + grammarBuilder.append("KW1018 : 'KW' '1018';\n"); + grammarBuilder.append("KW1019 : 'KW' '1019';\n"); + grammarBuilder.append("KW1020 : 'KW' '1020';\n"); + grammarBuilder.append("KW1021 : 'KW' '1021';\n"); + grammarBuilder.append("KW1022 : 'KW' '1022';\n"); + grammarBuilder.append("KW1023 : 'KW' '1023';\n"); + grammarBuilder.append("KW1024 : 'KW' '1024';\n"); + grammarBuilder.append("KW1025 : 'KW' '1025';\n"); + grammarBuilder.append("KW1026 : 'KW' '1026';\n"); + grammarBuilder.append("KW1027 : 'KW' '1027';\n"); + grammarBuilder.append("KW1028 : 'KW' '1028';\n"); + grammarBuilder.append("KW1029 : 'KW' '1029';\n"); + grammarBuilder.append("KW1030 : 'KW' '1030';\n"); + grammarBuilder.append("KW1031 : 'KW' '1031';\n"); + grammarBuilder.append("KW1032 : 'KW' '1032';\n"); + grammarBuilder.append("KW1033 : 'KW' '1033';\n"); + grammarBuilder.append("KW1034 : 'KW' '1034';\n"); + grammarBuilder.append("KW1035 : 'KW' '1035';\n"); + grammarBuilder.append("KW1036 : 'KW' '1036';\n"); + grammarBuilder.append("KW1037 : 'KW' '1037';\n"); + grammarBuilder.append("KW1038 : 'KW' '1038';\n"); + grammarBuilder.append("KW1039 : 'KW' '1039';\n"); + grammarBuilder.append("KW1040 : 'KW' '1040';\n"); + grammarBuilder.append("KW1041 : 'KW' '1041';\n"); + grammarBuilder.append("KW1042 : 'KW' '1042';\n"); + grammarBuilder.append("KW1043 : 'KW' '1043';\n"); + grammarBuilder.append("KW1044 : 'KW' '1044';\n"); + grammarBuilder.append("KW1045 : 'KW' '1045';\n"); + grammarBuilder.append("KW1046 : 'KW' '1046';\n"); + grammarBuilder.append("KW1047 : 'KW' '1047';\n"); + grammarBuilder.append("KW1048 : 'KW' '1048';\n"); + grammarBuilder.append("KW1049 : 'KW' '1049';\n"); + grammarBuilder.append("KW1050 : 'KW' '1050';\n"); + grammarBuilder.append("KW1051 : 'KW' '1051';\n"); + grammarBuilder.append("KW1052 : 'KW' '1052';\n"); + grammarBuilder.append("KW1053 : 'KW' '1053';\n"); + grammarBuilder.append("KW1054 : 'KW' '1054';\n"); + grammarBuilder.append("KW1055 : 'KW' '1055';\n"); + grammarBuilder.append("KW1056 : 'KW' '1056';\n"); + grammarBuilder.append("KW1057 : 'KW' '1057';\n"); + grammarBuilder.append("KW1058 : 'KW' '1058';\n"); + grammarBuilder.append("KW1059 : 'KW' '1059';\n"); + grammarBuilder.append("KW1060 : 'KW' '1060';\n"); + grammarBuilder.append("KW1061 : 'KW' '1061';\n"); + grammarBuilder.append("KW1062 : 'KW' '1062';\n"); + grammarBuilder.append("KW1063 : 'KW' '1063';\n"); + grammarBuilder.append("KW1064 : 'KW' '1064';\n"); + grammarBuilder.append("KW1065 : 'KW' '1065';\n"); + grammarBuilder.append("KW1066 : 'KW' '1066';\n"); + grammarBuilder.append("KW1067 : 'KW' '1067';\n"); + grammarBuilder.append("KW1068 : 'KW' '1068';\n"); + grammarBuilder.append("KW1069 : 'KW' '1069';\n"); + grammarBuilder.append("KW1070 : 'KW' '1070';\n"); + grammarBuilder.append("KW1071 : 'KW' '1071';\n"); + grammarBuilder.append("KW1072 : 'KW' '1072';\n"); + grammarBuilder.append("KW1073 : 'KW' '1073';\n"); + grammarBuilder.append("KW1074 : 'KW' '1074';\n"); + grammarBuilder.append("KW1075 : 'KW' '1075';\n"); + grammarBuilder.append("KW1076 : 'KW' '1076';\n"); + grammarBuilder.append("KW1077 : 'KW' '1077';\n"); + grammarBuilder.append("KW1078 : 'KW' '1078';\n"); + grammarBuilder.append("KW1079 : 'KW' '1079';\n"); + grammarBuilder.append("KW1080 : 'KW' '1080';\n"); + grammarBuilder.append("KW1081 : 'KW' '1081';\n"); + grammarBuilder.append("KW1082 : 'KW' '1082';\n"); + grammarBuilder.append("KW1083 : 'KW' '1083';\n"); + grammarBuilder.append("KW1084 : 'KW' '1084';\n"); + grammarBuilder.append("KW1085 : 'KW' '1085';\n"); + grammarBuilder.append("KW1086 : 'KW' '1086';\n"); + grammarBuilder.append("KW1087 : 'KW' '1087';\n"); + grammarBuilder.append("KW1088 : 'KW' '1088';\n"); + grammarBuilder.append("KW1089 : 'KW' '1089';\n"); + grammarBuilder.append("KW1090 : 'KW' '1090';\n"); + grammarBuilder.append("KW1091 : 'KW' '1091';\n"); + grammarBuilder.append("KW1092 : 'KW' '1092';\n"); + grammarBuilder.append("KW1093 : 'KW' '1093';\n"); + grammarBuilder.append("KW1094 : 'KW' '1094';\n"); + grammarBuilder.append("KW1095 : 'KW' '1095';\n"); + grammarBuilder.append("KW1096 : 'KW' '1096';\n"); + grammarBuilder.append("KW1097 : 'KW' '1097';\n"); + grammarBuilder.append("KW1098 : 'KW' '1098';\n"); + grammarBuilder.append("KW1099 : 'KW' '1099';\n"); + grammarBuilder.append("KW1100 : 'KW' '1100';\n"); + grammarBuilder.append("KW1101 : 'KW' '1101';\n"); + grammarBuilder.append("KW1102 : 'KW' '1102';\n"); + grammarBuilder.append("KW1103 : 'KW' '1103';\n"); + grammarBuilder.append("KW1104 : 'KW' '1104';\n"); + grammarBuilder.append("KW1105 : 'KW' '1105';\n"); + grammarBuilder.append("KW1106 : 'KW' '1106';\n"); + grammarBuilder.append("KW1107 : 'KW' '1107';\n"); + grammarBuilder.append("KW1108 : 'KW' '1108';\n"); + grammarBuilder.append("KW1109 : 'KW' '1109';\n"); + grammarBuilder.append("KW1110 : 'KW' '1110';\n"); + grammarBuilder.append("KW1111 : 'KW' '1111';\n"); + grammarBuilder.append("KW1112 : 'KW' '1112';\n"); + grammarBuilder.append("KW1113 : 'KW' '1113';\n"); + grammarBuilder.append("KW1114 : 'KW' '1114';\n"); + grammarBuilder.append("KW1115 : 'KW' '1115';\n"); + grammarBuilder.append("KW1116 : 'KW' '1116';\n"); + grammarBuilder.append("KW1117 : 'KW' '1117';\n"); + grammarBuilder.append("KW1118 : 'KW' '1118';\n"); + grammarBuilder.append("KW1119 : 'KW' '1119';\n"); + grammarBuilder.append("KW1120 : 'KW' '1120';\n"); + grammarBuilder.append("KW1121 : 'KW' '1121';\n"); + grammarBuilder.append("KW1122 : 'KW' '1122';\n"); + grammarBuilder.append("KW1123 : 'KW' '1123';\n"); + grammarBuilder.append("KW1124 : 'KW' '1124';\n"); + grammarBuilder.append("KW1125 : 'KW' '1125';\n"); + grammarBuilder.append("KW1126 : 'KW' '1126';\n"); + grammarBuilder.append("KW1127 : 'KW' '1127';\n"); + grammarBuilder.append("KW1128 : 'KW' '1128';\n"); + grammarBuilder.append("KW1129 : 'KW' '1129';\n"); + grammarBuilder.append("KW1130 : 'KW' '1130';\n"); + grammarBuilder.append("KW1131 : 'KW' '1131';\n"); + grammarBuilder.append("KW1132 : 'KW' '1132';\n"); + grammarBuilder.append("KW1133 : 'KW' '1133';\n"); + grammarBuilder.append("KW1134 : 'KW' '1134';\n"); + grammarBuilder.append("KW1135 : 'KW' '1135';\n"); + grammarBuilder.append("KW1136 : 'KW' '1136';\n"); + grammarBuilder.append("KW1137 : 'KW' '1137';\n"); + grammarBuilder.append("KW1138 : 'KW' '1138';\n"); + grammarBuilder.append("KW1139 : 'KW' '1139';\n"); + grammarBuilder.append("KW1140 : 'KW' '1140';\n"); + grammarBuilder.append("KW1141 : 'KW' '1141';\n"); + grammarBuilder.append("KW1142 : 'KW' '1142';\n"); + grammarBuilder.append("KW1143 : 'KW' '1143';\n"); + grammarBuilder.append("KW1144 : 'KW' '1144';\n"); + grammarBuilder.append("KW1145 : 'KW' '1145';\n"); + grammarBuilder.append("KW1146 : 'KW' '1146';\n"); + grammarBuilder.append("KW1147 : 'KW' '1147';\n"); + grammarBuilder.append("KW1148 : 'KW' '1148';\n"); + grammarBuilder.append("KW1149 : 'KW' '1149';\n"); + grammarBuilder.append("KW1150 : 'KW' '1150';\n"); + grammarBuilder.append("KW1151 : 'KW' '1151';\n"); + grammarBuilder.append("KW1152 : 'KW' '1152';\n"); + grammarBuilder.append("KW1153 : 'KW' '1153';\n"); + grammarBuilder.append("KW1154 : 'KW' '1154';\n"); + grammarBuilder.append("KW1155 : 'KW' '1155';\n"); + grammarBuilder.append("KW1156 : 'KW' '1156';\n"); + grammarBuilder.append("KW1157 : 'KW' '1157';\n"); + grammarBuilder.append("KW1158 : 'KW' '1158';\n"); + grammarBuilder.append("KW1159 : 'KW' '1159';\n"); + grammarBuilder.append("KW1160 : 'KW' '1160';\n"); + grammarBuilder.append("KW1161 : 'KW' '1161';\n"); + grammarBuilder.append("KW1162 : 'KW' '1162';\n"); + grammarBuilder.append("KW1163 : 'KW' '1163';\n"); + grammarBuilder.append("KW1164 : 'KW' '1164';\n"); + grammarBuilder.append("KW1165 : 'KW' '1165';\n"); + grammarBuilder.append("KW1166 : 'KW' '1166';\n"); + grammarBuilder.append("KW1167 : 'KW' '1167';\n"); + grammarBuilder.append("KW1168 : 'KW' '1168';\n"); + grammarBuilder.append("KW1169 : 'KW' '1169';\n"); + grammarBuilder.append("KW1170 : 'KW' '1170';\n"); + grammarBuilder.append("KW1171 : 'KW' '1171';\n"); + grammarBuilder.append("KW1172 : 'KW' '1172';\n"); + grammarBuilder.append("KW1173 : 'KW' '1173';\n"); + grammarBuilder.append("KW1174 : 'KW' '1174';\n"); + grammarBuilder.append("KW1175 : 'KW' '1175';\n"); + grammarBuilder.append("KW1176 : 'KW' '1176';\n"); + grammarBuilder.append("KW1177 : 'KW' '1177';\n"); + grammarBuilder.append("KW1178 : 'KW' '1178';\n"); + grammarBuilder.append("KW1179 : 'KW' '1179';\n"); + grammarBuilder.append("KW1180 : 'KW' '1180';\n"); + grammarBuilder.append("KW1181 : 'KW' '1181';\n"); + grammarBuilder.append("KW1182 : 'KW' '1182';\n"); + grammarBuilder.append("KW1183 : 'KW' '1183';\n"); + grammarBuilder.append("KW1184 : 'KW' '1184';\n"); + grammarBuilder.append("KW1185 : 'KW' '1185';\n"); + grammarBuilder.append("KW1186 : 'KW' '1186';\n"); + grammarBuilder.append("KW1187 : 'KW' '1187';\n"); + grammarBuilder.append("KW1188 : 'KW' '1188';\n"); + grammarBuilder.append("KW1189 : 'KW' '1189';\n"); + grammarBuilder.append("KW1190 : 'KW' '1190';\n"); + grammarBuilder.append("KW1191 : 'KW' '1191';\n"); + grammarBuilder.append("KW1192 : 'KW' '1192';\n"); + grammarBuilder.append("KW1193 : 'KW' '1193';\n"); + grammarBuilder.append("KW1194 : 'KW' '1194';\n"); + grammarBuilder.append("KW1195 : 'KW' '1195';\n"); + grammarBuilder.append("KW1196 : 'KW' '1196';\n"); + grammarBuilder.append("KW1197 : 'KW' '1197';\n"); + grammarBuilder.append("KW1198 : 'KW' '1198';\n"); + grammarBuilder.append("KW1199 : 'KW' '1199';\n"); + grammarBuilder.append("KW1200 : 'KW' '1200';\n"); + grammarBuilder.append("KW1201 : 'KW' '1201';\n"); + grammarBuilder.append("KW1202 : 'KW' '1202';\n"); + grammarBuilder.append("KW1203 : 'KW' '1203';\n"); + grammarBuilder.append("KW1204 : 'KW' '1204';\n"); + grammarBuilder.append("KW1205 : 'KW' '1205';\n"); + grammarBuilder.append("KW1206 : 'KW' '1206';\n"); + grammarBuilder.append("KW1207 : 'KW' '1207';\n"); + grammarBuilder.append("KW1208 : 'KW' '1208';\n"); + grammarBuilder.append("KW1209 : 'KW' '1209';\n"); + grammarBuilder.append("KW1210 : 'KW' '1210';\n"); + grammarBuilder.append("KW1211 : 'KW' '1211';\n"); + grammarBuilder.append("KW1212 : 'KW' '1212';\n"); + grammarBuilder.append("KW1213 : 'KW' '1213';\n"); + grammarBuilder.append("KW1214 : 'KW' '1214';\n"); + grammarBuilder.append("KW1215 : 'KW' '1215';\n"); + grammarBuilder.append("KW1216 : 'KW' '1216';\n"); + grammarBuilder.append("KW1217 : 'KW' '1217';\n"); + grammarBuilder.append("KW1218 : 'KW' '1218';\n"); + grammarBuilder.append("KW1219 : 'KW' '1219';\n"); + grammarBuilder.append("KW1220 : 'KW' '1220';\n"); + grammarBuilder.append("KW1221 : 'KW' '1221';\n"); + grammarBuilder.append("KW1222 : 'KW' '1222';\n"); + grammarBuilder.append("KW1223 : 'KW' '1223';\n"); + grammarBuilder.append("KW1224 : 'KW' '1224';\n"); + grammarBuilder.append("KW1225 : 'KW' '1225';\n"); + grammarBuilder.append("KW1226 : 'KW' '1226';\n"); + grammarBuilder.append("KW1227 : 'KW' '1227';\n"); + grammarBuilder.append("KW1228 : 'KW' '1228';\n"); + grammarBuilder.append("KW1229 : 'KW' '1229';\n"); + grammarBuilder.append("KW1230 : 'KW' '1230';\n"); + grammarBuilder.append("KW1231 : 'KW' '1231';\n"); + grammarBuilder.append("KW1232 : 'KW' '1232';\n"); + grammarBuilder.append("KW1233 : 'KW' '1233';\n"); + grammarBuilder.append("KW1234 : 'KW' '1234';\n"); + grammarBuilder.append("KW1235 : 'KW' '1235';\n"); + grammarBuilder.append("KW1236 : 'KW' '1236';\n"); + grammarBuilder.append("KW1237 : 'KW' '1237';\n"); + grammarBuilder.append("KW1238 : 'KW' '1238';\n"); + grammarBuilder.append("KW1239 : 'KW' '1239';\n"); + grammarBuilder.append("KW1240 : 'KW' '1240';\n"); + grammarBuilder.append("KW1241 : 'KW' '1241';\n"); + grammarBuilder.append("KW1242 : 'KW' '1242';\n"); + grammarBuilder.append("KW1243 : 'KW' '1243';\n"); + grammarBuilder.append("KW1244 : 'KW' '1244';\n"); + grammarBuilder.append("KW1245 : 'KW' '1245';\n"); + grammarBuilder.append("KW1246 : 'KW' '1246';\n"); + grammarBuilder.append("KW1247 : 'KW' '1247';\n"); + grammarBuilder.append("KW1248 : 'KW' '1248';\n"); + grammarBuilder.append("KW1249 : 'KW' '1249';\n"); + grammarBuilder.append("KW1250 : 'KW' '1250';\n"); + grammarBuilder.append("KW1251 : 'KW' '1251';\n"); + grammarBuilder.append("KW1252 : 'KW' '1252';\n"); + grammarBuilder.append("KW1253 : 'KW' '1253';\n"); + grammarBuilder.append("KW1254 : 'KW' '1254';\n"); + grammarBuilder.append("KW1255 : 'KW' '1255';\n"); + grammarBuilder.append("KW1256 : 'KW' '1256';\n"); + grammarBuilder.append("KW1257 : 'KW' '1257';\n"); + grammarBuilder.append("KW1258 : 'KW' '1258';\n"); + grammarBuilder.append("KW1259 : 'KW' '1259';\n"); + grammarBuilder.append("KW1260 : 'KW' '1260';\n"); + grammarBuilder.append("KW1261 : 'KW' '1261';\n"); + grammarBuilder.append("KW1262 : 'KW' '1262';\n"); + grammarBuilder.append("KW1263 : 'KW' '1263';\n"); + grammarBuilder.append("KW1264 : 'KW' '1264';\n"); + grammarBuilder.append("KW1265 : 'KW' '1265';\n"); + grammarBuilder.append("KW1266 : 'KW' '1266';\n"); + grammarBuilder.append("KW1267 : 'KW' '1267';\n"); + grammarBuilder.append("KW1268 : 'KW' '1268';\n"); + grammarBuilder.append("KW1269 : 'KW' '1269';\n"); + grammarBuilder.append("KW1270 : 'KW' '1270';\n"); + grammarBuilder.append("KW1271 : 'KW' '1271';\n"); + grammarBuilder.append("KW1272 : 'KW' '1272';\n"); + grammarBuilder.append("KW1273 : 'KW' '1273';\n"); + grammarBuilder.append("KW1274 : 'KW' '1274';\n"); + grammarBuilder.append("KW1275 : 'KW' '1275';\n"); + grammarBuilder.append("KW1276 : 'KW' '1276';\n"); + grammarBuilder.append("KW1277 : 'KW' '1277';\n"); + grammarBuilder.append("KW1278 : 'KW' '1278';\n"); + grammarBuilder.append("KW1279 : 'KW' '1279';\n"); + grammarBuilder.append("KW1280 : 'KW' '1280';\n"); + grammarBuilder.append("KW1281 : 'KW' '1281';\n"); + grammarBuilder.append("KW1282 : 'KW' '1282';\n"); + grammarBuilder.append("KW1283 : 'KW' '1283';\n"); + grammarBuilder.append("KW1284 : 'KW' '1284';\n"); + grammarBuilder.append("KW1285 : 'KW' '1285';\n"); + grammarBuilder.append("KW1286 : 'KW' '1286';\n"); + grammarBuilder.append("KW1287 : 'KW' '1287';\n"); + grammarBuilder.append("KW1288 : 'KW' '1288';\n"); + grammarBuilder.append("KW1289 : 'KW' '1289';\n"); + grammarBuilder.append("KW1290 : 'KW' '1290';\n"); + grammarBuilder.append("KW1291 : 'KW' '1291';\n"); + grammarBuilder.append("KW1292 : 'KW' '1292';\n"); + grammarBuilder.append("KW1293 : 'KW' '1293';\n"); + grammarBuilder.append("KW1294 : 'KW' '1294';\n"); + grammarBuilder.append("KW1295 : 'KW' '1295';\n"); + grammarBuilder.append("KW1296 : 'KW' '1296';\n"); + grammarBuilder.append("KW1297 : 'KW' '1297';\n"); + grammarBuilder.append("KW1298 : 'KW' '1298';\n"); + grammarBuilder.append("KW1299 : 'KW' '1299';\n"); + grammarBuilder.append("KW1300 : 'KW' '1300';\n"); + grammarBuilder.append("KW1301 : 'KW' '1301';\n"); + grammarBuilder.append("KW1302 : 'KW' '1302';\n"); + grammarBuilder.append("KW1303 : 'KW' '1303';\n"); + grammarBuilder.append("KW1304 : 'KW' '1304';\n"); + grammarBuilder.append("KW1305 : 'KW' '1305';\n"); + grammarBuilder.append("KW1306 : 'KW' '1306';\n"); + grammarBuilder.append("KW1307 : 'KW' '1307';\n"); + grammarBuilder.append("KW1308 : 'KW' '1308';\n"); + grammarBuilder.append("KW1309 : 'KW' '1309';\n"); + grammarBuilder.append("KW1310 : 'KW' '1310';\n"); + grammarBuilder.append("KW1311 : 'KW' '1311';\n"); + grammarBuilder.append("KW1312 : 'KW' '1312';\n"); + grammarBuilder.append("KW1313 : 'KW' '1313';\n"); + grammarBuilder.append("KW1314 : 'KW' '1314';\n"); + grammarBuilder.append("KW1315 : 'KW' '1315';\n"); + grammarBuilder.append("KW1316 : 'KW' '1316';\n"); + grammarBuilder.append("KW1317 : 'KW' '1317';\n"); + grammarBuilder.append("KW1318 : 'KW' '1318';\n"); + grammarBuilder.append("KW1319 : 'KW' '1319';\n"); + grammarBuilder.append("KW1320 : 'KW' '1320';\n"); + grammarBuilder.append("KW1321 : 'KW' '1321';\n"); + grammarBuilder.append("KW1322 : 'KW' '1322';\n"); + grammarBuilder.append("KW1323 : 'KW' '1323';\n"); + grammarBuilder.append("KW1324 : 'KW' '1324';\n"); + grammarBuilder.append("KW1325 : 'KW' '1325';\n"); + grammarBuilder.append("KW1326 : 'KW' '1326';\n"); + grammarBuilder.append("KW1327 : 'KW' '1327';\n"); + grammarBuilder.append("KW1328 : 'KW' '1328';\n"); + grammarBuilder.append("KW1329 : 'KW' '1329';\n"); + grammarBuilder.append("KW1330 : 'KW' '1330';\n"); + grammarBuilder.append("KW1331 : 'KW' '1331';\n"); + grammarBuilder.append("KW1332 : 'KW' '1332';\n"); + grammarBuilder.append("KW1333 : 'KW' '1333';\n"); + grammarBuilder.append("KW1334 : 'KW' '1334';\n"); + grammarBuilder.append("KW1335 : 'KW' '1335';\n"); + grammarBuilder.append("KW1336 : 'KW' '1336';\n"); + grammarBuilder.append("KW1337 : 'KW' '1337';\n"); + grammarBuilder.append("KW1338 : 'KW' '1338';\n"); + grammarBuilder.append("KW1339 : 'KW' '1339';\n"); + grammarBuilder.append("KW1340 : 'KW' '1340';\n"); + grammarBuilder.append("KW1341 : 'KW' '1341';\n"); + grammarBuilder.append("KW1342 : 'KW' '1342';\n"); + grammarBuilder.append("KW1343 : 'KW' '1343';\n"); + grammarBuilder.append("KW1344 : 'KW' '1344';\n"); + grammarBuilder.append("KW1345 : 'KW' '1345';\n"); + grammarBuilder.append("KW1346 : 'KW' '1346';\n"); + grammarBuilder.append("KW1347 : 'KW' '1347';\n"); + grammarBuilder.append("KW1348 : 'KW' '1348';\n"); + grammarBuilder.append("KW1349 : 'KW' '1349';\n"); + grammarBuilder.append("KW1350 : 'KW' '1350';\n"); + grammarBuilder.append("KW1351 : 'KW' '1351';\n"); + grammarBuilder.append("KW1352 : 'KW' '1352';\n"); + grammarBuilder.append("KW1353 : 'KW' '1353';\n"); + grammarBuilder.append("KW1354 : 'KW' '1354';\n"); + grammarBuilder.append("KW1355 : 'KW' '1355';\n"); + grammarBuilder.append("KW1356 : 'KW' '1356';\n"); + grammarBuilder.append("KW1357 : 'KW' '1357';\n"); + grammarBuilder.append("KW1358 : 'KW' '1358';\n"); + grammarBuilder.append("KW1359 : 'KW' '1359';\n"); + grammarBuilder.append("KW1360 : 'KW' '1360';\n"); + grammarBuilder.append("KW1361 : 'KW' '1361';\n"); + grammarBuilder.append("KW1362 : 'KW' '1362';\n"); + grammarBuilder.append("KW1363 : 'KW' '1363';\n"); + grammarBuilder.append("KW1364 : 'KW' '1364';\n"); + grammarBuilder.append("KW1365 : 'KW' '1365';\n"); + grammarBuilder.append("KW1366 : 'KW' '1366';\n"); + grammarBuilder.append("KW1367 : 'KW' '1367';\n"); + grammarBuilder.append("KW1368 : 'KW' '1368';\n"); + grammarBuilder.append("KW1369 : 'KW' '1369';\n"); + grammarBuilder.append("KW1370 : 'KW' '1370';\n"); + grammarBuilder.append("KW1371 : 'KW' '1371';\n"); + grammarBuilder.append("KW1372 : 'KW' '1372';\n"); + grammarBuilder.append("KW1373 : 'KW' '1373';\n"); + grammarBuilder.append("KW1374 : 'KW' '1374';\n"); + grammarBuilder.append("KW1375 : 'KW' '1375';\n"); + grammarBuilder.append("KW1376 : 'KW' '1376';\n"); + grammarBuilder.append("KW1377 : 'KW' '1377';\n"); + grammarBuilder.append("KW1378 : 'KW' '1378';\n"); + grammarBuilder.append("KW1379 : 'KW' '1379';\n"); + grammarBuilder.append("KW1380 : 'KW' '1380';\n"); + grammarBuilder.append("KW1381 : 'KW' '1381';\n"); + grammarBuilder.append("KW1382 : 'KW' '1382';\n"); + grammarBuilder.append("KW1383 : 'KW' '1383';\n"); + grammarBuilder.append("KW1384 : 'KW' '1384';\n"); + grammarBuilder.append("KW1385 : 'KW' '1385';\n"); + grammarBuilder.append("KW1386 : 'KW' '1386';\n"); + grammarBuilder.append("KW1387 : 'KW' '1387';\n"); + grammarBuilder.append("KW1388 : 'KW' '1388';\n"); + grammarBuilder.append("KW1389 : 'KW' '1389';\n"); + grammarBuilder.append("KW1390 : 'KW' '1390';\n"); + grammarBuilder.append("KW1391 : 'KW' '1391';\n"); + grammarBuilder.append("KW1392 : 'KW' '1392';\n"); + grammarBuilder.append("KW1393 : 'KW' '1393';\n"); + grammarBuilder.append("KW1394 : 'KW' '1394';\n"); + grammarBuilder.append("KW1395 : 'KW' '1395';\n"); + grammarBuilder.append("KW1396 : 'KW' '1396';\n"); + grammarBuilder.append("KW1397 : 'KW' '1397';\n"); + grammarBuilder.append("KW1398 : 'KW' '1398';\n"); + grammarBuilder.append("KW1399 : 'KW' '1399';\n"); + grammarBuilder.append("KW1400 : 'KW' '1400';\n"); + grammarBuilder.append("KW1401 : 'KW' '1401';\n"); + grammarBuilder.append("KW1402 : 'KW' '1402';\n"); + grammarBuilder.append("KW1403 : 'KW' '1403';\n"); + grammarBuilder.append("KW1404 : 'KW' '1404';\n"); + grammarBuilder.append("KW1405 : 'KW' '1405';\n"); + grammarBuilder.append("KW1406 : 'KW' '1406';\n"); + grammarBuilder.append("KW1407 : 'KW' '1407';\n"); + grammarBuilder.append("KW1408 : 'KW' '1408';\n"); + grammarBuilder.append("KW1409 : 'KW' '1409';\n"); + grammarBuilder.append("KW1410 : 'KW' '1410';\n"); + grammarBuilder.append("KW1411 : 'KW' '1411';\n"); + grammarBuilder.append("KW1412 : 'KW' '1412';\n"); + grammarBuilder.append("KW1413 : 'KW' '1413';\n"); + grammarBuilder.append("KW1414 : 'KW' '1414';\n"); + grammarBuilder.append("KW1415 : 'KW' '1415';\n"); + grammarBuilder.append("KW1416 : 'KW' '1416';\n"); + grammarBuilder.append("KW1417 : 'KW' '1417';\n"); + grammarBuilder.append("KW1418 : 'KW' '1418';\n"); + grammarBuilder.append("KW1419 : 'KW' '1419';\n"); + grammarBuilder.append("KW1420 : 'KW' '1420';\n"); + grammarBuilder.append("KW1421 : 'KW' '1421';\n"); + grammarBuilder.append("KW1422 : 'KW' '1422';\n"); + grammarBuilder.append("KW1423 : 'KW' '1423';\n"); + grammarBuilder.append("KW1424 : 'KW' '1424';\n"); + grammarBuilder.append("KW1425 : 'KW' '1425';\n"); + grammarBuilder.append("KW1426 : 'KW' '1426';\n"); + grammarBuilder.append("KW1427 : 'KW' '1427';\n"); + grammarBuilder.append("KW1428 : 'KW' '1428';\n"); + grammarBuilder.append("KW1429 : 'KW' '1429';\n"); + grammarBuilder.append("KW1430 : 'KW' '1430';\n"); + grammarBuilder.append("KW1431 : 'KW' '1431';\n"); + grammarBuilder.append("KW1432 : 'KW' '1432';\n"); + grammarBuilder.append("KW1433 : 'KW' '1433';\n"); + grammarBuilder.append("KW1434 : 'KW' '1434';\n"); + grammarBuilder.append("KW1435 : 'KW' '1435';\n"); + grammarBuilder.append("KW1436 : 'KW' '1436';\n"); + grammarBuilder.append("KW1437 : 'KW' '1437';\n"); + grammarBuilder.append("KW1438 : 'KW' '1438';\n"); + grammarBuilder.append("KW1439 : 'KW' '1439';\n"); + grammarBuilder.append("KW1440 : 'KW' '1440';\n"); + grammarBuilder.append("KW1441 : 'KW' '1441';\n"); + grammarBuilder.append("KW1442 : 'KW' '1442';\n"); + grammarBuilder.append("KW1443 : 'KW' '1443';\n"); + grammarBuilder.append("KW1444 : 'KW' '1444';\n"); + grammarBuilder.append("KW1445 : 'KW' '1445';\n"); + grammarBuilder.append("KW1446 : 'KW' '1446';\n"); + grammarBuilder.append("KW1447 : 'KW' '1447';\n"); + grammarBuilder.append("KW1448 : 'KW' '1448';\n"); + grammarBuilder.append("KW1449 : 'KW' '1449';\n"); + grammarBuilder.append("KW1450 : 'KW' '1450';\n"); + grammarBuilder.append("KW1451 : 'KW' '1451';\n"); + grammarBuilder.append("KW1452 : 'KW' '1452';\n"); + grammarBuilder.append("KW1453 : 'KW' '1453';\n"); + grammarBuilder.append("KW1454 : 'KW' '1454';\n"); + grammarBuilder.append("KW1455 : 'KW' '1455';\n"); + grammarBuilder.append("KW1456 : 'KW' '1456';\n"); + grammarBuilder.append("KW1457 : 'KW' '1457';\n"); + grammarBuilder.append("KW1458 : 'KW' '1458';\n"); + grammarBuilder.append("KW1459 : 'KW' '1459';\n"); + grammarBuilder.append("KW1460 : 'KW' '1460';\n"); + grammarBuilder.append("KW1461 : 'KW' '1461';\n"); + grammarBuilder.append("KW1462 : 'KW' '1462';\n"); + grammarBuilder.append("KW1463 : 'KW' '1463';\n"); + grammarBuilder.append("KW1464 : 'KW' '1464';\n"); + grammarBuilder.append("KW1465 : 'KW' '1465';\n"); + grammarBuilder.append("KW1466 : 'KW' '1466';\n"); + grammarBuilder.append("KW1467 : 'KW' '1467';\n"); + grammarBuilder.append("KW1468 : 'KW' '1468';\n"); + grammarBuilder.append("KW1469 : 'KW' '1469';\n"); + grammarBuilder.append("KW1470 : 'KW' '1470';\n"); + grammarBuilder.append("KW1471 : 'KW' '1471';\n"); + grammarBuilder.append("KW1472 : 'KW' '1472';\n"); + grammarBuilder.append("KW1473 : 'KW' '1473';\n"); + grammarBuilder.append("KW1474 : 'KW' '1474';\n"); + grammarBuilder.append("KW1475 : 'KW' '1475';\n"); + grammarBuilder.append("KW1476 : 'KW' '1476';\n"); + grammarBuilder.append("KW1477 : 'KW' '1477';\n"); + grammarBuilder.append("KW1478 : 'KW' '1478';\n"); + grammarBuilder.append("KW1479 : 'KW' '1479';\n"); + grammarBuilder.append("KW1480 : 'KW' '1480';\n"); + grammarBuilder.append("KW1481 : 'KW' '1481';\n"); + grammarBuilder.append("KW1482 : 'KW' '1482';\n"); + grammarBuilder.append("KW1483 : 'KW' '1483';\n"); + grammarBuilder.append("KW1484 : 'KW' '1484';\n"); + grammarBuilder.append("KW1485 : 'KW' '1485';\n"); + grammarBuilder.append("KW1486 : 'KW' '1486';\n"); + grammarBuilder.append("KW1487 : 'KW' '1487';\n"); + grammarBuilder.append("KW1488 : 'KW' '1488';\n"); + grammarBuilder.append("KW1489 : 'KW' '1489';\n"); + grammarBuilder.append("KW1490 : 'KW' '1490';\n"); + grammarBuilder.append("KW1491 : 'KW' '1491';\n"); + grammarBuilder.append("KW1492 : 'KW' '1492';\n"); + grammarBuilder.append("KW1493 : 'KW' '1493';\n"); + grammarBuilder.append("KW1494 : 'KW' '1494';\n"); + grammarBuilder.append("KW1495 : 'KW' '1495';\n"); + grammarBuilder.append("KW1496 : 'KW' '1496';\n"); + grammarBuilder.append("KW1497 : 'KW' '1497';\n"); + grammarBuilder.append("KW1498 : 'KW' '1498';\n"); + grammarBuilder.append("KW1499 : 'KW' '1499';\n"); + grammarBuilder.append("KW1500 : 'KW' '1500';\n"); + grammarBuilder.append("KW1501 : 'KW' '1501';\n"); + grammarBuilder.append("KW1502 : 'KW' '1502';\n"); + grammarBuilder.append("KW1503 : 'KW' '1503';\n"); + grammarBuilder.append("KW1504 : 'KW' '1504';\n"); + grammarBuilder.append("KW1505 : 'KW' '1505';\n"); + grammarBuilder.append("KW1506 : 'KW' '1506';\n"); + grammarBuilder.append("KW1507 : 'KW' '1507';\n"); + grammarBuilder.append("KW1508 : 'KW' '1508';\n"); + grammarBuilder.append("KW1509 : 'KW' '1509';\n"); + grammarBuilder.append("KW1510 : 'KW' '1510';\n"); + grammarBuilder.append("KW1511 : 'KW' '1511';\n"); + grammarBuilder.append("KW1512 : 'KW' '1512';\n"); + grammarBuilder.append("KW1513 : 'KW' '1513';\n"); + grammarBuilder.append("KW1514 : 'KW' '1514';\n"); + grammarBuilder.append("KW1515 : 'KW' '1515';\n"); + grammarBuilder.append("KW1516 : 'KW' '1516';\n"); + grammarBuilder.append("KW1517 : 'KW' '1517';\n"); + grammarBuilder.append("KW1518 : 'KW' '1518';\n"); + grammarBuilder.append("KW1519 : 'KW' '1519';\n"); + grammarBuilder.append("KW1520 : 'KW' '1520';\n"); + grammarBuilder.append("KW1521 : 'KW' '1521';\n"); + grammarBuilder.append("KW1522 : 'KW' '1522';\n"); + grammarBuilder.append("KW1523 : 'KW' '1523';\n"); + grammarBuilder.append("KW1524 : 'KW' '1524';\n"); + grammarBuilder.append("KW1525 : 'KW' '1525';\n"); + grammarBuilder.append("KW1526 : 'KW' '1526';\n"); + grammarBuilder.append("KW1527 : 'KW' '1527';\n"); + grammarBuilder.append("KW1528 : 'KW' '1528';\n"); + grammarBuilder.append("KW1529 : 'KW' '1529';\n"); + grammarBuilder.append("KW1530 : 'KW' '1530';\n"); + grammarBuilder.append("KW1531 : 'KW' '1531';\n"); + grammarBuilder.append("KW1532 : 'KW' '1532';\n"); + grammarBuilder.append("KW1533 : 'KW' '1533';\n"); + grammarBuilder.append("KW1534 : 'KW' '1534';\n"); + grammarBuilder.append("KW1535 : 'KW' '1535';\n"); + grammarBuilder.append("KW1536 : 'KW' '1536';\n"); + grammarBuilder.append("KW1537 : 'KW' '1537';\n"); + grammarBuilder.append("KW1538 : 'KW' '1538';\n"); + grammarBuilder.append("KW1539 : 'KW' '1539';\n"); + grammarBuilder.append("KW1540 : 'KW' '1540';\n"); + grammarBuilder.append("KW1541 : 'KW' '1541';\n"); + grammarBuilder.append("KW1542 : 'KW' '1542';\n"); + grammarBuilder.append("KW1543 : 'KW' '1543';\n"); + grammarBuilder.append("KW1544 : 'KW' '1544';\n"); + grammarBuilder.append("KW1545 : 'KW' '1545';\n"); + grammarBuilder.append("KW1546 : 'KW' '1546';\n"); + grammarBuilder.append("KW1547 : 'KW' '1547';\n"); + grammarBuilder.append("KW1548 : 'KW' '1548';\n"); + grammarBuilder.append("KW1549 : 'KW' '1549';\n"); + grammarBuilder.append("KW1550 : 'KW' '1550';\n"); + grammarBuilder.append("KW1551 : 'KW' '1551';\n"); + grammarBuilder.append("KW1552 : 'KW' '1552';\n"); + grammarBuilder.append("KW1553 : 'KW' '1553';\n"); + grammarBuilder.append("KW1554 : 'KW' '1554';\n"); + grammarBuilder.append("KW1555 : 'KW' '1555';\n"); + grammarBuilder.append("KW1556 : 'KW' '1556';\n"); + grammarBuilder.append("KW1557 : 'KW' '1557';\n"); + grammarBuilder.append("KW1558 : 'KW' '1558';\n"); + grammarBuilder.append("KW1559 : 'KW' '1559';\n"); + grammarBuilder.append("KW1560 : 'KW' '1560';\n"); + grammarBuilder.append("KW1561 : 'KW' '1561';\n"); + grammarBuilder.append("KW1562 : 'KW' '1562';\n"); + grammarBuilder.append("KW1563 : 'KW' '1563';\n"); + grammarBuilder.append("KW1564 : 'KW' '1564';\n"); + grammarBuilder.append("KW1565 : 'KW' '1565';\n"); + grammarBuilder.append("KW1566 : 'KW' '1566';\n"); + grammarBuilder.append("KW1567 : 'KW' '1567';\n"); + grammarBuilder.append("KW1568 : 'KW' '1568';\n"); + grammarBuilder.append("KW1569 : 'KW' '1569';\n"); + grammarBuilder.append("KW1570 : 'KW' '1570';\n"); + grammarBuilder.append("KW1571 : 'KW' '1571';\n"); + grammarBuilder.append("KW1572 : 'KW' '1572';\n"); + grammarBuilder.append("KW1573 : 'KW' '1573';\n"); + grammarBuilder.append("KW1574 : 'KW' '1574';\n"); + grammarBuilder.append("KW1575 : 'KW' '1575';\n"); + grammarBuilder.append("KW1576 : 'KW' '1576';\n"); + grammarBuilder.append("KW1577 : 'KW' '1577';\n"); + grammarBuilder.append("KW1578 : 'KW' '1578';\n"); + grammarBuilder.append("KW1579 : 'KW' '1579';\n"); + grammarBuilder.append("KW1580 : 'KW' '1580';\n"); + grammarBuilder.append("KW1581 : 'KW' '1581';\n"); + grammarBuilder.append("KW1582 : 'KW' '1582';\n"); + grammarBuilder.append("KW1583 : 'KW' '1583';\n"); + grammarBuilder.append("KW1584 : 'KW' '1584';\n"); + grammarBuilder.append("KW1585 : 'KW' '1585';\n"); + grammarBuilder.append("KW1586 : 'KW' '1586';\n"); + grammarBuilder.append("KW1587 : 'KW' '1587';\n"); + grammarBuilder.append("KW1588 : 'KW' '1588';\n"); + grammarBuilder.append("KW1589 : 'KW' '1589';\n"); + grammarBuilder.append("KW1590 : 'KW' '1590';\n"); + grammarBuilder.append("KW1591 : 'KW' '1591';\n"); + grammarBuilder.append("KW1592 : 'KW' '1592';\n"); + grammarBuilder.append("KW1593 : 'KW' '1593';\n"); + grammarBuilder.append("KW1594 : 'KW' '1594';\n"); + grammarBuilder.append("KW1595 : 'KW' '1595';\n"); + grammarBuilder.append("KW1596 : 'KW' '1596';\n"); + grammarBuilder.append("KW1597 : 'KW' '1597';\n"); + grammarBuilder.append("KW1598 : 'KW' '1598';\n"); + grammarBuilder.append("KW1599 : 'KW' '1599';\n"); + grammarBuilder.append("KW1600 : 'KW' '1600';\n"); + grammarBuilder.append("KW1601 : 'KW' '1601';\n"); + grammarBuilder.append("KW1602 : 'KW' '1602';\n"); + grammarBuilder.append("KW1603 : 'KW' '1603';\n"); + grammarBuilder.append("KW1604 : 'KW' '1604';\n"); + grammarBuilder.append("KW1605 : 'KW' '1605';\n"); + grammarBuilder.append("KW1606 : 'KW' '1606';\n"); + grammarBuilder.append("KW1607 : 'KW' '1607';\n"); + grammarBuilder.append("KW1608 : 'KW' '1608';\n"); + grammarBuilder.append("KW1609 : 'KW' '1609';\n"); + grammarBuilder.append("KW1610 : 'KW' '1610';\n"); + grammarBuilder.append("KW1611 : 'KW' '1611';\n"); + grammarBuilder.append("KW1612 : 'KW' '1612';\n"); + grammarBuilder.append("KW1613 : 'KW' '1613';\n"); + grammarBuilder.append("KW1614 : 'KW' '1614';\n"); + grammarBuilder.append("KW1615 : 'KW' '1615';\n"); + grammarBuilder.append("KW1616 : 'KW' '1616';\n"); + grammarBuilder.append("KW1617 : 'KW' '1617';\n"); + grammarBuilder.append("KW1618 : 'KW' '1618';\n"); + grammarBuilder.append("KW1619 : 'KW' '1619';\n"); + grammarBuilder.append("KW1620 : 'KW' '1620';\n"); + grammarBuilder.append("KW1621 : 'KW' '1621';\n"); + grammarBuilder.append("KW1622 : 'KW' '1622';\n"); + grammarBuilder.append("KW1623 : 'KW' '1623';\n"); + grammarBuilder.append("KW1624 : 'KW' '1624';\n"); + grammarBuilder.append("KW1625 : 'KW' '1625';\n"); + grammarBuilder.append("KW1626 : 'KW' '1626';\n"); + grammarBuilder.append("KW1627 : 'KW' '1627';\n"); + grammarBuilder.append("KW1628 : 'KW' '1628';\n"); + grammarBuilder.append("KW1629 : 'KW' '1629';\n"); + grammarBuilder.append("KW1630 : 'KW' '1630';\n"); + grammarBuilder.append("KW1631 : 'KW' '1631';\n"); + grammarBuilder.append("KW1632 : 'KW' '1632';\n"); + grammarBuilder.append("KW1633 : 'KW' '1633';\n"); + grammarBuilder.append("KW1634 : 'KW' '1634';\n"); + grammarBuilder.append("KW1635 : 'KW' '1635';\n"); + grammarBuilder.append("KW1636 : 'KW' '1636';\n"); + grammarBuilder.append("KW1637 : 'KW' '1637';\n"); + grammarBuilder.append("KW1638 : 'KW' '1638';\n"); + grammarBuilder.append("KW1639 : 'KW' '1639';\n"); + grammarBuilder.append("KW1640 : 'KW' '1640';\n"); + grammarBuilder.append("KW1641 : 'KW' '1641';\n"); + grammarBuilder.append("KW1642 : 'KW' '1642';\n"); + grammarBuilder.append("KW1643 : 'KW' '1643';\n"); + grammarBuilder.append("KW1644 : 'KW' '1644';\n"); + grammarBuilder.append("KW1645 : 'KW' '1645';\n"); + grammarBuilder.append("KW1646 : 'KW' '1646';\n"); + grammarBuilder.append("KW1647 : 'KW' '1647';\n"); + grammarBuilder.append("KW1648 : 'KW' '1648';\n"); + grammarBuilder.append("KW1649 : 'KW' '1649';\n"); + grammarBuilder.append("KW1650 : 'KW' '1650';\n"); + grammarBuilder.append("KW1651 : 'KW' '1651';\n"); + grammarBuilder.append("KW1652 : 'KW' '1652';\n"); + grammarBuilder.append("KW1653 : 'KW' '1653';\n"); + grammarBuilder.append("KW1654 : 'KW' '1654';\n"); + grammarBuilder.append("KW1655 : 'KW' '1655';\n"); + grammarBuilder.append("KW1656 : 'KW' '1656';\n"); + grammarBuilder.append("KW1657 : 'KW' '1657';\n"); + grammarBuilder.append("KW1658 : 'KW' '1658';\n"); + grammarBuilder.append("KW1659 : 'KW' '1659';\n"); + grammarBuilder.append("KW1660 : 'KW' '1660';\n"); + grammarBuilder.append("KW1661 : 'KW' '1661';\n"); + grammarBuilder.append("KW1662 : 'KW' '1662';\n"); + grammarBuilder.append("KW1663 : 'KW' '1663';\n"); + grammarBuilder.append("KW1664 : 'KW' '1664';\n"); + grammarBuilder.append("KW1665 : 'KW' '1665';\n"); + grammarBuilder.append("KW1666 : 'KW' '1666';\n"); + grammarBuilder.append("KW1667 : 'KW' '1667';\n"); + grammarBuilder.append("KW1668 : 'KW' '1668';\n"); + grammarBuilder.append("KW1669 : 'KW' '1669';\n"); + grammarBuilder.append("KW1670 : 'KW' '1670';\n"); + grammarBuilder.append("KW1671 : 'KW' '1671';\n"); + grammarBuilder.append("KW1672 : 'KW' '1672';\n"); + grammarBuilder.append("KW1673 : 'KW' '1673';\n"); + grammarBuilder.append("KW1674 : 'KW' '1674';\n"); + grammarBuilder.append("KW1675 : 'KW' '1675';\n"); + grammarBuilder.append("KW1676 : 'KW' '1676';\n"); + grammarBuilder.append("KW1677 : 'KW' '1677';\n"); + grammarBuilder.append("KW1678 : 'KW' '1678';\n"); + grammarBuilder.append("KW1679 : 'KW' '1679';\n"); + grammarBuilder.append("KW1680 : 'KW' '1680';\n"); + grammarBuilder.append("KW1681 : 'KW' '1681';\n"); + grammarBuilder.append("KW1682 : 'KW' '1682';\n"); + grammarBuilder.append("KW1683 : 'KW' '1683';\n"); + grammarBuilder.append("KW1684 : 'KW' '1684';\n"); + grammarBuilder.append("KW1685 : 'KW' '1685';\n"); + grammarBuilder.append("KW1686 : 'KW' '1686';\n"); + grammarBuilder.append("KW1687 : 'KW' '1687';\n"); + grammarBuilder.append("KW1688 : 'KW' '1688';\n"); + grammarBuilder.append("KW1689 : 'KW' '1689';\n"); + grammarBuilder.append("KW1690 : 'KW' '1690';\n"); + grammarBuilder.append("KW1691 : 'KW' '1691';\n"); + grammarBuilder.append("KW1692 : 'KW' '1692';\n"); + grammarBuilder.append("KW1693 : 'KW' '1693';\n"); + grammarBuilder.append("KW1694 : 'KW' '1694';\n"); + grammarBuilder.append("KW1695 : 'KW' '1695';\n"); + grammarBuilder.append("KW1696 : 'KW' '1696';\n"); + grammarBuilder.append("KW1697 : 'KW' '1697';\n"); + grammarBuilder.append("KW1698 : 'KW' '1698';\n"); + grammarBuilder.append("KW1699 : 'KW' '1699';\n"); + grammarBuilder.append("KW1700 : 'KW' '1700';\n"); + grammarBuilder.append("KW1701 : 'KW' '1701';\n"); + grammarBuilder.append("KW1702 : 'KW' '1702';\n"); + grammarBuilder.append("KW1703 : 'KW' '1703';\n"); + grammarBuilder.append("KW1704 : 'KW' '1704';\n"); + grammarBuilder.append("KW1705 : 'KW' '1705';\n"); + grammarBuilder.append("KW1706 : 'KW' '1706';\n"); + grammarBuilder.append("KW1707 : 'KW' '1707';\n"); + grammarBuilder.append("KW1708 : 'KW' '1708';\n"); + grammarBuilder.append("KW1709 : 'KW' '1709';\n"); + grammarBuilder.append("KW1710 : 'KW' '1710';\n"); + grammarBuilder.append("KW1711 : 'KW' '1711';\n"); + grammarBuilder.append("KW1712 : 'KW' '1712';\n"); + grammarBuilder.append("KW1713 : 'KW' '1713';\n"); + grammarBuilder.append("KW1714 : 'KW' '1714';\n"); + grammarBuilder.append("KW1715 : 'KW' '1715';\n"); + grammarBuilder.append("KW1716 : 'KW' '1716';\n"); + grammarBuilder.append("KW1717 : 'KW' '1717';\n"); + grammarBuilder.append("KW1718 : 'KW' '1718';\n"); + grammarBuilder.append("KW1719 : 'KW' '1719';\n"); + grammarBuilder.append("KW1720 : 'KW' '1720';\n"); + grammarBuilder.append("KW1721 : 'KW' '1721';\n"); + grammarBuilder.append("KW1722 : 'KW' '1722';\n"); + grammarBuilder.append("KW1723 : 'KW' '1723';\n"); + grammarBuilder.append("KW1724 : 'KW' '1724';\n"); + grammarBuilder.append("KW1725 : 'KW' '1725';\n"); + grammarBuilder.append("KW1726 : 'KW' '1726';\n"); + grammarBuilder.append("KW1727 : 'KW' '1727';\n"); + grammarBuilder.append("KW1728 : 'KW' '1728';\n"); + grammarBuilder.append("KW1729 : 'KW' '1729';\n"); + grammarBuilder.append("KW1730 : 'KW' '1730';\n"); + grammarBuilder.append("KW1731 : 'KW' '1731';\n"); + grammarBuilder.append("KW1732 : 'KW' '1732';\n"); + grammarBuilder.append("KW1733 : 'KW' '1733';\n"); + grammarBuilder.append("KW1734 : 'KW' '1734';\n"); + grammarBuilder.append("KW1735 : 'KW' '1735';\n"); + grammarBuilder.append("KW1736 : 'KW' '1736';\n"); + grammarBuilder.append("KW1737 : 'KW' '1737';\n"); + grammarBuilder.append("KW1738 : 'KW' '1738';\n"); + grammarBuilder.append("KW1739 : 'KW' '1739';\n"); + grammarBuilder.append("KW1740 : 'KW' '1740';\n"); + grammarBuilder.append("KW1741 : 'KW' '1741';\n"); + grammarBuilder.append("KW1742 : 'KW' '1742';\n"); + grammarBuilder.append("KW1743 : 'KW' '1743';\n"); + grammarBuilder.append("KW1744 : 'KW' '1744';\n"); + grammarBuilder.append("KW1745 : 'KW' '1745';\n"); + grammarBuilder.append("KW1746 : 'KW' '1746';\n"); + grammarBuilder.append("KW1747 : 'KW' '1747';\n"); + grammarBuilder.append("KW1748 : 'KW' '1748';\n"); + grammarBuilder.append("KW1749 : 'KW' '1749';\n"); + grammarBuilder.append("KW1750 : 'KW' '1750';\n"); + grammarBuilder.append("KW1751 : 'KW' '1751';\n"); + grammarBuilder.append("KW1752 : 'KW' '1752';\n"); + grammarBuilder.append("KW1753 : 'KW' '1753';\n"); + grammarBuilder.append("KW1754 : 'KW' '1754';\n"); + grammarBuilder.append("KW1755 : 'KW' '1755';\n"); + grammarBuilder.append("KW1756 : 'KW' '1756';\n"); + grammarBuilder.append("KW1757 : 'KW' '1757';\n"); + grammarBuilder.append("KW1758 : 'KW' '1758';\n"); + grammarBuilder.append("KW1759 : 'KW' '1759';\n"); + grammarBuilder.append("KW1760 : 'KW' '1760';\n"); + grammarBuilder.append("KW1761 : 'KW' '1761';\n"); + grammarBuilder.append("KW1762 : 'KW' '1762';\n"); + grammarBuilder.append("KW1763 : 'KW' '1763';\n"); + grammarBuilder.append("KW1764 : 'KW' '1764';\n"); + grammarBuilder.append("KW1765 : 'KW' '1765';\n"); + grammarBuilder.append("KW1766 : 'KW' '1766';\n"); + grammarBuilder.append("KW1767 : 'KW' '1767';\n"); + grammarBuilder.append("KW1768 : 'KW' '1768';\n"); + grammarBuilder.append("KW1769 : 'KW' '1769';\n"); + grammarBuilder.append("KW1770 : 'KW' '1770';\n"); + grammarBuilder.append("KW1771 : 'KW' '1771';\n"); + grammarBuilder.append("KW1772 : 'KW' '1772';\n"); + grammarBuilder.append("KW1773 : 'KW' '1773';\n"); + grammarBuilder.append("KW1774 : 'KW' '1774';\n"); + grammarBuilder.append("KW1775 : 'KW' '1775';\n"); + grammarBuilder.append("KW1776 : 'KW' '1776';\n"); + grammarBuilder.append("KW1777 : 'KW' '1777';\n"); + grammarBuilder.append("KW1778 : 'KW' '1778';\n"); + grammarBuilder.append("KW1779 : 'KW' '1779';\n"); + grammarBuilder.append("KW1780 : 'KW' '1780';\n"); + grammarBuilder.append("KW1781 : 'KW' '1781';\n"); + grammarBuilder.append("KW1782 : 'KW' '1782';\n"); + grammarBuilder.append("KW1783 : 'KW' '1783';\n"); + grammarBuilder.append("KW1784 : 'KW' '1784';\n"); + grammarBuilder.append("KW1785 : 'KW' '1785';\n"); + grammarBuilder.append("KW1786 : 'KW' '1786';\n"); + grammarBuilder.append("KW1787 : 'KW' '1787';\n"); + grammarBuilder.append("KW1788 : 'KW' '1788';\n"); + grammarBuilder.append("KW1789 : 'KW' '1789';\n"); + grammarBuilder.append("KW1790 : 'KW' '1790';\n"); + grammarBuilder.append("KW1791 : 'KW' '1791';\n"); + grammarBuilder.append("KW1792 : 'KW' '1792';\n"); + grammarBuilder.append("KW1793 : 'KW' '1793';\n"); + grammarBuilder.append("KW1794 : 'KW' '1794';\n"); + grammarBuilder.append("KW1795 : 'KW' '1795';\n"); + grammarBuilder.append("KW1796 : 'KW' '1796';\n"); + grammarBuilder.append("KW1797 : 'KW' '1797';\n"); + grammarBuilder.append("KW1798 : 'KW' '1798';\n"); + grammarBuilder.append("KW1799 : 'KW' '1799';\n"); + grammarBuilder.append("KW1800 : 'KW' '1800';\n"); + grammarBuilder.append("KW1801 : 'KW' '1801';\n"); + grammarBuilder.append("KW1802 : 'KW' '1802';\n"); + grammarBuilder.append("KW1803 : 'KW' '1803';\n"); + grammarBuilder.append("KW1804 : 'KW' '1804';\n"); + grammarBuilder.append("KW1805 : 'KW' '1805';\n"); + grammarBuilder.append("KW1806 : 'KW' '1806';\n"); + grammarBuilder.append("KW1807 : 'KW' '1807';\n"); + grammarBuilder.append("KW1808 : 'KW' '1808';\n"); + grammarBuilder.append("KW1809 : 'KW' '1809';\n"); + grammarBuilder.append("KW1810 : 'KW' '1810';\n"); + grammarBuilder.append("KW1811 : 'KW' '1811';\n"); + grammarBuilder.append("KW1812 : 'KW' '1812';\n"); + grammarBuilder.append("KW1813 : 'KW' '1813';\n"); + grammarBuilder.append("KW1814 : 'KW' '1814';\n"); + grammarBuilder.append("KW1815 : 'KW' '1815';\n"); + grammarBuilder.append("KW1816 : 'KW' '1816';\n"); + grammarBuilder.append("KW1817 : 'KW' '1817';\n"); + grammarBuilder.append("KW1818 : 'KW' '1818';\n"); + grammarBuilder.append("KW1819 : 'KW' '1819';\n"); + grammarBuilder.append("KW1820 : 'KW' '1820';\n"); + grammarBuilder.append("KW1821 : 'KW' '1821';\n"); + grammarBuilder.append("KW1822 : 'KW' '1822';\n"); + grammarBuilder.append("KW1823 : 'KW' '1823';\n"); + grammarBuilder.append("KW1824 : 'KW' '1824';\n"); + grammarBuilder.append("KW1825 : 'KW' '1825';\n"); + grammarBuilder.append("KW1826 : 'KW' '1826';\n"); + grammarBuilder.append("KW1827 : 'KW' '1827';\n"); + grammarBuilder.append("KW1828 : 'KW' '1828';\n"); + grammarBuilder.append("KW1829 : 'KW' '1829';\n"); + grammarBuilder.append("KW1830 : 'KW' '1830';\n"); + grammarBuilder.append("KW1831 : 'KW' '1831';\n"); + grammarBuilder.append("KW1832 : 'KW' '1832';\n"); + grammarBuilder.append("KW1833 : 'KW' '1833';\n"); + grammarBuilder.append("KW1834 : 'KW' '1834';\n"); + grammarBuilder.append("KW1835 : 'KW' '1835';\n"); + grammarBuilder.append("KW1836 : 'KW' '1836';\n"); + grammarBuilder.append("KW1837 : 'KW' '1837';\n"); + grammarBuilder.append("KW1838 : 'KW' '1838';\n"); + grammarBuilder.append("KW1839 : 'KW' '1839';\n"); + grammarBuilder.append("KW1840 : 'KW' '1840';\n"); + grammarBuilder.append("KW1841 : 'KW' '1841';\n"); + grammarBuilder.append("KW1842 : 'KW' '1842';\n"); + grammarBuilder.append("KW1843 : 'KW' '1843';\n"); + grammarBuilder.append("KW1844 : 'KW' '1844';\n"); + grammarBuilder.append("KW1845 : 'KW' '1845';\n"); + grammarBuilder.append("KW1846 : 'KW' '1846';\n"); + grammarBuilder.append("KW1847 : 'KW' '1847';\n"); + grammarBuilder.append("KW1848 : 'KW' '1848';\n"); + grammarBuilder.append("KW1849 : 'KW' '1849';\n"); + grammarBuilder.append("KW1850 : 'KW' '1850';\n"); + grammarBuilder.append("KW1851 : 'KW' '1851';\n"); + grammarBuilder.append("KW1852 : 'KW' '1852';\n"); + grammarBuilder.append("KW1853 : 'KW' '1853';\n"); + grammarBuilder.append("KW1854 : 'KW' '1854';\n"); + grammarBuilder.append("KW1855 : 'KW' '1855';\n"); + grammarBuilder.append("KW1856 : 'KW' '1856';\n"); + grammarBuilder.append("KW1857 : 'KW' '1857';\n"); + grammarBuilder.append("KW1858 : 'KW' '1858';\n"); + grammarBuilder.append("KW1859 : 'KW' '1859';\n"); + grammarBuilder.append("KW1860 : 'KW' '1860';\n"); + grammarBuilder.append("KW1861 : 'KW' '1861';\n"); + grammarBuilder.append("KW1862 : 'KW' '1862';\n"); + grammarBuilder.append("KW1863 : 'KW' '1863';\n"); + grammarBuilder.append("KW1864 : 'KW' '1864';\n"); + grammarBuilder.append("KW1865 : 'KW' '1865';\n"); + grammarBuilder.append("KW1866 : 'KW' '1866';\n"); + grammarBuilder.append("KW1867 : 'KW' '1867';\n"); + grammarBuilder.append("KW1868 : 'KW' '1868';\n"); + grammarBuilder.append("KW1869 : 'KW' '1869';\n"); + grammarBuilder.append("KW1870 : 'KW' '1870';\n"); + grammarBuilder.append("KW1871 : 'KW' '1871';\n"); + grammarBuilder.append("KW1872 : 'KW' '1872';\n"); + grammarBuilder.append("KW1873 : 'KW' '1873';\n"); + grammarBuilder.append("KW1874 : 'KW' '1874';\n"); + grammarBuilder.append("KW1875 : 'KW' '1875';\n"); + grammarBuilder.append("KW1876 : 'KW' '1876';\n"); + grammarBuilder.append("KW1877 : 'KW' '1877';\n"); + grammarBuilder.append("KW1878 : 'KW' '1878';\n"); + grammarBuilder.append("KW1879 : 'KW' '1879';\n"); + grammarBuilder.append("KW1880 : 'KW' '1880';\n"); + grammarBuilder.append("KW1881 : 'KW' '1881';\n"); + grammarBuilder.append("KW1882 : 'KW' '1882';\n"); + grammarBuilder.append("KW1883 : 'KW' '1883';\n"); + grammarBuilder.append("KW1884 : 'KW' '1884';\n"); + grammarBuilder.append("KW1885 : 'KW' '1885';\n"); + grammarBuilder.append("KW1886 : 'KW' '1886';\n"); + grammarBuilder.append("KW1887 : 'KW' '1887';\n"); + grammarBuilder.append("KW1888 : 'KW' '1888';\n"); + grammarBuilder.append("KW1889 : 'KW' '1889';\n"); + grammarBuilder.append("KW1890 : 'KW' '1890';\n"); + grammarBuilder.append("KW1891 : 'KW' '1891';\n"); + grammarBuilder.append("KW1892 : 'KW' '1892';\n"); + grammarBuilder.append("KW1893 : 'KW' '1893';\n"); + grammarBuilder.append("KW1894 : 'KW' '1894';\n"); + grammarBuilder.append("KW1895 : 'KW' '1895';\n"); + grammarBuilder.append("KW1896 : 'KW' '1896';\n"); + grammarBuilder.append("KW1897 : 'KW' '1897';\n"); + grammarBuilder.append("KW1898 : 'KW' '1898';\n"); + grammarBuilder.append("KW1899 : 'KW' '1899';\n"); + grammarBuilder.append("KW1900 : 'KW' '1900';\n"); + grammarBuilder.append("KW1901 : 'KW' '1901';\n"); + grammarBuilder.append("KW1902 : 'KW' '1902';\n"); + grammarBuilder.append("KW1903 : 'KW' '1903';\n"); + grammarBuilder.append("KW1904 : 'KW' '1904';\n"); + grammarBuilder.append("KW1905 : 'KW' '1905';\n"); + grammarBuilder.append("KW1906 : 'KW' '1906';\n"); + grammarBuilder.append("KW1907 : 'KW' '1907';\n"); + grammarBuilder.append("KW1908 : 'KW' '1908';\n"); + grammarBuilder.append("KW1909 : 'KW' '1909';\n"); + grammarBuilder.append("KW1910 : 'KW' '1910';\n"); + grammarBuilder.append("KW1911 : 'KW' '1911';\n"); + grammarBuilder.append("KW1912 : 'KW' '1912';\n"); + grammarBuilder.append("KW1913 : 'KW' '1913';\n"); + grammarBuilder.append("KW1914 : 'KW' '1914';\n"); + grammarBuilder.append("KW1915 : 'KW' '1915';\n"); + grammarBuilder.append("KW1916 : 'KW' '1916';\n"); + grammarBuilder.append("KW1917 : 'KW' '1917';\n"); + grammarBuilder.append("KW1918 : 'KW' '1918';\n"); + grammarBuilder.append("KW1919 : 'KW' '1919';\n"); + grammarBuilder.append("KW1920 : 'KW' '1920';\n"); + grammarBuilder.append("KW1921 : 'KW' '1921';\n"); + grammarBuilder.append("KW1922 : 'KW' '1922';\n"); + grammarBuilder.append("KW1923 : 'KW' '1923';\n"); + grammarBuilder.append("KW1924 : 'KW' '1924';\n"); + grammarBuilder.append("KW1925 : 'KW' '1925';\n"); + grammarBuilder.append("KW1926 : 'KW' '1926';\n"); + grammarBuilder.append("KW1927 : 'KW' '1927';\n"); + grammarBuilder.append("KW1928 : 'KW' '1928';\n"); + grammarBuilder.append("KW1929 : 'KW' '1929';\n"); + grammarBuilder.append("KW1930 : 'KW' '1930';\n"); + grammarBuilder.append("KW1931 : 'KW' '1931';\n"); + grammarBuilder.append("KW1932 : 'KW' '1932';\n"); + grammarBuilder.append("KW1933 : 'KW' '1933';\n"); + grammarBuilder.append("KW1934 : 'KW' '1934';\n"); + grammarBuilder.append("KW1935 : 'KW' '1935';\n"); + grammarBuilder.append("KW1936 : 'KW' '1936';\n"); + grammarBuilder.append("KW1937 : 'KW' '1937';\n"); + grammarBuilder.append("KW1938 : 'KW' '1938';\n"); + grammarBuilder.append("KW1939 : 'KW' '1939';\n"); + grammarBuilder.append("KW1940 : 'KW' '1940';\n"); + grammarBuilder.append("KW1941 : 'KW' '1941';\n"); + grammarBuilder.append("KW1942 : 'KW' '1942';\n"); + grammarBuilder.append("KW1943 : 'KW' '1943';\n"); + grammarBuilder.append("KW1944 : 'KW' '1944';\n"); + grammarBuilder.append("KW1945 : 'KW' '1945';\n"); + grammarBuilder.append("KW1946 : 'KW' '1946';\n"); + grammarBuilder.append("KW1947 : 'KW' '1947';\n"); + grammarBuilder.append("KW1948 : 'KW' '1948';\n"); + grammarBuilder.append("KW1949 : 'KW' '1949';\n"); + grammarBuilder.append("KW1950 : 'KW' '1950';\n"); + grammarBuilder.append("KW1951 : 'KW' '1951';\n"); + grammarBuilder.append("KW1952 : 'KW' '1952';\n"); + grammarBuilder.append("KW1953 : 'KW' '1953';\n"); + grammarBuilder.append("KW1954 : 'KW' '1954';\n"); + grammarBuilder.append("KW1955 : 'KW' '1955';\n"); + grammarBuilder.append("KW1956 : 'KW' '1956';\n"); + grammarBuilder.append("KW1957 : 'KW' '1957';\n"); + grammarBuilder.append("KW1958 : 'KW' '1958';\n"); + grammarBuilder.append("KW1959 : 'KW' '1959';\n"); + grammarBuilder.append("KW1960 : 'KW' '1960';\n"); + grammarBuilder.append("KW1961 : 'KW' '1961';\n"); + grammarBuilder.append("KW1962 : 'KW' '1962';\n"); + grammarBuilder.append("KW1963 : 'KW' '1963';\n"); + grammarBuilder.append("KW1964 : 'KW' '1964';\n"); + grammarBuilder.append("KW1965 : 'KW' '1965';\n"); + grammarBuilder.append("KW1966 : 'KW' '1966';\n"); + grammarBuilder.append("KW1967 : 'KW' '1967';\n"); + grammarBuilder.append("KW1968 : 'KW' '1968';\n"); + grammarBuilder.append("KW1969 : 'KW' '1969';\n"); + grammarBuilder.append("KW1970 : 'KW' '1970';\n"); + grammarBuilder.append("KW1971 : 'KW' '1971';\n"); + grammarBuilder.append("KW1972 : 'KW' '1972';\n"); + grammarBuilder.append("KW1973 : 'KW' '1973';\n"); + grammarBuilder.append("KW1974 : 'KW' '1974';\n"); + grammarBuilder.append("KW1975 : 'KW' '1975';\n"); + grammarBuilder.append("KW1976 : 'KW' '1976';\n"); + grammarBuilder.append("KW1977 : 'KW' '1977';\n"); + grammarBuilder.append("KW1978 : 'KW' '1978';\n"); + grammarBuilder.append("KW1979 : 'KW' '1979';\n"); + grammarBuilder.append("KW1980 : 'KW' '1980';\n"); + grammarBuilder.append("KW1981 : 'KW' '1981';\n"); + grammarBuilder.append("KW1982 : 'KW' '1982';\n"); + grammarBuilder.append("KW1983 : 'KW' '1983';\n"); + grammarBuilder.append("KW1984 : 'KW' '1984';\n"); + grammarBuilder.append("KW1985 : 'KW' '1985';\n"); + grammarBuilder.append("KW1986 : 'KW' '1986';\n"); + grammarBuilder.append("KW1987 : 'KW' '1987';\n"); + grammarBuilder.append("KW1988 : 'KW' '1988';\n"); + grammarBuilder.append("KW1989 : 'KW' '1989';\n"); + grammarBuilder.append("KW1990 : 'KW' '1990';\n"); + grammarBuilder.append("KW1991 : 'KW' '1991';\n"); + grammarBuilder.append("KW1992 : 'KW' '1992';\n"); + grammarBuilder.append("KW1993 : 'KW' '1993';\n"); + grammarBuilder.append("KW1994 : 'KW' '1994';\n"); + grammarBuilder.append("KW1995 : 'KW' '1995';\n"); + grammarBuilder.append("KW1996 : 'KW' '1996';\n"); + grammarBuilder.append("KW1997 : 'KW' '1997';\n"); + grammarBuilder.append("KW1998 : 'KW' '1998';\n"); + grammarBuilder.append("KW1999 : 'KW' '1999';\n"); + grammarBuilder.append("KW2000 : 'KW' '2000';\n"); + grammarBuilder.append("KW2001 : 'KW' '2001';\n"); + grammarBuilder.append("KW2002 : 'KW' '2002';\n"); + grammarBuilder.append("KW2003 : 'KW' '2003';\n"); + grammarBuilder.append("KW2004 : 'KW' '2004';\n"); + grammarBuilder.append("KW2005 : 'KW' '2005';\n"); + grammarBuilder.append("KW2006 : 'KW' '2006';\n"); + grammarBuilder.append("KW2007 : 'KW' '2007';\n"); + grammarBuilder.append("KW2008 : 'KW' '2008';\n"); + grammarBuilder.append("KW2009 : 'KW' '2009';\n"); + grammarBuilder.append("KW2010 : 'KW' '2010';\n"); + grammarBuilder.append("KW2011 : 'KW' '2011';\n"); + grammarBuilder.append("KW2012 : 'KW' '2012';\n"); + grammarBuilder.append("KW2013 : 'KW' '2013';\n"); + grammarBuilder.append("KW2014 : 'KW' '2014';\n"); + grammarBuilder.append("KW2015 : 'KW' '2015';\n"); + grammarBuilder.append("KW2016 : 'KW' '2016';\n"); + grammarBuilder.append("KW2017 : 'KW' '2017';\n"); + grammarBuilder.append("KW2018 : 'KW' '2018';\n"); + grammarBuilder.append("KW2019 : 'KW' '2019';\n"); + grammarBuilder.append("KW2020 : 'KW' '2020';\n"); + grammarBuilder.append("KW2021 : 'KW' '2021';\n"); + grammarBuilder.append("KW2022 : 'KW' '2022';\n"); + grammarBuilder.append("KW2023 : 'KW' '2023';\n"); + grammarBuilder.append("KW2024 : 'KW' '2024';\n"); + grammarBuilder.append("KW2025 : 'KW' '2025';\n"); + grammarBuilder.append("KW2026 : 'KW' '2026';\n"); + grammarBuilder.append("KW2027 : 'KW' '2027';\n"); + grammarBuilder.append("KW2028 : 'KW' '2028';\n"); + grammarBuilder.append("KW2029 : 'KW' '2029';\n"); + grammarBuilder.append("KW2030 : 'KW' '2030';\n"); + grammarBuilder.append("KW2031 : 'KW' '2031';\n"); + grammarBuilder.append("KW2032 : 'KW' '2032';\n"); + grammarBuilder.append("KW2033 : 'KW' '2033';\n"); + grammarBuilder.append("KW2034 : 'KW' '2034';\n"); + grammarBuilder.append("KW2035 : 'KW' '2035';\n"); + grammarBuilder.append("KW2036 : 'KW' '2036';\n"); + grammarBuilder.append("KW2037 : 'KW' '2037';\n"); + grammarBuilder.append("KW2038 : 'KW' '2038';\n"); + grammarBuilder.append("KW2039 : 'KW' '2039';\n"); + grammarBuilder.append("KW2040 : 'KW' '2040';\n"); + grammarBuilder.append("KW2041 : 'KW' '2041';\n"); + grammarBuilder.append("KW2042 : 'KW' '2042';\n"); + grammarBuilder.append("KW2043 : 'KW' '2043';\n"); + grammarBuilder.append("KW2044 : 'KW' '2044';\n"); + grammarBuilder.append("KW2045 : 'KW' '2045';\n"); + grammarBuilder.append("KW2046 : 'KW' '2046';\n"); + grammarBuilder.append("KW2047 : 'KW' '2047';\n"); + grammarBuilder.append("KW2048 : 'KW' '2048';\n"); + grammarBuilder.append("KW2049 : 'KW' '2049';\n"); + grammarBuilder.append("KW2050 : 'KW' '2050';\n"); + grammarBuilder.append("KW2051 : 'KW' '2051';\n"); + grammarBuilder.append("KW2052 : 'KW' '2052';\n"); + grammarBuilder.append("KW2053 : 'KW' '2053';\n"); + grammarBuilder.append("KW2054 : 'KW' '2054';\n"); + grammarBuilder.append("KW2055 : 'KW' '2055';\n"); + grammarBuilder.append("KW2056 : 'KW' '2056';\n"); + grammarBuilder.append("KW2057 : 'KW' '2057';\n"); + grammarBuilder.append("KW2058 : 'KW' '2058';\n"); + grammarBuilder.append("KW2059 : 'KW' '2059';\n"); + grammarBuilder.append("KW2060 : 'KW' '2060';\n"); + grammarBuilder.append("KW2061 : 'KW' '2061';\n"); + grammarBuilder.append("KW2062 : 'KW' '2062';\n"); + grammarBuilder.append("KW2063 : 'KW' '2063';\n"); + grammarBuilder.append("KW2064 : 'KW' '2064';\n"); + grammarBuilder.append("KW2065 : 'KW' '2065';\n"); + grammarBuilder.append("KW2066 : 'KW' '2066';\n"); + grammarBuilder.append("KW2067 : 'KW' '2067';\n"); + grammarBuilder.append("KW2068 : 'KW' '2068';\n"); + grammarBuilder.append("KW2069 : 'KW' '2069';\n"); + grammarBuilder.append("KW2070 : 'KW' '2070';\n"); + grammarBuilder.append("KW2071 : 'KW' '2071';\n"); + grammarBuilder.append("KW2072 : 'KW' '2072';\n"); + grammarBuilder.append("KW2073 : 'KW' '2073';\n"); + grammarBuilder.append("KW2074 : 'KW' '2074';\n"); + grammarBuilder.append("KW2075 : 'KW' '2075';\n"); + grammarBuilder.append("KW2076 : 'KW' '2076';\n"); + grammarBuilder.append("KW2077 : 'KW' '2077';\n"); + grammarBuilder.append("KW2078 : 'KW' '2078';\n"); + grammarBuilder.append("KW2079 : 'KW' '2079';\n"); + grammarBuilder.append("KW2080 : 'KW' '2080';\n"); + grammarBuilder.append("KW2081 : 'KW' '2081';\n"); + grammarBuilder.append("KW2082 : 'KW' '2082';\n"); + grammarBuilder.append("KW2083 : 'KW' '2083';\n"); + grammarBuilder.append("KW2084 : 'KW' '2084';\n"); + grammarBuilder.append("KW2085 : 'KW' '2085';\n"); + grammarBuilder.append("KW2086 : 'KW' '2086';\n"); + grammarBuilder.append("KW2087 : 'KW' '2087';\n"); + grammarBuilder.append("KW2088 : 'KW' '2088';\n"); + grammarBuilder.append("KW2089 : 'KW' '2089';\n"); + grammarBuilder.append("KW2090 : 'KW' '2090';\n"); + grammarBuilder.append("KW2091 : 'KW' '2091';\n"); + grammarBuilder.append("KW2092 : 'KW' '2092';\n"); + grammarBuilder.append("KW2093 : 'KW' '2093';\n"); + grammarBuilder.append("KW2094 : 'KW' '2094';\n"); + grammarBuilder.append("KW2095 : 'KW' '2095';\n"); + grammarBuilder.append("KW2096 : 'KW' '2096';\n"); + grammarBuilder.append("KW2097 : 'KW' '2097';\n"); + grammarBuilder.append("KW2098 : 'KW' '2098';\n"); + grammarBuilder.append("KW2099 : 'KW' '2099';\n"); + grammarBuilder.append("KW2100 : 'KW' '2100';\n"); + grammarBuilder.append("KW2101 : 'KW' '2101';\n"); + grammarBuilder.append("KW2102 : 'KW' '2102';\n"); + grammarBuilder.append("KW2103 : 'KW' '2103';\n"); + grammarBuilder.append("KW2104 : 'KW' '2104';\n"); + grammarBuilder.append("KW2105 : 'KW' '2105';\n"); + grammarBuilder.append("KW2106 : 'KW' '2106';\n"); + grammarBuilder.append("KW2107 : 'KW' '2107';\n"); + grammarBuilder.append("KW2108 : 'KW' '2108';\n"); + grammarBuilder.append("KW2109 : 'KW' '2109';\n"); + grammarBuilder.append("KW2110 : 'KW' '2110';\n"); + grammarBuilder.append("KW2111 : 'KW' '2111';\n"); + grammarBuilder.append("KW2112 : 'KW' '2112';\n"); + grammarBuilder.append("KW2113 : 'KW' '2113';\n"); + grammarBuilder.append("KW2114 : 'KW' '2114';\n"); + grammarBuilder.append("KW2115 : 'KW' '2115';\n"); + grammarBuilder.append("KW2116 : 'KW' '2116';\n"); + grammarBuilder.append("KW2117 : 'KW' '2117';\n"); + grammarBuilder.append("KW2118 : 'KW' '2118';\n"); + grammarBuilder.append("KW2119 : 'KW' '2119';\n"); + grammarBuilder.append("KW2120 : 'KW' '2120';\n"); + grammarBuilder.append("KW2121 : 'KW' '2121';\n"); + grammarBuilder.append("KW2122 : 'KW' '2122';\n"); + grammarBuilder.append("KW2123 : 'KW' '2123';\n"); + grammarBuilder.append("KW2124 : 'KW' '2124';\n"); + grammarBuilder.append("KW2125 : 'KW' '2125';\n"); + grammarBuilder.append("KW2126 : 'KW' '2126';\n"); + grammarBuilder.append("KW2127 : 'KW' '2127';\n"); + grammarBuilder.append("KW2128 : 'KW' '2128';\n"); + grammarBuilder.append("KW2129 : 'KW' '2129';\n"); + grammarBuilder.append("KW2130 : 'KW' '2130';\n"); + grammarBuilder.append("KW2131 : 'KW' '2131';\n"); + grammarBuilder.append("KW2132 : 'KW' '2132';\n"); + grammarBuilder.append("KW2133 : 'KW' '2133';\n"); + grammarBuilder.append("KW2134 : 'KW' '2134';\n"); + grammarBuilder.append("KW2135 : 'KW' '2135';\n"); + grammarBuilder.append("KW2136 : 'KW' '2136';\n"); + grammarBuilder.append("KW2137 : 'KW' '2137';\n"); + grammarBuilder.append("KW2138 : 'KW' '2138';\n"); + grammarBuilder.append("KW2139 : 'KW' '2139';\n"); + grammarBuilder.append("KW2140 : 'KW' '2140';\n"); + grammarBuilder.append("KW2141 : 'KW' '2141';\n"); + grammarBuilder.append("KW2142 : 'KW' '2142';\n"); + grammarBuilder.append("KW2143 : 'KW' '2143';\n"); + grammarBuilder.append("KW2144 : 'KW' '2144';\n"); + grammarBuilder.append("KW2145 : 'KW' '2145';\n"); + grammarBuilder.append("KW2146 : 'KW' '2146';\n"); + grammarBuilder.append("KW2147 : 'KW' '2147';\n"); + grammarBuilder.append("KW2148 : 'KW' '2148';\n"); + grammarBuilder.append("KW2149 : 'KW' '2149';\n"); + grammarBuilder.append("KW2150 : 'KW' '2150';\n"); + grammarBuilder.append("KW2151 : 'KW' '2151';\n"); + grammarBuilder.append("KW2152 : 'KW' '2152';\n"); + grammarBuilder.append("KW2153 : 'KW' '2153';\n"); + grammarBuilder.append("KW2154 : 'KW' '2154';\n"); + grammarBuilder.append("KW2155 : 'KW' '2155';\n"); + grammarBuilder.append("KW2156 : 'KW' '2156';\n"); + grammarBuilder.append("KW2157 : 'KW' '2157';\n"); + grammarBuilder.append("KW2158 : 'KW' '2158';\n"); + grammarBuilder.append("KW2159 : 'KW' '2159';\n"); + grammarBuilder.append("KW2160 : 'KW' '2160';\n"); + grammarBuilder.append("KW2161 : 'KW' '2161';\n"); + grammarBuilder.append("KW2162 : 'KW' '2162';\n"); + grammarBuilder.append("KW2163 : 'KW' '2163';\n"); + grammarBuilder.append("KW2164 : 'KW' '2164';\n"); + grammarBuilder.append("KW2165 : 'KW' '2165';\n"); + grammarBuilder.append("KW2166 : 'KW' '2166';\n"); + grammarBuilder.append("KW2167 : 'KW' '2167';\n"); + grammarBuilder.append("KW2168 : 'KW' '2168';\n"); + grammarBuilder.append("KW2169 : 'KW' '2169';\n"); + grammarBuilder.append("KW2170 : 'KW' '2170';\n"); + grammarBuilder.append("KW2171 : 'KW' '2171';\n"); + grammarBuilder.append("KW2172 : 'KW' '2172';\n"); + grammarBuilder.append("KW2173 : 'KW' '2173';\n"); + grammarBuilder.append("KW2174 : 'KW' '2174';\n"); + grammarBuilder.append("KW2175 : 'KW' '2175';\n"); + grammarBuilder.append("KW2176 : 'KW' '2176';\n"); + grammarBuilder.append("KW2177 : 'KW' '2177';\n"); + grammarBuilder.append("KW2178 : 'KW' '2178';\n"); + grammarBuilder.append("KW2179 : 'KW' '2179';\n"); + grammarBuilder.append("KW2180 : 'KW' '2180';\n"); + grammarBuilder.append("KW2181 : 'KW' '2181';\n"); + grammarBuilder.append("KW2182 : 'KW' '2182';\n"); + grammarBuilder.append("KW2183 : 'KW' '2183';\n"); + grammarBuilder.append("KW2184 : 'KW' '2184';\n"); + grammarBuilder.append("KW2185 : 'KW' '2185';\n"); + grammarBuilder.append("KW2186 : 'KW' '2186';\n"); + grammarBuilder.append("KW2187 : 'KW' '2187';\n"); + grammarBuilder.append("KW2188 : 'KW' '2188';\n"); + grammarBuilder.append("KW2189 : 'KW' '2189';\n"); + grammarBuilder.append("KW2190 : 'KW' '2190';\n"); + grammarBuilder.append("KW2191 : 'KW' '2191';\n"); + grammarBuilder.append("KW2192 : 'KW' '2192';\n"); + grammarBuilder.append("KW2193 : 'KW' '2193';\n"); + grammarBuilder.append("KW2194 : 'KW' '2194';\n"); + grammarBuilder.append("KW2195 : 'KW' '2195';\n"); + grammarBuilder.append("KW2196 : 'KW' '2196';\n"); + grammarBuilder.append("KW2197 : 'KW' '2197';\n"); + grammarBuilder.append("KW2198 : 'KW' '2198';\n"); + grammarBuilder.append("KW2199 : 'KW' '2199';\n"); + grammarBuilder.append("KW2200 : 'KW' '2200';\n"); + grammarBuilder.append("KW2201 : 'KW' '2201';\n"); + grammarBuilder.append("KW2202 : 'KW' '2202';\n"); + grammarBuilder.append("KW2203 : 'KW' '2203';\n"); + grammarBuilder.append("KW2204 : 'KW' '2204';\n"); + grammarBuilder.append("KW2205 : 'KW' '2205';\n"); + grammarBuilder.append("KW2206 : 'KW' '2206';\n"); + grammarBuilder.append("KW2207 : 'KW' '2207';\n"); + grammarBuilder.append("KW2208 : 'KW' '2208';\n"); + grammarBuilder.append("KW2209 : 'KW' '2209';\n"); + grammarBuilder.append("KW2210 : 'KW' '2210';\n"); + grammarBuilder.append("KW2211 : 'KW' '2211';\n"); + grammarBuilder.append("KW2212 : 'KW' '2212';\n"); + grammarBuilder.append("KW2213 : 'KW' '2213';\n"); + grammarBuilder.append("KW2214 : 'KW' '2214';\n"); + grammarBuilder.append("KW2215 : 'KW' '2215';\n"); + grammarBuilder.append("KW2216 : 'KW' '2216';\n"); + grammarBuilder.append("KW2217 : 'KW' '2217';\n"); + grammarBuilder.append("KW2218 : 'KW' '2218';\n"); + grammarBuilder.append("KW2219 : 'KW' '2219';\n"); + grammarBuilder.append("KW2220 : 'KW' '2220';\n"); + grammarBuilder.append("KW2221 : 'KW' '2221';\n"); + grammarBuilder.append("KW2222 : 'KW' '2222';\n"); + grammarBuilder.append("KW2223 : 'KW' '2223';\n"); + grammarBuilder.append("KW2224 : 'KW' '2224';\n"); + grammarBuilder.append("KW2225 : 'KW' '2225';\n"); + grammarBuilder.append("KW2226 : 'KW' '2226';\n"); + grammarBuilder.append("KW2227 : 'KW' '2227';\n"); + grammarBuilder.append("KW2228 : 'KW' '2228';\n"); + grammarBuilder.append("KW2229 : 'KW' '2229';\n"); + grammarBuilder.append("KW2230 : 'KW' '2230';\n"); + grammarBuilder.append("KW2231 : 'KW' '2231';\n"); + grammarBuilder.append("KW2232 : 'KW' '2232';\n"); + grammarBuilder.append("KW2233 : 'KW' '2233';\n"); + grammarBuilder.append("KW2234 : 'KW' '2234';\n"); + grammarBuilder.append("KW2235 : 'KW' '2235';\n"); + grammarBuilder.append("KW2236 : 'KW' '2236';\n"); + grammarBuilder.append("KW2237 : 'KW' '2237';\n"); + grammarBuilder.append("KW2238 : 'KW' '2238';\n"); + grammarBuilder.append("KW2239 : 'KW' '2239';\n"); + grammarBuilder.append("KW2240 : 'KW' '2240';\n"); + grammarBuilder.append("KW2241 : 'KW' '2241';\n"); + grammarBuilder.append("KW2242 : 'KW' '2242';\n"); + grammarBuilder.append("KW2243 : 'KW' '2243';\n"); + grammarBuilder.append("KW2244 : 'KW' '2244';\n"); + grammarBuilder.append("KW2245 : 'KW' '2245';\n"); + grammarBuilder.append("KW2246 : 'KW' '2246';\n"); + grammarBuilder.append("KW2247 : 'KW' '2247';\n"); + grammarBuilder.append("KW2248 : 'KW' '2248';\n"); + grammarBuilder.append("KW2249 : 'KW' '2249';\n"); + grammarBuilder.append("KW2250 : 'KW' '2250';\n"); + grammarBuilder.append("KW2251 : 'KW' '2251';\n"); + grammarBuilder.append("KW2252 : 'KW' '2252';\n"); + grammarBuilder.append("KW2253 : 'KW' '2253';\n"); + grammarBuilder.append("KW2254 : 'KW' '2254';\n"); + grammarBuilder.append("KW2255 : 'KW' '2255';\n"); + grammarBuilder.append("KW2256 : 'KW' '2256';\n"); + grammarBuilder.append("KW2257 : 'KW' '2257';\n"); + grammarBuilder.append("KW2258 : 'KW' '2258';\n"); + grammarBuilder.append("KW2259 : 'KW' '2259';\n"); + grammarBuilder.append("KW2260 : 'KW' '2260';\n"); + grammarBuilder.append("KW2261 : 'KW' '2261';\n"); + grammarBuilder.append("KW2262 : 'KW' '2262';\n"); + grammarBuilder.append("KW2263 : 'KW' '2263';\n"); + grammarBuilder.append("KW2264 : 'KW' '2264';\n"); + grammarBuilder.append("KW2265 : 'KW' '2265';\n"); + grammarBuilder.append("KW2266 : 'KW' '2266';\n"); + grammarBuilder.append("KW2267 : 'KW' '2267';\n"); + grammarBuilder.append("KW2268 : 'KW' '2268';\n"); + grammarBuilder.append("KW2269 : 'KW' '2269';\n"); + grammarBuilder.append("KW2270 : 'KW' '2270';\n"); + grammarBuilder.append("KW2271 : 'KW' '2271';\n"); + grammarBuilder.append("KW2272 : 'KW' '2272';\n"); + grammarBuilder.append("KW2273 : 'KW' '2273';\n"); + grammarBuilder.append("KW2274 : 'KW' '2274';\n"); + grammarBuilder.append("KW2275 : 'KW' '2275';\n"); + grammarBuilder.append("KW2276 : 'KW' '2276';\n"); + grammarBuilder.append("KW2277 : 'KW' '2277';\n"); + grammarBuilder.append("KW2278 : 'KW' '2278';\n"); + grammarBuilder.append("KW2279 : 'KW' '2279';\n"); + grammarBuilder.append("KW2280 : 'KW' '2280';\n"); + grammarBuilder.append("KW2281 : 'KW' '2281';\n"); + grammarBuilder.append("KW2282 : 'KW' '2282';\n"); + grammarBuilder.append("KW2283 : 'KW' '2283';\n"); + grammarBuilder.append("KW2284 : 'KW' '2284';\n"); + grammarBuilder.append("KW2285 : 'KW' '2285';\n"); + grammarBuilder.append("KW2286 : 'KW' '2286';\n"); + grammarBuilder.append("KW2287 : 'KW' '2287';\n"); + grammarBuilder.append("KW2288 : 'KW' '2288';\n"); + grammarBuilder.append("KW2289 : 'KW' '2289';\n"); + grammarBuilder.append("KW2290 : 'KW' '2290';\n"); + grammarBuilder.append("KW2291 : 'KW' '2291';\n"); + grammarBuilder.append("KW2292 : 'KW' '2292';\n"); + grammarBuilder.append("KW2293 : 'KW' '2293';\n"); + grammarBuilder.append("KW2294 : 'KW' '2294';\n"); + grammarBuilder.append("KW2295 : 'KW' '2295';\n"); + grammarBuilder.append("KW2296 : 'KW' '2296';\n"); + grammarBuilder.append("KW2297 : 'KW' '2297';\n"); + grammarBuilder.append("KW2298 : 'KW' '2298';\n"); + grammarBuilder.append("KW2299 : 'KW' '2299';\n"); + grammarBuilder.append("KW2300 : 'KW' '2300';\n"); + grammarBuilder.append("KW2301 : 'KW' '2301';\n"); + grammarBuilder.append("KW2302 : 'KW' '2302';\n"); + grammarBuilder.append("KW2303 : 'KW' '2303';\n"); + grammarBuilder.append("KW2304 : 'KW' '2304';\n"); + grammarBuilder.append("KW2305 : 'KW' '2305';\n"); + grammarBuilder.append("KW2306 : 'KW' '2306';\n"); + grammarBuilder.append("KW2307 : 'KW' '2307';\n"); + grammarBuilder.append("KW2308 : 'KW' '2308';\n"); + grammarBuilder.append("KW2309 : 'KW' '2309';\n"); + grammarBuilder.append("KW2310 : 'KW' '2310';\n"); + grammarBuilder.append("KW2311 : 'KW' '2311';\n"); + grammarBuilder.append("KW2312 : 'KW' '2312';\n"); + grammarBuilder.append("KW2313 : 'KW' '2313';\n"); + grammarBuilder.append("KW2314 : 'KW' '2314';\n"); + grammarBuilder.append("KW2315 : 'KW' '2315';\n"); + grammarBuilder.append("KW2316 : 'KW' '2316';\n"); + grammarBuilder.append("KW2317 : 'KW' '2317';\n"); + grammarBuilder.append("KW2318 : 'KW' '2318';\n"); + grammarBuilder.append("KW2319 : 'KW' '2319';\n"); + grammarBuilder.append("KW2320 : 'KW' '2320';\n"); + grammarBuilder.append("KW2321 : 'KW' '2321';\n"); + grammarBuilder.append("KW2322 : 'KW' '2322';\n"); + grammarBuilder.append("KW2323 : 'KW' '2323';\n"); + grammarBuilder.append("KW2324 : 'KW' '2324';\n"); + grammarBuilder.append("KW2325 : 'KW' '2325';\n"); + grammarBuilder.append("KW2326 : 'KW' '2326';\n"); + grammarBuilder.append("KW2327 : 'KW' '2327';\n"); + grammarBuilder.append("KW2328 : 'KW' '2328';\n"); + grammarBuilder.append("KW2329 : 'KW' '2329';\n"); + grammarBuilder.append("KW2330 : 'KW' '2330';\n"); + grammarBuilder.append("KW2331 : 'KW' '2331';\n"); + grammarBuilder.append("KW2332 : 'KW' '2332';\n"); + grammarBuilder.append("KW2333 : 'KW' '2333';\n"); + grammarBuilder.append("KW2334 : 'KW' '2334';\n"); + grammarBuilder.append("KW2335 : 'KW' '2335';\n"); + grammarBuilder.append("KW2336 : 'KW' '2336';\n"); + grammarBuilder.append("KW2337 : 'KW' '2337';\n"); + grammarBuilder.append("KW2338 : 'KW' '2338';\n"); + grammarBuilder.append("KW2339 : 'KW' '2339';\n"); + grammarBuilder.append("KW2340 : 'KW' '2340';\n"); + grammarBuilder.append("KW2341 : 'KW' '2341';\n"); + grammarBuilder.append("KW2342 : 'KW' '2342';\n"); + grammarBuilder.append("KW2343 : 'KW' '2343';\n"); + grammarBuilder.append("KW2344 : 'KW' '2344';\n"); + grammarBuilder.append("KW2345 : 'KW' '2345';\n"); + grammarBuilder.append("KW2346 : 'KW' '2346';\n"); + grammarBuilder.append("KW2347 : 'KW' '2347';\n"); + grammarBuilder.append("KW2348 : 'KW' '2348';\n"); + grammarBuilder.append("KW2349 : 'KW' '2349';\n"); + grammarBuilder.append("KW2350 : 'KW' '2350';\n"); + grammarBuilder.append("KW2351 : 'KW' '2351';\n"); + grammarBuilder.append("KW2352 : 'KW' '2352';\n"); + grammarBuilder.append("KW2353 : 'KW' '2353';\n"); + grammarBuilder.append("KW2354 : 'KW' '2354';\n"); + grammarBuilder.append("KW2355 : 'KW' '2355';\n"); + grammarBuilder.append("KW2356 : 'KW' '2356';\n"); + grammarBuilder.append("KW2357 : 'KW' '2357';\n"); + grammarBuilder.append("KW2358 : 'KW' '2358';\n"); + grammarBuilder.append("KW2359 : 'KW' '2359';\n"); + grammarBuilder.append("KW2360 : 'KW' '2360';\n"); + grammarBuilder.append("KW2361 : 'KW' '2361';\n"); + grammarBuilder.append("KW2362 : 'KW' '2362';\n"); + grammarBuilder.append("KW2363 : 'KW' '2363';\n"); + grammarBuilder.append("KW2364 : 'KW' '2364';\n"); + grammarBuilder.append("KW2365 : 'KW' '2365';\n"); + grammarBuilder.append("KW2366 : 'KW' '2366';\n"); + grammarBuilder.append("KW2367 : 'KW' '2367';\n"); + grammarBuilder.append("KW2368 : 'KW' '2368';\n"); + grammarBuilder.append("KW2369 : 'KW' '2369';\n"); + grammarBuilder.append("KW2370 : 'KW' '2370';\n"); + grammarBuilder.append("KW2371 : 'KW' '2371';\n"); + grammarBuilder.append("KW2372 : 'KW' '2372';\n"); + grammarBuilder.append("KW2373 : 'KW' '2373';\n"); + grammarBuilder.append("KW2374 : 'KW' '2374';\n"); + grammarBuilder.append("KW2375 : 'KW' '2375';\n"); + grammarBuilder.append("KW2376 : 'KW' '2376';\n"); + grammarBuilder.append("KW2377 : 'KW' '2377';\n"); + grammarBuilder.append("KW2378 : 'KW' '2378';\n"); + grammarBuilder.append("KW2379 : 'KW' '2379';\n"); + grammarBuilder.append("KW2380 : 'KW' '2380';\n"); + grammarBuilder.append("KW2381 : 'KW' '2381';\n"); + grammarBuilder.append("KW2382 : 'KW' '2382';\n"); + grammarBuilder.append("KW2383 : 'KW' '2383';\n"); + grammarBuilder.append("KW2384 : 'KW' '2384';\n"); + grammarBuilder.append("KW2385 : 'KW' '2385';\n"); + grammarBuilder.append("KW2386 : 'KW' '2386';\n"); + grammarBuilder.append("KW2387 : 'KW' '2387';\n"); + grammarBuilder.append("KW2388 : 'KW' '2388';\n"); + grammarBuilder.append("KW2389 : 'KW' '2389';\n"); + grammarBuilder.append("KW2390 : 'KW' '2390';\n"); + grammarBuilder.append("KW2391 : 'KW' '2391';\n"); + grammarBuilder.append("KW2392 : 'KW' '2392';\n"); + grammarBuilder.append("KW2393 : 'KW' '2393';\n"); + grammarBuilder.append("KW2394 : 'KW' '2394';\n"); + grammarBuilder.append("KW2395 : 'KW' '2395';\n"); + grammarBuilder.append("KW2396 : 'KW' '2396';\n"); + grammarBuilder.append("KW2397 : 'KW' '2397';\n"); + grammarBuilder.append("KW2398 : 'KW' '2398';\n"); + grammarBuilder.append("KW2399 : 'KW' '2399';\n"); + grammarBuilder.append("KW2400 : 'KW' '2400';\n"); + grammarBuilder.append("KW2401 : 'KW' '2401';\n"); + grammarBuilder.append("KW2402 : 'KW' '2402';\n"); + grammarBuilder.append("KW2403 : 'KW' '2403';\n"); + grammarBuilder.append("KW2404 : 'KW' '2404';\n"); + grammarBuilder.append("KW2405 : 'KW' '2405';\n"); + grammarBuilder.append("KW2406 : 'KW' '2406';\n"); + grammarBuilder.append("KW2407 : 'KW' '2407';\n"); + grammarBuilder.append("KW2408 : 'KW' '2408';\n"); + grammarBuilder.append("KW2409 : 'KW' '2409';\n"); + grammarBuilder.append("KW2410 : 'KW' '2410';\n"); + grammarBuilder.append("KW2411 : 'KW' '2411';\n"); + grammarBuilder.append("KW2412 : 'KW' '2412';\n"); + grammarBuilder.append("KW2413 : 'KW' '2413';\n"); + grammarBuilder.append("KW2414 : 'KW' '2414';\n"); + grammarBuilder.append("KW2415 : 'KW' '2415';\n"); + grammarBuilder.append("KW2416 : 'KW' '2416';\n"); + grammarBuilder.append("KW2417 : 'KW' '2417';\n"); + grammarBuilder.append("KW2418 : 'KW' '2418';\n"); + grammarBuilder.append("KW2419 : 'KW' '2419';\n"); + grammarBuilder.append("KW2420 : 'KW' '2420';\n"); + grammarBuilder.append("KW2421 : 'KW' '2421';\n"); + grammarBuilder.append("KW2422 : 'KW' '2422';\n"); + grammarBuilder.append("KW2423 : 'KW' '2423';\n"); + grammarBuilder.append("KW2424 : 'KW' '2424';\n"); + grammarBuilder.append("KW2425 : 'KW' '2425';\n"); + grammarBuilder.append("KW2426 : 'KW' '2426';\n"); + grammarBuilder.append("KW2427 : 'KW' '2427';\n"); + grammarBuilder.append("KW2428 : 'KW' '2428';\n"); + grammarBuilder.append("KW2429 : 'KW' '2429';\n"); + grammarBuilder.append("KW2430 : 'KW' '2430';\n"); + grammarBuilder.append("KW2431 : 'KW' '2431';\n"); + grammarBuilder.append("KW2432 : 'KW' '2432';\n"); + grammarBuilder.append("KW2433 : 'KW' '2433';\n"); + grammarBuilder.append("KW2434 : 'KW' '2434';\n"); + grammarBuilder.append("KW2435 : 'KW' '2435';\n"); + grammarBuilder.append("KW2436 : 'KW' '2436';\n"); + grammarBuilder.append("KW2437 : 'KW' '2437';\n"); + grammarBuilder.append("KW2438 : 'KW' '2438';\n"); + grammarBuilder.append("KW2439 : 'KW' '2439';\n"); + grammarBuilder.append("KW2440 : 'KW' '2440';\n"); + grammarBuilder.append("KW2441 : 'KW' '2441';\n"); + grammarBuilder.append("KW2442 : 'KW' '2442';\n"); + grammarBuilder.append("KW2443 : 'KW' '2443';\n"); + grammarBuilder.append("KW2444 : 'KW' '2444';\n"); + grammarBuilder.append("KW2445 : 'KW' '2445';\n"); + grammarBuilder.append("KW2446 : 'KW' '2446';\n"); + grammarBuilder.append("KW2447 : 'KW' '2447';\n"); + grammarBuilder.append("KW2448 : 'KW' '2448';\n"); + grammarBuilder.append("KW2449 : 'KW' '2449';\n"); + grammarBuilder.append("KW2450 : 'KW' '2450';\n"); + grammarBuilder.append("KW2451 : 'KW' '2451';\n"); + grammarBuilder.append("KW2452 : 'KW' '2452';\n"); + grammarBuilder.append("KW2453 : 'KW' '2453';\n"); + grammarBuilder.append("KW2454 : 'KW' '2454';\n"); + grammarBuilder.append("KW2455 : 'KW' '2455';\n"); + grammarBuilder.append("KW2456 : 'KW' '2456';\n"); + grammarBuilder.append("KW2457 : 'KW' '2457';\n"); + grammarBuilder.append("KW2458 : 'KW' '2458';\n"); + grammarBuilder.append("KW2459 : 'KW' '2459';\n"); + grammarBuilder.append("KW2460 : 'KW' '2460';\n"); + grammarBuilder.append("KW2461 : 'KW' '2461';\n"); + grammarBuilder.append("KW2462 : 'KW' '2462';\n"); + grammarBuilder.append("KW2463 : 'KW' '2463';\n"); + grammarBuilder.append("KW2464 : 'KW' '2464';\n"); + grammarBuilder.append("KW2465 : 'KW' '2465';\n"); + grammarBuilder.append("KW2466 : 'KW' '2466';\n"); + grammarBuilder.append("KW2467 : 'KW' '2467';\n"); + grammarBuilder.append("KW2468 : 'KW' '2468';\n"); + grammarBuilder.append("KW2469 : 'KW' '2469';\n"); + grammarBuilder.append("KW2470 : 'KW' '2470';\n"); + grammarBuilder.append("KW2471 : 'KW' '2471';\n"); + grammarBuilder.append("KW2472 : 'KW' '2472';\n"); + grammarBuilder.append("KW2473 : 'KW' '2473';\n"); + grammarBuilder.append("KW2474 : 'KW' '2474';\n"); + grammarBuilder.append("KW2475 : 'KW' '2475';\n"); + grammarBuilder.append("KW2476 : 'KW' '2476';\n"); + grammarBuilder.append("KW2477 : 'KW' '2477';\n"); + grammarBuilder.append("KW2478 : 'KW' '2478';\n"); + grammarBuilder.append("KW2479 : 'KW' '2479';\n"); + grammarBuilder.append("KW2480 : 'KW' '2480';\n"); + grammarBuilder.append("KW2481 : 'KW' '2481';\n"); + grammarBuilder.append("KW2482 : 'KW' '2482';\n"); + grammarBuilder.append("KW2483 : 'KW' '2483';\n"); + grammarBuilder.append("KW2484 : 'KW' '2484';\n"); + grammarBuilder.append("KW2485 : 'KW' '2485';\n"); + grammarBuilder.append("KW2486 : 'KW' '2486';\n"); + grammarBuilder.append("KW2487 : 'KW' '2487';\n"); + grammarBuilder.append("KW2488 : 'KW' '2488';\n"); + grammarBuilder.append("KW2489 : 'KW' '2489';\n"); + grammarBuilder.append("KW2490 : 'KW' '2490';\n"); + grammarBuilder.append("KW2491 : 'KW' '2491';\n"); + grammarBuilder.append("KW2492 : 'KW' '2492';\n"); + grammarBuilder.append("KW2493 : 'KW' '2493';\n"); + grammarBuilder.append("KW2494 : 'KW' '2494';\n"); + grammarBuilder.append("KW2495 : 'KW' '2495';\n"); + grammarBuilder.append("KW2496 : 'KW' '2496';\n"); + grammarBuilder.append("KW2497 : 'KW' '2497';\n"); + grammarBuilder.append("KW2498 : 'KW' '2498';\n"); + grammarBuilder.append("KW2499 : 'KW' '2499';\n"); + grammarBuilder.append("KW2500 : 'KW' '2500';\n"); + grammarBuilder.append("KW2501 : 'KW' '2501';\n"); + grammarBuilder.append("KW2502 : 'KW' '2502';\n"); + grammarBuilder.append("KW2503 : 'KW' '2503';\n"); + grammarBuilder.append("KW2504 : 'KW' '2504';\n"); + grammarBuilder.append("KW2505 : 'KW' '2505';\n"); + grammarBuilder.append("KW2506 : 'KW' '2506';\n"); + grammarBuilder.append("KW2507 : 'KW' '2507';\n"); + grammarBuilder.append("KW2508 : 'KW' '2508';\n"); + grammarBuilder.append("KW2509 : 'KW' '2509';\n"); + grammarBuilder.append("KW2510 : 'KW' '2510';\n"); + grammarBuilder.append("KW2511 : 'KW' '2511';\n"); + grammarBuilder.append("KW2512 : 'KW' '2512';\n"); + grammarBuilder.append("KW2513 : 'KW' '2513';\n"); + grammarBuilder.append("KW2514 : 'KW' '2514';\n"); + grammarBuilder.append("KW2515 : 'KW' '2515';\n"); + grammarBuilder.append("KW2516 : 'KW' '2516';\n"); + grammarBuilder.append("KW2517 : 'KW' '2517';\n"); + grammarBuilder.append("KW2518 : 'KW' '2518';\n"); + grammarBuilder.append("KW2519 : 'KW' '2519';\n"); + grammarBuilder.append("KW2520 : 'KW' '2520';\n"); + grammarBuilder.append("KW2521 : 'KW' '2521';\n"); + grammarBuilder.append("KW2522 : 'KW' '2522';\n"); + grammarBuilder.append("KW2523 : 'KW' '2523';\n"); + grammarBuilder.append("KW2524 : 'KW' '2524';\n"); + grammarBuilder.append("KW2525 : 'KW' '2525';\n"); + grammarBuilder.append("KW2526 : 'KW' '2526';\n"); + grammarBuilder.append("KW2527 : 'KW' '2527';\n"); + grammarBuilder.append("KW2528 : 'KW' '2528';\n"); + grammarBuilder.append("KW2529 : 'KW' '2529';\n"); + grammarBuilder.append("KW2530 : 'KW' '2530';\n"); + grammarBuilder.append("KW2531 : 'KW' '2531';\n"); + grammarBuilder.append("KW2532 : 'KW' '2532';\n"); + grammarBuilder.append("KW2533 : 'KW' '2533';\n"); + grammarBuilder.append("KW2534 : 'KW' '2534';\n"); + grammarBuilder.append("KW2535 : 'KW' '2535';\n"); + grammarBuilder.append("KW2536 : 'KW' '2536';\n"); + grammarBuilder.append("KW2537 : 'KW' '2537';\n"); + grammarBuilder.append("KW2538 : 'KW' '2538';\n"); + grammarBuilder.append("KW2539 : 'KW' '2539';\n"); + grammarBuilder.append("KW2540 : 'KW' '2540';\n"); + grammarBuilder.append("KW2541 : 'KW' '2541';\n"); + grammarBuilder.append("KW2542 : 'KW' '2542';\n"); + grammarBuilder.append("KW2543 : 'KW' '2543';\n"); + grammarBuilder.append("KW2544 : 'KW' '2544';\n"); + grammarBuilder.append("KW2545 : 'KW' '2545';\n"); + grammarBuilder.append("KW2546 : 'KW' '2546';\n"); + grammarBuilder.append("KW2547 : 'KW' '2547';\n"); + grammarBuilder.append("KW2548 : 'KW' '2548';\n"); + grammarBuilder.append("KW2549 : 'KW' '2549';\n"); + grammarBuilder.append("KW2550 : 'KW' '2550';\n"); + grammarBuilder.append("KW2551 : 'KW' '2551';\n"); + grammarBuilder.append("KW2552 : 'KW' '2552';\n"); + grammarBuilder.append("KW2553 : 'KW' '2553';\n"); + grammarBuilder.append("KW2554 : 'KW' '2554';\n"); + grammarBuilder.append("KW2555 : 'KW' '2555';\n"); + grammarBuilder.append("KW2556 : 'KW' '2556';\n"); + grammarBuilder.append("KW2557 : 'KW' '2557';\n"); + grammarBuilder.append("KW2558 : 'KW' '2558';\n"); + grammarBuilder.append("KW2559 : 'KW' '2559';\n"); + grammarBuilder.append("KW2560 : 'KW' '2560';\n"); + grammarBuilder.append("KW2561 : 'KW' '2561';\n"); + grammarBuilder.append("KW2562 : 'KW' '2562';\n"); + grammarBuilder.append("KW2563 : 'KW' '2563';\n"); + grammarBuilder.append("KW2564 : 'KW' '2564';\n"); + grammarBuilder.append("KW2565 : 'KW' '2565';\n"); + grammarBuilder.append("KW2566 : 'KW' '2566';\n"); + grammarBuilder.append("KW2567 : 'KW' '2567';\n"); + grammarBuilder.append("KW2568 : 'KW' '2568';\n"); + grammarBuilder.append("KW2569 : 'KW' '2569';\n"); + grammarBuilder.append("KW2570 : 'KW' '2570';\n"); + grammarBuilder.append("KW2571 : 'KW' '2571';\n"); + grammarBuilder.append("KW2572 : 'KW' '2572';\n"); + grammarBuilder.append("KW2573 : 'KW' '2573';\n"); + grammarBuilder.append("KW2574 : 'KW' '2574';\n"); + grammarBuilder.append("KW2575 : 'KW' '2575';\n"); + grammarBuilder.append("KW2576 : 'KW' '2576';\n"); + grammarBuilder.append("KW2577 : 'KW' '2577';\n"); + grammarBuilder.append("KW2578 : 'KW' '2578';\n"); + grammarBuilder.append("KW2579 : 'KW' '2579';\n"); + grammarBuilder.append("KW2580 : 'KW' '2580';\n"); + grammarBuilder.append("KW2581 : 'KW' '2581';\n"); + grammarBuilder.append("KW2582 : 'KW' '2582';\n"); + grammarBuilder.append("KW2583 : 'KW' '2583';\n"); + grammarBuilder.append("KW2584 : 'KW' '2584';\n"); + grammarBuilder.append("KW2585 : 'KW' '2585';\n"); + grammarBuilder.append("KW2586 : 'KW' '2586';\n"); + grammarBuilder.append("KW2587 : 'KW' '2587';\n"); + grammarBuilder.append("KW2588 : 'KW' '2588';\n"); + grammarBuilder.append("KW2589 : 'KW' '2589';\n"); + grammarBuilder.append("KW2590 : 'KW' '2590';\n"); + grammarBuilder.append("KW2591 : 'KW' '2591';\n"); + grammarBuilder.append("KW2592 : 'KW' '2592';\n"); + grammarBuilder.append("KW2593 : 'KW' '2593';\n"); + grammarBuilder.append("KW2594 : 'KW' '2594';\n"); + grammarBuilder.append("KW2595 : 'KW' '2595';\n"); + grammarBuilder.append("KW2596 : 'KW' '2596';\n"); + grammarBuilder.append("KW2597 : 'KW' '2597';\n"); + grammarBuilder.append("KW2598 : 'KW' '2598';\n"); + grammarBuilder.append("KW2599 : 'KW' '2599';\n"); + grammarBuilder.append("KW2600 : 'KW' '2600';\n"); + grammarBuilder.append("KW2601 : 'KW' '2601';\n"); + grammarBuilder.append("KW2602 : 'KW' '2602';\n"); + grammarBuilder.append("KW2603 : 'KW' '2603';\n"); + grammarBuilder.append("KW2604 : 'KW' '2604';\n"); + grammarBuilder.append("KW2605 : 'KW' '2605';\n"); + grammarBuilder.append("KW2606 : 'KW' '2606';\n"); + grammarBuilder.append("KW2607 : 'KW' '2607';\n"); + grammarBuilder.append("KW2608 : 'KW' '2608';\n"); + grammarBuilder.append("KW2609 : 'KW' '2609';\n"); + grammarBuilder.append("KW2610 : 'KW' '2610';\n"); + grammarBuilder.append("KW2611 : 'KW' '2611';\n"); + grammarBuilder.append("KW2612 : 'KW' '2612';\n"); + grammarBuilder.append("KW2613 : 'KW' '2613';\n"); + grammarBuilder.append("KW2614 : 'KW' '2614';\n"); + grammarBuilder.append("KW2615 : 'KW' '2615';\n"); + grammarBuilder.append("KW2616 : 'KW' '2616';\n"); + grammarBuilder.append("KW2617 : 'KW' '2617';\n"); + grammarBuilder.append("KW2618 : 'KW' '2618';\n"); + grammarBuilder.append("KW2619 : 'KW' '2619';\n"); + grammarBuilder.append("KW2620 : 'KW' '2620';\n"); + grammarBuilder.append("KW2621 : 'KW' '2621';\n"); + grammarBuilder.append("KW2622 : 'KW' '2622';\n"); + grammarBuilder.append("KW2623 : 'KW' '2623';\n"); + grammarBuilder.append("KW2624 : 'KW' '2624';\n"); + grammarBuilder.append("KW2625 : 'KW' '2625';\n"); + grammarBuilder.append("KW2626 : 'KW' '2626';\n"); + grammarBuilder.append("KW2627 : 'KW' '2627';\n"); + grammarBuilder.append("KW2628 : 'KW' '2628';\n"); + grammarBuilder.append("KW2629 : 'KW' '2629';\n"); + grammarBuilder.append("KW2630 : 'KW' '2630';\n"); + grammarBuilder.append("KW2631 : 'KW' '2631';\n"); + grammarBuilder.append("KW2632 : 'KW' '2632';\n"); + grammarBuilder.append("KW2633 : 'KW' '2633';\n"); + grammarBuilder.append("KW2634 : 'KW' '2634';\n"); + grammarBuilder.append("KW2635 : 'KW' '2635';\n"); + grammarBuilder.append("KW2636 : 'KW' '2636';\n"); + grammarBuilder.append("KW2637 : 'KW' '2637';\n"); + grammarBuilder.append("KW2638 : 'KW' '2638';\n"); + grammarBuilder.append("KW2639 : 'KW' '2639';\n"); + grammarBuilder.append("KW2640 : 'KW' '2640';\n"); + grammarBuilder.append("KW2641 : 'KW' '2641';\n"); + grammarBuilder.append("KW2642 : 'KW' '2642';\n"); + grammarBuilder.append("KW2643 : 'KW' '2643';\n"); + grammarBuilder.append("KW2644 : 'KW' '2644';\n"); + grammarBuilder.append("KW2645 : 'KW' '2645';\n"); + grammarBuilder.append("KW2646 : 'KW' '2646';\n"); + grammarBuilder.append("KW2647 : 'KW' '2647';\n"); + grammarBuilder.append("KW2648 : 'KW' '2648';\n"); + grammarBuilder.append("KW2649 : 'KW' '2649';\n"); + grammarBuilder.append("KW2650 : 'KW' '2650';\n"); + grammarBuilder.append("KW2651 : 'KW' '2651';\n"); + grammarBuilder.append("KW2652 : 'KW' '2652';\n"); + grammarBuilder.append("KW2653 : 'KW' '2653';\n"); + grammarBuilder.append("KW2654 : 'KW' '2654';\n"); + grammarBuilder.append("KW2655 : 'KW' '2655';\n"); + grammarBuilder.append("KW2656 : 'KW' '2656';\n"); + grammarBuilder.append("KW2657 : 'KW' '2657';\n"); + grammarBuilder.append("KW2658 : 'KW' '2658';\n"); + grammarBuilder.append("KW2659 : 'KW' '2659';\n"); + grammarBuilder.append("KW2660 : 'KW' '2660';\n"); + grammarBuilder.append("KW2661 : 'KW' '2661';\n"); + grammarBuilder.append("KW2662 : 'KW' '2662';\n"); + grammarBuilder.append("KW2663 : 'KW' '2663';\n"); + grammarBuilder.append("KW2664 : 'KW' '2664';\n"); + grammarBuilder.append("KW2665 : 'KW' '2665';\n"); + grammarBuilder.append("KW2666 : 'KW' '2666';\n"); + grammarBuilder.append("KW2667 : 'KW' '2667';\n"); + grammarBuilder.append("KW2668 : 'KW' '2668';\n"); + grammarBuilder.append("KW2669 : 'KW' '2669';\n"); + grammarBuilder.append("KW2670 : 'KW' '2670';\n"); + grammarBuilder.append("KW2671 : 'KW' '2671';\n"); + grammarBuilder.append("KW2672 : 'KW' '2672';\n"); + grammarBuilder.append("KW2673 : 'KW' '2673';\n"); + grammarBuilder.append("KW2674 : 'KW' '2674';\n"); + grammarBuilder.append("KW2675 : 'KW' '2675';\n"); + grammarBuilder.append("KW2676 : 'KW' '2676';\n"); + grammarBuilder.append("KW2677 : 'KW' '2677';\n"); + grammarBuilder.append("KW2678 : 'KW' '2678';\n"); + grammarBuilder.append("KW2679 : 'KW' '2679';\n"); + grammarBuilder.append("KW2680 : 'KW' '2680';\n"); + grammarBuilder.append("KW2681 : 'KW' '2681';\n"); + grammarBuilder.append("KW2682 : 'KW' '2682';\n"); + grammarBuilder.append("KW2683 : 'KW' '2683';\n"); + grammarBuilder.append("KW2684 : 'KW' '2684';\n"); + grammarBuilder.append("KW2685 : 'KW' '2685';\n"); + grammarBuilder.append("KW2686 : 'KW' '2686';\n"); + grammarBuilder.append("KW2687 : 'KW' '2687';\n"); + grammarBuilder.append("KW2688 : 'KW' '2688';\n"); + grammarBuilder.append("KW2689 : 'KW' '2689';\n"); + grammarBuilder.append("KW2690 : 'KW' '2690';\n"); + grammarBuilder.append("KW2691 : 'KW' '2691';\n"); + grammarBuilder.append("KW2692 : 'KW' '2692';\n"); + grammarBuilder.append("KW2693 : 'KW' '2693';\n"); + grammarBuilder.append("KW2694 : 'KW' '2694';\n"); + grammarBuilder.append("KW2695 : 'KW' '2695';\n"); + grammarBuilder.append("KW2696 : 'KW' '2696';\n"); + grammarBuilder.append("KW2697 : 'KW' '2697';\n"); + grammarBuilder.append("KW2698 : 'KW' '2698';\n"); + grammarBuilder.append("KW2699 : 'KW' '2699';\n"); + grammarBuilder.append("KW2700 : 'KW' '2700';\n"); + grammarBuilder.append("KW2701 : 'KW' '2701';\n"); + grammarBuilder.append("KW2702 : 'KW' '2702';\n"); + grammarBuilder.append("KW2703 : 'KW' '2703';\n"); + grammarBuilder.append("KW2704 : 'KW' '2704';\n"); + grammarBuilder.append("KW2705 : 'KW' '2705';\n"); + grammarBuilder.append("KW2706 : 'KW' '2706';\n"); + grammarBuilder.append("KW2707 : 'KW' '2707';\n"); + grammarBuilder.append("KW2708 : 'KW' '2708';\n"); + grammarBuilder.append("KW2709 : 'KW' '2709';\n"); + grammarBuilder.append("KW2710 : 'KW' '2710';\n"); + grammarBuilder.append("KW2711 : 'KW' '2711';\n"); + grammarBuilder.append("KW2712 : 'KW' '2712';\n"); + grammarBuilder.append("KW2713 : 'KW' '2713';\n"); + grammarBuilder.append("KW2714 : 'KW' '2714';\n"); + grammarBuilder.append("KW2715 : 'KW' '2715';\n"); + grammarBuilder.append("KW2716 : 'KW' '2716';\n"); + grammarBuilder.append("KW2717 : 'KW' '2717';\n"); + grammarBuilder.append("KW2718 : 'KW' '2718';\n"); + grammarBuilder.append("KW2719 : 'KW' '2719';\n"); + grammarBuilder.append("KW2720 : 'KW' '2720';\n"); + grammarBuilder.append("KW2721 : 'KW' '2721';\n"); + grammarBuilder.append("KW2722 : 'KW' '2722';\n"); + grammarBuilder.append("KW2723 : 'KW' '2723';\n"); + grammarBuilder.append("KW2724 : 'KW' '2724';\n"); + grammarBuilder.append("KW2725 : 'KW' '2725';\n"); + grammarBuilder.append("KW2726 : 'KW' '2726';\n"); + grammarBuilder.append("KW2727 : 'KW' '2727';\n"); + grammarBuilder.append("KW2728 : 'KW' '2728';\n"); + grammarBuilder.append("KW2729 : 'KW' '2729';\n"); + grammarBuilder.append("KW2730 : 'KW' '2730';\n"); + grammarBuilder.append("KW2731 : 'KW' '2731';\n"); + grammarBuilder.append("KW2732 : 'KW' '2732';\n"); + grammarBuilder.append("KW2733 : 'KW' '2733';\n"); + grammarBuilder.append("KW2734 : 'KW' '2734';\n"); + grammarBuilder.append("KW2735 : 'KW' '2735';\n"); + grammarBuilder.append("KW2736 : 'KW' '2736';\n"); + grammarBuilder.append("KW2737 : 'KW' '2737';\n"); + grammarBuilder.append("KW2738 : 'KW' '2738';\n"); + grammarBuilder.append("KW2739 : 'KW' '2739';\n"); + grammarBuilder.append("KW2740 : 'KW' '2740';\n"); + grammarBuilder.append("KW2741 : 'KW' '2741';\n"); + grammarBuilder.append("KW2742 : 'KW' '2742';\n"); + grammarBuilder.append("KW2743 : 'KW' '2743';\n"); + grammarBuilder.append("KW2744 : 'KW' '2744';\n"); + grammarBuilder.append("KW2745 : 'KW' '2745';\n"); + grammarBuilder.append("KW2746 : 'KW' '2746';\n"); + grammarBuilder.append("KW2747 : 'KW' '2747';\n"); + grammarBuilder.append("KW2748 : 'KW' '2748';\n"); + grammarBuilder.append("KW2749 : 'KW' '2749';\n"); + grammarBuilder.append("KW2750 : 'KW' '2750';\n"); + grammarBuilder.append("KW2751 : 'KW' '2751';\n"); + grammarBuilder.append("KW2752 : 'KW' '2752';\n"); + grammarBuilder.append("KW2753 : 'KW' '2753';\n"); + grammarBuilder.append("KW2754 : 'KW' '2754';\n"); + grammarBuilder.append("KW2755 : 'KW' '2755';\n"); + grammarBuilder.append("KW2756 : 'KW' '2756';\n"); + grammarBuilder.append("KW2757 : 'KW' '2757';\n"); + grammarBuilder.append("KW2758 : 'KW' '2758';\n"); + grammarBuilder.append("KW2759 : 'KW' '2759';\n"); + grammarBuilder.append("KW2760 : 'KW' '2760';\n"); + grammarBuilder.append("KW2761 : 'KW' '2761';\n"); + grammarBuilder.append("KW2762 : 'KW' '2762';\n"); + grammarBuilder.append("KW2763 : 'KW' '2763';\n"); + grammarBuilder.append("KW2764 : 'KW' '2764';\n"); + grammarBuilder.append("KW2765 : 'KW' '2765';\n"); + grammarBuilder.append("KW2766 : 'KW' '2766';\n"); + grammarBuilder.append("KW2767 : 'KW' '2767';\n"); + grammarBuilder.append("KW2768 : 'KW' '2768';\n"); + grammarBuilder.append("KW2769 : 'KW' '2769';\n"); + grammarBuilder.append("KW2770 : 'KW' '2770';\n"); + grammarBuilder.append("KW2771 : 'KW' '2771';\n"); + grammarBuilder.append("KW2772 : 'KW' '2772';\n"); + grammarBuilder.append("KW2773 : 'KW' '2773';\n"); + grammarBuilder.append("KW2774 : 'KW' '2774';\n"); + grammarBuilder.append("KW2775 : 'KW' '2775';\n"); + grammarBuilder.append("KW2776 : 'KW' '2776';\n"); + grammarBuilder.append("KW2777 : 'KW' '2777';\n"); + grammarBuilder.append("KW2778 : 'KW' '2778';\n"); + grammarBuilder.append("KW2779 : 'KW' '2779';\n"); + grammarBuilder.append("KW2780 : 'KW' '2780';\n"); + grammarBuilder.append("KW2781 : 'KW' '2781';\n"); + grammarBuilder.append("KW2782 : 'KW' '2782';\n"); + grammarBuilder.append("KW2783 : 'KW' '2783';\n"); + grammarBuilder.append("KW2784 : 'KW' '2784';\n"); + grammarBuilder.append("KW2785 : 'KW' '2785';\n"); + grammarBuilder.append("KW2786 : 'KW' '2786';\n"); + grammarBuilder.append("KW2787 : 'KW' '2787';\n"); + grammarBuilder.append("KW2788 : 'KW' '2788';\n"); + grammarBuilder.append("KW2789 : 'KW' '2789';\n"); + grammarBuilder.append("KW2790 : 'KW' '2790';\n"); + grammarBuilder.append("KW2791 : 'KW' '2791';\n"); + grammarBuilder.append("KW2792 : 'KW' '2792';\n"); + grammarBuilder.append("KW2793 : 'KW' '2793';\n"); + grammarBuilder.append("KW2794 : 'KW' '2794';\n"); + grammarBuilder.append("KW2795 : 'KW' '2795';\n"); + grammarBuilder.append("KW2796 : 'KW' '2796';\n"); + grammarBuilder.append("KW2797 : 'KW' '2797';\n"); + grammarBuilder.append("KW2798 : 'KW' '2798';\n"); + grammarBuilder.append("KW2799 : 'KW' '2799';\n"); + grammarBuilder.append("KW2800 : 'KW' '2800';\n"); + grammarBuilder.append("KW2801 : 'KW' '2801';\n"); + grammarBuilder.append("KW2802 : 'KW' '2802';\n"); + grammarBuilder.append("KW2803 : 'KW' '2803';\n"); + grammarBuilder.append("KW2804 : 'KW' '2804';\n"); + grammarBuilder.append("KW2805 : 'KW' '2805';\n"); + grammarBuilder.append("KW2806 : 'KW' '2806';\n"); + grammarBuilder.append("KW2807 : 'KW' '2807';\n"); + grammarBuilder.append("KW2808 : 'KW' '2808';\n"); + grammarBuilder.append("KW2809 : 'KW' '2809';\n"); + grammarBuilder.append("KW2810 : 'KW' '2810';\n"); + grammarBuilder.append("KW2811 : 'KW' '2811';\n"); + grammarBuilder.append("KW2812 : 'KW' '2812';\n"); + grammarBuilder.append("KW2813 : 'KW' '2813';\n"); + grammarBuilder.append("KW2814 : 'KW' '2814';\n"); + grammarBuilder.append("KW2815 : 'KW' '2815';\n"); + grammarBuilder.append("KW2816 : 'KW' '2816';\n"); + grammarBuilder.append("KW2817 : 'KW' '2817';\n"); + grammarBuilder.append("KW2818 : 'KW' '2818';\n"); + grammarBuilder.append("KW2819 : 'KW' '2819';\n"); + grammarBuilder.append("KW2820 : 'KW' '2820';\n"); + grammarBuilder.append("KW2821 : 'KW' '2821';\n"); + grammarBuilder.append("KW2822 : 'KW' '2822';\n"); + grammarBuilder.append("KW2823 : 'KW' '2823';\n"); + grammarBuilder.append("KW2824 : 'KW' '2824';\n"); + grammarBuilder.append("KW2825 : 'KW' '2825';\n"); + grammarBuilder.append("KW2826 : 'KW' '2826';\n"); + grammarBuilder.append("KW2827 : 'KW' '2827';\n"); + grammarBuilder.append("KW2828 : 'KW' '2828';\n"); + grammarBuilder.append("KW2829 : 'KW' '2829';\n"); + grammarBuilder.append("KW2830 : 'KW' '2830';\n"); + grammarBuilder.append("KW2831 : 'KW' '2831';\n"); + grammarBuilder.append("KW2832 : 'KW' '2832';\n"); + grammarBuilder.append("KW2833 : 'KW' '2833';\n"); + grammarBuilder.append("KW2834 : 'KW' '2834';\n"); + grammarBuilder.append("KW2835 : 'KW' '2835';\n"); + grammarBuilder.append("KW2836 : 'KW' '2836';\n"); + grammarBuilder.append("KW2837 : 'KW' '2837';\n"); + grammarBuilder.append("KW2838 : 'KW' '2838';\n"); + grammarBuilder.append("KW2839 : 'KW' '2839';\n"); + grammarBuilder.append("KW2840 : 'KW' '2840';\n"); + grammarBuilder.append("KW2841 : 'KW' '2841';\n"); + grammarBuilder.append("KW2842 : 'KW' '2842';\n"); + grammarBuilder.append("KW2843 : 'KW' '2843';\n"); + grammarBuilder.append("KW2844 : 'KW' '2844';\n"); + grammarBuilder.append("KW2845 : 'KW' '2845';\n"); + grammarBuilder.append("KW2846 : 'KW' '2846';\n"); + grammarBuilder.append("KW2847 : 'KW' '2847';\n"); + grammarBuilder.append("KW2848 : 'KW' '2848';\n"); + grammarBuilder.append("KW2849 : 'KW' '2849';\n"); + grammarBuilder.append("KW2850 : 'KW' '2850';\n"); + grammarBuilder.append("KW2851 : 'KW' '2851';\n"); + grammarBuilder.append("KW2852 : 'KW' '2852';\n"); + grammarBuilder.append("KW2853 : 'KW' '2853';\n"); + grammarBuilder.append("KW2854 : 'KW' '2854';\n"); + grammarBuilder.append("KW2855 : 'KW' '2855';\n"); + grammarBuilder.append("KW2856 : 'KW' '2856';\n"); + grammarBuilder.append("KW2857 : 'KW' '2857';\n"); + grammarBuilder.append("KW2858 : 'KW' '2858';\n"); + grammarBuilder.append("KW2859 : 'KW' '2859';\n"); + grammarBuilder.append("KW2860 : 'KW' '2860';\n"); + grammarBuilder.append("KW2861 : 'KW' '2861';\n"); + grammarBuilder.append("KW2862 : 'KW' '2862';\n"); + grammarBuilder.append("KW2863 : 'KW' '2863';\n"); + grammarBuilder.append("KW2864 : 'KW' '2864';\n"); + grammarBuilder.append("KW2865 : 'KW' '2865';\n"); + grammarBuilder.append("KW2866 : 'KW' '2866';\n"); + grammarBuilder.append("KW2867 : 'KW' '2867';\n"); + grammarBuilder.append("KW2868 : 'KW' '2868';\n"); + grammarBuilder.append("KW2869 : 'KW' '2869';\n"); + grammarBuilder.append("KW2870 : 'KW' '2870';\n"); + grammarBuilder.append("KW2871 : 'KW' '2871';\n"); + grammarBuilder.append("KW2872 : 'KW' '2872';\n"); + grammarBuilder.append("KW2873 : 'KW' '2873';\n"); + grammarBuilder.append("KW2874 : 'KW' '2874';\n"); + grammarBuilder.append("KW2875 : 'KW' '2875';\n"); + grammarBuilder.append("KW2876 : 'KW' '2876';\n"); + grammarBuilder.append("KW2877 : 'KW' '2877';\n"); + grammarBuilder.append("KW2878 : 'KW' '2878';\n"); + grammarBuilder.append("KW2879 : 'KW' '2879';\n"); + grammarBuilder.append("KW2880 : 'KW' '2880';\n"); + grammarBuilder.append("KW2881 : 'KW' '2881';\n"); + grammarBuilder.append("KW2882 : 'KW' '2882';\n"); + grammarBuilder.append("KW2883 : 'KW' '2883';\n"); + grammarBuilder.append("KW2884 : 'KW' '2884';\n"); + grammarBuilder.append("KW2885 : 'KW' '2885';\n"); + grammarBuilder.append("KW2886 : 'KW' '2886';\n"); + grammarBuilder.append("KW2887 : 'KW' '2887';\n"); + grammarBuilder.append("KW2888 : 'KW' '2888';\n"); + grammarBuilder.append("KW2889 : 'KW' '2889';\n"); + grammarBuilder.append("KW2890 : 'KW' '2890';\n"); + grammarBuilder.append("KW2891 : 'KW' '2891';\n"); + grammarBuilder.append("KW2892 : 'KW' '2892';\n"); + grammarBuilder.append("KW2893 : 'KW' '2893';\n"); + grammarBuilder.append("KW2894 : 'KW' '2894';\n"); + grammarBuilder.append("KW2895 : 'KW' '2895';\n"); + grammarBuilder.append("KW2896 : 'KW' '2896';\n"); + grammarBuilder.append("KW2897 : 'KW' '2897';\n"); + grammarBuilder.append("KW2898 : 'KW' '2898';\n"); + grammarBuilder.append("KW2899 : 'KW' '2899';\n"); + grammarBuilder.append("KW2900 : 'KW' '2900';\n"); + grammarBuilder.append("KW2901 : 'KW' '2901';\n"); + grammarBuilder.append("KW2902 : 'KW' '2902';\n"); + grammarBuilder.append("KW2903 : 'KW' '2903';\n"); + grammarBuilder.append("KW2904 : 'KW' '2904';\n"); + grammarBuilder.append("KW2905 : 'KW' '2905';\n"); + grammarBuilder.append("KW2906 : 'KW' '2906';\n"); + grammarBuilder.append("KW2907 : 'KW' '2907';\n"); + grammarBuilder.append("KW2908 : 'KW' '2908';\n"); + grammarBuilder.append("KW2909 : 'KW' '2909';\n"); + grammarBuilder.append("KW2910 : 'KW' '2910';\n"); + grammarBuilder.append("KW2911 : 'KW' '2911';\n"); + grammarBuilder.append("KW2912 : 'KW' '2912';\n"); + grammarBuilder.append("KW2913 : 'KW' '2913';\n"); + grammarBuilder.append("KW2914 : 'KW' '2914';\n"); + grammarBuilder.append("KW2915 : 'KW' '2915';\n"); + grammarBuilder.append("KW2916 : 'KW' '2916';\n"); + grammarBuilder.append("KW2917 : 'KW' '2917';\n"); + grammarBuilder.append("KW2918 : 'KW' '2918';\n"); + grammarBuilder.append("KW2919 : 'KW' '2919';\n"); + grammarBuilder.append("KW2920 : 'KW' '2920';\n"); + grammarBuilder.append("KW2921 : 'KW' '2921';\n"); + grammarBuilder.append("KW2922 : 'KW' '2922';\n"); + grammarBuilder.append("KW2923 : 'KW' '2923';\n"); + grammarBuilder.append("KW2924 : 'KW' '2924';\n"); + grammarBuilder.append("KW2925 : 'KW' '2925';\n"); + grammarBuilder.append("KW2926 : 'KW' '2926';\n"); + grammarBuilder.append("KW2927 : 'KW' '2927';\n"); + grammarBuilder.append("KW2928 : 'KW' '2928';\n"); + grammarBuilder.append("KW2929 : 'KW' '2929';\n"); + grammarBuilder.append("KW2930 : 'KW' '2930';\n"); + grammarBuilder.append("KW2931 : 'KW' '2931';\n"); + grammarBuilder.append("KW2932 : 'KW' '2932';\n"); + grammarBuilder.append("KW2933 : 'KW' '2933';\n"); + grammarBuilder.append("KW2934 : 'KW' '2934';\n"); + grammarBuilder.append("KW2935 : 'KW' '2935';\n"); + grammarBuilder.append("KW2936 : 'KW' '2936';\n"); + grammarBuilder.append("KW2937 : 'KW' '2937';\n"); + grammarBuilder.append("KW2938 : 'KW' '2938';\n"); + grammarBuilder.append("KW2939 : 'KW' '2939';\n"); + grammarBuilder.append("KW2940 : 'KW' '2940';\n"); + grammarBuilder.append("KW2941 : 'KW' '2941';\n"); + grammarBuilder.append("KW2942 : 'KW' '2942';\n"); + grammarBuilder.append("KW2943 : 'KW' '2943';\n"); + grammarBuilder.append("KW2944 : 'KW' '2944';\n"); + grammarBuilder.append("KW2945 : 'KW' '2945';\n"); + grammarBuilder.append("KW2946 : 'KW' '2946';\n"); + grammarBuilder.append("KW2947 : 'KW' '2947';\n"); + grammarBuilder.append("KW2948 : 'KW' '2948';\n"); + grammarBuilder.append("KW2949 : 'KW' '2949';\n"); + grammarBuilder.append("KW2950 : 'KW' '2950';\n"); + grammarBuilder.append("KW2951 : 'KW' '2951';\n"); + grammarBuilder.append("KW2952 : 'KW' '2952';\n"); + grammarBuilder.append("KW2953 : 'KW' '2953';\n"); + grammarBuilder.append("KW2954 : 'KW' '2954';\n"); + grammarBuilder.append("KW2955 : 'KW' '2955';\n"); + grammarBuilder.append("KW2956 : 'KW' '2956';\n"); + grammarBuilder.append("KW2957 : 'KW' '2957';\n"); + grammarBuilder.append("KW2958 : 'KW' '2958';\n"); + grammarBuilder.append("KW2959 : 'KW' '2959';\n"); + grammarBuilder.append("KW2960 : 'KW' '2960';\n"); + grammarBuilder.append("KW2961 : 'KW' '2961';\n"); + grammarBuilder.append("KW2962 : 'KW' '2962';\n"); + grammarBuilder.append("KW2963 : 'KW' '2963';\n"); + grammarBuilder.append("KW2964 : 'KW' '2964';\n"); + grammarBuilder.append("KW2965 : 'KW' '2965';\n"); + grammarBuilder.append("KW2966 : 'KW' '2966';\n"); + grammarBuilder.append("KW2967 : 'KW' '2967';\n"); + grammarBuilder.append("KW2968 : 'KW' '2968';\n"); + grammarBuilder.append("KW2969 : 'KW' '2969';\n"); + grammarBuilder.append("KW2970 : 'KW' '2970';\n"); + grammarBuilder.append("KW2971 : 'KW' '2971';\n"); + grammarBuilder.append("KW2972 : 'KW' '2972';\n"); + grammarBuilder.append("KW2973 : 'KW' '2973';\n"); + grammarBuilder.append("KW2974 : 'KW' '2974';\n"); + grammarBuilder.append("KW2975 : 'KW' '2975';\n"); + grammarBuilder.append("KW2976 : 'KW' '2976';\n"); + grammarBuilder.append("KW2977 : 'KW' '2977';\n"); + grammarBuilder.append("KW2978 : 'KW' '2978';\n"); + grammarBuilder.append("KW2979 : 'KW' '2979';\n"); + grammarBuilder.append("KW2980 : 'KW' '2980';\n"); + grammarBuilder.append("KW2981 : 'KW' '2981';\n"); + grammarBuilder.append("KW2982 : 'KW' '2982';\n"); + grammarBuilder.append("KW2983 : 'KW' '2983';\n"); + grammarBuilder.append("KW2984 : 'KW' '2984';\n"); + grammarBuilder.append("KW2985 : 'KW' '2985';\n"); + grammarBuilder.append("KW2986 : 'KW' '2986';\n"); + grammarBuilder.append("KW2987 : 'KW' '2987';\n"); + grammarBuilder.append("KW2988 : 'KW' '2988';\n"); + grammarBuilder.append("KW2989 : 'KW' '2989';\n"); + grammarBuilder.append("KW2990 : 'KW' '2990';\n"); + grammarBuilder.append("KW2991 : 'KW' '2991';\n"); + grammarBuilder.append("KW2992 : 'KW' '2992';\n"); + grammarBuilder.append("KW2993 : 'KW' '2993';\n"); + grammarBuilder.append("KW2994 : 'KW' '2994';\n"); + grammarBuilder.append("KW2995 : 'KW' '2995';\n"); + grammarBuilder.append("KW2996 : 'KW' '2996';\n"); + grammarBuilder.append("KW2997 : 'KW' '2997';\n"); + grammarBuilder.append("KW2998 : 'KW' '2998';\n"); + grammarBuilder.append("KW2999 : 'KW' '2999';\n"); + grammarBuilder.append("KW3000 : 'KW' '3000';\n"); + grammarBuilder.append("KW3001 : 'KW' '3001';\n"); + grammarBuilder.append("KW3002 : 'KW' '3002';\n"); + grammarBuilder.append("KW3003 : 'KW' '3003';\n"); + grammarBuilder.append("KW3004 : 'KW' '3004';\n"); + grammarBuilder.append("KW3005 : 'KW' '3005';\n"); + grammarBuilder.append("KW3006 : 'KW' '3006';\n"); + grammarBuilder.append("KW3007 : 'KW' '3007';\n"); + grammarBuilder.append("KW3008 : 'KW' '3008';\n"); + grammarBuilder.append("KW3009 : 'KW' '3009';\n"); + grammarBuilder.append("KW3010 : 'KW' '3010';\n"); + grammarBuilder.append("KW3011 : 'KW' '3011';\n"); + grammarBuilder.append("KW3012 : 'KW' '3012';\n"); + grammarBuilder.append("KW3013 : 'KW' '3013';\n"); + grammarBuilder.append("KW3014 : 'KW' '3014';\n"); + grammarBuilder.append("KW3015 : 'KW' '3015';\n"); + grammarBuilder.append("KW3016 : 'KW' '3016';\n"); + grammarBuilder.append("KW3017 : 'KW' '3017';\n"); + grammarBuilder.append("KW3018 : 'KW' '3018';\n"); + grammarBuilder.append("KW3019 : 'KW' '3019';\n"); + grammarBuilder.append("KW3020 : 'KW' '3020';\n"); + grammarBuilder.append("KW3021 : 'KW' '3021';\n"); + grammarBuilder.append("KW3022 : 'KW' '3022';\n"); + grammarBuilder.append("KW3023 : 'KW' '3023';\n"); + grammarBuilder.append("KW3024 : 'KW' '3024';\n"); + grammarBuilder.append("KW3025 : 'KW' '3025';\n"); + grammarBuilder.append("KW3026 : 'KW' '3026';\n"); + grammarBuilder.append("KW3027 : 'KW' '3027';\n"); + grammarBuilder.append("KW3028 : 'KW' '3028';\n"); + grammarBuilder.append("KW3029 : 'KW' '3029';\n"); + grammarBuilder.append("KW3030 : 'KW' '3030';\n"); + grammarBuilder.append("KW3031 : 'KW' '3031';\n"); + grammarBuilder.append("KW3032 : 'KW' '3032';\n"); + grammarBuilder.append("KW3033 : 'KW' '3033';\n"); + grammarBuilder.append("KW3034 : 'KW' '3034';\n"); + grammarBuilder.append("KW3035 : 'KW' '3035';\n"); + grammarBuilder.append("KW3036 : 'KW' '3036';\n"); + grammarBuilder.append("KW3037 : 'KW' '3037';\n"); + grammarBuilder.append("KW3038 : 'KW' '3038';\n"); + grammarBuilder.append("KW3039 : 'KW' '3039';\n"); + grammarBuilder.append("KW3040 : 'KW' '3040';\n"); + grammarBuilder.append("KW3041 : 'KW' '3041';\n"); + grammarBuilder.append("KW3042 : 'KW' '3042';\n"); + grammarBuilder.append("KW3043 : 'KW' '3043';\n"); + grammarBuilder.append("KW3044 : 'KW' '3044';\n"); + grammarBuilder.append("KW3045 : 'KW' '3045';\n"); + grammarBuilder.append("KW3046 : 'KW' '3046';\n"); + grammarBuilder.append("KW3047 : 'KW' '3047';\n"); + grammarBuilder.append("KW3048 : 'KW' '3048';\n"); + grammarBuilder.append("KW3049 : 'KW' '3049';\n"); + grammarBuilder.append("KW3050 : 'KW' '3050';\n"); + grammarBuilder.append("KW3051 : 'KW' '3051';\n"); + grammarBuilder.append("KW3052 : 'KW' '3052';\n"); + grammarBuilder.append("KW3053 : 'KW' '3053';\n"); + grammarBuilder.append("KW3054 : 'KW' '3054';\n"); + grammarBuilder.append("KW3055 : 'KW' '3055';\n"); + grammarBuilder.append("KW3056 : 'KW' '3056';\n"); + grammarBuilder.append("KW3057 : 'KW' '3057';\n"); + grammarBuilder.append("KW3058 : 'KW' '3058';\n"); + grammarBuilder.append("KW3059 : 'KW' '3059';\n"); + grammarBuilder.append("KW3060 : 'KW' '3060';\n"); + grammarBuilder.append("KW3061 : 'KW' '3061';\n"); + grammarBuilder.append("KW3062 : 'KW' '3062';\n"); + grammarBuilder.append("KW3063 : 'KW' '3063';\n"); + grammarBuilder.append("KW3064 : 'KW' '3064';\n"); + grammarBuilder.append("KW3065 : 'KW' '3065';\n"); + grammarBuilder.append("KW3066 : 'KW' '3066';\n"); + grammarBuilder.append("KW3067 : 'KW' '3067';\n"); + grammarBuilder.append("KW3068 : 'KW' '3068';\n"); + grammarBuilder.append("KW3069 : 'KW' '3069';\n"); + grammarBuilder.append("KW3070 : 'KW' '3070';\n"); + grammarBuilder.append("KW3071 : 'KW' '3071';\n"); + grammarBuilder.append("KW3072 : 'KW' '3072';\n"); + grammarBuilder.append("KW3073 : 'KW' '3073';\n"); + grammarBuilder.append("KW3074 : 'KW' '3074';\n"); + grammarBuilder.append("KW3075 : 'KW' '3075';\n"); + grammarBuilder.append("KW3076 : 'KW' '3076';\n"); + grammarBuilder.append("KW3077 : 'KW' '3077';\n"); + grammarBuilder.append("KW3078 : 'KW' '3078';\n"); + grammarBuilder.append("KW3079 : 'KW' '3079';\n"); + grammarBuilder.append("KW3080 : 'KW' '3080';\n"); + grammarBuilder.append("KW3081 : 'KW' '3081';\n"); + grammarBuilder.append("KW3082 : 'KW' '3082';\n"); + grammarBuilder.append("KW3083 : 'KW' '3083';\n"); + grammarBuilder.append("KW3084 : 'KW' '3084';\n"); + grammarBuilder.append("KW3085 : 'KW' '3085';\n"); + grammarBuilder.append("KW3086 : 'KW' '3086';\n"); + grammarBuilder.append("KW3087 : 'KW' '3087';\n"); + grammarBuilder.append("KW3088 : 'KW' '3088';\n"); + grammarBuilder.append("KW3089 : 'KW' '3089';\n"); + grammarBuilder.append("KW3090 : 'KW' '3090';\n"); + grammarBuilder.append("KW3091 : 'KW' '3091';\n"); + grammarBuilder.append("KW3092 : 'KW' '3092';\n"); + grammarBuilder.append("KW3093 : 'KW' '3093';\n"); + grammarBuilder.append("KW3094 : 'KW' '3094';\n"); + grammarBuilder.append("KW3095 : 'KW' '3095';\n"); + grammarBuilder.append("KW3096 : 'KW' '3096';\n"); + grammarBuilder.append("KW3097 : 'KW' '3097';\n"); + grammarBuilder.append("KW3098 : 'KW' '3098';\n"); + grammarBuilder.append("KW3099 : 'KW' '3099';\n"); + grammarBuilder.append("KW3100 : 'KW' '3100';\n"); + grammarBuilder.append("KW3101 : 'KW' '3101';\n"); + grammarBuilder.append("KW3102 : 'KW' '3102';\n"); + grammarBuilder.append("KW3103 : 'KW' '3103';\n"); + grammarBuilder.append("KW3104 : 'KW' '3104';\n"); + grammarBuilder.append("KW3105 : 'KW' '3105';\n"); + grammarBuilder.append("KW3106 : 'KW' '3106';\n"); + grammarBuilder.append("KW3107 : 'KW' '3107';\n"); + grammarBuilder.append("KW3108 : 'KW' '3108';\n"); + grammarBuilder.append("KW3109 : 'KW' '3109';\n"); + grammarBuilder.append("KW3110 : 'KW' '3110';\n"); + grammarBuilder.append("KW3111 : 'KW' '3111';\n"); + grammarBuilder.append("KW3112 : 'KW' '3112';\n"); + grammarBuilder.append("KW3113 : 'KW' '3113';\n"); + grammarBuilder.append("KW3114 : 'KW' '3114';\n"); + grammarBuilder.append("KW3115 : 'KW' '3115';\n"); + grammarBuilder.append("KW3116 : 'KW' '3116';\n"); + grammarBuilder.append("KW3117 : 'KW' '3117';\n"); + grammarBuilder.append("KW3118 : 'KW' '3118';\n"); + grammarBuilder.append("KW3119 : 'KW' '3119';\n"); + grammarBuilder.append("KW3120 : 'KW' '3120';\n"); + grammarBuilder.append("KW3121 : 'KW' '3121';\n"); + grammarBuilder.append("KW3122 : 'KW' '3122';\n"); + grammarBuilder.append("KW3123 : 'KW' '3123';\n"); + grammarBuilder.append("KW3124 : 'KW' '3124';\n"); + grammarBuilder.append("KW3125 : 'KW' '3125';\n"); + grammarBuilder.append("KW3126 : 'KW' '3126';\n"); + grammarBuilder.append("KW3127 : 'KW' '3127';\n"); + grammarBuilder.append("KW3128 : 'KW' '3128';\n"); + grammarBuilder.append("KW3129 : 'KW' '3129';\n"); + grammarBuilder.append("KW3130 : 'KW' '3130';\n"); + grammarBuilder.append("KW3131 : 'KW' '3131';\n"); + grammarBuilder.append("KW3132 : 'KW' '3132';\n"); + grammarBuilder.append("KW3133 : 'KW' '3133';\n"); + grammarBuilder.append("KW3134 : 'KW' '3134';\n"); + grammarBuilder.append("KW3135 : 'KW' '3135';\n"); + grammarBuilder.append("KW3136 : 'KW' '3136';\n"); + grammarBuilder.append("KW3137 : 'KW' '3137';\n"); + grammarBuilder.append("KW3138 : 'KW' '3138';\n"); + grammarBuilder.append("KW3139 : 'KW' '3139';\n"); + grammarBuilder.append("KW3140 : 'KW' '3140';\n"); + grammarBuilder.append("KW3141 : 'KW' '3141';\n"); + grammarBuilder.append("KW3142 : 'KW' '3142';\n"); + grammarBuilder.append("KW3143 : 'KW' '3143';\n"); + grammarBuilder.append("KW3144 : 'KW' '3144';\n"); + grammarBuilder.append("KW3145 : 'KW' '3145';\n"); + grammarBuilder.append("KW3146 : 'KW' '3146';\n"); + grammarBuilder.append("KW3147 : 'KW' '3147';\n"); + grammarBuilder.append("KW3148 : 'KW' '3148';\n"); + grammarBuilder.append("KW3149 : 'KW' '3149';\n"); + grammarBuilder.append("KW3150 : 'KW' '3150';\n"); + grammarBuilder.append("KW3151 : 'KW' '3151';\n"); + grammarBuilder.append("KW3152 : 'KW' '3152';\n"); + grammarBuilder.append("KW3153 : 'KW' '3153';\n"); + grammarBuilder.append("KW3154 : 'KW' '3154';\n"); + grammarBuilder.append("KW3155 : 'KW' '3155';\n"); + grammarBuilder.append("KW3156 : 'KW' '3156';\n"); + grammarBuilder.append("KW3157 : 'KW' '3157';\n"); + grammarBuilder.append("KW3158 : 'KW' '3158';\n"); + grammarBuilder.append("KW3159 : 'KW' '3159';\n"); + grammarBuilder.append("KW3160 : 'KW' '3160';\n"); + grammarBuilder.append("KW3161 : 'KW' '3161';\n"); + grammarBuilder.append("KW3162 : 'KW' '3162';\n"); + grammarBuilder.append("KW3163 : 'KW' '3163';\n"); + grammarBuilder.append("KW3164 : 'KW' '3164';\n"); + grammarBuilder.append("KW3165 : 'KW' '3165';\n"); + grammarBuilder.append("KW3166 : 'KW' '3166';\n"); + grammarBuilder.append("KW3167 : 'KW' '3167';\n"); + grammarBuilder.append("KW3168 : 'KW' '3168';\n"); + grammarBuilder.append("KW3169 : 'KW' '3169';\n"); + grammarBuilder.append("KW3170 : 'KW' '3170';\n"); + grammarBuilder.append("KW3171 : 'KW' '3171';\n"); + grammarBuilder.append("KW3172 : 'KW' '3172';\n"); + grammarBuilder.append("KW3173 : 'KW' '3173';\n"); + grammarBuilder.append("KW3174 : 'KW' '3174';\n"); + grammarBuilder.append("KW3175 : 'KW' '3175';\n"); + grammarBuilder.append("KW3176 : 'KW' '3176';\n"); + grammarBuilder.append("KW3177 : 'KW' '3177';\n"); + grammarBuilder.append("KW3178 : 'KW' '3178';\n"); + grammarBuilder.append("KW3179 : 'KW' '3179';\n"); + grammarBuilder.append("KW3180 : 'KW' '3180';\n"); + grammarBuilder.append("KW3181 : 'KW' '3181';\n"); + grammarBuilder.append("KW3182 : 'KW' '3182';\n"); + grammarBuilder.append("KW3183 : 'KW' '3183';\n"); + grammarBuilder.append("KW3184 : 'KW' '3184';\n"); + grammarBuilder.append("KW3185 : 'KW' '3185';\n"); + grammarBuilder.append("KW3186 : 'KW' '3186';\n"); + grammarBuilder.append("KW3187 : 'KW' '3187';\n"); + grammarBuilder.append("KW3188 : 'KW' '3188';\n"); + grammarBuilder.append("KW3189 : 'KW' '3189';\n"); + grammarBuilder.append("KW3190 : 'KW' '3190';\n"); + grammarBuilder.append("KW3191 : 'KW' '3191';\n"); + grammarBuilder.append("KW3192 : 'KW' '3192';\n"); + grammarBuilder.append("KW3193 : 'KW' '3193';\n"); + grammarBuilder.append("KW3194 : 'KW' '3194';\n"); + grammarBuilder.append("KW3195 : 'KW' '3195';\n"); + grammarBuilder.append("KW3196 : 'KW' '3196';\n"); + grammarBuilder.append("KW3197 : 'KW' '3197';\n"); + grammarBuilder.append("KW3198 : 'KW' '3198';\n"); + grammarBuilder.append("KW3199 : 'KW' '3199';\n"); + grammarBuilder.append("KW3200 : 'KW' '3200';\n"); + grammarBuilder.append("KW3201 : 'KW' '3201';\n"); + grammarBuilder.append("KW3202 : 'KW' '3202';\n"); + grammarBuilder.append("KW3203 : 'KW' '3203';\n"); + grammarBuilder.append("KW3204 : 'KW' '3204';\n"); + grammarBuilder.append("KW3205 : 'KW' '3205';\n"); + grammarBuilder.append("KW3206 : 'KW' '3206';\n"); + grammarBuilder.append("KW3207 : 'KW' '3207';\n"); + grammarBuilder.append("KW3208 : 'KW' '3208';\n"); + grammarBuilder.append("KW3209 : 'KW' '3209';\n"); + grammarBuilder.append("KW3210 : 'KW' '3210';\n"); + grammarBuilder.append("KW3211 : 'KW' '3211';\n"); + grammarBuilder.append("KW3212 : 'KW' '3212';\n"); + grammarBuilder.append("KW3213 : 'KW' '3213';\n"); + grammarBuilder.append("KW3214 : 'KW' '3214';\n"); + grammarBuilder.append("KW3215 : 'KW' '3215';\n"); + grammarBuilder.append("KW3216 : 'KW' '3216';\n"); + grammarBuilder.append("KW3217 : 'KW' '3217';\n"); + grammarBuilder.append("KW3218 : 'KW' '3218';\n"); + grammarBuilder.append("KW3219 : 'KW' '3219';\n"); + grammarBuilder.append("KW3220 : 'KW' '3220';\n"); + grammarBuilder.append("KW3221 : 'KW' '3221';\n"); + grammarBuilder.append("KW3222 : 'KW' '3222';\n"); + grammarBuilder.append("KW3223 : 'KW' '3223';\n"); + grammarBuilder.append("KW3224 : 'KW' '3224';\n"); + grammarBuilder.append("KW3225 : 'KW' '3225';\n"); + grammarBuilder.append("KW3226 : 'KW' '3226';\n"); + grammarBuilder.append("KW3227 : 'KW' '3227';\n"); + grammarBuilder.append("KW3228 : 'KW' '3228';\n"); + grammarBuilder.append("KW3229 : 'KW' '3229';\n"); + grammarBuilder.append("KW3230 : 'KW' '3230';\n"); + grammarBuilder.append("KW3231 : 'KW' '3231';\n"); + grammarBuilder.append("KW3232 : 'KW' '3232';\n"); + grammarBuilder.append("KW3233 : 'KW' '3233';\n"); + grammarBuilder.append("KW3234 : 'KW' '3234';\n"); + grammarBuilder.append("KW3235 : 'KW' '3235';\n"); + grammarBuilder.append("KW3236 : 'KW' '3236';\n"); + grammarBuilder.append("KW3237 : 'KW' '3237';\n"); + grammarBuilder.append("KW3238 : 'KW' '3238';\n"); + grammarBuilder.append("KW3239 : 'KW' '3239';\n"); + grammarBuilder.append("KW3240 : 'KW' '3240';\n"); + grammarBuilder.append("KW3241 : 'KW' '3241';\n"); + grammarBuilder.append("KW3242 : 'KW' '3242';\n"); + grammarBuilder.append("KW3243 : 'KW' '3243';\n"); + grammarBuilder.append("KW3244 : 'KW' '3244';\n"); + grammarBuilder.append("KW3245 : 'KW' '3245';\n"); + grammarBuilder.append("KW3246 : 'KW' '3246';\n"); + grammarBuilder.append("KW3247 : 'KW' '3247';\n"); + grammarBuilder.append("KW3248 : 'KW' '3248';\n"); + grammarBuilder.append("KW3249 : 'KW' '3249';\n"); + grammarBuilder.append("KW3250 : 'KW' '3250';\n"); + grammarBuilder.append("KW3251 : 'KW' '3251';\n"); + grammarBuilder.append("KW3252 : 'KW' '3252';\n"); + grammarBuilder.append("KW3253 : 'KW' '3253';\n"); + grammarBuilder.append("KW3254 : 'KW' '3254';\n"); + grammarBuilder.append("KW3255 : 'KW' '3255';\n"); + grammarBuilder.append("KW3256 : 'KW' '3256';\n"); + grammarBuilder.append("KW3257 : 'KW' '3257';\n"); + grammarBuilder.append("KW3258 : 'KW' '3258';\n"); + grammarBuilder.append("KW3259 : 'KW' '3259';\n"); + grammarBuilder.append("KW3260 : 'KW' '3260';\n"); + grammarBuilder.append("KW3261 : 'KW' '3261';\n"); + grammarBuilder.append("KW3262 : 'KW' '3262';\n"); + grammarBuilder.append("KW3263 : 'KW' '3263';\n"); + grammarBuilder.append("KW3264 : 'KW' '3264';\n"); + grammarBuilder.append("KW3265 : 'KW' '3265';\n"); + grammarBuilder.append("KW3266 : 'KW' '3266';\n"); + grammarBuilder.append("KW3267 : 'KW' '3267';\n"); + grammarBuilder.append("KW3268 : 'KW' '3268';\n"); + grammarBuilder.append("KW3269 : 'KW' '3269';\n"); + grammarBuilder.append("KW3270 : 'KW' '3270';\n"); + grammarBuilder.append("KW3271 : 'KW' '3271';\n"); + grammarBuilder.append("KW3272 : 'KW' '3272';\n"); + grammarBuilder.append("KW3273 : 'KW' '3273';\n"); + grammarBuilder.append("KW3274 : 'KW' '3274';\n"); + grammarBuilder.append("KW3275 : 'KW' '3275';\n"); + grammarBuilder.append("KW3276 : 'KW' '3276';\n"); + grammarBuilder.append("KW3277 : 'KW' '3277';\n"); + grammarBuilder.append("KW3278 : 'KW' '3278';\n"); + grammarBuilder.append("KW3279 : 'KW' '3279';\n"); + grammarBuilder.append("KW3280 : 'KW' '3280';\n"); + grammarBuilder.append("KW3281 : 'KW' '3281';\n"); + grammarBuilder.append("KW3282 : 'KW' '3282';\n"); + grammarBuilder.append("KW3283 : 'KW' '3283';\n"); + grammarBuilder.append("KW3284 : 'KW' '3284';\n"); + grammarBuilder.append("KW3285 : 'KW' '3285';\n"); + grammarBuilder.append("KW3286 : 'KW' '3286';\n"); + grammarBuilder.append("KW3287 : 'KW' '3287';\n"); + grammarBuilder.append("KW3288 : 'KW' '3288';\n"); + grammarBuilder.append("KW3289 : 'KW' '3289';\n"); + grammarBuilder.append("KW3290 : 'KW' '3290';\n"); + grammarBuilder.append("KW3291 : 'KW' '3291';\n"); + grammarBuilder.append("KW3292 : 'KW' '3292';\n"); + grammarBuilder.append("KW3293 : 'KW' '3293';\n"); + grammarBuilder.append("KW3294 : 'KW' '3294';\n"); + grammarBuilder.append("KW3295 : 'KW' '3295';\n"); + grammarBuilder.append("KW3296 : 'KW' '3296';\n"); + grammarBuilder.append("KW3297 : 'KW' '3297';\n"); + grammarBuilder.append("KW3298 : 'KW' '3298';\n"); + grammarBuilder.append("KW3299 : 'KW' '3299';\n"); + grammarBuilder.append("KW3300 : 'KW' '3300';\n"); + grammarBuilder.append("KW3301 : 'KW' '3301';\n"); + grammarBuilder.append("KW3302 : 'KW' '3302';\n"); + grammarBuilder.append("KW3303 : 'KW' '3303';\n"); + grammarBuilder.append("KW3304 : 'KW' '3304';\n"); + grammarBuilder.append("KW3305 : 'KW' '3305';\n"); + grammarBuilder.append("KW3306 : 'KW' '3306';\n"); + grammarBuilder.append("KW3307 : 'KW' '3307';\n"); + grammarBuilder.append("KW3308 : 'KW' '3308';\n"); + grammarBuilder.append("KW3309 : 'KW' '3309';\n"); + grammarBuilder.append("KW3310 : 'KW' '3310';\n"); + grammarBuilder.append("KW3311 : 'KW' '3311';\n"); + grammarBuilder.append("KW3312 : 'KW' '3312';\n"); + grammarBuilder.append("KW3313 : 'KW' '3313';\n"); + grammarBuilder.append("KW3314 : 'KW' '3314';\n"); + grammarBuilder.append("KW3315 : 'KW' '3315';\n"); + grammarBuilder.append("KW3316 : 'KW' '3316';\n"); + grammarBuilder.append("KW3317 : 'KW' '3317';\n"); + grammarBuilder.append("KW3318 : 'KW' '3318';\n"); + grammarBuilder.append("KW3319 : 'KW' '3319';\n"); + grammarBuilder.append("KW3320 : 'KW' '3320';\n"); + grammarBuilder.append("KW3321 : 'KW' '3321';\n"); + grammarBuilder.append("KW3322 : 'KW' '3322';\n"); + grammarBuilder.append("KW3323 : 'KW' '3323';\n"); + grammarBuilder.append("KW3324 : 'KW' '3324';\n"); + grammarBuilder.append("KW3325 : 'KW' '3325';\n"); + grammarBuilder.append("KW3326 : 'KW' '3326';\n"); + grammarBuilder.append("KW3327 : 'KW' '3327';\n"); + grammarBuilder.append("KW3328 : 'KW' '3328';\n"); + grammarBuilder.append("KW3329 : 'KW' '3329';\n"); + grammarBuilder.append("KW3330 : 'KW' '3330';\n"); + grammarBuilder.append("KW3331 : 'KW' '3331';\n"); + grammarBuilder.append("KW3332 : 'KW' '3332';\n"); + grammarBuilder.append("KW3333 : 'KW' '3333';\n"); + grammarBuilder.append("KW3334 : 'KW' '3334';\n"); + grammarBuilder.append("KW3335 : 'KW' '3335';\n"); + grammarBuilder.append("KW3336 : 'KW' '3336';\n"); + grammarBuilder.append("KW3337 : 'KW' '3337';\n"); + grammarBuilder.append("KW3338 : 'KW' '3338';\n"); + grammarBuilder.append("KW3339 : 'KW' '3339';\n"); + grammarBuilder.append("KW3340 : 'KW' '3340';\n"); + grammarBuilder.append("KW3341 : 'KW' '3341';\n"); + grammarBuilder.append("KW3342 : 'KW' '3342';\n"); + grammarBuilder.append("KW3343 : 'KW' '3343';\n"); + grammarBuilder.append("KW3344 : 'KW' '3344';\n"); + grammarBuilder.append("KW3345 : 'KW' '3345';\n"); + grammarBuilder.append("KW3346 : 'KW' '3346';\n"); + grammarBuilder.append("KW3347 : 'KW' '3347';\n"); + grammarBuilder.append("KW3348 : 'KW' '3348';\n"); + grammarBuilder.append("KW3349 : 'KW' '3349';\n"); + grammarBuilder.append("KW3350 : 'KW' '3350';\n"); + grammarBuilder.append("KW3351 : 'KW' '3351';\n"); + grammarBuilder.append("KW3352 : 'KW' '3352';\n"); + grammarBuilder.append("KW3353 : 'KW' '3353';\n"); + grammarBuilder.append("KW3354 : 'KW' '3354';\n"); + grammarBuilder.append("KW3355 : 'KW' '3355';\n"); + grammarBuilder.append("KW3356 : 'KW' '3356';\n"); + grammarBuilder.append("KW3357 : 'KW' '3357';\n"); + grammarBuilder.append("KW3358 : 'KW' '3358';\n"); + grammarBuilder.append("KW3359 : 'KW' '3359';\n"); + grammarBuilder.append("KW3360 : 'KW' '3360';\n"); + grammarBuilder.append("KW3361 : 'KW' '3361';\n"); + grammarBuilder.append("KW3362 : 'KW' '3362';\n"); + grammarBuilder.append("KW3363 : 'KW' '3363';\n"); + grammarBuilder.append("KW3364 : 'KW' '3364';\n"); + grammarBuilder.append("KW3365 : 'KW' '3365';\n"); + grammarBuilder.append("KW3366 : 'KW' '3366';\n"); + grammarBuilder.append("KW3367 : 'KW' '3367';\n"); + grammarBuilder.append("KW3368 : 'KW' '3368';\n"); + grammarBuilder.append("KW3369 : 'KW' '3369';\n"); + grammarBuilder.append("KW3370 : 'KW' '3370';\n"); + grammarBuilder.append("KW3371 : 'KW' '3371';\n"); + grammarBuilder.append("KW3372 : 'KW' '3372';\n"); + grammarBuilder.append("KW3373 : 'KW' '3373';\n"); + grammarBuilder.append("KW3374 : 'KW' '3374';\n"); + grammarBuilder.append("KW3375 : 'KW' '3375';\n"); + grammarBuilder.append("KW3376 : 'KW' '3376';\n"); + grammarBuilder.append("KW3377 : 'KW' '3377';\n"); + grammarBuilder.append("KW3378 : 'KW' '3378';\n"); + grammarBuilder.append("KW3379 : 'KW' '3379';\n"); + grammarBuilder.append("KW3380 : 'KW' '3380';\n"); + grammarBuilder.append("KW3381 : 'KW' '3381';\n"); + grammarBuilder.append("KW3382 : 'KW' '3382';\n"); + grammarBuilder.append("KW3383 : 'KW' '3383';\n"); + grammarBuilder.append("KW3384 : 'KW' '3384';\n"); + grammarBuilder.append("KW3385 : 'KW' '3385';\n"); + grammarBuilder.append("KW3386 : 'KW' '3386';\n"); + grammarBuilder.append("KW3387 : 'KW' '3387';\n"); + grammarBuilder.append("KW3388 : 'KW' '3388';\n"); + grammarBuilder.append("KW3389 : 'KW' '3389';\n"); + grammarBuilder.append("KW3390 : 'KW' '3390';\n"); + grammarBuilder.append("KW3391 : 'KW' '3391';\n"); + grammarBuilder.append("KW3392 : 'KW' '3392';\n"); + grammarBuilder.append("KW3393 : 'KW' '3393';\n"); + grammarBuilder.append("KW3394 : 'KW' '3394';\n"); + grammarBuilder.append("KW3395 : 'KW' '3395';\n"); + grammarBuilder.append("KW3396 : 'KW' '3396';\n"); + grammarBuilder.append("KW3397 : 'KW' '3397';\n"); + grammarBuilder.append("KW3398 : 'KW' '3398';\n"); + grammarBuilder.append("KW3399 : 'KW' '3399';\n"); + grammarBuilder.append("KW3400 : 'KW' '3400';\n"); + grammarBuilder.append("KW3401 : 'KW' '3401';\n"); + grammarBuilder.append("KW3402 : 'KW' '3402';\n"); + grammarBuilder.append("KW3403 : 'KW' '3403';\n"); + grammarBuilder.append("KW3404 : 'KW' '3404';\n"); + grammarBuilder.append("KW3405 : 'KW' '3405';\n"); + grammarBuilder.append("KW3406 : 'KW' '3406';\n"); + grammarBuilder.append("KW3407 : 'KW' '3407';\n"); + grammarBuilder.append("KW3408 : 'KW' '3408';\n"); + grammarBuilder.append("KW3409 : 'KW' '3409';\n"); + grammarBuilder.append("KW3410 : 'KW' '3410';\n"); + grammarBuilder.append("KW3411 : 'KW' '3411';\n"); + grammarBuilder.append("KW3412 : 'KW' '3412';\n"); + grammarBuilder.append("KW3413 : 'KW' '3413';\n"); + grammarBuilder.append("KW3414 : 'KW' '3414';\n"); + grammarBuilder.append("KW3415 : 'KW' '3415';\n"); + grammarBuilder.append("KW3416 : 'KW' '3416';\n"); + grammarBuilder.append("KW3417 : 'KW' '3417';\n"); + grammarBuilder.append("KW3418 : 'KW' '3418';\n"); + grammarBuilder.append("KW3419 : 'KW' '3419';\n"); + grammarBuilder.append("KW3420 : 'KW' '3420';\n"); + grammarBuilder.append("KW3421 : 'KW' '3421';\n"); + grammarBuilder.append("KW3422 : 'KW' '3422';\n"); + grammarBuilder.append("KW3423 : 'KW' '3423';\n"); + grammarBuilder.append("KW3424 : 'KW' '3424';\n"); + grammarBuilder.append("KW3425 : 'KW' '3425';\n"); + grammarBuilder.append("KW3426 : 'KW' '3426';\n"); + grammarBuilder.append("KW3427 : 'KW' '3427';\n"); + grammarBuilder.append("KW3428 : 'KW' '3428';\n"); + grammarBuilder.append("KW3429 : 'KW' '3429';\n"); + grammarBuilder.append("KW3430 : 'KW' '3430';\n"); + grammarBuilder.append("KW3431 : 'KW' '3431';\n"); + grammarBuilder.append("KW3432 : 'KW' '3432';\n"); + grammarBuilder.append("KW3433 : 'KW' '3433';\n"); + grammarBuilder.append("KW3434 : 'KW' '3434';\n"); + grammarBuilder.append("KW3435 : 'KW' '3435';\n"); + grammarBuilder.append("KW3436 : 'KW' '3436';\n"); + grammarBuilder.append("KW3437 : 'KW' '3437';\n"); + grammarBuilder.append("KW3438 : 'KW' '3438';\n"); + grammarBuilder.append("KW3439 : 'KW' '3439';\n"); + grammarBuilder.append("KW3440 : 'KW' '3440';\n"); + grammarBuilder.append("KW3441 : 'KW' '3441';\n"); + grammarBuilder.append("KW3442 : 'KW' '3442';\n"); + grammarBuilder.append("KW3443 : 'KW' '3443';\n"); + grammarBuilder.append("KW3444 : 'KW' '3444';\n"); + grammarBuilder.append("KW3445 : 'KW' '3445';\n"); + grammarBuilder.append("KW3446 : 'KW' '3446';\n"); + grammarBuilder.append("KW3447 : 'KW' '3447';\n"); + grammarBuilder.append("KW3448 : 'KW' '3448';\n"); + grammarBuilder.append("KW3449 : 'KW' '3449';\n"); + grammarBuilder.append("KW3450 : 'KW' '3450';\n"); + grammarBuilder.append("KW3451 : 'KW' '3451';\n"); + grammarBuilder.append("KW3452 : 'KW' '3452';\n"); + grammarBuilder.append("KW3453 : 'KW' '3453';\n"); + grammarBuilder.append("KW3454 : 'KW' '3454';\n"); + grammarBuilder.append("KW3455 : 'KW' '3455';\n"); + grammarBuilder.append("KW3456 : 'KW' '3456';\n"); + grammarBuilder.append("KW3457 : 'KW' '3457';\n"); + grammarBuilder.append("KW3458 : 'KW' '3458';\n"); + grammarBuilder.append("KW3459 : 'KW' '3459';\n"); + grammarBuilder.append("KW3460 : 'KW' '3460';\n"); + grammarBuilder.append("KW3461 : 'KW' '3461';\n"); + grammarBuilder.append("KW3462 : 'KW' '3462';\n"); + grammarBuilder.append("KW3463 : 'KW' '3463';\n"); + grammarBuilder.append("KW3464 : 'KW' '3464';\n"); + grammarBuilder.append("KW3465 : 'KW' '3465';\n"); + grammarBuilder.append("KW3466 : 'KW' '3466';\n"); + grammarBuilder.append("KW3467 : 'KW' '3467';\n"); + grammarBuilder.append("KW3468 : 'KW' '3468';\n"); + grammarBuilder.append("KW3469 : 'KW' '3469';\n"); + grammarBuilder.append("KW3470 : 'KW' '3470';\n"); + grammarBuilder.append("KW3471 : 'KW' '3471';\n"); + grammarBuilder.append("KW3472 : 'KW' '3472';\n"); + grammarBuilder.append("KW3473 : 'KW' '3473';\n"); + grammarBuilder.append("KW3474 : 'KW' '3474';\n"); + grammarBuilder.append("KW3475 : 'KW' '3475';\n"); + grammarBuilder.append("KW3476 : 'KW' '3476';\n"); + grammarBuilder.append("KW3477 : 'KW' '3477';\n"); + grammarBuilder.append("KW3478 : 'KW' '3478';\n"); + grammarBuilder.append("KW3479 : 'KW' '3479';\n"); + grammarBuilder.append("KW3480 : 'KW' '3480';\n"); + grammarBuilder.append("KW3481 : 'KW' '3481';\n"); + grammarBuilder.append("KW3482 : 'KW' '3482';\n"); + grammarBuilder.append("KW3483 : 'KW' '3483';\n"); + grammarBuilder.append("KW3484 : 'KW' '3484';\n"); + grammarBuilder.append("KW3485 : 'KW' '3485';\n"); + grammarBuilder.append("KW3486 : 'KW' '3486';\n"); + grammarBuilder.append("KW3487 : 'KW' '3487';\n"); + grammarBuilder.append("KW3488 : 'KW' '3488';\n"); + grammarBuilder.append("KW3489 : 'KW' '3489';\n"); + grammarBuilder.append("KW3490 : 'KW' '3490';\n"); + grammarBuilder.append("KW3491 : 'KW' '3491';\n"); + grammarBuilder.append("KW3492 : 'KW' '3492';\n"); + grammarBuilder.append("KW3493 : 'KW' '3493';\n"); + grammarBuilder.append("KW3494 : 'KW' '3494';\n"); + grammarBuilder.append("KW3495 : 'KW' '3495';\n"); + grammarBuilder.append("KW3496 : 'KW' '3496';\n"); + grammarBuilder.append("KW3497 : 'KW' '3497';\n"); + grammarBuilder.append("KW3498 : 'KW' '3498';\n"); + grammarBuilder.append("KW3499 : 'KW' '3499';\n"); + grammarBuilder.append("KW3500 : 'KW' '3500';\n"); + grammarBuilder.append("KW3501 : 'KW' '3501';\n"); + grammarBuilder.append("KW3502 : 'KW' '3502';\n"); + grammarBuilder.append("KW3503 : 'KW' '3503';\n"); + grammarBuilder.append("KW3504 : 'KW' '3504';\n"); + grammarBuilder.append("KW3505 : 'KW' '3505';\n"); + grammarBuilder.append("KW3506 : 'KW' '3506';\n"); + grammarBuilder.append("KW3507 : 'KW' '3507';\n"); + grammarBuilder.append("KW3508 : 'KW' '3508';\n"); + grammarBuilder.append("KW3509 : 'KW' '3509';\n"); + grammarBuilder.append("KW3510 : 'KW' '3510';\n"); + grammarBuilder.append("KW3511 : 'KW' '3511';\n"); + grammarBuilder.append("KW3512 : 'KW' '3512';\n"); + grammarBuilder.append("KW3513 : 'KW' '3513';\n"); + grammarBuilder.append("KW3514 : 'KW' '3514';\n"); + grammarBuilder.append("KW3515 : 'KW' '3515';\n"); + grammarBuilder.append("KW3516 : 'KW' '3516';\n"); + grammarBuilder.append("KW3517 : 'KW' '3517';\n"); + grammarBuilder.append("KW3518 : 'KW' '3518';\n"); + grammarBuilder.append("KW3519 : 'KW' '3519';\n"); + grammarBuilder.append("KW3520 : 'KW' '3520';\n"); + grammarBuilder.append("KW3521 : 'KW' '3521';\n"); + grammarBuilder.append("KW3522 : 'KW' '3522';\n"); + grammarBuilder.append("KW3523 : 'KW' '3523';\n"); + grammarBuilder.append("KW3524 : 'KW' '3524';\n"); + grammarBuilder.append("KW3525 : 'KW' '3525';\n"); + grammarBuilder.append("KW3526 : 'KW' '3526';\n"); + grammarBuilder.append("KW3527 : 'KW' '3527';\n"); + grammarBuilder.append("KW3528 : 'KW' '3528';\n"); + grammarBuilder.append("KW3529 : 'KW' '3529';\n"); + grammarBuilder.append("KW3530 : 'KW' '3530';\n"); + grammarBuilder.append("KW3531 : 'KW' '3531';\n"); + grammarBuilder.append("KW3532 : 'KW' '3532';\n"); + grammarBuilder.append("KW3533 : 'KW' '3533';\n"); + grammarBuilder.append("KW3534 : 'KW' '3534';\n"); + grammarBuilder.append("KW3535 : 'KW' '3535';\n"); + grammarBuilder.append("KW3536 : 'KW' '3536';\n"); + grammarBuilder.append("KW3537 : 'KW' '3537';\n"); + grammarBuilder.append("KW3538 : 'KW' '3538';\n"); + grammarBuilder.append("KW3539 : 'KW' '3539';\n"); + grammarBuilder.append("KW3540 : 'KW' '3540';\n"); + grammarBuilder.append("KW3541 : 'KW' '3541';\n"); + grammarBuilder.append("KW3542 : 'KW' '3542';\n"); + grammarBuilder.append("KW3543 : 'KW' '3543';\n"); + grammarBuilder.append("KW3544 : 'KW' '3544';\n"); + grammarBuilder.append("KW3545 : 'KW' '3545';\n"); + grammarBuilder.append("KW3546 : 'KW' '3546';\n"); + grammarBuilder.append("KW3547 : 'KW' '3547';\n"); + grammarBuilder.append("KW3548 : 'KW' '3548';\n"); + grammarBuilder.append("KW3549 : 'KW' '3549';\n"); + grammarBuilder.append("KW3550 : 'KW' '3550';\n"); + grammarBuilder.append("KW3551 : 'KW' '3551';\n"); + grammarBuilder.append("KW3552 : 'KW' '3552';\n"); + grammarBuilder.append("KW3553 : 'KW' '3553';\n"); + grammarBuilder.append("KW3554 : 'KW' '3554';\n"); + grammarBuilder.append("KW3555 : 'KW' '3555';\n"); + grammarBuilder.append("KW3556 : 'KW' '3556';\n"); + grammarBuilder.append("KW3557 : 'KW' '3557';\n"); + grammarBuilder.append("KW3558 : 'KW' '3558';\n"); + grammarBuilder.append("KW3559 : 'KW' '3559';\n"); + grammarBuilder.append("KW3560 : 'KW' '3560';\n"); + grammarBuilder.append("KW3561 : 'KW' '3561';\n"); + grammarBuilder.append("KW3562 : 'KW' '3562';\n"); + grammarBuilder.append("KW3563 : 'KW' '3563';\n"); + grammarBuilder.append("KW3564 : 'KW' '3564';\n"); + grammarBuilder.append("KW3565 : 'KW' '3565';\n"); + grammarBuilder.append("KW3566 : 'KW' '3566';\n"); + grammarBuilder.append("KW3567 : 'KW' '3567';\n"); + grammarBuilder.append("KW3568 : 'KW' '3568';\n"); + grammarBuilder.append("KW3569 : 'KW' '3569';\n"); + grammarBuilder.append("KW3570 : 'KW' '3570';\n"); + grammarBuilder.append("KW3571 : 'KW' '3571';\n"); + grammarBuilder.append("KW3572 : 'KW' '3572';\n"); + grammarBuilder.append("KW3573 : 'KW' '3573';\n"); + grammarBuilder.append("KW3574 : 'KW' '3574';\n"); + grammarBuilder.append("KW3575 : 'KW' '3575';\n"); + grammarBuilder.append("KW3576 : 'KW' '3576';\n"); + grammarBuilder.append("KW3577 : 'KW' '3577';\n"); + grammarBuilder.append("KW3578 : 'KW' '3578';\n"); + grammarBuilder.append("KW3579 : 'KW' '3579';\n"); + grammarBuilder.append("KW3580 : 'KW' '3580';\n"); + grammarBuilder.append("KW3581 : 'KW' '3581';\n"); + grammarBuilder.append("KW3582 : 'KW' '3582';\n"); + grammarBuilder.append("KW3583 : 'KW' '3583';\n"); + grammarBuilder.append("KW3584 : 'KW' '3584';\n"); + grammarBuilder.append("KW3585 : 'KW' '3585';\n"); + grammarBuilder.append("KW3586 : 'KW' '3586';\n"); + grammarBuilder.append("KW3587 : 'KW' '3587';\n"); + grammarBuilder.append("KW3588 : 'KW' '3588';\n"); + grammarBuilder.append("KW3589 : 'KW' '3589';\n"); + grammarBuilder.append("KW3590 : 'KW' '3590';\n"); + grammarBuilder.append("KW3591 : 'KW' '3591';\n"); + grammarBuilder.append("KW3592 : 'KW' '3592';\n"); + grammarBuilder.append("KW3593 : 'KW' '3593';\n"); + grammarBuilder.append("KW3594 : 'KW' '3594';\n"); + grammarBuilder.append("KW3595 : 'KW' '3595';\n"); + grammarBuilder.append("KW3596 : 'KW' '3596';\n"); + grammarBuilder.append("KW3597 : 'KW' '3597';\n"); + grammarBuilder.append("KW3598 : 'KW' '3598';\n"); + grammarBuilder.append("KW3599 : 'KW' '3599';\n"); + grammarBuilder.append("KW3600 : 'KW' '3600';\n"); + grammarBuilder.append("KW3601 : 'KW' '3601';\n"); + grammarBuilder.append("KW3602 : 'KW' '3602';\n"); + grammarBuilder.append("KW3603 : 'KW' '3603';\n"); + grammarBuilder.append("KW3604 : 'KW' '3604';\n"); + grammarBuilder.append("KW3605 : 'KW' '3605';\n"); + grammarBuilder.append("KW3606 : 'KW' '3606';\n"); + grammarBuilder.append("KW3607 : 'KW' '3607';\n"); + grammarBuilder.append("KW3608 : 'KW' '3608';\n"); + grammarBuilder.append("KW3609 : 'KW' '3609';\n"); + grammarBuilder.append("KW3610 : 'KW' '3610';\n"); + grammarBuilder.append("KW3611 : 'KW' '3611';\n"); + grammarBuilder.append("KW3612 : 'KW' '3612';\n"); + grammarBuilder.append("KW3613 : 'KW' '3613';\n"); + grammarBuilder.append("KW3614 : 'KW' '3614';\n"); + grammarBuilder.append("KW3615 : 'KW' '3615';\n"); + grammarBuilder.append("KW3616 : 'KW' '3616';\n"); + grammarBuilder.append("KW3617 : 'KW' '3617';\n"); + grammarBuilder.append("KW3618 : 'KW' '3618';\n"); + grammarBuilder.append("KW3619 : 'KW' '3619';\n"); + grammarBuilder.append("KW3620 : 'KW' '3620';\n"); + grammarBuilder.append("KW3621 : 'KW' '3621';\n"); + grammarBuilder.append("KW3622 : 'KW' '3622';\n"); + grammarBuilder.append("KW3623 : 'KW' '3623';\n"); + grammarBuilder.append("KW3624 : 'KW' '3624';\n"); + grammarBuilder.append("KW3625 : 'KW' '3625';\n"); + grammarBuilder.append("KW3626 : 'KW' '3626';\n"); + grammarBuilder.append("KW3627 : 'KW' '3627';\n"); + grammarBuilder.append("KW3628 : 'KW' '3628';\n"); + grammarBuilder.append("KW3629 : 'KW' '3629';\n"); + grammarBuilder.append("KW3630 : 'KW' '3630';\n"); + grammarBuilder.append("KW3631 : 'KW' '3631';\n"); + grammarBuilder.append("KW3632 : 'KW' '3632';\n"); + grammarBuilder.append("KW3633 : 'KW' '3633';\n"); + grammarBuilder.append("KW3634 : 'KW' '3634';\n"); + grammarBuilder.append("KW3635 : 'KW' '3635';\n"); + grammarBuilder.append("KW3636 : 'KW' '3636';\n"); + grammarBuilder.append("KW3637 : 'KW' '3637';\n"); + grammarBuilder.append("KW3638 : 'KW' '3638';\n"); + grammarBuilder.append("KW3639 : 'KW' '3639';\n"); + grammarBuilder.append("KW3640 : 'KW' '3640';\n"); + grammarBuilder.append("KW3641 : 'KW' '3641';\n"); + grammarBuilder.append("KW3642 : 'KW' '3642';\n"); + grammarBuilder.append("KW3643 : 'KW' '3643';\n"); + grammarBuilder.append("KW3644 : 'KW' '3644';\n"); + grammarBuilder.append("KW3645 : 'KW' '3645';\n"); + grammarBuilder.append("KW3646 : 'KW' '3646';\n"); + grammarBuilder.append("KW3647 : 'KW' '3647';\n"); + grammarBuilder.append("KW3648 : 'KW' '3648';\n"); + grammarBuilder.append("KW3649 : 'KW' '3649';\n"); + grammarBuilder.append("KW3650 : 'KW' '3650';\n"); + grammarBuilder.append("KW3651 : 'KW' '3651';\n"); + grammarBuilder.append("KW3652 : 'KW' '3652';\n"); + grammarBuilder.append("KW3653 : 'KW' '3653';\n"); + grammarBuilder.append("KW3654 : 'KW' '3654';\n"); + grammarBuilder.append("KW3655 : 'KW' '3655';\n"); + grammarBuilder.append("KW3656 : 'KW' '3656';\n"); + grammarBuilder.append("KW3657 : 'KW' '3657';\n"); + grammarBuilder.append("KW3658 : 'KW' '3658';\n"); + grammarBuilder.append("KW3659 : 'KW' '3659';\n"); + grammarBuilder.append("KW3660 : 'KW' '3660';\n"); + grammarBuilder.append("KW3661 : 'KW' '3661';\n"); + grammarBuilder.append("KW3662 : 'KW' '3662';\n"); + grammarBuilder.append("KW3663 : 'KW' '3663';\n"); + grammarBuilder.append("KW3664 : 'KW' '3664';\n"); + grammarBuilder.append("KW3665 : 'KW' '3665';\n"); + grammarBuilder.append("KW3666 : 'KW' '3666';\n"); + grammarBuilder.append("KW3667 : 'KW' '3667';\n"); + grammarBuilder.append("KW3668 : 'KW' '3668';\n"); + grammarBuilder.append("KW3669 : 'KW' '3669';\n"); + grammarBuilder.append("KW3670 : 'KW' '3670';\n"); + grammarBuilder.append("KW3671 : 'KW' '3671';\n"); + grammarBuilder.append("KW3672 : 'KW' '3672';\n"); + grammarBuilder.append("KW3673 : 'KW' '3673';\n"); + grammarBuilder.append("KW3674 : 'KW' '3674';\n"); + grammarBuilder.append("KW3675 : 'KW' '3675';\n"); + grammarBuilder.append("KW3676 : 'KW' '3676';\n"); + grammarBuilder.append("KW3677 : 'KW' '3677';\n"); + grammarBuilder.append("KW3678 : 'KW' '3678';\n"); + grammarBuilder.append("KW3679 : 'KW' '3679';\n"); + grammarBuilder.append("KW3680 : 'KW' '3680';\n"); + grammarBuilder.append("KW3681 : 'KW' '3681';\n"); + grammarBuilder.append("KW3682 : 'KW' '3682';\n"); + grammarBuilder.append("KW3683 : 'KW' '3683';\n"); + grammarBuilder.append("KW3684 : 'KW' '3684';\n"); + grammarBuilder.append("KW3685 : 'KW' '3685';\n"); + grammarBuilder.append("KW3686 : 'KW' '3686';\n"); + grammarBuilder.append("KW3687 : 'KW' '3687';\n"); + grammarBuilder.append("KW3688 : 'KW' '3688';\n"); + grammarBuilder.append("KW3689 : 'KW' '3689';\n"); + grammarBuilder.append("KW3690 : 'KW' '3690';\n"); + grammarBuilder.append("KW3691 : 'KW' '3691';\n"); + grammarBuilder.append("KW3692 : 'KW' '3692';\n"); + grammarBuilder.append("KW3693 : 'KW' '3693';\n"); + grammarBuilder.append("KW3694 : 'KW' '3694';\n"); + grammarBuilder.append("KW3695 : 'KW' '3695';\n"); + grammarBuilder.append("KW3696 : 'KW' '3696';\n"); + grammarBuilder.append("KW3697 : 'KW' '3697';\n"); + grammarBuilder.append("KW3698 : 'KW' '3698';\n"); + grammarBuilder.append("KW3699 : 'KW' '3699';\n"); + grammarBuilder.append("KW3700 : 'KW' '3700';\n"); + grammarBuilder.append("KW3701 : 'KW' '3701';\n"); + grammarBuilder.append("KW3702 : 'KW' '3702';\n"); + grammarBuilder.append("KW3703 : 'KW' '3703';\n"); + grammarBuilder.append("KW3704 : 'KW' '3704';\n"); + grammarBuilder.append("KW3705 : 'KW' '3705';\n"); + grammarBuilder.append("KW3706 : 'KW' '3706';\n"); + grammarBuilder.append("KW3707 : 'KW' '3707';\n"); + grammarBuilder.append("KW3708 : 'KW' '3708';\n"); + grammarBuilder.append("KW3709 : 'KW' '3709';\n"); + grammarBuilder.append("KW3710 : 'KW' '3710';\n"); + grammarBuilder.append("KW3711 : 'KW' '3711';\n"); + grammarBuilder.append("KW3712 : 'KW' '3712';\n"); + grammarBuilder.append("KW3713 : 'KW' '3713';\n"); + grammarBuilder.append("KW3714 : 'KW' '3714';\n"); + grammarBuilder.append("KW3715 : 'KW' '3715';\n"); + grammarBuilder.append("KW3716 : 'KW' '3716';\n"); + grammarBuilder.append("KW3717 : 'KW' '3717';\n"); + grammarBuilder.append("KW3718 : 'KW' '3718';\n"); + grammarBuilder.append("KW3719 : 'KW' '3719';\n"); + grammarBuilder.append("KW3720 : 'KW' '3720';\n"); + grammarBuilder.append("KW3721 : 'KW' '3721';\n"); + grammarBuilder.append("KW3722 : 'KW' '3722';\n"); + grammarBuilder.append("KW3723 : 'KW' '3723';\n"); + grammarBuilder.append("KW3724 : 'KW' '3724';\n"); + grammarBuilder.append("KW3725 : 'KW' '3725';\n"); + grammarBuilder.append("KW3726 : 'KW' '3726';\n"); + grammarBuilder.append("KW3727 : 'KW' '3727';\n"); + grammarBuilder.append("KW3728 : 'KW' '3728';\n"); + grammarBuilder.append("KW3729 : 'KW' '3729';\n"); + grammarBuilder.append("KW3730 : 'KW' '3730';\n"); + grammarBuilder.append("KW3731 : 'KW' '3731';\n"); + grammarBuilder.append("KW3732 : 'KW' '3732';\n"); + grammarBuilder.append("KW3733 : 'KW' '3733';\n"); + grammarBuilder.append("KW3734 : 'KW' '3734';\n"); + grammarBuilder.append("KW3735 : 'KW' '3735';\n"); + grammarBuilder.append("KW3736 : 'KW' '3736';\n"); + grammarBuilder.append("KW3737 : 'KW' '3737';\n"); + grammarBuilder.append("KW3738 : 'KW' '3738';\n"); + grammarBuilder.append("KW3739 : 'KW' '3739';\n"); + grammarBuilder.append("KW3740 : 'KW' '3740';\n"); + grammarBuilder.append("KW3741 : 'KW' '3741';\n"); + grammarBuilder.append("KW3742 : 'KW' '3742';\n"); + grammarBuilder.append("KW3743 : 'KW' '3743';\n"); + grammarBuilder.append("KW3744 : 'KW' '3744';\n"); + grammarBuilder.append("KW3745 : 'KW' '3745';\n"); + grammarBuilder.append("KW3746 : 'KW' '3746';\n"); + grammarBuilder.append("KW3747 : 'KW' '3747';\n"); + grammarBuilder.append("KW3748 : 'KW' '3748';\n"); + grammarBuilder.append("KW3749 : 'KW' '3749';\n"); + grammarBuilder.append("KW3750 : 'KW' '3750';\n"); + grammarBuilder.append("KW3751 : 'KW' '3751';\n"); + grammarBuilder.append("KW3752 : 'KW' '3752';\n"); + grammarBuilder.append("KW3753 : 'KW' '3753';\n"); + grammarBuilder.append("KW3754 : 'KW' '3754';\n"); + grammarBuilder.append("KW3755 : 'KW' '3755';\n"); + grammarBuilder.append("KW3756 : 'KW' '3756';\n"); + grammarBuilder.append("KW3757 : 'KW' '3757';\n"); + grammarBuilder.append("KW3758 : 'KW' '3758';\n"); + grammarBuilder.append("KW3759 : 'KW' '3759';\n"); + grammarBuilder.append("KW3760 : 'KW' '3760';\n"); + grammarBuilder.append("KW3761 : 'KW' '3761';\n"); + grammarBuilder.append("KW3762 : 'KW' '3762';\n"); + grammarBuilder.append("KW3763 : 'KW' '3763';\n"); + grammarBuilder.append("KW3764 : 'KW' '3764';\n"); + grammarBuilder.append("KW3765 : 'KW' '3765';\n"); + grammarBuilder.append("KW3766 : 'KW' '3766';\n"); + grammarBuilder.append("KW3767 : 'KW' '3767';\n"); + grammarBuilder.append("KW3768 : 'KW' '3768';\n"); + grammarBuilder.append("KW3769 : 'KW' '3769';\n"); + grammarBuilder.append("KW3770 : 'KW' '3770';\n"); + grammarBuilder.append("KW3771 : 'KW' '3771';\n"); + grammarBuilder.append("KW3772 : 'KW' '3772';\n"); + grammarBuilder.append("KW3773 : 'KW' '3773';\n"); + grammarBuilder.append("KW3774 : 'KW' '3774';\n"); + grammarBuilder.append("KW3775 : 'KW' '3775';\n"); + grammarBuilder.append("KW3776 : 'KW' '3776';\n"); + grammarBuilder.append("KW3777 : 'KW' '3777';\n"); + grammarBuilder.append("KW3778 : 'KW' '3778';\n"); + grammarBuilder.append("KW3779 : 'KW' '3779';\n"); + grammarBuilder.append("KW3780 : 'KW' '3780';\n"); + grammarBuilder.append("KW3781 : 'KW' '3781';\n"); + grammarBuilder.append("KW3782 : 'KW' '3782';\n"); + grammarBuilder.append("KW3783 : 'KW' '3783';\n"); + grammarBuilder.append("KW3784 : 'KW' '3784';\n"); + grammarBuilder.append("KW3785 : 'KW' '3785';\n"); + grammarBuilder.append("KW3786 : 'KW' '3786';\n"); + grammarBuilder.append("KW3787 : 'KW' '3787';\n"); + grammarBuilder.append("KW3788 : 'KW' '3788';\n"); + grammarBuilder.append("KW3789 : 'KW' '3789';\n"); + grammarBuilder.append("KW3790 : 'KW' '3790';\n"); + grammarBuilder.append("KW3791 : 'KW' '3791';\n"); + grammarBuilder.append("KW3792 : 'KW' '3792';\n"); + grammarBuilder.append("KW3793 : 'KW' '3793';\n"); + grammarBuilder.append("KW3794 : 'KW' '3794';\n"); + grammarBuilder.append("KW3795 : 'KW' '3795';\n"); + grammarBuilder.append("KW3796 : 'KW' '3796';\n"); + grammarBuilder.append("KW3797 : 'KW' '3797';\n"); + grammarBuilder.append("KW3798 : 'KW' '3798';\n"); + grammarBuilder.append("KW3799 : 'KW' '3799';\n"); + grammarBuilder.append("KW3800 : 'KW' '3800';\n"); + grammarBuilder.append("KW3801 : 'KW' '3801';\n"); + grammarBuilder.append("KW3802 : 'KW' '3802';\n"); + grammarBuilder.append("KW3803 : 'KW' '3803';\n"); + grammarBuilder.append("KW3804 : 'KW' '3804';\n"); + grammarBuilder.append("KW3805 : 'KW' '3805';\n"); + grammarBuilder.append("KW3806 : 'KW' '3806';\n"); + grammarBuilder.append("KW3807 : 'KW' '3807';\n"); + grammarBuilder.append("KW3808 : 'KW' '3808';\n"); + grammarBuilder.append("KW3809 : 'KW' '3809';\n"); + grammarBuilder.append("KW3810 : 'KW' '3810';\n"); + grammarBuilder.append("KW3811 : 'KW' '3811';\n"); + grammarBuilder.append("KW3812 : 'KW' '3812';\n"); + grammarBuilder.append("KW3813 : 'KW' '3813';\n"); + grammarBuilder.append("KW3814 : 'KW' '3814';\n"); + grammarBuilder.append("KW3815 : 'KW' '3815';\n"); + grammarBuilder.append("KW3816 : 'KW' '3816';\n"); + grammarBuilder.append("KW3817 : 'KW' '3817';\n"); + grammarBuilder.append("KW3818 : 'KW' '3818';\n"); + grammarBuilder.append("KW3819 : 'KW' '3819';\n"); + grammarBuilder.append("KW3820 : 'KW' '3820';\n"); + grammarBuilder.append("KW3821 : 'KW' '3821';\n"); + grammarBuilder.append("KW3822 : 'KW' '3822';\n"); + grammarBuilder.append("KW3823 : 'KW' '3823';\n"); + grammarBuilder.append("KW3824 : 'KW' '3824';\n"); + grammarBuilder.append("KW3825 : 'KW' '3825';\n"); + grammarBuilder.append("KW3826 : 'KW' '3826';\n"); + grammarBuilder.append("KW3827 : 'KW' '3827';\n"); + grammarBuilder.append("KW3828 : 'KW' '3828';\n"); + grammarBuilder.append("KW3829 : 'KW' '3829';\n"); + grammarBuilder.append("KW3830 : 'KW' '3830';\n"); + grammarBuilder.append("KW3831 : 'KW' '3831';\n"); + grammarBuilder.append("KW3832 : 'KW' '3832';\n"); + grammarBuilder.append("KW3833 : 'KW' '3833';\n"); + grammarBuilder.append("KW3834 : 'KW' '3834';\n"); + grammarBuilder.append("KW3835 : 'KW' '3835';\n"); + grammarBuilder.append("KW3836 : 'KW' '3836';\n"); + grammarBuilder.append("KW3837 : 'KW' '3837';\n"); + grammarBuilder.append("KW3838 : 'KW' '3838';\n"); + grammarBuilder.append("KW3839 : 'KW' '3839';\n"); + grammarBuilder.append("KW3840 : 'KW' '3840';\n"); + grammarBuilder.append("KW3841 : 'KW' '3841';\n"); + grammarBuilder.append("KW3842 : 'KW' '3842';\n"); + grammarBuilder.append("KW3843 : 'KW' '3843';\n"); + grammarBuilder.append("KW3844 : 'KW' '3844';\n"); + grammarBuilder.append("KW3845 : 'KW' '3845';\n"); + grammarBuilder.append("KW3846 : 'KW' '3846';\n"); + grammarBuilder.append("KW3847 : 'KW' '3847';\n"); + grammarBuilder.append("KW3848 : 'KW' '3848';\n"); + grammarBuilder.append("KW3849 : 'KW' '3849';\n"); + grammarBuilder.append("KW3850 : 'KW' '3850';\n"); + grammarBuilder.append("KW3851 : 'KW' '3851';\n"); + grammarBuilder.append("KW3852 : 'KW' '3852';\n"); + grammarBuilder.append("KW3853 : 'KW' '3853';\n"); + grammarBuilder.append("KW3854 : 'KW' '3854';\n"); + grammarBuilder.append("KW3855 : 'KW' '3855';\n"); + grammarBuilder.append("KW3856 : 'KW' '3856';\n"); + grammarBuilder.append("KW3857 : 'KW' '3857';\n"); + grammarBuilder.append("KW3858 : 'KW' '3858';\n"); + grammarBuilder.append("KW3859 : 'KW' '3859';\n"); + grammarBuilder.append("KW3860 : 'KW' '3860';\n"); + grammarBuilder.append("KW3861 : 'KW' '3861';\n"); + grammarBuilder.append("KW3862 : 'KW' '3862';\n"); + grammarBuilder.append("KW3863 : 'KW' '3863';\n"); + grammarBuilder.append("KW3864 : 'KW' '3864';\n"); + grammarBuilder.append("KW3865 : 'KW' '3865';\n"); + grammarBuilder.append("KW3866 : 'KW' '3866';\n"); + grammarBuilder.append("KW3867 : 'KW' '3867';\n"); + grammarBuilder.append("KW3868 : 'KW' '3868';\n"); + grammarBuilder.append("KW3869 : 'KW' '3869';\n"); + grammarBuilder.append("KW3870 : 'KW' '3870';\n"); + grammarBuilder.append("KW3871 : 'KW' '3871';\n"); + grammarBuilder.append("KW3872 : 'KW' '3872';\n"); + grammarBuilder.append("KW3873 : 'KW' '3873';\n"); + grammarBuilder.append("KW3874 : 'KW' '3874';\n"); + grammarBuilder.append("KW3875 : 'KW' '3875';\n"); + grammarBuilder.append("KW3876 : 'KW' '3876';\n"); + grammarBuilder.append("KW3877 : 'KW' '3877';\n"); + grammarBuilder.append("KW3878 : 'KW' '3878';\n"); + grammarBuilder.append("KW3879 : 'KW' '3879';\n"); + grammarBuilder.append("KW3880 : 'KW' '3880';\n"); + grammarBuilder.append("KW3881 : 'KW' '3881';\n"); + grammarBuilder.append("KW3882 : 'KW' '3882';\n"); + grammarBuilder.append("KW3883 : 'KW' '3883';\n"); + grammarBuilder.append("KW3884 : 'KW' '3884';\n"); + grammarBuilder.append("KW3885 : 'KW' '3885';\n"); + grammarBuilder.append("KW3886 : 'KW' '3886';\n"); + grammarBuilder.append("KW3887 : 'KW' '3887';\n"); + grammarBuilder.append("KW3888 : 'KW' '3888';\n"); + grammarBuilder.append("KW3889 : 'KW' '3889';\n"); + grammarBuilder.append("KW3890 : 'KW' '3890';\n"); + grammarBuilder.append("KW3891 : 'KW' '3891';\n"); + grammarBuilder.append("KW3892 : 'KW' '3892';\n"); + grammarBuilder.append("KW3893 : 'KW' '3893';\n"); + grammarBuilder.append("KW3894 : 'KW' '3894';\n"); + grammarBuilder.append("KW3895 : 'KW' '3895';\n"); + grammarBuilder.append("KW3896 : 'KW' '3896';\n"); + grammarBuilder.append("KW3897 : 'KW' '3897';\n"); + grammarBuilder.append("KW3898 : 'KW' '3898';\n"); + grammarBuilder.append("KW3899 : 'KW' '3899';\n"); + grammarBuilder.append("KW3900 : 'KW' '3900';\n"); + grammarBuilder.append("KW3901 : 'KW' '3901';\n"); + grammarBuilder.append("KW3902 : 'KW' '3902';\n"); + grammarBuilder.append("KW3903 : 'KW' '3903';\n"); + grammarBuilder.append("KW3904 : 'KW' '3904';\n"); + grammarBuilder.append("KW3905 : 'KW' '3905';\n"); + grammarBuilder.append("KW3906 : 'KW' '3906';\n"); + grammarBuilder.append("KW3907 : 'KW' '3907';\n"); + grammarBuilder.append("KW3908 : 'KW' '3908';\n"); + grammarBuilder.append("KW3909 : 'KW' '3909';\n"); + grammarBuilder.append("KW3910 : 'KW' '3910';\n"); + grammarBuilder.append("KW3911 : 'KW' '3911';\n"); + grammarBuilder.append("KW3912 : 'KW' '3912';\n"); + grammarBuilder.append("KW3913 : 'KW' '3913';\n"); + grammarBuilder.append("KW3914 : 'KW' '3914';\n"); + grammarBuilder.append("KW3915 : 'KW' '3915';\n"); + grammarBuilder.append("KW3916 : 'KW' '3916';\n"); + grammarBuilder.append("KW3917 : 'KW' '3917';\n"); + grammarBuilder.append("KW3918 : 'KW' '3918';\n"); + grammarBuilder.append("KW3919 : 'KW' '3919';\n"); + grammarBuilder.append("KW3920 : 'KW' '3920';\n"); + grammarBuilder.append("KW3921 : 'KW' '3921';\n"); + grammarBuilder.append("KW3922 : 'KW' '3922';\n"); + grammarBuilder.append("KW3923 : 'KW' '3923';\n"); + grammarBuilder.append("KW3924 : 'KW' '3924';\n"); + grammarBuilder.append("KW3925 : 'KW' '3925';\n"); + grammarBuilder.append("KW3926 : 'KW' '3926';\n"); + grammarBuilder.append("KW3927 : 'KW' '3927';\n"); + grammarBuilder.append("KW3928 : 'KW' '3928';\n"); + grammarBuilder.append("KW3929 : 'KW' '3929';\n"); + grammarBuilder.append("KW3930 : 'KW' '3930';\n"); + grammarBuilder.append("KW3931 : 'KW' '3931';\n"); + grammarBuilder.append("KW3932 : 'KW' '3932';\n"); + grammarBuilder.append("KW3933 : 'KW' '3933';\n"); + grammarBuilder.append("KW3934 : 'KW' '3934';\n"); + grammarBuilder.append("KW3935 : 'KW' '3935';\n"); + grammarBuilder.append("KW3936 : 'KW' '3936';\n"); + grammarBuilder.append("KW3937 : 'KW' '3937';\n"); + grammarBuilder.append("KW3938 : 'KW' '3938';\n"); + grammarBuilder.append("KW3939 : 'KW' '3939';\n"); + grammarBuilder.append("KW3940 : 'KW' '3940';\n"); + grammarBuilder.append("KW3941 : 'KW' '3941';\n"); + grammarBuilder.append("KW3942 : 'KW' '3942';\n"); + grammarBuilder.append("KW3943 : 'KW' '3943';\n"); + grammarBuilder.append("KW3944 : 'KW' '3944';\n"); + grammarBuilder.append("KW3945 : 'KW' '3945';\n"); + grammarBuilder.append("KW3946 : 'KW' '3946';\n"); + grammarBuilder.append("KW3947 : 'KW' '3947';\n"); + grammarBuilder.append("KW3948 : 'KW' '3948';\n"); + grammarBuilder.append("KW3949 : 'KW' '3949';\n"); + grammarBuilder.append("KW3950 : 'KW' '3950';\n"); + grammarBuilder.append("KW3951 : 'KW' '3951';\n"); + grammarBuilder.append("KW3952 : 'KW' '3952';\n"); + grammarBuilder.append("KW3953 : 'KW' '3953';\n"); + grammarBuilder.append("KW3954 : 'KW' '3954';\n"); + grammarBuilder.append("KW3955 : 'KW' '3955';\n"); + grammarBuilder.append("KW3956 : 'KW' '3956';\n"); + grammarBuilder.append("KW3957 : 'KW' '3957';\n"); + grammarBuilder.append("KW3958 : 'KW' '3958';\n"); + grammarBuilder.append("KW3959 : 'KW' '3959';\n"); + grammarBuilder.append("KW3960 : 'KW' '3960';\n"); + grammarBuilder.append("KW3961 : 'KW' '3961';\n"); + grammarBuilder.append("KW3962 : 'KW' '3962';\n"); + grammarBuilder.append("KW3963 : 'KW' '3963';\n"); + grammarBuilder.append("KW3964 : 'KW' '3964';\n"); + grammarBuilder.append("KW3965 : 'KW' '3965';\n"); + grammarBuilder.append("KW3966 : 'KW' '3966';\n"); + grammarBuilder.append("KW3967 : 'KW' '3967';\n"); + grammarBuilder.append("KW3968 : 'KW' '3968';\n"); + grammarBuilder.append("KW3969 : 'KW' '3969';\n"); + grammarBuilder.append("KW3970 : 'KW' '3970';\n"); + grammarBuilder.append("KW3971 : 'KW' '3971';\n"); + grammarBuilder.append("KW3972 : 'KW' '3972';\n"); + grammarBuilder.append("KW3973 : 'KW' '3973';\n"); + grammarBuilder.append("KW3974 : 'KW' '3974';\n"); + grammarBuilder.append("KW3975 : 'KW' '3975';\n"); + grammarBuilder.append("KW3976 : 'KW' '3976';\n"); + grammarBuilder.append("KW3977 : 'KW' '3977';\n"); + grammarBuilder.append("KW3978 : 'KW' '3978';\n"); + grammarBuilder.append("KW3979 : 'KW' '3979';\n"); + grammarBuilder.append("KW3980 : 'KW' '3980';\n"); + grammarBuilder.append("KW3981 : 'KW' '3981';\n"); + grammarBuilder.append("KW3982 : 'KW' '3982';\n"); + grammarBuilder.append("KW3983 : 'KW' '3983';\n"); + grammarBuilder.append("KW3984 : 'KW' '3984';\n"); + grammarBuilder.append("KW3985 : 'KW' '3985';\n"); + grammarBuilder.append("KW3986 : 'KW' '3986';\n"); + grammarBuilder.append("KW3987 : 'KW' '3987';\n"); + grammarBuilder.append("KW3988 : 'KW' '3988';\n"); + grammarBuilder.append("KW3989 : 'KW' '3989';\n"); + grammarBuilder.append("KW3990 : 'KW' '3990';\n"); + grammarBuilder.append("KW3991 : 'KW' '3991';\n"); + grammarBuilder.append("KW3992 : 'KW' '3992';\n"); + grammarBuilder.append("KW3993 : 'KW' '3993';\n"); + grammarBuilder.append("KW3994 : 'KW' '3994';\n"); + grammarBuilder.append("KW3995 : 'KW' '3995';\n"); + grammarBuilder.append("KW3996 : 'KW' '3996';\n"); + grammarBuilder.append("KW3997 : 'KW' '3997';\n"); + grammarBuilder.append("KW3998 : 'KW' '3998';\n"); + grammarBuilder.append("KW3999 : 'KW' '3999';"); + String grammar = grammarBuilder.toString(); + + String input ="KW400"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='KW400',<402>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : .*? ('a' | 'ab') {fmt.Println(l.GetText())} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : . {fmt.Println(l.GetText())};"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "a\n" + + "b\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:1='b',<3>,1:1]\n" + + "[@2,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"hi\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:3='\"hi\"',<1>,1:0]\n" + + "[@1,4:8='\"mom\"',<1>,1:4]\n" + + "[@2,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParentheses() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("START_BLOCK: '-.-.-';\n"); + grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); + grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); + grammarBuilder.append("fragment L_A: '.-';\n"); + grammarBuilder.append("fragment L_K: '-.-';\n"); + grammarBuilder.append("SEPARATOR: '!';"); + String grammar = grammarBuilder.toString(); + + String input ="-.-.-!"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='-.-.-',<1>,1:0]\n" + + "[@1,5:5='!',<3>,1:5]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPositionAdjustingLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(2692); + grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("func (p *PositionAdjustingLexer) NextToken() antlr.Token {\n"); + grammarBuilder.append(" if _, ok := p.Interpreter.(*PositionAdjustingLexerATNSimulator); !ok {\n"); + grammarBuilder.append(" p.Interpreter = NewPositionAdjustingLexerATNSimulator(p, lexerAtn, p.Interpreter.DecisionToDFA(), p.Interpreter.SharedContextCache())\n"); + grammarBuilder.append(" p.Virt = p\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return p.BaseLexer.NextToken()\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (p *PositionAdjustingLexer) Emit() antlr.Token {\n"); + grammarBuilder.append(" switch p.GetType() {\n"); + grammarBuilder.append(" case PositionAdjustingLexerTOKENS:\n"); + grammarBuilder.append(" p.HandleAcceptPositionForKeyword(\"tokens\")\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" case PositionAdjustingLexerLABEL:\n"); + grammarBuilder.append(" p.HandleAcceptPositionForIdentifier()\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return p.BaseLexer.Emit()\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func isIdentifierChar(c rune) bool {\n"); + grammarBuilder.append(" return unicode.IsLetter(c) || unicode.IsDigit(c) || c == '_'\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (p *PositionAdjustingLexer) HandleAcceptPositionForIdentifier() bool {\n"); + grammarBuilder.append(" var tokenText = p.GetText()\n"); + grammarBuilder.append(" var identifierLength int\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" for identifierLength < len(tokenText) && isIdentifierChar([]rune(tokenText)[identifierLength]) {\n"); + grammarBuilder.append(" identifierLength++\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" if p.GetInputStream().Index() <= p.TokenStartCharIndex + identifierLength {\n"); + grammarBuilder.append(" return false\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" var offset = identifierLength - 1\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" p.GetInterpreter().(*PositionAdjustingLexerATNSimulator).ResetAcceptPosition(p.GetInputStream(), p.TokenStartCharIndex + offset, p.TokenStartLine, p.TokenStartColumn + offset)\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (p *PositionAdjustingLexer) HandleAcceptPositionForKeyword(keyword string) bool {\n"); + grammarBuilder.append(" if p.GetInputStream().Index() <= p.TokenStartCharIndex + len(keyword) {\n"); + grammarBuilder.append(" return false\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" var offset = len(keyword) - 1\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" p.GetInterpreter().(*PositionAdjustingLexerATNSimulator).ResetAcceptPosition(p.GetInputStream(), p.TokenStartCharIndex + offset, p.TokenStartLine, p.TokenStartColumn + offset)\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("type PositionAdjustingLexerATNSimulator struct {\n"); + grammarBuilder.append(" *antlr.LexerATNSimulator\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewPositionAdjustingLexerATNSimulator(recog antlr.Lexer, atn *antlr.ATN, decisionToDFA []*antlr.DFA, sharedContextCache *antlr.PredictionContextCache) *PositionAdjustingLexerATNSimulator {\n"); + grammarBuilder.append(" return &PositionAdjustingLexerATNSimulator{\n"); + grammarBuilder.append(" LexerATNSimulator: antlr.NewLexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache),\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (p *PositionAdjustingLexerATNSimulator) ResetAcceptPosition(input antlr.CharStream, index, line, charPositionInLine int) {\n"); + grammarBuilder.append(" input.Seek(index)\n"); + grammarBuilder.append(" p.Line = line\n"); + grammarBuilder.append(" p.CharPositionInLine = charPositionInLine\n"); + grammarBuilder.append(" p.Consume(input)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ASSIGN : '=' ;\n"); + grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); + grammarBuilder.append("LCURLY: '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// 'tokens' followed by '{'\n"); + grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); + grammarBuilder.append("LABEL\n"); + grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("IDENTIFIER\n"); + grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("IGNORED\n"); + grammarBuilder.append(" : [ \\t\\r\\n]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("NEWLINE\n"); + grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS\n"); + grammarBuilder.append(" : [ \\t]+ -> skip\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + String input = + "tokens\n" + + "tokens {\n" + + "notLabel\n" + + "label1 =\n" + + "label2 +=\n" + + "notLabel\n"; + String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); + assertEquals( + "[@0,0:5='tokens',<6>,1:0]\n" + + "[@1,7:12='tokens',<4>,2:0]\n" + + "[@2,14:14='{',<3>,2:7]\n" + + "[@3,16:23='notLabel',<6>,3:0]\n" + + "[@4,25:30='label1',<5>,4:0]\n" + + "[@5,32:32='=',<1>,4:7]\n" + + "[@6,34:39='label2',<5>,5:0]\n" + + "[@7,41:42='+=',<2>,5:7]\n" + + "[@8,44:51='notLabel',<6>,6:0]\n" + + "[@9,53:52='',<-1>,7:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testQuoteTranslation() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); + String grammar = grammarBuilder.toString(); + + String input ="\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\"',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : '-' I ;\n"); + grammarBuilder.append("I : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 -21 3"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='34',<2>,1:0]\n" + + "[@1,3:5='-21',<1>,1:3]\n" + + "[@2,7:7='3',<2>,1:7]\n" + + "[@3,8:7='',<-1>,1:8]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSlashes() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("Backslash : '\\\\';\n"); + grammarBuilder.append("Slash : '/';\n"); + grammarBuilder.append("Vee : '\\\\/';\n"); + grammarBuilder.append("Wedge : '/\\\\';\n"); + grammarBuilder.append("WS : [ \\t] -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="\\ / \\/ /\\"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\\',<1>,1:0]\n" + + "[@1,2:2='/',<2>,1:2]\n" + + "[@2,4:5='\\/',<3>,1:4]\n" + + "[@3,7:8='/\\',<4>,1:7]\n" + + "[@4,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testZeroLengthToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("BeginString\n"); + grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("mode StringMode;\n"); + grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); + grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); + grammarBuilder.append("mode EndStringMode; \n"); + grammarBuilder.append(" EndString : '\\'' -> popMode;"); + String grammar = grammarBuilder.toString(); + + String input ="'xxx'"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4=''xxx'',<1>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestListeners.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestListeners.java new file mode 100644 index 000000000..75da87935 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestListeners.java @@ -0,0 +1,413 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestListeners extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(526); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("type LeafListener struct {\n"); + grammarBuilder.append(" *BaseTListener\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); + grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) VisitTerminal(node antlr.TerminalNode) {\n"); + grammarBuilder.append(" fmt.Println(node.GetSymbol().GetText())\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); + grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1\n" + + "2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLR() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(698); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("type LeafListener struct {\n"); + grammarBuilder.append(" *BaseTListener\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); + grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) ExitE(ctx *EContext) {\n"); + grammarBuilder.append(" if ctx.GetChildCount() == 3 {\n"); + grammarBuilder.append(" fmt.Printf(\"%s %s %s\\n\", ctx.E(0).GetStart().GetText(), ctx.E(1).GetStart().GetText(), ctx.AllE()[0].GetStart().GetText())\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" fmt.Println(ctx.INT().GetSymbol().GetText())\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); + grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e op='*' e\n"); + grammarBuilder.append(" | e op='+' e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) + (e (e 2) * (e 3)))\n" + + "1\n" + + "2\n" + + "3\n" + + "2 3 2\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLRWithLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(706); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("type LeafListener struct {\n"); + grammarBuilder.append(" *BaseTListener\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); + grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) ExitCall(ctx *CallContext) {\n"); + grammarBuilder.append(" fmt.Printf(\"%s %s\", ctx.E().GetStart().GetText(), ctx.EList().String(nil, nil))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) ExitInt(ctx *IntContext) {\n"); + grammarBuilder.append(" fmt.Println(ctx.INT().GetSymbol().GetText())\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); + grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e '(' eList ')' # Call\n"); + grammarBuilder.append(" | INT # Int\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("eList : e (',' e)* ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1(2,3)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + + "1\n" + + "2\n" + + "3\n" + + "1 [13 6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(721); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("type LeafListener struct {\n"); + grammarBuilder.append(" *BaseTListener\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); + grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); + grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); + grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.B(0).GetStart().GetText(), ctx.B(1).GetStart().GetText(), ctx.AllB()[0].GetStart().GetText())\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" fmt.Println(ctx.B(0).GetStart().GetText())\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); + grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b 1) (b 2))\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(721); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("type LeafListener struct {\n"); + grammarBuilder.append(" *BaseTListener\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); + grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); + grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); + grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.B(0).GetStart().GetText(), ctx.B(1).GetStart().GetText(), ctx.AllB()[0].GetStart().GetText())\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" fmt.Println(ctx.B(0).GetStart().GetText())\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); + grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b abc))\n" + + "abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(714); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("type LeafListener struct {\n"); + grammarBuilder.append(" *BaseTListener\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); + grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); + grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); + grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.INT(0).GetSymbol().GetText(), ctx.INT(1).GetSymbol().GetText(), antlr.PrintArrayJavaStyle(antlr.TerminalNodeToStringArray(ctx.AllINT())))\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" fmt.Println(ctx.ID().GetSymbol())\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); + grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1 2 [1, 2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(714); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("type LeafListener struct {\n"); + grammarBuilder.append(" *BaseTListener\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); + grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); + grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); + grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.INT(0).GetSymbol().GetText(), ctx.INT(1).GetSymbol().GetText(), antlr.PrintArrayJavaStyle(antlr.TerminalNodeToStringArray(ctx.AllINT())))\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" fmt.Println(ctx.ID().GetSymbol())\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); + grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a abc)\n" + + "[@0,0:2='abc',<4>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParseTrees.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParseTrees.java new file mode 100644 index 000000000..0801e74a9 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParseTrees.java @@ -0,0 +1,323 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParseTrees extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2AltLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyyxyxz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y y x y x z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2Alts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAltNum() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(640); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("type MyRuleNode struct {\n"); + grammarBuilder.append(" *antlr.BaseParserRuleContext\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" altNum int\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func NewMyRuleNode(parent antlr.ParserRuleContext, invokingStateNumber int) *MyRuleNode {\n"); + grammarBuilder.append(" return &MyRuleNode{\n"); + grammarBuilder.append(" BaseParserRuleContext : antlr.NewBaseParserRuleContext(parent, invokingStateNumber),\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (m *MyRuleNode) GetAltNumber() int {\n"); + grammarBuilder.append(" return m.altNum\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("func (m *MyRuleNode) SetAltNumber(altNum int) {\n"); + grammarBuilder.append(" m.altNum = altNum\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("a : 'f'\n"); + grammarBuilder.append(" | 'g'\n"); + grammarBuilder.append(" | 'x' b 'z'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'e' {} | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a:3 x (b:2 y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExtraToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="xzy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a z)\n", found); + + assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleRef() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(136); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b 'x'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'y' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="yx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a (b y) x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSync() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(143); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'* '!'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xzyy!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y y !)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToken2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(125); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenAndRuleContextString() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(194); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("p.BuildParseTrees = true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' { \n"); + grammarBuilder.append("fmt.Println(antlr.PrintArrayJavaStyle(p.GetRuleInvocationStack(nil)))\n"); + grammarBuilder.append("} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "[a, s]\n" + + "(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserErrors.java new file mode 100644 index 000000000..9651adbd1 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserErrors.java @@ -0,0 +1,753 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserErrors extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(74); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x='b' {fmt.Println(\"conjured=\" + fmt.Sprint($x))} 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpTokenFromSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x=('b'|'c') {fmt.Println(\"conjured=\" + fmt.Sprint($x))} 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testContextListGetters() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(175); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members{\n"); + grammarBuilder.append("func foo() {\n"); + grammarBuilder.append(" // TODO\n"); + grammarBuilder.append(" // var s SContext\n"); + grammarBuilder.append(" // var a = s.A()\n"); + grammarBuilder.append(" // var b = s.B()\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : (a | b)+;\n"); + grammarBuilder.append("a : 'a' {fmt.Print(\"a\")};\n"); + grammarBuilder.append("b : 'b' {fmt.Print(\"b\")};"); + String grammar = grammarBuilder.toString(); + + + String input ="abab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("abab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidATNStateRemoval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input ="x:x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidEmptyInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID+;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + + assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1ErrorInfo() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(314); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); + grammarBuilder.append("animal : (DOG | CAT );\n"); + grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); + grammarBuilder.append("AND : 'and';\n"); + grammarBuilder.append("DOG : 'dog';\n"); + grammarBuilder.append("CAT : 'cat';\n"); + grammarBuilder.append("HARDWARE: 'hardware';\n"); + grammarBuilder.append("SOFTWARE: 'software';\n"); + grammarBuilder.append("WS : ' ' -> skip ;\n"); + grammarBuilder.append("acClass\n"); + grammarBuilder.append("@init\n"); + grammarBuilder.append("{fmt.Println(p.GetExpectedTokens().StringVerbose(p.GetTokenNames(), nil, false))}\n"); + grammarBuilder.append(" : ;"); + String grammar = grammarBuilder.toString(); + + + String input ="dog and software"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("{'hardware', 'software'}\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'\n"); + grammarBuilder.append(" | 'a' 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(55); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c'\n"); + grammarBuilder.append(" | 'a' 'b' 'd'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abe"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLLStar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aaae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAltAvoidance() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e '!' ;\n"); + grammarBuilder.append("e : 'a' 'b'\n"); + grammarBuilder.append(" | 'a'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a."; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(34); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(93); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {fmt.Println(\"\" + fmt.Sprint($myset.stop))} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@0,0:0='a',<3>,1:0]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('b' | 'c')\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'a'\n"); + grammarBuilder.append(";"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(25); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(32); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforePredict() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="caaab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(93); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {fmt.Println(\"\" + fmt.Sprint($myset.stop))} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="aabd"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@2,2:2='b',<1>,1:2]\n", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionExpectingSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); + grammarBuilder.append("expr: ID '=' STR ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="( ~FORCE_ERROR~ "; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserExec.java new file mode 100644 index 000000000..45997fdd2 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestParserExec.java @@ -0,0 +1,822 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserExec extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID+ {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)+ {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorB() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID {\n"); + grammarBuilder.append("fmt.Println(\"alt 1\")\n"); + grammarBuilder.append("} | INT {\n"); + grammarBuilder.append("fmt.Println(\"alt 2\")\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(111); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})+ {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(111); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(111); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID INT {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFInClosure() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : stat EOF;\n"); + grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(193); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("fmt.Println($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(169); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : a* EOF;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : label=subrule {fmt.Println($label.text)} #One\n"); + grammarBuilder.append(" | label='y' {fmt.Println($label.text)} #Two\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("subrule : 'x';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "x\n" + + "y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); + grammarBuilder.append("b : id_=ID val+=INT*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelForClosureContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(420); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("ifStatement\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : 'if' expression\n"); + grammarBuilder.append(" ( ( 'then'\n"); + grammarBuilder.append(" executableStatement*\n"); + grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); + grammarBuilder.append(" elseStatement?\n"); + grammarBuilder.append(" 'end' 'if'\n"); + grammarBuilder.append(" ) | executableStatement )\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("elseIfStatement\n"); + grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expression : 'a' ;\n"); + grammarBuilder.append("executableStatement : 'a' ;\n"); + grammarBuilder.append("elseStatement : 'a' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelsOnSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b b* ';' ;\n"); + grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleEOFHandling() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(42); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserProperty() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(181); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("func (p *TParser) Property() bool {\n"); + grammarBuilder.append(" return true\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("a : {$parser.Property()}? ID {fmt.Println(\"valid\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("valid\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedIfIfElse() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(183); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : stmt EOF ;\n"); + grammarBuilder.append("stmt : ifStmt | ID;\n"); + grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { p.GetTokenStream().LA(1) != TParserELSE }?);\n"); + grammarBuilder.append("ELSE : 'else';\n"); + grammarBuilder.append("ID : [a-zA-Z]+;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x if x a else b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredictionIssue334() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_ @init{\n"); + grammarBuilder.append("p.SetErrorHandler(antlr.NewBailErrorStrategy())\n"); + grammarBuilder.append("} \n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("fmt.Println($ctx.ToStringTree(nil, p))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); + grammarBuilder.append("item : A B?;\n"); + grammarBuilder.append("SEMICOLON: ';';\n"); + grammarBuilder.append("A : 'a'|'A';\n"); + grammarBuilder.append("B : 'b'|'B';\n"); + grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); + + assertEquals("(file_ (item a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(112); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {fmt.Println($text)} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(112); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {fmt.Println($text)} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestPerformance.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestPerformance.java new file mode 100644 index 000000000..1daacdab1 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestPerformance.java @@ -0,0 +1,220 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestPerformance extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalLexer.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalLexer.java new file mode 100644 index 000000000..1f15b6561 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalLexer.java @@ -0,0 +1,218 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalLexer extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisableRule() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("E1 : 'enum' { false }? ;\n"); + grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<3>,1:5]\n" + + "[@2,8:7='',<-1>,1:8]\n" + + "s0-' '->:s5=>4\n" + + "s0-'a'->:s6=>3\n" + + "s0-'e'->:s1=>3\n" + + ":s1=>3-'n'->:s2=>3\n" + + ":s2=>3-'u'->:s3=>3\n" + + ":s6=>3-'b'->:s6=>3\n" + + ":s6=>3-'c'->:s6=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnumNotID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(100); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { p.GetText() == \"enum\" }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<1>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s3=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDnotEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s2=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDvsEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s5=>3\n" + + "s0-'a'->:s4=>2\n" + + "s0-'e'->:s1=>2\n" + + ":s1=>2-'n'->:s2=>2\n" + + ":s2=>2-'u'->:s3=>2\n" + + ":s4=>2-'b'->:s4=>2\n" + + ":s4=>2-'c'->:s4=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndent() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(139); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("INDENT : [ \\t]+ { p.TokenStartColumn == 0 }?\n"); + grammarBuilder.append(" { fmt.Println(\"INDENT\") } ;\n"); + grammarBuilder.append("NL : '\\n';\n"); + grammarBuilder.append("WS : [ \\t]+ ;"); + String grammar = grammarBuilder.toString(); + + String input = + "abc\n" + + " def \n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "INDENT\n" + + "[@0,0:2='abc',<1>,1:0]\n" + + "[@1,3:3='\\n',<3>,1:3]\n" + + "[@2,4:5=' ',<2>,2:0]\n" + + "[@3,6:8='def',<1>,2:2]\n" + + "[@4,9:10=' ',<4>,2:5]\n" + + "[@5,11:11='\\n',<3>,2:7]\n" + + "[@6,12:11='',<-1>,3:0]\n" + + "s0-'\n" + + "'->:s2=>3\n" + + "s0-'a'->:s1=>1\n" + + "s0-'d'->:s1=>1\n" + + ":s1=>1-'b'->:s1=>1\n" + + ":s1=>1-'c'->:s1=>1\n" + + ":s1=>1-'e'->:s1=>1\n" + + ":s1=>1-'f'->:s1=>1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerInputPositionSensitivePredicates() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WORD1 : ID1+ { fmt.Println(l.GetText()) } ;\n"); + grammarBuilder.append("WORD2 : ID2+ { fmt.Println(l.GetText()) } ;\n"); + grammarBuilder.append("fragment ID1 : { p.GetCharPositionInLine() < 2 }? [a-zA-Z];\n"); + grammarBuilder.append("fragment ID2 : { p.GetCharPositionInLine() >= 2 }? [a-zA-Z];\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input = + "a cde\n" + + "abcde\n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "a\n" + + "cde\n" + + "ab\n" + + "cde\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:4='cde',<2>,1:2]\n" + + "[@2,6:7='ab',<1>,2:0]\n" + + "[@3,8:10='cde',<2>,2:2]\n" + + "[@4,12:11='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedKeywords() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(160); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { p.GetText() == \"enum\" }? { fmt.Println(\"enum!\") } ;\n"); + grammarBuilder.append("ID : [a-z]+ { fmt.Println(\"ID \" + l.GetText()) } ;\n"); + grammarBuilder.append("WS : [ \\n] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="enum enu a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "enum!\n" + + "ID enu\n" + + "ID a\n" + + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='enu',<2>,1:5]\n" + + "[@2,9:9='a',<2>,1:9]\n" + + "[@3,10:9='',<-1>,1:10]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalParser.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalParser.java new file mode 100644 index 000000000..15af7e24a --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSemPredEvalParser.java @@ -0,0 +1,792 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalParser extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAlts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(299); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);} a ';' a; // do 2x: once in ATN, next in DFA\n"); + grammarBuilder.append("a : ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" | {false}? ID {fmt.Println(\"alt 3\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + + assertEquals( + "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + + "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(350); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);} a ';' a ';' a;\n"); + grammarBuilder.append("a : INT {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | ID {fmt.Println(\"alt 2\")} // must pick this one for ID since pred is false\n"); + grammarBuilder.append(" | ID {fmt.Println(\"alt 3\")}\n"); + grammarBuilder.append(" | {false}? ID {fmt.Println(\"alt 4\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34; x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 2\n" + + "alt 2\n", found); + + assertEquals( + "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + + "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionHidesPreds() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(231); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); + grammarBuilder.append("s : a+ ;\n"); + grammarBuilder.append("a : {i = 1;} ID {i == 1}? {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {i = 2;} ID {i == 2}? {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionsHidePredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(286); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("func pred(v bool) bool {\n"); + grammarBuilder.append(" fmt.Println(\"eval=\" + fmt.Sprint(v))\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {} {pred(true)}? {fmt.Println(\"parse\")} '!' ;\n"); + grammarBuilder.append("t : e {} {pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAtomWithClosureInTranslatedLRRule() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : e[0] EOF;\n"); + grammarBuilder.append("e[int _p]\n"); + grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); + grammarBuilder.append(" ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b+a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDepedentPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(313); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("func pred(v bool) bool {\n"); + grammarBuilder.append(" fmt.Println(\"eval=\" + fmt.Sprint(v))\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : a[99] ;\n"); + grammarBuilder.append("a[int i] : e {pred($i == 99)}? {fmt.Println(\"parse\")} '!' ;\n"); + grammarBuilder.append("b[int i] : e {pred($i == 99)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(272); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); + grammarBuilder.append("b[int i] : a[i] ;\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i == 1}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {$i == 2}? ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisabledAlternative() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); + grammarBuilder.append("content: anything | {false}? .;\n"); + grammarBuilder.append("anything: ANY_CHAR;\n"); + grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); + String grammar = grammarBuilder.toString(); + + + String input ="hello"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(181); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b ';' | b '.' ;\n"); + grammarBuilder.append("b : a ;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : {false}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoTruePredsThrowsNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(169); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {false}? ID INT {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {false}? ID INT {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOrder() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(295); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); + grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); + grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); + grammarBuilder.append("a : ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(213); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {fmt.Println($ctx.ToStringTree(nil, p))}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{p.GetTokenStream().LA(2) != TParserNL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); + + assertEquals( + "line 5:0 mismatched input '' expecting '\n" + + "'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(213); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {fmt.Println($ctx.ToStringTree(nil, p))}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{p.GetTokenStream().LA(2) != TParserNL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n" + + "\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(233); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {var enumKeyword bool = true; var _ bool = enumKeyword; }\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {fmt.Println(\"ID \"+$ID.text)}\n"); + grammarBuilder.append(" | {!enumKeyword}? 'enum' {fmt.Println(\"enum\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("ID abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(233); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {var enumKeyword bool = true; var _ bool = enumKeyword; }\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {fmt.Println(\"ID \"+$ID.text)}\n"); + grammarBuilder.append(" | {!enumKeyword}? 'enum' {fmt.Println(\"enum\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="enum"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(230); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i == 1}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {$i == 2}? ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(186); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i == 1}? ID \n"); + grammarBuilder.append(" | {$i == 2}? ID \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(280); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("func pred(v bool) bool {\n"); + grammarBuilder.append(" fmt.Println(\"eval=\" + fmt.Sprint(v))\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {pred(true)}? {fmt.Println(\"parse\")} '!' ;\n"); + grammarBuilder.append("t : e {pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRewindBeforePredEval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(241); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {p.GetTokenStream().LT(1).GetText() == \"x\"}? ID INT {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {p.GetTokenStream().LT(1).GetText() == \"y\"}? ID INT {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(253); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); + grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" | INT {fmt.Println(\"alt 3\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y 3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {true}? INT {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a;\n"); + grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {true}? INT {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="3 4 x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n", found); + + assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeft() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append(" s : a+ ;\n"); + grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeftWithVaryingPredicate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(264); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); + grammarBuilder.append("s : ({i += 1;\n"); + grammarBuilder.append("fmt.Print(\"i=\")\n"); + grammarBuilder.append("fmt.Println(i)} a)+ ;\n"); + grammarBuilder.append("a : {i % 2 == 0}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {i % 2 != 0}? ID {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "i=1\n" + + "alt 2\n" + + "i=2\n" + + "alt 1\n" + + "i=3\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testUnpredicatedPathsInAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(181); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | b {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("a : {false}? ID INT\n"); + grammarBuilder.append(" | ID INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testValidateInDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(330); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ';' a;\n"); + grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); + grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); + grammarBuilder.append("// throws an exception if the validating predicate fails\n"); + grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); + grammarBuilder.append(" | {true}? INT {fmt.Println(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x ; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 no viable alternative at input 'x'\n" + + "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSets.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSets.java new file mode 100644 index 000000000..22b01cec7 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestSets.java @@ -0,0 +1,500 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSets extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetLiteral() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (A {fmt.Println($A.text)})+ ;\n"); + grammarBuilder.append("A : [AaBb] ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="A a B b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals( + "A\n" + + "a\n" + + "B\n" + + "b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testComplementSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("parse : ~NEW_LINE;\n"); + grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 token recognition error at: 'a'\n" + + "line 1:1 missing {} at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotChar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); + grammarBuilder.append("A : ~'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); + grammarBuilder.append("A : ~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); + grammarBuilder.append("A : h=~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithRuleRef3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(124); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); + grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("B : ~('a'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : 'b'? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')? 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A? 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(56); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~('x'|'y') 'z' {fmt.Println($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(72); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ~'x' 'z' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("zz\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotTokenWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(50); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~'x' 'z' {fmt.Println($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=('x'|'y') {fmt.Println($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : 'b'+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleAsSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {fmt.Println(p.GetTokenStream().GetAllText())} : 'a' | 'b' |'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSeqDoesNotBecomeSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(122); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : C {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("fragment A : '1' | '2';\n"); + grammarBuilder.append("fragment B : '3' '4';\n"); + grammarBuilder.append("C : A | B;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')* 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestVisitors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestVisitors.java new file mode 100644 index 000000000..3c93596ce --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/go/TestVisitors.java @@ -0,0 +1,53 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.go; + +import org.junit.Ignore; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestVisitors extends BaseGoTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testBasic() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLR() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLRWithLabels() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_2() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_2() throws Exception { + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/ErrorQueue.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/ErrorQueue.java new file mode 100644 index 000000000..10eb3c155 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/ErrorQueue.java @@ -0,0 +1,108 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.antlr.v4.Tool; +import org.antlr.v4.runtime.misc.Utils; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.ANTLRToolListener; +import org.antlr.v4.tool.ToolMessage; +import org.stringtemplate.v4.ST; + +import java.util.ArrayList; +import java.util.List; + +public class ErrorQueue implements ANTLRToolListener { + public final Tool tool; + public final List infos = new ArrayList(); + public final List errors = new ArrayList(); + public final List warnings = new ArrayList(); + public final List all = new ArrayList(); + + public ErrorQueue() { + this(null); + } + + public ErrorQueue(Tool tool) { + this.tool = tool; + } + + @Override + public void info(String msg) { + infos.add(msg); + } + + @Override + public void error(ANTLRMessage msg) { + errors.add(msg); + all.add(msg); + } + + @Override + public void warning(ANTLRMessage msg) { + warnings.add(msg); + all.add(msg); + } + + public void error(ToolMessage msg) { + errors.add(msg); + all.add(msg); + } + + public int size() { + return all.size() + infos.size(); + } + + @Override + public String toString() { + return toString(false); + } + + public String toString(boolean rendered) { + if (!rendered) { + return Utils.join(all.iterator(), "\n"); + } + + if (tool == null) { + throw new IllegalStateException(String.format("No %s instance is available.", Tool.class.getName())); + } + + StringBuilder buf = new StringBuilder(); + for (ANTLRMessage m : all) { + ST st = tool.errMgr.getMessageTemplate(m); + buf.append(st.render()); + buf.append("\n"); + } + + return buf.toString(); + } + +} + diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/LegacyBaseJavaTest.java similarity index 98% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseTest.java rename to runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/LegacyBaseJavaTest.java index 271555eef..b92244d5d 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseTest.java +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/LegacyBaseJavaTest.java @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.antlr.v4.test.runtime.java; +package org.antlr.v4.test.runtime.legacy.java; import org.antlr.v4.Tool; import org.antlr.v4.automata.ATNFactory; @@ -112,9 +112,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public abstract class BaseTest { +public abstract class LegacyBaseJavaTest { // -J-Dorg.antlr.v4.test.BaseTest.level=FINE - private static final Logger LOGGER = Logger.getLogger(BaseTest.class.getName()); + private static final Logger LOGGER = Logger.getLogger(LegacyBaseJavaTest.class.getName()); public static final String newline = System.getProperty("line.separator"); public static final String pathSep = System.getProperty("path.separator"); @@ -628,17 +628,21 @@ public abstract class BaseTest { String grammarStr, String parserName, String lexerName, + String listenerName, + String visitorName, String startRuleName, String input, boolean debug) { - return execParser(grammarFileName, grammarStr, parserName, - lexerName, startRuleName, input, debug, false); + return execParser(grammarFileName, grammarStr, parserName, lexerName, + listenerName, visitorName, startRuleName, input, debug, false); } protected String execParser(String grammarFileName, String grammarStr, String parserName, String lexerName, + String listenerName, + String visitorName, String startRuleName, String input, boolean debug, boolean profile) diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeLexers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeLexers.java new file mode 100644 index 000000000..81b40a12d --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeLexers.java @@ -0,0 +1,71 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeLexers extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {System.out.println(\"S.A\");};\n" + + "C : 'c' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="abc"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "S.A\n" + + "[@0,0:0='a',<3>,1:0]\n" + + "[@1,1:1='b',<1>,1:1]\n" + + "[@2,2:2='c',<4>,1:2]\n" + + "[@3,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {System.out.println(\"S.A\");} ;\n" + + "B : 'b' {System.out.println(\"S.B\");} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(93); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("A : 'a' B {System.out.println(\"M.A\");} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "M.A\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeParsers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeParsers.java new file mode 100644 index 000000000..b97b945a2 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestCompositeParsers.java @@ -0,0 +1,501 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.antlr.v4.tool.Grammar; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeParsers extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBringInLiteralsFromDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : '=' 'a' {System.out.print(\"S.a\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="=a"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCombinedImportsCombined() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : 'x' INT {System.out.println(\"S.x\");};\n" + + "INT : '0'..'9'+ ;\n" + + "WS : (' '|'\\n') -> skip ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(31); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : x INT;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + + + String input ="x 34 9"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatesSeeSameTokenType() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { C, B, A } // reverse order\n" + + "y : A {System.out.println(\"T.y\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : A {System.out.println(\"S.x\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(598); + grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); + grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); + grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); + grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); + grammarBuilder.append("// mapping in each parser:\n"); + grammarBuilder.append("// public static final int C=6;\n"); + grammarBuilder.append("// public static final int EOF=-1;\n"); + grammarBuilder.append("// public static final int B=5;\n"); + grammarBuilder.append("// public static final int WS=7;\n"); + grammarBuilder.append("// public static final int A=4;\n"); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); + grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); + grammarBuilder.append("A : 'a' ; \n"); + grammarBuilder.append("C : 'c' ; \n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + + + String input ="aa"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals( + "S.x\n" + + "T.y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorAccessesDelegateMembers() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "@parser::members {\n" + + " public void foo() {System.out.println(\"foo\");}\n" + + "}\n" + + "a : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(122); + grammarBuilder.append("grammar M; // uses no rules from the import\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : 'b' {foo();} ; // gS is import pointer\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("foo\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {System.out.println(\"S.a\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a[int x] returns [int y] : B {System.out.print(\"S.a\");} {$y=1000;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(145); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : label=a[3] {System.out.println($label.y);} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a1000\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {System.out.print(\"S.a\");} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(133); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a {System.out.print($a.text);} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.ab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "a : B {System.out.println(\"T.a\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {System.out.println(\"S.a\");};\n" + + "b : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : b {System.out.print(\"S.a\");};\n" + + "b : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("b : 'b'|'c';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegates() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { A }\n" + + "b : 'b' {System.out.println(\"T.b\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {System.out.println(\"S.a\");};\n" + + "b : 'b' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S, T;\n"); + grammarBuilder.append("b : 'b'|'c' {System.out.println(\"M.b\");}|B|A;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.b\n" + + "S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "type_ : 'int' ;\n" + + "decl : type_ ID ';'\n" + + " | type_ ID init ';' {System.out.print(\"JavaDecl: \" + $text);};\n" + + "init : '=' INT;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("prog : decl ;\n"); + grammarBuilder.append("type_ : 'int' | 'float' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="float x = 3;"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); + + assertEquals("JavaDecl: floatx=3;\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportLexerWithOnlyFragmentRules() throws Exception { + mkdir(tmpdir); + + String slave_Unicode = + "lexer grammar Unicode;\n" + + "\n" + + "fragment\n" + + "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + + " | '\\u2000'..'\\u200A'\n" + + " | '\\u202F' | '\\u205F' | '\\u3000'\n" + + " ;\n"; + writeFile(tmpdir, "Unicode.g4", slave_Unicode); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar Test;\n"); + grammarBuilder.append("import Unicode;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program : 'test' 'test';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="test test"; + String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedGrammarWithEmptyOptions() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "options {}\n" + + "a : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedRuleWithAction() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a @after {int x = 0;} : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordVSIDOrder() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "ID : 'a'..'z'+;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(129); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("a : A {System.out.println(\"M.a: \" + $A);};\n"); + grammarBuilder.append("A : 'abc' {System.out.println(\"M.A\");};\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.A\n" + + "M.a: [@0,0:2='abc',<1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestFullContextParsing.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestFullContextParsing.java new file mode 100644 index 000000000..d54a20901 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestFullContextParsing.java @@ -0,0 +1,522 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestFullContextParsing extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigYieldsCtxSensitiveDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(101); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : ID | ID {} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-ID->:s1^=>1\n", found); + + assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbiguityNoLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(217); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(" : expr expr {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: '@'\n"); + grammarBuilder.append(" | ID '@'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a@"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("alt 1\n", found); + + assertEquals( + "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + + "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + + "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFATwoDiffInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc @ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 2:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + + "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="@ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(": expr[0] {System.out.println($expr.ctx.toStringTree(this));};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(": expr[0] {System.out.println($expr.ctx.toStringTree(this));};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b * (expr c)))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + + "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + + "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s1=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo else bar }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + + "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLoopsSimulateTailRecursion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); + grammarBuilder.append(" : expr_or_assign*;\n"); + grammarBuilder.append("expr_or_assign\n"); + grammarBuilder.append(" : expr '++' {System.out.println(\"fail.\");}\n"); + grammarBuilder.append(" | expr {System.out.println(\"pass: \"+$expr.text);}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); + grammarBuilder.append("expr_primary\n"); + grammarBuilder.append(" : '(' ID ')'\n"); + grammarBuilder.append(" | ID '(' ID ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a(i)<-x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("pass: a(i)<-x\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + + "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSLLSeesEOFInLLGrammar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : a;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + + "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLeftRecursion.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLeftRecursion.java new file mode 100644 index 000000000..d04c114d8 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLeftRecursion.java @@ -0,0 +1,3502 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLeftRecursion extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="1\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a = 5\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="b = 6\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*2\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(*a)[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="**a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[3]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator b) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator ( (declarator a) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[]()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[][]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(399); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {System.out.println($ctx.toStringTree(this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {System.out.println($ctx.toStringTree(this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a x) y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {System.out.println($ctx.toStringTree(this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a (a x) y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 1) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) - (e 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.this"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . this) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e - (e a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a|b&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f(x)==T.c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_11() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f().g(x,1)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_12() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new T[((n-1) * x) + 1]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a|b)&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a > b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) > (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a >> b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) >> (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a^b^c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new A().b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)t.f()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(178); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(178); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(178); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(246); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(246); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(246); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(729); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(729); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(729); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(729); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrecedenceFilterConsidersContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog \n"); + grammarBuilder.append("@after {System.out.println($ctx.toStringTree(this));}\n"); + grammarBuilder.append(": statement* EOF {};\n"); + grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); + grammarBuilder.append("letterA: 'a';"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(224); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (literal - 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(224); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1 + -1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(343); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(343); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a+b)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(343); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b+c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("((a=b)+c)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(461); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(461); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(461); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(461); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(308); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(308); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(308); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(308); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(325); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(325); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(325); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(325); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(261); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(261); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(261); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(261); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); + grammarBuilder.append("e returns [int v, List ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("9\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPred() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(143); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a {true}? ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPredFailOption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(167); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID {false}?\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y z))\n", found); + + assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a x))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(291); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(266); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1,3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1, 3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerErrors.java new file mode 100644 index 000000000..152688ded --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerErrors.java @@ -0,0 +1,259 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerErrors extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatFailsBackToDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(39); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:3='ab',<1>,1:2]\n" + + "[@2,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;\n"); + grammarBuilder.append("C : 'abcd' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababcx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:4='abc',<2>,1:2]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { } }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='{ { } }',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testErrorInMiddle() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStart() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,1:0='',<-1>,1:1]\n", found); + + assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStartAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,2:1='',<-1>,1:2]\n", found); + + assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInTokenAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + + assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerExecDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar L;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + String input ="x : x"; + String found = execLexer("L.g4", grammar, "LLexer", input, false); + assertEquals( + "[@0,0:0='x',<3>,1:0]\n" + + "[@1,2:2=':',<1>,1:2]\n" + + "[@2,4:4='x',<3>,1:4]\n" + + "[@3,5:4='',<-1>,1:5]\n", found); + + assertEquals( + "line 1:1 token recognition error at: ' '\n" + + "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo\"]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerExec.java new file mode 100644 index 000000000..36af36337 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestLexerExec.java @@ -0,0 +1,5031 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerExec extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionPlacement() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(323); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ({System.out.println(\"stuff fail: \" + this.getText());} 'a'\n"); + grammarBuilder.append("| {System.out.println(\"stuff0: \" + this.getText());}\n"); + grammarBuilder.append(" 'a' {System.out.println(\"stuff1: \" + this.getText());}\n"); + grammarBuilder.append(" 'b' {System.out.println(\"stuff2: \" + this.getText());})\n"); + grammarBuilder.append(" {System.out.println(this.getText());} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "stuff0: \n" + + "stuff1: a\n" + + "stuff2: ab\n" + + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {System.out.println(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetInSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(93); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : (~[ab \\n]|'a') {System.out.println(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="a x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:2='x',<1>,1:2]\n" + + "[@2,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetNot() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(96); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {System.out.println(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="xaf"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:2='xaf',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetPlus() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(87); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {System.out.println(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(143); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {System.out.println(\"I\");} ;\n"); + grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {System.out.println(\"ID\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34 a2 abc \n" + + " "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "ID\n" + + "ID\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,7:8='a2',<2>,2:4]\n" + + "[@3,10:12='abc',<2>,2:7]\n" + + "[@4,18:17='',<-1>,3:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithEscapedChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DASHBRACK : [\\-\\]]+ {System.out.println(\"DASHBRACK\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="- ] "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "DASHBRACK\n" + + "DASHBRACK\n" + + "[@0,0:0='-',<1>,1:0]\n" + + "[@1,2:2=']',<1>,1:2]\n" + + "[@2,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEndRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-]+ {System.out.println(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="00\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='00',<1>,1:0]\n" + + "[@1,3:2='',<-1>,2:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEscapeChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {System.out.println(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(81); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"a-z]+ {System.out.println(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:2='b\"a',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"\\\\ab]+ {System.out.println(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"\\a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:3='b\"\\a',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithReversedRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(79); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [z-a9]+ {System.out.println(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="9"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:0='9',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFByItself() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DONE : EOF ;\n"); + grammarBuilder.append("A : 'a';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:-1='',<1>,1:0]\n" + + "[@1,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input ="a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ('a' | 'ab') {System.out.println(this.getText());} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testHexVsID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); + grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); + grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="x 0 1 a.b a.l"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='x',<5>,1:0]\n" + + "[@1,1:1=' ',<6>,1:1]\n" + + "[@2,2:2='0',<2>,1:2]\n" + + "[@3,3:3=' ',<6>,1:3]\n" + + "[@4,4:4='1',<2>,1:4]\n" + + "[@5,5:5=' ',<6>,1:5]\n" + + "[@6,6:6='a',<5>,1:6]\n" + + "[@7,7:7='.',<4>,1:7]\n" + + "[@8,8:8='b',<5>,1:8]\n" + + "[@9,9:9=' ',<6>,1:9]\n" + + "[@10,10:10='a',<5>,1:10]\n" + + "[@11,11:11='.',<4>,1:11]\n" + + "[@12,12:12='l',<5>,1:12]\n" + + "[@13,13:12='',<-1>,1:13]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("KEND : 'end' ; // has priority\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="end eend ending a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:2='end',<1>,1:0]\n" + + "[@1,3:3=' ',<3>,1:3]\n" + + "[@2,4:7='eend',<2>,1:4]\n" + + "[@3,8:8=' ',<3>,1:8]\n" + + "[@4,9:14='ending',<2>,1:9]\n" + + "[@5,15:15=' ',<3>,1:15]\n" + + "[@6,16:16='a',<2>,1:16]\n" + + "[@7,17:16='',<-1>,1:17]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLargeLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85821); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); + grammarBuilder.append("KW0 : 'KW' '0';\n"); + grammarBuilder.append("KW1 : 'KW' '1';\n"); + grammarBuilder.append("KW2 : 'KW' '2';\n"); + grammarBuilder.append("KW3 : 'KW' '3';\n"); + grammarBuilder.append("KW4 : 'KW' '4';\n"); + grammarBuilder.append("KW5 : 'KW' '5';\n"); + grammarBuilder.append("KW6 : 'KW' '6';\n"); + grammarBuilder.append("KW7 : 'KW' '7';\n"); + grammarBuilder.append("KW8 : 'KW' '8';\n"); + grammarBuilder.append("KW9 : 'KW' '9';\n"); + grammarBuilder.append("KW10 : 'KW' '10';\n"); + grammarBuilder.append("KW11 : 'KW' '11';\n"); + grammarBuilder.append("KW12 : 'KW' '12';\n"); + grammarBuilder.append("KW13 : 'KW' '13';\n"); + grammarBuilder.append("KW14 : 'KW' '14';\n"); + grammarBuilder.append("KW15 : 'KW' '15';\n"); + grammarBuilder.append("KW16 : 'KW' '16';\n"); + grammarBuilder.append("KW17 : 'KW' '17';\n"); + grammarBuilder.append("KW18 : 'KW' '18';\n"); + grammarBuilder.append("KW19 : 'KW' '19';\n"); + grammarBuilder.append("KW20 : 'KW' '20';\n"); + grammarBuilder.append("KW21 : 'KW' '21';\n"); + grammarBuilder.append("KW22 : 'KW' '22';\n"); + grammarBuilder.append("KW23 : 'KW' '23';\n"); + grammarBuilder.append("KW24 : 'KW' '24';\n"); + grammarBuilder.append("KW25 : 'KW' '25';\n"); + grammarBuilder.append("KW26 : 'KW' '26';\n"); + grammarBuilder.append("KW27 : 'KW' '27';\n"); + grammarBuilder.append("KW28 : 'KW' '28';\n"); + grammarBuilder.append("KW29 : 'KW' '29';\n"); + grammarBuilder.append("KW30 : 'KW' '30';\n"); + grammarBuilder.append("KW31 : 'KW' '31';\n"); + grammarBuilder.append("KW32 : 'KW' '32';\n"); + grammarBuilder.append("KW33 : 'KW' '33';\n"); + grammarBuilder.append("KW34 : 'KW' '34';\n"); + grammarBuilder.append("KW35 : 'KW' '35';\n"); + grammarBuilder.append("KW36 : 'KW' '36';\n"); + grammarBuilder.append("KW37 : 'KW' '37';\n"); + grammarBuilder.append("KW38 : 'KW' '38';\n"); + grammarBuilder.append("KW39 : 'KW' '39';\n"); + grammarBuilder.append("KW40 : 'KW' '40';\n"); + grammarBuilder.append("KW41 : 'KW' '41';\n"); + grammarBuilder.append("KW42 : 'KW' '42';\n"); + grammarBuilder.append("KW43 : 'KW' '43';\n"); + grammarBuilder.append("KW44 : 'KW' '44';\n"); + grammarBuilder.append("KW45 : 'KW' '45';\n"); + grammarBuilder.append("KW46 : 'KW' '46';\n"); + grammarBuilder.append("KW47 : 'KW' '47';\n"); + grammarBuilder.append("KW48 : 'KW' '48';\n"); + grammarBuilder.append("KW49 : 'KW' '49';\n"); + grammarBuilder.append("KW50 : 'KW' '50';\n"); + grammarBuilder.append("KW51 : 'KW' '51';\n"); + grammarBuilder.append("KW52 : 'KW' '52';\n"); + grammarBuilder.append("KW53 : 'KW' '53';\n"); + grammarBuilder.append("KW54 : 'KW' '54';\n"); + grammarBuilder.append("KW55 : 'KW' '55';\n"); + grammarBuilder.append("KW56 : 'KW' '56';\n"); + grammarBuilder.append("KW57 : 'KW' '57';\n"); + grammarBuilder.append("KW58 : 'KW' '58';\n"); + grammarBuilder.append("KW59 : 'KW' '59';\n"); + grammarBuilder.append("KW60 : 'KW' '60';\n"); + grammarBuilder.append("KW61 : 'KW' '61';\n"); + grammarBuilder.append("KW62 : 'KW' '62';\n"); + grammarBuilder.append("KW63 : 'KW' '63';\n"); + grammarBuilder.append("KW64 : 'KW' '64';\n"); + grammarBuilder.append("KW65 : 'KW' '65';\n"); + grammarBuilder.append("KW66 : 'KW' '66';\n"); + grammarBuilder.append("KW67 : 'KW' '67';\n"); + grammarBuilder.append("KW68 : 'KW' '68';\n"); + grammarBuilder.append("KW69 : 'KW' '69';\n"); + grammarBuilder.append("KW70 : 'KW' '70';\n"); + grammarBuilder.append("KW71 : 'KW' '71';\n"); + grammarBuilder.append("KW72 : 'KW' '72';\n"); + grammarBuilder.append("KW73 : 'KW' '73';\n"); + grammarBuilder.append("KW74 : 'KW' '74';\n"); + grammarBuilder.append("KW75 : 'KW' '75';\n"); + grammarBuilder.append("KW76 : 'KW' '76';\n"); + grammarBuilder.append("KW77 : 'KW' '77';\n"); + grammarBuilder.append("KW78 : 'KW' '78';\n"); + grammarBuilder.append("KW79 : 'KW' '79';\n"); + grammarBuilder.append("KW80 : 'KW' '80';\n"); + grammarBuilder.append("KW81 : 'KW' '81';\n"); + grammarBuilder.append("KW82 : 'KW' '82';\n"); + grammarBuilder.append("KW83 : 'KW' '83';\n"); + grammarBuilder.append("KW84 : 'KW' '84';\n"); + grammarBuilder.append("KW85 : 'KW' '85';\n"); + grammarBuilder.append("KW86 : 'KW' '86';\n"); + grammarBuilder.append("KW87 : 'KW' '87';\n"); + grammarBuilder.append("KW88 : 'KW' '88';\n"); + grammarBuilder.append("KW89 : 'KW' '89';\n"); + grammarBuilder.append("KW90 : 'KW' '90';\n"); + grammarBuilder.append("KW91 : 'KW' '91';\n"); + grammarBuilder.append("KW92 : 'KW' '92';\n"); + grammarBuilder.append("KW93 : 'KW' '93';\n"); + grammarBuilder.append("KW94 : 'KW' '94';\n"); + grammarBuilder.append("KW95 : 'KW' '95';\n"); + grammarBuilder.append("KW96 : 'KW' '96';\n"); + grammarBuilder.append("KW97 : 'KW' '97';\n"); + grammarBuilder.append("KW98 : 'KW' '98';\n"); + grammarBuilder.append("KW99 : 'KW' '99';\n"); + grammarBuilder.append("KW100 : 'KW' '100';\n"); + grammarBuilder.append("KW101 : 'KW' '101';\n"); + grammarBuilder.append("KW102 : 'KW' '102';\n"); + grammarBuilder.append("KW103 : 'KW' '103';\n"); + grammarBuilder.append("KW104 : 'KW' '104';\n"); + grammarBuilder.append("KW105 : 'KW' '105';\n"); + grammarBuilder.append("KW106 : 'KW' '106';\n"); + grammarBuilder.append("KW107 : 'KW' '107';\n"); + grammarBuilder.append("KW108 : 'KW' '108';\n"); + grammarBuilder.append("KW109 : 'KW' '109';\n"); + grammarBuilder.append("KW110 : 'KW' '110';\n"); + grammarBuilder.append("KW111 : 'KW' '111';\n"); + grammarBuilder.append("KW112 : 'KW' '112';\n"); + grammarBuilder.append("KW113 : 'KW' '113';\n"); + grammarBuilder.append("KW114 : 'KW' '114';\n"); + grammarBuilder.append("KW115 : 'KW' '115';\n"); + grammarBuilder.append("KW116 : 'KW' '116';\n"); + grammarBuilder.append("KW117 : 'KW' '117';\n"); + grammarBuilder.append("KW118 : 'KW' '118';\n"); + grammarBuilder.append("KW119 : 'KW' '119';\n"); + grammarBuilder.append("KW120 : 'KW' '120';\n"); + grammarBuilder.append("KW121 : 'KW' '121';\n"); + grammarBuilder.append("KW122 : 'KW' '122';\n"); + grammarBuilder.append("KW123 : 'KW' '123';\n"); + grammarBuilder.append("KW124 : 'KW' '124';\n"); + grammarBuilder.append("KW125 : 'KW' '125';\n"); + grammarBuilder.append("KW126 : 'KW' '126';\n"); + grammarBuilder.append("KW127 : 'KW' '127';\n"); + grammarBuilder.append("KW128 : 'KW' '128';\n"); + grammarBuilder.append("KW129 : 'KW' '129';\n"); + grammarBuilder.append("KW130 : 'KW' '130';\n"); + grammarBuilder.append("KW131 : 'KW' '131';\n"); + grammarBuilder.append("KW132 : 'KW' '132';\n"); + grammarBuilder.append("KW133 : 'KW' '133';\n"); + grammarBuilder.append("KW134 : 'KW' '134';\n"); + grammarBuilder.append("KW135 : 'KW' '135';\n"); + grammarBuilder.append("KW136 : 'KW' '136';\n"); + grammarBuilder.append("KW137 : 'KW' '137';\n"); + grammarBuilder.append("KW138 : 'KW' '138';\n"); + grammarBuilder.append("KW139 : 'KW' '139';\n"); + grammarBuilder.append("KW140 : 'KW' '140';\n"); + grammarBuilder.append("KW141 : 'KW' '141';\n"); + grammarBuilder.append("KW142 : 'KW' '142';\n"); + grammarBuilder.append("KW143 : 'KW' '143';\n"); + grammarBuilder.append("KW144 : 'KW' '144';\n"); + grammarBuilder.append("KW145 : 'KW' '145';\n"); + grammarBuilder.append("KW146 : 'KW' '146';\n"); + grammarBuilder.append("KW147 : 'KW' '147';\n"); + grammarBuilder.append("KW148 : 'KW' '148';\n"); + grammarBuilder.append("KW149 : 'KW' '149';\n"); + grammarBuilder.append("KW150 : 'KW' '150';\n"); + grammarBuilder.append("KW151 : 'KW' '151';\n"); + grammarBuilder.append("KW152 : 'KW' '152';\n"); + grammarBuilder.append("KW153 : 'KW' '153';\n"); + grammarBuilder.append("KW154 : 'KW' '154';\n"); + grammarBuilder.append("KW155 : 'KW' '155';\n"); + grammarBuilder.append("KW156 : 'KW' '156';\n"); + grammarBuilder.append("KW157 : 'KW' '157';\n"); + grammarBuilder.append("KW158 : 'KW' '158';\n"); + grammarBuilder.append("KW159 : 'KW' '159';\n"); + grammarBuilder.append("KW160 : 'KW' '160';\n"); + grammarBuilder.append("KW161 : 'KW' '161';\n"); + grammarBuilder.append("KW162 : 'KW' '162';\n"); + grammarBuilder.append("KW163 : 'KW' '163';\n"); + grammarBuilder.append("KW164 : 'KW' '164';\n"); + grammarBuilder.append("KW165 : 'KW' '165';\n"); + grammarBuilder.append("KW166 : 'KW' '166';\n"); + grammarBuilder.append("KW167 : 'KW' '167';\n"); + grammarBuilder.append("KW168 : 'KW' '168';\n"); + grammarBuilder.append("KW169 : 'KW' '169';\n"); + grammarBuilder.append("KW170 : 'KW' '170';\n"); + grammarBuilder.append("KW171 : 'KW' '171';\n"); + grammarBuilder.append("KW172 : 'KW' '172';\n"); + grammarBuilder.append("KW173 : 'KW' '173';\n"); + grammarBuilder.append("KW174 : 'KW' '174';\n"); + grammarBuilder.append("KW175 : 'KW' '175';\n"); + grammarBuilder.append("KW176 : 'KW' '176';\n"); + grammarBuilder.append("KW177 : 'KW' '177';\n"); + grammarBuilder.append("KW178 : 'KW' '178';\n"); + grammarBuilder.append("KW179 : 'KW' '179';\n"); + grammarBuilder.append("KW180 : 'KW' '180';\n"); + grammarBuilder.append("KW181 : 'KW' '181';\n"); + grammarBuilder.append("KW182 : 'KW' '182';\n"); + grammarBuilder.append("KW183 : 'KW' '183';\n"); + grammarBuilder.append("KW184 : 'KW' '184';\n"); + grammarBuilder.append("KW185 : 'KW' '185';\n"); + grammarBuilder.append("KW186 : 'KW' '186';\n"); + grammarBuilder.append("KW187 : 'KW' '187';\n"); + grammarBuilder.append("KW188 : 'KW' '188';\n"); + grammarBuilder.append("KW189 : 'KW' '189';\n"); + grammarBuilder.append("KW190 : 'KW' '190';\n"); + grammarBuilder.append("KW191 : 'KW' '191';\n"); + grammarBuilder.append("KW192 : 'KW' '192';\n"); + grammarBuilder.append("KW193 : 'KW' '193';\n"); + grammarBuilder.append("KW194 : 'KW' '194';\n"); + grammarBuilder.append("KW195 : 'KW' '195';\n"); + grammarBuilder.append("KW196 : 'KW' '196';\n"); + grammarBuilder.append("KW197 : 'KW' '197';\n"); + grammarBuilder.append("KW198 : 'KW' '198';\n"); + grammarBuilder.append("KW199 : 'KW' '199';\n"); + grammarBuilder.append("KW200 : 'KW' '200';\n"); + grammarBuilder.append("KW201 : 'KW' '201';\n"); + grammarBuilder.append("KW202 : 'KW' '202';\n"); + grammarBuilder.append("KW203 : 'KW' '203';\n"); + grammarBuilder.append("KW204 : 'KW' '204';\n"); + grammarBuilder.append("KW205 : 'KW' '205';\n"); + grammarBuilder.append("KW206 : 'KW' '206';\n"); + grammarBuilder.append("KW207 : 'KW' '207';\n"); + grammarBuilder.append("KW208 : 'KW' '208';\n"); + grammarBuilder.append("KW209 : 'KW' '209';\n"); + grammarBuilder.append("KW210 : 'KW' '210';\n"); + grammarBuilder.append("KW211 : 'KW' '211';\n"); + grammarBuilder.append("KW212 : 'KW' '212';\n"); + grammarBuilder.append("KW213 : 'KW' '213';\n"); + grammarBuilder.append("KW214 : 'KW' '214';\n"); + grammarBuilder.append("KW215 : 'KW' '215';\n"); + grammarBuilder.append("KW216 : 'KW' '216';\n"); + grammarBuilder.append("KW217 : 'KW' '217';\n"); + grammarBuilder.append("KW218 : 'KW' '218';\n"); + grammarBuilder.append("KW219 : 'KW' '219';\n"); + grammarBuilder.append("KW220 : 'KW' '220';\n"); + grammarBuilder.append("KW221 : 'KW' '221';\n"); + grammarBuilder.append("KW222 : 'KW' '222';\n"); + grammarBuilder.append("KW223 : 'KW' '223';\n"); + grammarBuilder.append("KW224 : 'KW' '224';\n"); + grammarBuilder.append("KW225 : 'KW' '225';\n"); + grammarBuilder.append("KW226 : 'KW' '226';\n"); + grammarBuilder.append("KW227 : 'KW' '227';\n"); + grammarBuilder.append("KW228 : 'KW' '228';\n"); + grammarBuilder.append("KW229 : 'KW' '229';\n"); + grammarBuilder.append("KW230 : 'KW' '230';\n"); + grammarBuilder.append("KW231 : 'KW' '231';\n"); + grammarBuilder.append("KW232 : 'KW' '232';\n"); + grammarBuilder.append("KW233 : 'KW' '233';\n"); + grammarBuilder.append("KW234 : 'KW' '234';\n"); + grammarBuilder.append("KW235 : 'KW' '235';\n"); + grammarBuilder.append("KW236 : 'KW' '236';\n"); + grammarBuilder.append("KW237 : 'KW' '237';\n"); + grammarBuilder.append("KW238 : 'KW' '238';\n"); + grammarBuilder.append("KW239 : 'KW' '239';\n"); + grammarBuilder.append("KW240 : 'KW' '240';\n"); + grammarBuilder.append("KW241 : 'KW' '241';\n"); + grammarBuilder.append("KW242 : 'KW' '242';\n"); + grammarBuilder.append("KW243 : 'KW' '243';\n"); + grammarBuilder.append("KW244 : 'KW' '244';\n"); + grammarBuilder.append("KW245 : 'KW' '245';\n"); + grammarBuilder.append("KW246 : 'KW' '246';\n"); + grammarBuilder.append("KW247 : 'KW' '247';\n"); + grammarBuilder.append("KW248 : 'KW' '248';\n"); + grammarBuilder.append("KW249 : 'KW' '249';\n"); + grammarBuilder.append("KW250 : 'KW' '250';\n"); + grammarBuilder.append("KW251 : 'KW' '251';\n"); + grammarBuilder.append("KW252 : 'KW' '252';\n"); + grammarBuilder.append("KW253 : 'KW' '253';\n"); + grammarBuilder.append("KW254 : 'KW' '254';\n"); + grammarBuilder.append("KW255 : 'KW' '255';\n"); + grammarBuilder.append("KW256 : 'KW' '256';\n"); + grammarBuilder.append("KW257 : 'KW' '257';\n"); + grammarBuilder.append("KW258 : 'KW' '258';\n"); + grammarBuilder.append("KW259 : 'KW' '259';\n"); + grammarBuilder.append("KW260 : 'KW' '260';\n"); + grammarBuilder.append("KW261 : 'KW' '261';\n"); + grammarBuilder.append("KW262 : 'KW' '262';\n"); + grammarBuilder.append("KW263 : 'KW' '263';\n"); + grammarBuilder.append("KW264 : 'KW' '264';\n"); + grammarBuilder.append("KW265 : 'KW' '265';\n"); + grammarBuilder.append("KW266 : 'KW' '266';\n"); + grammarBuilder.append("KW267 : 'KW' '267';\n"); + grammarBuilder.append("KW268 : 'KW' '268';\n"); + grammarBuilder.append("KW269 : 'KW' '269';\n"); + grammarBuilder.append("KW270 : 'KW' '270';\n"); + grammarBuilder.append("KW271 : 'KW' '271';\n"); + grammarBuilder.append("KW272 : 'KW' '272';\n"); + grammarBuilder.append("KW273 : 'KW' '273';\n"); + grammarBuilder.append("KW274 : 'KW' '274';\n"); + grammarBuilder.append("KW275 : 'KW' '275';\n"); + grammarBuilder.append("KW276 : 'KW' '276';\n"); + grammarBuilder.append("KW277 : 'KW' '277';\n"); + grammarBuilder.append("KW278 : 'KW' '278';\n"); + grammarBuilder.append("KW279 : 'KW' '279';\n"); + grammarBuilder.append("KW280 : 'KW' '280';\n"); + grammarBuilder.append("KW281 : 'KW' '281';\n"); + grammarBuilder.append("KW282 : 'KW' '282';\n"); + grammarBuilder.append("KW283 : 'KW' '283';\n"); + grammarBuilder.append("KW284 : 'KW' '284';\n"); + grammarBuilder.append("KW285 : 'KW' '285';\n"); + grammarBuilder.append("KW286 : 'KW' '286';\n"); + grammarBuilder.append("KW287 : 'KW' '287';\n"); + grammarBuilder.append("KW288 : 'KW' '288';\n"); + grammarBuilder.append("KW289 : 'KW' '289';\n"); + grammarBuilder.append("KW290 : 'KW' '290';\n"); + grammarBuilder.append("KW291 : 'KW' '291';\n"); + grammarBuilder.append("KW292 : 'KW' '292';\n"); + grammarBuilder.append("KW293 : 'KW' '293';\n"); + grammarBuilder.append("KW294 : 'KW' '294';\n"); + grammarBuilder.append("KW295 : 'KW' '295';\n"); + grammarBuilder.append("KW296 : 'KW' '296';\n"); + grammarBuilder.append("KW297 : 'KW' '297';\n"); + grammarBuilder.append("KW298 : 'KW' '298';\n"); + grammarBuilder.append("KW299 : 'KW' '299';\n"); + grammarBuilder.append("KW300 : 'KW' '300';\n"); + grammarBuilder.append("KW301 : 'KW' '301';\n"); + grammarBuilder.append("KW302 : 'KW' '302';\n"); + grammarBuilder.append("KW303 : 'KW' '303';\n"); + grammarBuilder.append("KW304 : 'KW' '304';\n"); + grammarBuilder.append("KW305 : 'KW' '305';\n"); + grammarBuilder.append("KW306 : 'KW' '306';\n"); + grammarBuilder.append("KW307 : 'KW' '307';\n"); + grammarBuilder.append("KW308 : 'KW' '308';\n"); + grammarBuilder.append("KW309 : 'KW' '309';\n"); + grammarBuilder.append("KW310 : 'KW' '310';\n"); + grammarBuilder.append("KW311 : 'KW' '311';\n"); + grammarBuilder.append("KW312 : 'KW' '312';\n"); + grammarBuilder.append("KW313 : 'KW' '313';\n"); + grammarBuilder.append("KW314 : 'KW' '314';\n"); + grammarBuilder.append("KW315 : 'KW' '315';\n"); + grammarBuilder.append("KW316 : 'KW' '316';\n"); + grammarBuilder.append("KW317 : 'KW' '317';\n"); + grammarBuilder.append("KW318 : 'KW' '318';\n"); + grammarBuilder.append("KW319 : 'KW' '319';\n"); + grammarBuilder.append("KW320 : 'KW' '320';\n"); + grammarBuilder.append("KW321 : 'KW' '321';\n"); + grammarBuilder.append("KW322 : 'KW' '322';\n"); + grammarBuilder.append("KW323 : 'KW' '323';\n"); + grammarBuilder.append("KW324 : 'KW' '324';\n"); + grammarBuilder.append("KW325 : 'KW' '325';\n"); + grammarBuilder.append("KW326 : 'KW' '326';\n"); + grammarBuilder.append("KW327 : 'KW' '327';\n"); + grammarBuilder.append("KW328 : 'KW' '328';\n"); + grammarBuilder.append("KW329 : 'KW' '329';\n"); + grammarBuilder.append("KW330 : 'KW' '330';\n"); + grammarBuilder.append("KW331 : 'KW' '331';\n"); + grammarBuilder.append("KW332 : 'KW' '332';\n"); + grammarBuilder.append("KW333 : 'KW' '333';\n"); + grammarBuilder.append("KW334 : 'KW' '334';\n"); + grammarBuilder.append("KW335 : 'KW' '335';\n"); + grammarBuilder.append("KW336 : 'KW' '336';\n"); + grammarBuilder.append("KW337 : 'KW' '337';\n"); + grammarBuilder.append("KW338 : 'KW' '338';\n"); + grammarBuilder.append("KW339 : 'KW' '339';\n"); + grammarBuilder.append("KW340 : 'KW' '340';\n"); + grammarBuilder.append("KW341 : 'KW' '341';\n"); + grammarBuilder.append("KW342 : 'KW' '342';\n"); + grammarBuilder.append("KW343 : 'KW' '343';\n"); + grammarBuilder.append("KW344 : 'KW' '344';\n"); + grammarBuilder.append("KW345 : 'KW' '345';\n"); + grammarBuilder.append("KW346 : 'KW' '346';\n"); + grammarBuilder.append("KW347 : 'KW' '347';\n"); + grammarBuilder.append("KW348 : 'KW' '348';\n"); + grammarBuilder.append("KW349 : 'KW' '349';\n"); + grammarBuilder.append("KW350 : 'KW' '350';\n"); + grammarBuilder.append("KW351 : 'KW' '351';\n"); + grammarBuilder.append("KW352 : 'KW' '352';\n"); + grammarBuilder.append("KW353 : 'KW' '353';\n"); + grammarBuilder.append("KW354 : 'KW' '354';\n"); + grammarBuilder.append("KW355 : 'KW' '355';\n"); + grammarBuilder.append("KW356 : 'KW' '356';\n"); + grammarBuilder.append("KW357 : 'KW' '357';\n"); + grammarBuilder.append("KW358 : 'KW' '358';\n"); + grammarBuilder.append("KW359 : 'KW' '359';\n"); + grammarBuilder.append("KW360 : 'KW' '360';\n"); + grammarBuilder.append("KW361 : 'KW' '361';\n"); + grammarBuilder.append("KW362 : 'KW' '362';\n"); + grammarBuilder.append("KW363 : 'KW' '363';\n"); + grammarBuilder.append("KW364 : 'KW' '364';\n"); + grammarBuilder.append("KW365 : 'KW' '365';\n"); + grammarBuilder.append("KW366 : 'KW' '366';\n"); + grammarBuilder.append("KW367 : 'KW' '367';\n"); + grammarBuilder.append("KW368 : 'KW' '368';\n"); + grammarBuilder.append("KW369 : 'KW' '369';\n"); + grammarBuilder.append("KW370 : 'KW' '370';\n"); + grammarBuilder.append("KW371 : 'KW' '371';\n"); + grammarBuilder.append("KW372 : 'KW' '372';\n"); + grammarBuilder.append("KW373 : 'KW' '373';\n"); + grammarBuilder.append("KW374 : 'KW' '374';\n"); + grammarBuilder.append("KW375 : 'KW' '375';\n"); + grammarBuilder.append("KW376 : 'KW' '376';\n"); + grammarBuilder.append("KW377 : 'KW' '377';\n"); + grammarBuilder.append("KW378 : 'KW' '378';\n"); + grammarBuilder.append("KW379 : 'KW' '379';\n"); + grammarBuilder.append("KW380 : 'KW' '380';\n"); + grammarBuilder.append("KW381 : 'KW' '381';\n"); + grammarBuilder.append("KW382 : 'KW' '382';\n"); + grammarBuilder.append("KW383 : 'KW' '383';\n"); + grammarBuilder.append("KW384 : 'KW' '384';\n"); + grammarBuilder.append("KW385 : 'KW' '385';\n"); + grammarBuilder.append("KW386 : 'KW' '386';\n"); + grammarBuilder.append("KW387 : 'KW' '387';\n"); + grammarBuilder.append("KW388 : 'KW' '388';\n"); + grammarBuilder.append("KW389 : 'KW' '389';\n"); + grammarBuilder.append("KW390 : 'KW' '390';\n"); + grammarBuilder.append("KW391 : 'KW' '391';\n"); + grammarBuilder.append("KW392 : 'KW' '392';\n"); + grammarBuilder.append("KW393 : 'KW' '393';\n"); + grammarBuilder.append("KW394 : 'KW' '394';\n"); + grammarBuilder.append("KW395 : 'KW' '395';\n"); + grammarBuilder.append("KW396 : 'KW' '396';\n"); + grammarBuilder.append("KW397 : 'KW' '397';\n"); + grammarBuilder.append("KW398 : 'KW' '398';\n"); + grammarBuilder.append("KW399 : 'KW' '399';\n"); + grammarBuilder.append("KW400 : 'KW' '400';\n"); + grammarBuilder.append("KW401 : 'KW' '401';\n"); + grammarBuilder.append("KW402 : 'KW' '402';\n"); + grammarBuilder.append("KW403 : 'KW' '403';\n"); + grammarBuilder.append("KW404 : 'KW' '404';\n"); + grammarBuilder.append("KW405 : 'KW' '405';\n"); + grammarBuilder.append("KW406 : 'KW' '406';\n"); + grammarBuilder.append("KW407 : 'KW' '407';\n"); + grammarBuilder.append("KW408 : 'KW' '408';\n"); + grammarBuilder.append("KW409 : 'KW' '409';\n"); + grammarBuilder.append("KW410 : 'KW' '410';\n"); + grammarBuilder.append("KW411 : 'KW' '411';\n"); + grammarBuilder.append("KW412 : 'KW' '412';\n"); + grammarBuilder.append("KW413 : 'KW' '413';\n"); + grammarBuilder.append("KW414 : 'KW' '414';\n"); + grammarBuilder.append("KW415 : 'KW' '415';\n"); + grammarBuilder.append("KW416 : 'KW' '416';\n"); + grammarBuilder.append("KW417 : 'KW' '417';\n"); + grammarBuilder.append("KW418 : 'KW' '418';\n"); + grammarBuilder.append("KW419 : 'KW' '419';\n"); + grammarBuilder.append("KW420 : 'KW' '420';\n"); + grammarBuilder.append("KW421 : 'KW' '421';\n"); + grammarBuilder.append("KW422 : 'KW' '422';\n"); + grammarBuilder.append("KW423 : 'KW' '423';\n"); + grammarBuilder.append("KW424 : 'KW' '424';\n"); + grammarBuilder.append("KW425 : 'KW' '425';\n"); + grammarBuilder.append("KW426 : 'KW' '426';\n"); + grammarBuilder.append("KW427 : 'KW' '427';\n"); + grammarBuilder.append("KW428 : 'KW' '428';\n"); + grammarBuilder.append("KW429 : 'KW' '429';\n"); + grammarBuilder.append("KW430 : 'KW' '430';\n"); + grammarBuilder.append("KW431 : 'KW' '431';\n"); + grammarBuilder.append("KW432 : 'KW' '432';\n"); + grammarBuilder.append("KW433 : 'KW' '433';\n"); + grammarBuilder.append("KW434 : 'KW' '434';\n"); + grammarBuilder.append("KW435 : 'KW' '435';\n"); + grammarBuilder.append("KW436 : 'KW' '436';\n"); + grammarBuilder.append("KW437 : 'KW' '437';\n"); + grammarBuilder.append("KW438 : 'KW' '438';\n"); + grammarBuilder.append("KW439 : 'KW' '439';\n"); + grammarBuilder.append("KW440 : 'KW' '440';\n"); + grammarBuilder.append("KW441 : 'KW' '441';\n"); + grammarBuilder.append("KW442 : 'KW' '442';\n"); + grammarBuilder.append("KW443 : 'KW' '443';\n"); + grammarBuilder.append("KW444 : 'KW' '444';\n"); + grammarBuilder.append("KW445 : 'KW' '445';\n"); + grammarBuilder.append("KW446 : 'KW' '446';\n"); + grammarBuilder.append("KW447 : 'KW' '447';\n"); + grammarBuilder.append("KW448 : 'KW' '448';\n"); + grammarBuilder.append("KW449 : 'KW' '449';\n"); + grammarBuilder.append("KW450 : 'KW' '450';\n"); + grammarBuilder.append("KW451 : 'KW' '451';\n"); + grammarBuilder.append("KW452 : 'KW' '452';\n"); + grammarBuilder.append("KW453 : 'KW' '453';\n"); + grammarBuilder.append("KW454 : 'KW' '454';\n"); + grammarBuilder.append("KW455 : 'KW' '455';\n"); + grammarBuilder.append("KW456 : 'KW' '456';\n"); + grammarBuilder.append("KW457 : 'KW' '457';\n"); + grammarBuilder.append("KW458 : 'KW' '458';\n"); + grammarBuilder.append("KW459 : 'KW' '459';\n"); + grammarBuilder.append("KW460 : 'KW' '460';\n"); + grammarBuilder.append("KW461 : 'KW' '461';\n"); + grammarBuilder.append("KW462 : 'KW' '462';\n"); + grammarBuilder.append("KW463 : 'KW' '463';\n"); + grammarBuilder.append("KW464 : 'KW' '464';\n"); + grammarBuilder.append("KW465 : 'KW' '465';\n"); + grammarBuilder.append("KW466 : 'KW' '466';\n"); + grammarBuilder.append("KW467 : 'KW' '467';\n"); + grammarBuilder.append("KW468 : 'KW' '468';\n"); + grammarBuilder.append("KW469 : 'KW' '469';\n"); + grammarBuilder.append("KW470 : 'KW' '470';\n"); + grammarBuilder.append("KW471 : 'KW' '471';\n"); + grammarBuilder.append("KW472 : 'KW' '472';\n"); + grammarBuilder.append("KW473 : 'KW' '473';\n"); + grammarBuilder.append("KW474 : 'KW' '474';\n"); + grammarBuilder.append("KW475 : 'KW' '475';\n"); + grammarBuilder.append("KW476 : 'KW' '476';\n"); + grammarBuilder.append("KW477 : 'KW' '477';\n"); + grammarBuilder.append("KW478 : 'KW' '478';\n"); + grammarBuilder.append("KW479 : 'KW' '479';\n"); + grammarBuilder.append("KW480 : 'KW' '480';\n"); + grammarBuilder.append("KW481 : 'KW' '481';\n"); + grammarBuilder.append("KW482 : 'KW' '482';\n"); + grammarBuilder.append("KW483 : 'KW' '483';\n"); + grammarBuilder.append("KW484 : 'KW' '484';\n"); + grammarBuilder.append("KW485 : 'KW' '485';\n"); + grammarBuilder.append("KW486 : 'KW' '486';\n"); + grammarBuilder.append("KW487 : 'KW' '487';\n"); + grammarBuilder.append("KW488 : 'KW' '488';\n"); + grammarBuilder.append("KW489 : 'KW' '489';\n"); + grammarBuilder.append("KW490 : 'KW' '490';\n"); + grammarBuilder.append("KW491 : 'KW' '491';\n"); + grammarBuilder.append("KW492 : 'KW' '492';\n"); + grammarBuilder.append("KW493 : 'KW' '493';\n"); + grammarBuilder.append("KW494 : 'KW' '494';\n"); + grammarBuilder.append("KW495 : 'KW' '495';\n"); + grammarBuilder.append("KW496 : 'KW' '496';\n"); + grammarBuilder.append("KW497 : 'KW' '497';\n"); + grammarBuilder.append("KW498 : 'KW' '498';\n"); + grammarBuilder.append("KW499 : 'KW' '499';\n"); + grammarBuilder.append("KW500 : 'KW' '500';\n"); + grammarBuilder.append("KW501 : 'KW' '501';\n"); + grammarBuilder.append("KW502 : 'KW' '502';\n"); + grammarBuilder.append("KW503 : 'KW' '503';\n"); + grammarBuilder.append("KW504 : 'KW' '504';\n"); + grammarBuilder.append("KW505 : 'KW' '505';\n"); + grammarBuilder.append("KW506 : 'KW' '506';\n"); + grammarBuilder.append("KW507 : 'KW' '507';\n"); + grammarBuilder.append("KW508 : 'KW' '508';\n"); + grammarBuilder.append("KW509 : 'KW' '509';\n"); + grammarBuilder.append("KW510 : 'KW' '510';\n"); + grammarBuilder.append("KW511 : 'KW' '511';\n"); + grammarBuilder.append("KW512 : 'KW' '512';\n"); + grammarBuilder.append("KW513 : 'KW' '513';\n"); + grammarBuilder.append("KW514 : 'KW' '514';\n"); + grammarBuilder.append("KW515 : 'KW' '515';\n"); + grammarBuilder.append("KW516 : 'KW' '516';\n"); + grammarBuilder.append("KW517 : 'KW' '517';\n"); + grammarBuilder.append("KW518 : 'KW' '518';\n"); + grammarBuilder.append("KW519 : 'KW' '519';\n"); + grammarBuilder.append("KW520 : 'KW' '520';\n"); + grammarBuilder.append("KW521 : 'KW' '521';\n"); + grammarBuilder.append("KW522 : 'KW' '522';\n"); + grammarBuilder.append("KW523 : 'KW' '523';\n"); + grammarBuilder.append("KW524 : 'KW' '524';\n"); + grammarBuilder.append("KW525 : 'KW' '525';\n"); + grammarBuilder.append("KW526 : 'KW' '526';\n"); + grammarBuilder.append("KW527 : 'KW' '527';\n"); + grammarBuilder.append("KW528 : 'KW' '528';\n"); + grammarBuilder.append("KW529 : 'KW' '529';\n"); + grammarBuilder.append("KW530 : 'KW' '530';\n"); + grammarBuilder.append("KW531 : 'KW' '531';\n"); + grammarBuilder.append("KW532 : 'KW' '532';\n"); + grammarBuilder.append("KW533 : 'KW' '533';\n"); + grammarBuilder.append("KW534 : 'KW' '534';\n"); + grammarBuilder.append("KW535 : 'KW' '535';\n"); + grammarBuilder.append("KW536 : 'KW' '536';\n"); + grammarBuilder.append("KW537 : 'KW' '537';\n"); + grammarBuilder.append("KW538 : 'KW' '538';\n"); + grammarBuilder.append("KW539 : 'KW' '539';\n"); + grammarBuilder.append("KW540 : 'KW' '540';\n"); + grammarBuilder.append("KW541 : 'KW' '541';\n"); + grammarBuilder.append("KW542 : 'KW' '542';\n"); + grammarBuilder.append("KW543 : 'KW' '543';\n"); + grammarBuilder.append("KW544 : 'KW' '544';\n"); + grammarBuilder.append("KW545 : 'KW' '545';\n"); + grammarBuilder.append("KW546 : 'KW' '546';\n"); + grammarBuilder.append("KW547 : 'KW' '547';\n"); + grammarBuilder.append("KW548 : 'KW' '548';\n"); + grammarBuilder.append("KW549 : 'KW' '549';\n"); + grammarBuilder.append("KW550 : 'KW' '550';\n"); + grammarBuilder.append("KW551 : 'KW' '551';\n"); + grammarBuilder.append("KW552 : 'KW' '552';\n"); + grammarBuilder.append("KW553 : 'KW' '553';\n"); + grammarBuilder.append("KW554 : 'KW' '554';\n"); + grammarBuilder.append("KW555 : 'KW' '555';\n"); + grammarBuilder.append("KW556 : 'KW' '556';\n"); + grammarBuilder.append("KW557 : 'KW' '557';\n"); + grammarBuilder.append("KW558 : 'KW' '558';\n"); + grammarBuilder.append("KW559 : 'KW' '559';\n"); + grammarBuilder.append("KW560 : 'KW' '560';\n"); + grammarBuilder.append("KW561 : 'KW' '561';\n"); + grammarBuilder.append("KW562 : 'KW' '562';\n"); + grammarBuilder.append("KW563 : 'KW' '563';\n"); + grammarBuilder.append("KW564 : 'KW' '564';\n"); + grammarBuilder.append("KW565 : 'KW' '565';\n"); + grammarBuilder.append("KW566 : 'KW' '566';\n"); + grammarBuilder.append("KW567 : 'KW' '567';\n"); + grammarBuilder.append("KW568 : 'KW' '568';\n"); + grammarBuilder.append("KW569 : 'KW' '569';\n"); + grammarBuilder.append("KW570 : 'KW' '570';\n"); + grammarBuilder.append("KW571 : 'KW' '571';\n"); + grammarBuilder.append("KW572 : 'KW' '572';\n"); + grammarBuilder.append("KW573 : 'KW' '573';\n"); + grammarBuilder.append("KW574 : 'KW' '574';\n"); + grammarBuilder.append("KW575 : 'KW' '575';\n"); + grammarBuilder.append("KW576 : 'KW' '576';\n"); + grammarBuilder.append("KW577 : 'KW' '577';\n"); + grammarBuilder.append("KW578 : 'KW' '578';\n"); + grammarBuilder.append("KW579 : 'KW' '579';\n"); + grammarBuilder.append("KW580 : 'KW' '580';\n"); + grammarBuilder.append("KW581 : 'KW' '581';\n"); + grammarBuilder.append("KW582 : 'KW' '582';\n"); + grammarBuilder.append("KW583 : 'KW' '583';\n"); + grammarBuilder.append("KW584 : 'KW' '584';\n"); + grammarBuilder.append("KW585 : 'KW' '585';\n"); + grammarBuilder.append("KW586 : 'KW' '586';\n"); + grammarBuilder.append("KW587 : 'KW' '587';\n"); + grammarBuilder.append("KW588 : 'KW' '588';\n"); + grammarBuilder.append("KW589 : 'KW' '589';\n"); + grammarBuilder.append("KW590 : 'KW' '590';\n"); + grammarBuilder.append("KW591 : 'KW' '591';\n"); + grammarBuilder.append("KW592 : 'KW' '592';\n"); + grammarBuilder.append("KW593 : 'KW' '593';\n"); + grammarBuilder.append("KW594 : 'KW' '594';\n"); + grammarBuilder.append("KW595 : 'KW' '595';\n"); + grammarBuilder.append("KW596 : 'KW' '596';\n"); + grammarBuilder.append("KW597 : 'KW' '597';\n"); + grammarBuilder.append("KW598 : 'KW' '598';\n"); + grammarBuilder.append("KW599 : 'KW' '599';\n"); + grammarBuilder.append("KW600 : 'KW' '600';\n"); + grammarBuilder.append("KW601 : 'KW' '601';\n"); + grammarBuilder.append("KW602 : 'KW' '602';\n"); + grammarBuilder.append("KW603 : 'KW' '603';\n"); + grammarBuilder.append("KW604 : 'KW' '604';\n"); + grammarBuilder.append("KW605 : 'KW' '605';\n"); + grammarBuilder.append("KW606 : 'KW' '606';\n"); + grammarBuilder.append("KW607 : 'KW' '607';\n"); + grammarBuilder.append("KW608 : 'KW' '608';\n"); + grammarBuilder.append("KW609 : 'KW' '609';\n"); + grammarBuilder.append("KW610 : 'KW' '610';\n"); + grammarBuilder.append("KW611 : 'KW' '611';\n"); + grammarBuilder.append("KW612 : 'KW' '612';\n"); + grammarBuilder.append("KW613 : 'KW' '613';\n"); + grammarBuilder.append("KW614 : 'KW' '614';\n"); + grammarBuilder.append("KW615 : 'KW' '615';\n"); + grammarBuilder.append("KW616 : 'KW' '616';\n"); + grammarBuilder.append("KW617 : 'KW' '617';\n"); + grammarBuilder.append("KW618 : 'KW' '618';\n"); + grammarBuilder.append("KW619 : 'KW' '619';\n"); + grammarBuilder.append("KW620 : 'KW' '620';\n"); + grammarBuilder.append("KW621 : 'KW' '621';\n"); + grammarBuilder.append("KW622 : 'KW' '622';\n"); + grammarBuilder.append("KW623 : 'KW' '623';\n"); + grammarBuilder.append("KW624 : 'KW' '624';\n"); + grammarBuilder.append("KW625 : 'KW' '625';\n"); + grammarBuilder.append("KW626 : 'KW' '626';\n"); + grammarBuilder.append("KW627 : 'KW' '627';\n"); + grammarBuilder.append("KW628 : 'KW' '628';\n"); + grammarBuilder.append("KW629 : 'KW' '629';\n"); + grammarBuilder.append("KW630 : 'KW' '630';\n"); + grammarBuilder.append("KW631 : 'KW' '631';\n"); + grammarBuilder.append("KW632 : 'KW' '632';\n"); + grammarBuilder.append("KW633 : 'KW' '633';\n"); + grammarBuilder.append("KW634 : 'KW' '634';\n"); + grammarBuilder.append("KW635 : 'KW' '635';\n"); + grammarBuilder.append("KW636 : 'KW' '636';\n"); + grammarBuilder.append("KW637 : 'KW' '637';\n"); + grammarBuilder.append("KW638 : 'KW' '638';\n"); + grammarBuilder.append("KW639 : 'KW' '639';\n"); + grammarBuilder.append("KW640 : 'KW' '640';\n"); + grammarBuilder.append("KW641 : 'KW' '641';\n"); + grammarBuilder.append("KW642 : 'KW' '642';\n"); + grammarBuilder.append("KW643 : 'KW' '643';\n"); + grammarBuilder.append("KW644 : 'KW' '644';\n"); + grammarBuilder.append("KW645 : 'KW' '645';\n"); + grammarBuilder.append("KW646 : 'KW' '646';\n"); + grammarBuilder.append("KW647 : 'KW' '647';\n"); + grammarBuilder.append("KW648 : 'KW' '648';\n"); + grammarBuilder.append("KW649 : 'KW' '649';\n"); + grammarBuilder.append("KW650 : 'KW' '650';\n"); + grammarBuilder.append("KW651 : 'KW' '651';\n"); + grammarBuilder.append("KW652 : 'KW' '652';\n"); + grammarBuilder.append("KW653 : 'KW' '653';\n"); + grammarBuilder.append("KW654 : 'KW' '654';\n"); + grammarBuilder.append("KW655 : 'KW' '655';\n"); + grammarBuilder.append("KW656 : 'KW' '656';\n"); + grammarBuilder.append("KW657 : 'KW' '657';\n"); + grammarBuilder.append("KW658 : 'KW' '658';\n"); + grammarBuilder.append("KW659 : 'KW' '659';\n"); + grammarBuilder.append("KW660 : 'KW' '660';\n"); + grammarBuilder.append("KW661 : 'KW' '661';\n"); + grammarBuilder.append("KW662 : 'KW' '662';\n"); + grammarBuilder.append("KW663 : 'KW' '663';\n"); + grammarBuilder.append("KW664 : 'KW' '664';\n"); + grammarBuilder.append("KW665 : 'KW' '665';\n"); + grammarBuilder.append("KW666 : 'KW' '666';\n"); + grammarBuilder.append("KW667 : 'KW' '667';\n"); + grammarBuilder.append("KW668 : 'KW' '668';\n"); + grammarBuilder.append("KW669 : 'KW' '669';\n"); + grammarBuilder.append("KW670 : 'KW' '670';\n"); + grammarBuilder.append("KW671 : 'KW' '671';\n"); + grammarBuilder.append("KW672 : 'KW' '672';\n"); + grammarBuilder.append("KW673 : 'KW' '673';\n"); + grammarBuilder.append("KW674 : 'KW' '674';\n"); + grammarBuilder.append("KW675 : 'KW' '675';\n"); + grammarBuilder.append("KW676 : 'KW' '676';\n"); + grammarBuilder.append("KW677 : 'KW' '677';\n"); + grammarBuilder.append("KW678 : 'KW' '678';\n"); + grammarBuilder.append("KW679 : 'KW' '679';\n"); + grammarBuilder.append("KW680 : 'KW' '680';\n"); + grammarBuilder.append("KW681 : 'KW' '681';\n"); + grammarBuilder.append("KW682 : 'KW' '682';\n"); + grammarBuilder.append("KW683 : 'KW' '683';\n"); + grammarBuilder.append("KW684 : 'KW' '684';\n"); + grammarBuilder.append("KW685 : 'KW' '685';\n"); + grammarBuilder.append("KW686 : 'KW' '686';\n"); + grammarBuilder.append("KW687 : 'KW' '687';\n"); + grammarBuilder.append("KW688 : 'KW' '688';\n"); + grammarBuilder.append("KW689 : 'KW' '689';\n"); + grammarBuilder.append("KW690 : 'KW' '690';\n"); + grammarBuilder.append("KW691 : 'KW' '691';\n"); + grammarBuilder.append("KW692 : 'KW' '692';\n"); + grammarBuilder.append("KW693 : 'KW' '693';\n"); + grammarBuilder.append("KW694 : 'KW' '694';\n"); + grammarBuilder.append("KW695 : 'KW' '695';\n"); + grammarBuilder.append("KW696 : 'KW' '696';\n"); + grammarBuilder.append("KW697 : 'KW' '697';\n"); + grammarBuilder.append("KW698 : 'KW' '698';\n"); + grammarBuilder.append("KW699 : 'KW' '699';\n"); + grammarBuilder.append("KW700 : 'KW' '700';\n"); + grammarBuilder.append("KW701 : 'KW' '701';\n"); + grammarBuilder.append("KW702 : 'KW' '702';\n"); + grammarBuilder.append("KW703 : 'KW' '703';\n"); + grammarBuilder.append("KW704 : 'KW' '704';\n"); + grammarBuilder.append("KW705 : 'KW' '705';\n"); + grammarBuilder.append("KW706 : 'KW' '706';\n"); + grammarBuilder.append("KW707 : 'KW' '707';\n"); + grammarBuilder.append("KW708 : 'KW' '708';\n"); + grammarBuilder.append("KW709 : 'KW' '709';\n"); + grammarBuilder.append("KW710 : 'KW' '710';\n"); + grammarBuilder.append("KW711 : 'KW' '711';\n"); + grammarBuilder.append("KW712 : 'KW' '712';\n"); + grammarBuilder.append("KW713 : 'KW' '713';\n"); + grammarBuilder.append("KW714 : 'KW' '714';\n"); + grammarBuilder.append("KW715 : 'KW' '715';\n"); + grammarBuilder.append("KW716 : 'KW' '716';\n"); + grammarBuilder.append("KW717 : 'KW' '717';\n"); + grammarBuilder.append("KW718 : 'KW' '718';\n"); + grammarBuilder.append("KW719 : 'KW' '719';\n"); + grammarBuilder.append("KW720 : 'KW' '720';\n"); + grammarBuilder.append("KW721 : 'KW' '721';\n"); + grammarBuilder.append("KW722 : 'KW' '722';\n"); + grammarBuilder.append("KW723 : 'KW' '723';\n"); + grammarBuilder.append("KW724 : 'KW' '724';\n"); + grammarBuilder.append("KW725 : 'KW' '725';\n"); + grammarBuilder.append("KW726 : 'KW' '726';\n"); + grammarBuilder.append("KW727 : 'KW' '727';\n"); + grammarBuilder.append("KW728 : 'KW' '728';\n"); + grammarBuilder.append("KW729 : 'KW' '729';\n"); + grammarBuilder.append("KW730 : 'KW' '730';\n"); + grammarBuilder.append("KW731 : 'KW' '731';\n"); + grammarBuilder.append("KW732 : 'KW' '732';\n"); + grammarBuilder.append("KW733 : 'KW' '733';\n"); + grammarBuilder.append("KW734 : 'KW' '734';\n"); + grammarBuilder.append("KW735 : 'KW' '735';\n"); + grammarBuilder.append("KW736 : 'KW' '736';\n"); + grammarBuilder.append("KW737 : 'KW' '737';\n"); + grammarBuilder.append("KW738 : 'KW' '738';\n"); + grammarBuilder.append("KW739 : 'KW' '739';\n"); + grammarBuilder.append("KW740 : 'KW' '740';\n"); + grammarBuilder.append("KW741 : 'KW' '741';\n"); + grammarBuilder.append("KW742 : 'KW' '742';\n"); + grammarBuilder.append("KW743 : 'KW' '743';\n"); + grammarBuilder.append("KW744 : 'KW' '744';\n"); + grammarBuilder.append("KW745 : 'KW' '745';\n"); + grammarBuilder.append("KW746 : 'KW' '746';\n"); + grammarBuilder.append("KW747 : 'KW' '747';\n"); + grammarBuilder.append("KW748 : 'KW' '748';\n"); + grammarBuilder.append("KW749 : 'KW' '749';\n"); + grammarBuilder.append("KW750 : 'KW' '750';\n"); + grammarBuilder.append("KW751 : 'KW' '751';\n"); + grammarBuilder.append("KW752 : 'KW' '752';\n"); + grammarBuilder.append("KW753 : 'KW' '753';\n"); + grammarBuilder.append("KW754 : 'KW' '754';\n"); + grammarBuilder.append("KW755 : 'KW' '755';\n"); + grammarBuilder.append("KW756 : 'KW' '756';\n"); + grammarBuilder.append("KW757 : 'KW' '757';\n"); + grammarBuilder.append("KW758 : 'KW' '758';\n"); + grammarBuilder.append("KW759 : 'KW' '759';\n"); + grammarBuilder.append("KW760 : 'KW' '760';\n"); + grammarBuilder.append("KW761 : 'KW' '761';\n"); + grammarBuilder.append("KW762 : 'KW' '762';\n"); + grammarBuilder.append("KW763 : 'KW' '763';\n"); + grammarBuilder.append("KW764 : 'KW' '764';\n"); + grammarBuilder.append("KW765 : 'KW' '765';\n"); + grammarBuilder.append("KW766 : 'KW' '766';\n"); + grammarBuilder.append("KW767 : 'KW' '767';\n"); + grammarBuilder.append("KW768 : 'KW' '768';\n"); + grammarBuilder.append("KW769 : 'KW' '769';\n"); + grammarBuilder.append("KW770 : 'KW' '770';\n"); + grammarBuilder.append("KW771 : 'KW' '771';\n"); + grammarBuilder.append("KW772 : 'KW' '772';\n"); + grammarBuilder.append("KW773 : 'KW' '773';\n"); + grammarBuilder.append("KW774 : 'KW' '774';\n"); + grammarBuilder.append("KW775 : 'KW' '775';\n"); + grammarBuilder.append("KW776 : 'KW' '776';\n"); + grammarBuilder.append("KW777 : 'KW' '777';\n"); + grammarBuilder.append("KW778 : 'KW' '778';\n"); + grammarBuilder.append("KW779 : 'KW' '779';\n"); + grammarBuilder.append("KW780 : 'KW' '780';\n"); + grammarBuilder.append("KW781 : 'KW' '781';\n"); + grammarBuilder.append("KW782 : 'KW' '782';\n"); + grammarBuilder.append("KW783 : 'KW' '783';\n"); + grammarBuilder.append("KW784 : 'KW' '784';\n"); + grammarBuilder.append("KW785 : 'KW' '785';\n"); + grammarBuilder.append("KW786 : 'KW' '786';\n"); + grammarBuilder.append("KW787 : 'KW' '787';\n"); + grammarBuilder.append("KW788 : 'KW' '788';\n"); + grammarBuilder.append("KW789 : 'KW' '789';\n"); + grammarBuilder.append("KW790 : 'KW' '790';\n"); + grammarBuilder.append("KW791 : 'KW' '791';\n"); + grammarBuilder.append("KW792 : 'KW' '792';\n"); + grammarBuilder.append("KW793 : 'KW' '793';\n"); + grammarBuilder.append("KW794 : 'KW' '794';\n"); + grammarBuilder.append("KW795 : 'KW' '795';\n"); + grammarBuilder.append("KW796 : 'KW' '796';\n"); + grammarBuilder.append("KW797 : 'KW' '797';\n"); + grammarBuilder.append("KW798 : 'KW' '798';\n"); + grammarBuilder.append("KW799 : 'KW' '799';\n"); + grammarBuilder.append("KW800 : 'KW' '800';\n"); + grammarBuilder.append("KW801 : 'KW' '801';\n"); + grammarBuilder.append("KW802 : 'KW' '802';\n"); + grammarBuilder.append("KW803 : 'KW' '803';\n"); + grammarBuilder.append("KW804 : 'KW' '804';\n"); + grammarBuilder.append("KW805 : 'KW' '805';\n"); + grammarBuilder.append("KW806 : 'KW' '806';\n"); + grammarBuilder.append("KW807 : 'KW' '807';\n"); + grammarBuilder.append("KW808 : 'KW' '808';\n"); + grammarBuilder.append("KW809 : 'KW' '809';\n"); + grammarBuilder.append("KW810 : 'KW' '810';\n"); + grammarBuilder.append("KW811 : 'KW' '811';\n"); + grammarBuilder.append("KW812 : 'KW' '812';\n"); + grammarBuilder.append("KW813 : 'KW' '813';\n"); + grammarBuilder.append("KW814 : 'KW' '814';\n"); + grammarBuilder.append("KW815 : 'KW' '815';\n"); + grammarBuilder.append("KW816 : 'KW' '816';\n"); + grammarBuilder.append("KW817 : 'KW' '817';\n"); + grammarBuilder.append("KW818 : 'KW' '818';\n"); + grammarBuilder.append("KW819 : 'KW' '819';\n"); + grammarBuilder.append("KW820 : 'KW' '820';\n"); + grammarBuilder.append("KW821 : 'KW' '821';\n"); + grammarBuilder.append("KW822 : 'KW' '822';\n"); + grammarBuilder.append("KW823 : 'KW' '823';\n"); + grammarBuilder.append("KW824 : 'KW' '824';\n"); + grammarBuilder.append("KW825 : 'KW' '825';\n"); + grammarBuilder.append("KW826 : 'KW' '826';\n"); + grammarBuilder.append("KW827 : 'KW' '827';\n"); + grammarBuilder.append("KW828 : 'KW' '828';\n"); + grammarBuilder.append("KW829 : 'KW' '829';\n"); + grammarBuilder.append("KW830 : 'KW' '830';\n"); + grammarBuilder.append("KW831 : 'KW' '831';\n"); + grammarBuilder.append("KW832 : 'KW' '832';\n"); + grammarBuilder.append("KW833 : 'KW' '833';\n"); + grammarBuilder.append("KW834 : 'KW' '834';\n"); + grammarBuilder.append("KW835 : 'KW' '835';\n"); + grammarBuilder.append("KW836 : 'KW' '836';\n"); + grammarBuilder.append("KW837 : 'KW' '837';\n"); + grammarBuilder.append("KW838 : 'KW' '838';\n"); + grammarBuilder.append("KW839 : 'KW' '839';\n"); + grammarBuilder.append("KW840 : 'KW' '840';\n"); + grammarBuilder.append("KW841 : 'KW' '841';\n"); + grammarBuilder.append("KW842 : 'KW' '842';\n"); + grammarBuilder.append("KW843 : 'KW' '843';\n"); + grammarBuilder.append("KW844 : 'KW' '844';\n"); + grammarBuilder.append("KW845 : 'KW' '845';\n"); + grammarBuilder.append("KW846 : 'KW' '846';\n"); + grammarBuilder.append("KW847 : 'KW' '847';\n"); + grammarBuilder.append("KW848 : 'KW' '848';\n"); + grammarBuilder.append("KW849 : 'KW' '849';\n"); + grammarBuilder.append("KW850 : 'KW' '850';\n"); + grammarBuilder.append("KW851 : 'KW' '851';\n"); + grammarBuilder.append("KW852 : 'KW' '852';\n"); + grammarBuilder.append("KW853 : 'KW' '853';\n"); + grammarBuilder.append("KW854 : 'KW' '854';\n"); + grammarBuilder.append("KW855 : 'KW' '855';\n"); + grammarBuilder.append("KW856 : 'KW' '856';\n"); + grammarBuilder.append("KW857 : 'KW' '857';\n"); + grammarBuilder.append("KW858 : 'KW' '858';\n"); + grammarBuilder.append("KW859 : 'KW' '859';\n"); + grammarBuilder.append("KW860 : 'KW' '860';\n"); + grammarBuilder.append("KW861 : 'KW' '861';\n"); + grammarBuilder.append("KW862 : 'KW' '862';\n"); + grammarBuilder.append("KW863 : 'KW' '863';\n"); + grammarBuilder.append("KW864 : 'KW' '864';\n"); + grammarBuilder.append("KW865 : 'KW' '865';\n"); + grammarBuilder.append("KW866 : 'KW' '866';\n"); + grammarBuilder.append("KW867 : 'KW' '867';\n"); + grammarBuilder.append("KW868 : 'KW' '868';\n"); + grammarBuilder.append("KW869 : 'KW' '869';\n"); + grammarBuilder.append("KW870 : 'KW' '870';\n"); + grammarBuilder.append("KW871 : 'KW' '871';\n"); + grammarBuilder.append("KW872 : 'KW' '872';\n"); + grammarBuilder.append("KW873 : 'KW' '873';\n"); + grammarBuilder.append("KW874 : 'KW' '874';\n"); + grammarBuilder.append("KW875 : 'KW' '875';\n"); + grammarBuilder.append("KW876 : 'KW' '876';\n"); + grammarBuilder.append("KW877 : 'KW' '877';\n"); + grammarBuilder.append("KW878 : 'KW' '878';\n"); + grammarBuilder.append("KW879 : 'KW' '879';\n"); + grammarBuilder.append("KW880 : 'KW' '880';\n"); + grammarBuilder.append("KW881 : 'KW' '881';\n"); + grammarBuilder.append("KW882 : 'KW' '882';\n"); + grammarBuilder.append("KW883 : 'KW' '883';\n"); + grammarBuilder.append("KW884 : 'KW' '884';\n"); + grammarBuilder.append("KW885 : 'KW' '885';\n"); + grammarBuilder.append("KW886 : 'KW' '886';\n"); + grammarBuilder.append("KW887 : 'KW' '887';\n"); + grammarBuilder.append("KW888 : 'KW' '888';\n"); + grammarBuilder.append("KW889 : 'KW' '889';\n"); + grammarBuilder.append("KW890 : 'KW' '890';\n"); + grammarBuilder.append("KW891 : 'KW' '891';\n"); + grammarBuilder.append("KW892 : 'KW' '892';\n"); + grammarBuilder.append("KW893 : 'KW' '893';\n"); + grammarBuilder.append("KW894 : 'KW' '894';\n"); + grammarBuilder.append("KW895 : 'KW' '895';\n"); + grammarBuilder.append("KW896 : 'KW' '896';\n"); + grammarBuilder.append("KW897 : 'KW' '897';\n"); + grammarBuilder.append("KW898 : 'KW' '898';\n"); + grammarBuilder.append("KW899 : 'KW' '899';\n"); + grammarBuilder.append("KW900 : 'KW' '900';\n"); + grammarBuilder.append("KW901 : 'KW' '901';\n"); + grammarBuilder.append("KW902 : 'KW' '902';\n"); + grammarBuilder.append("KW903 : 'KW' '903';\n"); + grammarBuilder.append("KW904 : 'KW' '904';\n"); + grammarBuilder.append("KW905 : 'KW' '905';\n"); + grammarBuilder.append("KW906 : 'KW' '906';\n"); + grammarBuilder.append("KW907 : 'KW' '907';\n"); + grammarBuilder.append("KW908 : 'KW' '908';\n"); + grammarBuilder.append("KW909 : 'KW' '909';\n"); + grammarBuilder.append("KW910 : 'KW' '910';\n"); + grammarBuilder.append("KW911 : 'KW' '911';\n"); + grammarBuilder.append("KW912 : 'KW' '912';\n"); + grammarBuilder.append("KW913 : 'KW' '913';\n"); + grammarBuilder.append("KW914 : 'KW' '914';\n"); + grammarBuilder.append("KW915 : 'KW' '915';\n"); + grammarBuilder.append("KW916 : 'KW' '916';\n"); + grammarBuilder.append("KW917 : 'KW' '917';\n"); + grammarBuilder.append("KW918 : 'KW' '918';\n"); + grammarBuilder.append("KW919 : 'KW' '919';\n"); + grammarBuilder.append("KW920 : 'KW' '920';\n"); + grammarBuilder.append("KW921 : 'KW' '921';\n"); + grammarBuilder.append("KW922 : 'KW' '922';\n"); + grammarBuilder.append("KW923 : 'KW' '923';\n"); + grammarBuilder.append("KW924 : 'KW' '924';\n"); + grammarBuilder.append("KW925 : 'KW' '925';\n"); + grammarBuilder.append("KW926 : 'KW' '926';\n"); + grammarBuilder.append("KW927 : 'KW' '927';\n"); + grammarBuilder.append("KW928 : 'KW' '928';\n"); + grammarBuilder.append("KW929 : 'KW' '929';\n"); + grammarBuilder.append("KW930 : 'KW' '930';\n"); + grammarBuilder.append("KW931 : 'KW' '931';\n"); + grammarBuilder.append("KW932 : 'KW' '932';\n"); + grammarBuilder.append("KW933 : 'KW' '933';\n"); + grammarBuilder.append("KW934 : 'KW' '934';\n"); + grammarBuilder.append("KW935 : 'KW' '935';\n"); + grammarBuilder.append("KW936 : 'KW' '936';\n"); + grammarBuilder.append("KW937 : 'KW' '937';\n"); + grammarBuilder.append("KW938 : 'KW' '938';\n"); + grammarBuilder.append("KW939 : 'KW' '939';\n"); + grammarBuilder.append("KW940 : 'KW' '940';\n"); + grammarBuilder.append("KW941 : 'KW' '941';\n"); + grammarBuilder.append("KW942 : 'KW' '942';\n"); + grammarBuilder.append("KW943 : 'KW' '943';\n"); + grammarBuilder.append("KW944 : 'KW' '944';\n"); + grammarBuilder.append("KW945 : 'KW' '945';\n"); + grammarBuilder.append("KW946 : 'KW' '946';\n"); + grammarBuilder.append("KW947 : 'KW' '947';\n"); + grammarBuilder.append("KW948 : 'KW' '948';\n"); + grammarBuilder.append("KW949 : 'KW' '949';\n"); + grammarBuilder.append("KW950 : 'KW' '950';\n"); + grammarBuilder.append("KW951 : 'KW' '951';\n"); + grammarBuilder.append("KW952 : 'KW' '952';\n"); + grammarBuilder.append("KW953 : 'KW' '953';\n"); + grammarBuilder.append("KW954 : 'KW' '954';\n"); + grammarBuilder.append("KW955 : 'KW' '955';\n"); + grammarBuilder.append("KW956 : 'KW' '956';\n"); + grammarBuilder.append("KW957 : 'KW' '957';\n"); + grammarBuilder.append("KW958 : 'KW' '958';\n"); + grammarBuilder.append("KW959 : 'KW' '959';\n"); + grammarBuilder.append("KW960 : 'KW' '960';\n"); + grammarBuilder.append("KW961 : 'KW' '961';\n"); + grammarBuilder.append("KW962 : 'KW' '962';\n"); + grammarBuilder.append("KW963 : 'KW' '963';\n"); + grammarBuilder.append("KW964 : 'KW' '964';\n"); + grammarBuilder.append("KW965 : 'KW' '965';\n"); + grammarBuilder.append("KW966 : 'KW' '966';\n"); + grammarBuilder.append("KW967 : 'KW' '967';\n"); + grammarBuilder.append("KW968 : 'KW' '968';\n"); + grammarBuilder.append("KW969 : 'KW' '969';\n"); + grammarBuilder.append("KW970 : 'KW' '970';\n"); + grammarBuilder.append("KW971 : 'KW' '971';\n"); + grammarBuilder.append("KW972 : 'KW' '972';\n"); + grammarBuilder.append("KW973 : 'KW' '973';\n"); + grammarBuilder.append("KW974 : 'KW' '974';\n"); + grammarBuilder.append("KW975 : 'KW' '975';\n"); + grammarBuilder.append("KW976 : 'KW' '976';\n"); + grammarBuilder.append("KW977 : 'KW' '977';\n"); + grammarBuilder.append("KW978 : 'KW' '978';\n"); + grammarBuilder.append("KW979 : 'KW' '979';\n"); + grammarBuilder.append("KW980 : 'KW' '980';\n"); + grammarBuilder.append("KW981 : 'KW' '981';\n"); + grammarBuilder.append("KW982 : 'KW' '982';\n"); + grammarBuilder.append("KW983 : 'KW' '983';\n"); + grammarBuilder.append("KW984 : 'KW' '984';\n"); + grammarBuilder.append("KW985 : 'KW' '985';\n"); + grammarBuilder.append("KW986 : 'KW' '986';\n"); + grammarBuilder.append("KW987 : 'KW' '987';\n"); + grammarBuilder.append("KW988 : 'KW' '988';\n"); + grammarBuilder.append("KW989 : 'KW' '989';\n"); + grammarBuilder.append("KW990 : 'KW' '990';\n"); + grammarBuilder.append("KW991 : 'KW' '991';\n"); + grammarBuilder.append("KW992 : 'KW' '992';\n"); + grammarBuilder.append("KW993 : 'KW' '993';\n"); + grammarBuilder.append("KW994 : 'KW' '994';\n"); + grammarBuilder.append("KW995 : 'KW' '995';\n"); + grammarBuilder.append("KW996 : 'KW' '996';\n"); + grammarBuilder.append("KW997 : 'KW' '997';\n"); + grammarBuilder.append("KW998 : 'KW' '998';\n"); + grammarBuilder.append("KW999 : 'KW' '999';\n"); + grammarBuilder.append("KW1000 : 'KW' '1000';\n"); + grammarBuilder.append("KW1001 : 'KW' '1001';\n"); + grammarBuilder.append("KW1002 : 'KW' '1002';\n"); + grammarBuilder.append("KW1003 : 'KW' '1003';\n"); + grammarBuilder.append("KW1004 : 'KW' '1004';\n"); + grammarBuilder.append("KW1005 : 'KW' '1005';\n"); + grammarBuilder.append("KW1006 : 'KW' '1006';\n"); + grammarBuilder.append("KW1007 : 'KW' '1007';\n"); + grammarBuilder.append("KW1008 : 'KW' '1008';\n"); + grammarBuilder.append("KW1009 : 'KW' '1009';\n"); + grammarBuilder.append("KW1010 : 'KW' '1010';\n"); + grammarBuilder.append("KW1011 : 'KW' '1011';\n"); + grammarBuilder.append("KW1012 : 'KW' '1012';\n"); + grammarBuilder.append("KW1013 : 'KW' '1013';\n"); + grammarBuilder.append("KW1014 : 'KW' '1014';\n"); + grammarBuilder.append("KW1015 : 'KW' '1015';\n"); + grammarBuilder.append("KW1016 : 'KW' '1016';\n"); + grammarBuilder.append("KW1017 : 'KW' '1017';\n"); + grammarBuilder.append("KW1018 : 'KW' '1018';\n"); + grammarBuilder.append("KW1019 : 'KW' '1019';\n"); + grammarBuilder.append("KW1020 : 'KW' '1020';\n"); + grammarBuilder.append("KW1021 : 'KW' '1021';\n"); + grammarBuilder.append("KW1022 : 'KW' '1022';\n"); + grammarBuilder.append("KW1023 : 'KW' '1023';\n"); + grammarBuilder.append("KW1024 : 'KW' '1024';\n"); + grammarBuilder.append("KW1025 : 'KW' '1025';\n"); + grammarBuilder.append("KW1026 : 'KW' '1026';\n"); + grammarBuilder.append("KW1027 : 'KW' '1027';\n"); + grammarBuilder.append("KW1028 : 'KW' '1028';\n"); + grammarBuilder.append("KW1029 : 'KW' '1029';\n"); + grammarBuilder.append("KW1030 : 'KW' '1030';\n"); + grammarBuilder.append("KW1031 : 'KW' '1031';\n"); + grammarBuilder.append("KW1032 : 'KW' '1032';\n"); + grammarBuilder.append("KW1033 : 'KW' '1033';\n"); + grammarBuilder.append("KW1034 : 'KW' '1034';\n"); + grammarBuilder.append("KW1035 : 'KW' '1035';\n"); + grammarBuilder.append("KW1036 : 'KW' '1036';\n"); + grammarBuilder.append("KW1037 : 'KW' '1037';\n"); + grammarBuilder.append("KW1038 : 'KW' '1038';\n"); + grammarBuilder.append("KW1039 : 'KW' '1039';\n"); + grammarBuilder.append("KW1040 : 'KW' '1040';\n"); + grammarBuilder.append("KW1041 : 'KW' '1041';\n"); + grammarBuilder.append("KW1042 : 'KW' '1042';\n"); + grammarBuilder.append("KW1043 : 'KW' '1043';\n"); + grammarBuilder.append("KW1044 : 'KW' '1044';\n"); + grammarBuilder.append("KW1045 : 'KW' '1045';\n"); + grammarBuilder.append("KW1046 : 'KW' '1046';\n"); + grammarBuilder.append("KW1047 : 'KW' '1047';\n"); + grammarBuilder.append("KW1048 : 'KW' '1048';\n"); + grammarBuilder.append("KW1049 : 'KW' '1049';\n"); + grammarBuilder.append("KW1050 : 'KW' '1050';\n"); + grammarBuilder.append("KW1051 : 'KW' '1051';\n"); + grammarBuilder.append("KW1052 : 'KW' '1052';\n"); + grammarBuilder.append("KW1053 : 'KW' '1053';\n"); + grammarBuilder.append("KW1054 : 'KW' '1054';\n"); + grammarBuilder.append("KW1055 : 'KW' '1055';\n"); + grammarBuilder.append("KW1056 : 'KW' '1056';\n"); + grammarBuilder.append("KW1057 : 'KW' '1057';\n"); + grammarBuilder.append("KW1058 : 'KW' '1058';\n"); + grammarBuilder.append("KW1059 : 'KW' '1059';\n"); + grammarBuilder.append("KW1060 : 'KW' '1060';\n"); + grammarBuilder.append("KW1061 : 'KW' '1061';\n"); + grammarBuilder.append("KW1062 : 'KW' '1062';\n"); + grammarBuilder.append("KW1063 : 'KW' '1063';\n"); + grammarBuilder.append("KW1064 : 'KW' '1064';\n"); + grammarBuilder.append("KW1065 : 'KW' '1065';\n"); + grammarBuilder.append("KW1066 : 'KW' '1066';\n"); + grammarBuilder.append("KW1067 : 'KW' '1067';\n"); + grammarBuilder.append("KW1068 : 'KW' '1068';\n"); + grammarBuilder.append("KW1069 : 'KW' '1069';\n"); + grammarBuilder.append("KW1070 : 'KW' '1070';\n"); + grammarBuilder.append("KW1071 : 'KW' '1071';\n"); + grammarBuilder.append("KW1072 : 'KW' '1072';\n"); + grammarBuilder.append("KW1073 : 'KW' '1073';\n"); + grammarBuilder.append("KW1074 : 'KW' '1074';\n"); + grammarBuilder.append("KW1075 : 'KW' '1075';\n"); + grammarBuilder.append("KW1076 : 'KW' '1076';\n"); + grammarBuilder.append("KW1077 : 'KW' '1077';\n"); + grammarBuilder.append("KW1078 : 'KW' '1078';\n"); + grammarBuilder.append("KW1079 : 'KW' '1079';\n"); + grammarBuilder.append("KW1080 : 'KW' '1080';\n"); + grammarBuilder.append("KW1081 : 'KW' '1081';\n"); + grammarBuilder.append("KW1082 : 'KW' '1082';\n"); + grammarBuilder.append("KW1083 : 'KW' '1083';\n"); + grammarBuilder.append("KW1084 : 'KW' '1084';\n"); + grammarBuilder.append("KW1085 : 'KW' '1085';\n"); + grammarBuilder.append("KW1086 : 'KW' '1086';\n"); + grammarBuilder.append("KW1087 : 'KW' '1087';\n"); + grammarBuilder.append("KW1088 : 'KW' '1088';\n"); + grammarBuilder.append("KW1089 : 'KW' '1089';\n"); + grammarBuilder.append("KW1090 : 'KW' '1090';\n"); + grammarBuilder.append("KW1091 : 'KW' '1091';\n"); + grammarBuilder.append("KW1092 : 'KW' '1092';\n"); + grammarBuilder.append("KW1093 : 'KW' '1093';\n"); + grammarBuilder.append("KW1094 : 'KW' '1094';\n"); + grammarBuilder.append("KW1095 : 'KW' '1095';\n"); + grammarBuilder.append("KW1096 : 'KW' '1096';\n"); + grammarBuilder.append("KW1097 : 'KW' '1097';\n"); + grammarBuilder.append("KW1098 : 'KW' '1098';\n"); + grammarBuilder.append("KW1099 : 'KW' '1099';\n"); + grammarBuilder.append("KW1100 : 'KW' '1100';\n"); + grammarBuilder.append("KW1101 : 'KW' '1101';\n"); + grammarBuilder.append("KW1102 : 'KW' '1102';\n"); + grammarBuilder.append("KW1103 : 'KW' '1103';\n"); + grammarBuilder.append("KW1104 : 'KW' '1104';\n"); + grammarBuilder.append("KW1105 : 'KW' '1105';\n"); + grammarBuilder.append("KW1106 : 'KW' '1106';\n"); + grammarBuilder.append("KW1107 : 'KW' '1107';\n"); + grammarBuilder.append("KW1108 : 'KW' '1108';\n"); + grammarBuilder.append("KW1109 : 'KW' '1109';\n"); + grammarBuilder.append("KW1110 : 'KW' '1110';\n"); + grammarBuilder.append("KW1111 : 'KW' '1111';\n"); + grammarBuilder.append("KW1112 : 'KW' '1112';\n"); + grammarBuilder.append("KW1113 : 'KW' '1113';\n"); + grammarBuilder.append("KW1114 : 'KW' '1114';\n"); + grammarBuilder.append("KW1115 : 'KW' '1115';\n"); + grammarBuilder.append("KW1116 : 'KW' '1116';\n"); + grammarBuilder.append("KW1117 : 'KW' '1117';\n"); + grammarBuilder.append("KW1118 : 'KW' '1118';\n"); + grammarBuilder.append("KW1119 : 'KW' '1119';\n"); + grammarBuilder.append("KW1120 : 'KW' '1120';\n"); + grammarBuilder.append("KW1121 : 'KW' '1121';\n"); + grammarBuilder.append("KW1122 : 'KW' '1122';\n"); + grammarBuilder.append("KW1123 : 'KW' '1123';\n"); + grammarBuilder.append("KW1124 : 'KW' '1124';\n"); + grammarBuilder.append("KW1125 : 'KW' '1125';\n"); + grammarBuilder.append("KW1126 : 'KW' '1126';\n"); + grammarBuilder.append("KW1127 : 'KW' '1127';\n"); + grammarBuilder.append("KW1128 : 'KW' '1128';\n"); + grammarBuilder.append("KW1129 : 'KW' '1129';\n"); + grammarBuilder.append("KW1130 : 'KW' '1130';\n"); + grammarBuilder.append("KW1131 : 'KW' '1131';\n"); + grammarBuilder.append("KW1132 : 'KW' '1132';\n"); + grammarBuilder.append("KW1133 : 'KW' '1133';\n"); + grammarBuilder.append("KW1134 : 'KW' '1134';\n"); + grammarBuilder.append("KW1135 : 'KW' '1135';\n"); + grammarBuilder.append("KW1136 : 'KW' '1136';\n"); + grammarBuilder.append("KW1137 : 'KW' '1137';\n"); + grammarBuilder.append("KW1138 : 'KW' '1138';\n"); + grammarBuilder.append("KW1139 : 'KW' '1139';\n"); + grammarBuilder.append("KW1140 : 'KW' '1140';\n"); + grammarBuilder.append("KW1141 : 'KW' '1141';\n"); + grammarBuilder.append("KW1142 : 'KW' '1142';\n"); + grammarBuilder.append("KW1143 : 'KW' '1143';\n"); + grammarBuilder.append("KW1144 : 'KW' '1144';\n"); + grammarBuilder.append("KW1145 : 'KW' '1145';\n"); + grammarBuilder.append("KW1146 : 'KW' '1146';\n"); + grammarBuilder.append("KW1147 : 'KW' '1147';\n"); + grammarBuilder.append("KW1148 : 'KW' '1148';\n"); + grammarBuilder.append("KW1149 : 'KW' '1149';\n"); + grammarBuilder.append("KW1150 : 'KW' '1150';\n"); + grammarBuilder.append("KW1151 : 'KW' '1151';\n"); + grammarBuilder.append("KW1152 : 'KW' '1152';\n"); + grammarBuilder.append("KW1153 : 'KW' '1153';\n"); + grammarBuilder.append("KW1154 : 'KW' '1154';\n"); + grammarBuilder.append("KW1155 : 'KW' '1155';\n"); + grammarBuilder.append("KW1156 : 'KW' '1156';\n"); + grammarBuilder.append("KW1157 : 'KW' '1157';\n"); + grammarBuilder.append("KW1158 : 'KW' '1158';\n"); + grammarBuilder.append("KW1159 : 'KW' '1159';\n"); + grammarBuilder.append("KW1160 : 'KW' '1160';\n"); + grammarBuilder.append("KW1161 : 'KW' '1161';\n"); + grammarBuilder.append("KW1162 : 'KW' '1162';\n"); + grammarBuilder.append("KW1163 : 'KW' '1163';\n"); + grammarBuilder.append("KW1164 : 'KW' '1164';\n"); + grammarBuilder.append("KW1165 : 'KW' '1165';\n"); + grammarBuilder.append("KW1166 : 'KW' '1166';\n"); + grammarBuilder.append("KW1167 : 'KW' '1167';\n"); + grammarBuilder.append("KW1168 : 'KW' '1168';\n"); + grammarBuilder.append("KW1169 : 'KW' '1169';\n"); + grammarBuilder.append("KW1170 : 'KW' '1170';\n"); + grammarBuilder.append("KW1171 : 'KW' '1171';\n"); + grammarBuilder.append("KW1172 : 'KW' '1172';\n"); + grammarBuilder.append("KW1173 : 'KW' '1173';\n"); + grammarBuilder.append("KW1174 : 'KW' '1174';\n"); + grammarBuilder.append("KW1175 : 'KW' '1175';\n"); + grammarBuilder.append("KW1176 : 'KW' '1176';\n"); + grammarBuilder.append("KW1177 : 'KW' '1177';\n"); + grammarBuilder.append("KW1178 : 'KW' '1178';\n"); + grammarBuilder.append("KW1179 : 'KW' '1179';\n"); + grammarBuilder.append("KW1180 : 'KW' '1180';\n"); + grammarBuilder.append("KW1181 : 'KW' '1181';\n"); + grammarBuilder.append("KW1182 : 'KW' '1182';\n"); + grammarBuilder.append("KW1183 : 'KW' '1183';\n"); + grammarBuilder.append("KW1184 : 'KW' '1184';\n"); + grammarBuilder.append("KW1185 : 'KW' '1185';\n"); + grammarBuilder.append("KW1186 : 'KW' '1186';\n"); + grammarBuilder.append("KW1187 : 'KW' '1187';\n"); + grammarBuilder.append("KW1188 : 'KW' '1188';\n"); + grammarBuilder.append("KW1189 : 'KW' '1189';\n"); + grammarBuilder.append("KW1190 : 'KW' '1190';\n"); + grammarBuilder.append("KW1191 : 'KW' '1191';\n"); + grammarBuilder.append("KW1192 : 'KW' '1192';\n"); + grammarBuilder.append("KW1193 : 'KW' '1193';\n"); + grammarBuilder.append("KW1194 : 'KW' '1194';\n"); + grammarBuilder.append("KW1195 : 'KW' '1195';\n"); + grammarBuilder.append("KW1196 : 'KW' '1196';\n"); + grammarBuilder.append("KW1197 : 'KW' '1197';\n"); + grammarBuilder.append("KW1198 : 'KW' '1198';\n"); + grammarBuilder.append("KW1199 : 'KW' '1199';\n"); + grammarBuilder.append("KW1200 : 'KW' '1200';\n"); + grammarBuilder.append("KW1201 : 'KW' '1201';\n"); + grammarBuilder.append("KW1202 : 'KW' '1202';\n"); + grammarBuilder.append("KW1203 : 'KW' '1203';\n"); + grammarBuilder.append("KW1204 : 'KW' '1204';\n"); + grammarBuilder.append("KW1205 : 'KW' '1205';\n"); + grammarBuilder.append("KW1206 : 'KW' '1206';\n"); + grammarBuilder.append("KW1207 : 'KW' '1207';\n"); + grammarBuilder.append("KW1208 : 'KW' '1208';\n"); + grammarBuilder.append("KW1209 : 'KW' '1209';\n"); + grammarBuilder.append("KW1210 : 'KW' '1210';\n"); + grammarBuilder.append("KW1211 : 'KW' '1211';\n"); + grammarBuilder.append("KW1212 : 'KW' '1212';\n"); + grammarBuilder.append("KW1213 : 'KW' '1213';\n"); + grammarBuilder.append("KW1214 : 'KW' '1214';\n"); + grammarBuilder.append("KW1215 : 'KW' '1215';\n"); + grammarBuilder.append("KW1216 : 'KW' '1216';\n"); + grammarBuilder.append("KW1217 : 'KW' '1217';\n"); + grammarBuilder.append("KW1218 : 'KW' '1218';\n"); + grammarBuilder.append("KW1219 : 'KW' '1219';\n"); + grammarBuilder.append("KW1220 : 'KW' '1220';\n"); + grammarBuilder.append("KW1221 : 'KW' '1221';\n"); + grammarBuilder.append("KW1222 : 'KW' '1222';\n"); + grammarBuilder.append("KW1223 : 'KW' '1223';\n"); + grammarBuilder.append("KW1224 : 'KW' '1224';\n"); + grammarBuilder.append("KW1225 : 'KW' '1225';\n"); + grammarBuilder.append("KW1226 : 'KW' '1226';\n"); + grammarBuilder.append("KW1227 : 'KW' '1227';\n"); + grammarBuilder.append("KW1228 : 'KW' '1228';\n"); + grammarBuilder.append("KW1229 : 'KW' '1229';\n"); + grammarBuilder.append("KW1230 : 'KW' '1230';\n"); + grammarBuilder.append("KW1231 : 'KW' '1231';\n"); + grammarBuilder.append("KW1232 : 'KW' '1232';\n"); + grammarBuilder.append("KW1233 : 'KW' '1233';\n"); + grammarBuilder.append("KW1234 : 'KW' '1234';\n"); + grammarBuilder.append("KW1235 : 'KW' '1235';\n"); + grammarBuilder.append("KW1236 : 'KW' '1236';\n"); + grammarBuilder.append("KW1237 : 'KW' '1237';\n"); + grammarBuilder.append("KW1238 : 'KW' '1238';\n"); + grammarBuilder.append("KW1239 : 'KW' '1239';\n"); + grammarBuilder.append("KW1240 : 'KW' '1240';\n"); + grammarBuilder.append("KW1241 : 'KW' '1241';\n"); + grammarBuilder.append("KW1242 : 'KW' '1242';\n"); + grammarBuilder.append("KW1243 : 'KW' '1243';\n"); + grammarBuilder.append("KW1244 : 'KW' '1244';\n"); + grammarBuilder.append("KW1245 : 'KW' '1245';\n"); + grammarBuilder.append("KW1246 : 'KW' '1246';\n"); + grammarBuilder.append("KW1247 : 'KW' '1247';\n"); + grammarBuilder.append("KW1248 : 'KW' '1248';\n"); + grammarBuilder.append("KW1249 : 'KW' '1249';\n"); + grammarBuilder.append("KW1250 : 'KW' '1250';\n"); + grammarBuilder.append("KW1251 : 'KW' '1251';\n"); + grammarBuilder.append("KW1252 : 'KW' '1252';\n"); + grammarBuilder.append("KW1253 : 'KW' '1253';\n"); + grammarBuilder.append("KW1254 : 'KW' '1254';\n"); + grammarBuilder.append("KW1255 : 'KW' '1255';\n"); + grammarBuilder.append("KW1256 : 'KW' '1256';\n"); + grammarBuilder.append("KW1257 : 'KW' '1257';\n"); + grammarBuilder.append("KW1258 : 'KW' '1258';\n"); + grammarBuilder.append("KW1259 : 'KW' '1259';\n"); + grammarBuilder.append("KW1260 : 'KW' '1260';\n"); + grammarBuilder.append("KW1261 : 'KW' '1261';\n"); + grammarBuilder.append("KW1262 : 'KW' '1262';\n"); + grammarBuilder.append("KW1263 : 'KW' '1263';\n"); + grammarBuilder.append("KW1264 : 'KW' '1264';\n"); + grammarBuilder.append("KW1265 : 'KW' '1265';\n"); + grammarBuilder.append("KW1266 : 'KW' '1266';\n"); + grammarBuilder.append("KW1267 : 'KW' '1267';\n"); + grammarBuilder.append("KW1268 : 'KW' '1268';\n"); + grammarBuilder.append("KW1269 : 'KW' '1269';\n"); + grammarBuilder.append("KW1270 : 'KW' '1270';\n"); + grammarBuilder.append("KW1271 : 'KW' '1271';\n"); + grammarBuilder.append("KW1272 : 'KW' '1272';\n"); + grammarBuilder.append("KW1273 : 'KW' '1273';\n"); + grammarBuilder.append("KW1274 : 'KW' '1274';\n"); + grammarBuilder.append("KW1275 : 'KW' '1275';\n"); + grammarBuilder.append("KW1276 : 'KW' '1276';\n"); + grammarBuilder.append("KW1277 : 'KW' '1277';\n"); + grammarBuilder.append("KW1278 : 'KW' '1278';\n"); + grammarBuilder.append("KW1279 : 'KW' '1279';\n"); + grammarBuilder.append("KW1280 : 'KW' '1280';\n"); + grammarBuilder.append("KW1281 : 'KW' '1281';\n"); + grammarBuilder.append("KW1282 : 'KW' '1282';\n"); + grammarBuilder.append("KW1283 : 'KW' '1283';\n"); + grammarBuilder.append("KW1284 : 'KW' '1284';\n"); + grammarBuilder.append("KW1285 : 'KW' '1285';\n"); + grammarBuilder.append("KW1286 : 'KW' '1286';\n"); + grammarBuilder.append("KW1287 : 'KW' '1287';\n"); + grammarBuilder.append("KW1288 : 'KW' '1288';\n"); + grammarBuilder.append("KW1289 : 'KW' '1289';\n"); + grammarBuilder.append("KW1290 : 'KW' '1290';\n"); + grammarBuilder.append("KW1291 : 'KW' '1291';\n"); + grammarBuilder.append("KW1292 : 'KW' '1292';\n"); + grammarBuilder.append("KW1293 : 'KW' '1293';\n"); + grammarBuilder.append("KW1294 : 'KW' '1294';\n"); + grammarBuilder.append("KW1295 : 'KW' '1295';\n"); + grammarBuilder.append("KW1296 : 'KW' '1296';\n"); + grammarBuilder.append("KW1297 : 'KW' '1297';\n"); + grammarBuilder.append("KW1298 : 'KW' '1298';\n"); + grammarBuilder.append("KW1299 : 'KW' '1299';\n"); + grammarBuilder.append("KW1300 : 'KW' '1300';\n"); + grammarBuilder.append("KW1301 : 'KW' '1301';\n"); + grammarBuilder.append("KW1302 : 'KW' '1302';\n"); + grammarBuilder.append("KW1303 : 'KW' '1303';\n"); + grammarBuilder.append("KW1304 : 'KW' '1304';\n"); + grammarBuilder.append("KW1305 : 'KW' '1305';\n"); + grammarBuilder.append("KW1306 : 'KW' '1306';\n"); + grammarBuilder.append("KW1307 : 'KW' '1307';\n"); + grammarBuilder.append("KW1308 : 'KW' '1308';\n"); + grammarBuilder.append("KW1309 : 'KW' '1309';\n"); + grammarBuilder.append("KW1310 : 'KW' '1310';\n"); + grammarBuilder.append("KW1311 : 'KW' '1311';\n"); + grammarBuilder.append("KW1312 : 'KW' '1312';\n"); + grammarBuilder.append("KW1313 : 'KW' '1313';\n"); + grammarBuilder.append("KW1314 : 'KW' '1314';\n"); + grammarBuilder.append("KW1315 : 'KW' '1315';\n"); + grammarBuilder.append("KW1316 : 'KW' '1316';\n"); + grammarBuilder.append("KW1317 : 'KW' '1317';\n"); + grammarBuilder.append("KW1318 : 'KW' '1318';\n"); + grammarBuilder.append("KW1319 : 'KW' '1319';\n"); + grammarBuilder.append("KW1320 : 'KW' '1320';\n"); + grammarBuilder.append("KW1321 : 'KW' '1321';\n"); + grammarBuilder.append("KW1322 : 'KW' '1322';\n"); + grammarBuilder.append("KW1323 : 'KW' '1323';\n"); + grammarBuilder.append("KW1324 : 'KW' '1324';\n"); + grammarBuilder.append("KW1325 : 'KW' '1325';\n"); + grammarBuilder.append("KW1326 : 'KW' '1326';\n"); + grammarBuilder.append("KW1327 : 'KW' '1327';\n"); + grammarBuilder.append("KW1328 : 'KW' '1328';\n"); + grammarBuilder.append("KW1329 : 'KW' '1329';\n"); + grammarBuilder.append("KW1330 : 'KW' '1330';\n"); + grammarBuilder.append("KW1331 : 'KW' '1331';\n"); + grammarBuilder.append("KW1332 : 'KW' '1332';\n"); + grammarBuilder.append("KW1333 : 'KW' '1333';\n"); + grammarBuilder.append("KW1334 : 'KW' '1334';\n"); + grammarBuilder.append("KW1335 : 'KW' '1335';\n"); + grammarBuilder.append("KW1336 : 'KW' '1336';\n"); + grammarBuilder.append("KW1337 : 'KW' '1337';\n"); + grammarBuilder.append("KW1338 : 'KW' '1338';\n"); + grammarBuilder.append("KW1339 : 'KW' '1339';\n"); + grammarBuilder.append("KW1340 : 'KW' '1340';\n"); + grammarBuilder.append("KW1341 : 'KW' '1341';\n"); + grammarBuilder.append("KW1342 : 'KW' '1342';\n"); + grammarBuilder.append("KW1343 : 'KW' '1343';\n"); + grammarBuilder.append("KW1344 : 'KW' '1344';\n"); + grammarBuilder.append("KW1345 : 'KW' '1345';\n"); + grammarBuilder.append("KW1346 : 'KW' '1346';\n"); + grammarBuilder.append("KW1347 : 'KW' '1347';\n"); + grammarBuilder.append("KW1348 : 'KW' '1348';\n"); + grammarBuilder.append("KW1349 : 'KW' '1349';\n"); + grammarBuilder.append("KW1350 : 'KW' '1350';\n"); + grammarBuilder.append("KW1351 : 'KW' '1351';\n"); + grammarBuilder.append("KW1352 : 'KW' '1352';\n"); + grammarBuilder.append("KW1353 : 'KW' '1353';\n"); + grammarBuilder.append("KW1354 : 'KW' '1354';\n"); + grammarBuilder.append("KW1355 : 'KW' '1355';\n"); + grammarBuilder.append("KW1356 : 'KW' '1356';\n"); + grammarBuilder.append("KW1357 : 'KW' '1357';\n"); + grammarBuilder.append("KW1358 : 'KW' '1358';\n"); + grammarBuilder.append("KW1359 : 'KW' '1359';\n"); + grammarBuilder.append("KW1360 : 'KW' '1360';\n"); + grammarBuilder.append("KW1361 : 'KW' '1361';\n"); + grammarBuilder.append("KW1362 : 'KW' '1362';\n"); + grammarBuilder.append("KW1363 : 'KW' '1363';\n"); + grammarBuilder.append("KW1364 : 'KW' '1364';\n"); + grammarBuilder.append("KW1365 : 'KW' '1365';\n"); + grammarBuilder.append("KW1366 : 'KW' '1366';\n"); + grammarBuilder.append("KW1367 : 'KW' '1367';\n"); + grammarBuilder.append("KW1368 : 'KW' '1368';\n"); + grammarBuilder.append("KW1369 : 'KW' '1369';\n"); + grammarBuilder.append("KW1370 : 'KW' '1370';\n"); + grammarBuilder.append("KW1371 : 'KW' '1371';\n"); + grammarBuilder.append("KW1372 : 'KW' '1372';\n"); + grammarBuilder.append("KW1373 : 'KW' '1373';\n"); + grammarBuilder.append("KW1374 : 'KW' '1374';\n"); + grammarBuilder.append("KW1375 : 'KW' '1375';\n"); + grammarBuilder.append("KW1376 : 'KW' '1376';\n"); + grammarBuilder.append("KW1377 : 'KW' '1377';\n"); + grammarBuilder.append("KW1378 : 'KW' '1378';\n"); + grammarBuilder.append("KW1379 : 'KW' '1379';\n"); + grammarBuilder.append("KW1380 : 'KW' '1380';\n"); + grammarBuilder.append("KW1381 : 'KW' '1381';\n"); + grammarBuilder.append("KW1382 : 'KW' '1382';\n"); + grammarBuilder.append("KW1383 : 'KW' '1383';\n"); + grammarBuilder.append("KW1384 : 'KW' '1384';\n"); + grammarBuilder.append("KW1385 : 'KW' '1385';\n"); + grammarBuilder.append("KW1386 : 'KW' '1386';\n"); + grammarBuilder.append("KW1387 : 'KW' '1387';\n"); + grammarBuilder.append("KW1388 : 'KW' '1388';\n"); + grammarBuilder.append("KW1389 : 'KW' '1389';\n"); + grammarBuilder.append("KW1390 : 'KW' '1390';\n"); + grammarBuilder.append("KW1391 : 'KW' '1391';\n"); + grammarBuilder.append("KW1392 : 'KW' '1392';\n"); + grammarBuilder.append("KW1393 : 'KW' '1393';\n"); + grammarBuilder.append("KW1394 : 'KW' '1394';\n"); + grammarBuilder.append("KW1395 : 'KW' '1395';\n"); + grammarBuilder.append("KW1396 : 'KW' '1396';\n"); + grammarBuilder.append("KW1397 : 'KW' '1397';\n"); + grammarBuilder.append("KW1398 : 'KW' '1398';\n"); + grammarBuilder.append("KW1399 : 'KW' '1399';\n"); + grammarBuilder.append("KW1400 : 'KW' '1400';\n"); + grammarBuilder.append("KW1401 : 'KW' '1401';\n"); + grammarBuilder.append("KW1402 : 'KW' '1402';\n"); + grammarBuilder.append("KW1403 : 'KW' '1403';\n"); + grammarBuilder.append("KW1404 : 'KW' '1404';\n"); + grammarBuilder.append("KW1405 : 'KW' '1405';\n"); + grammarBuilder.append("KW1406 : 'KW' '1406';\n"); + grammarBuilder.append("KW1407 : 'KW' '1407';\n"); + grammarBuilder.append("KW1408 : 'KW' '1408';\n"); + grammarBuilder.append("KW1409 : 'KW' '1409';\n"); + grammarBuilder.append("KW1410 : 'KW' '1410';\n"); + grammarBuilder.append("KW1411 : 'KW' '1411';\n"); + grammarBuilder.append("KW1412 : 'KW' '1412';\n"); + grammarBuilder.append("KW1413 : 'KW' '1413';\n"); + grammarBuilder.append("KW1414 : 'KW' '1414';\n"); + grammarBuilder.append("KW1415 : 'KW' '1415';\n"); + grammarBuilder.append("KW1416 : 'KW' '1416';\n"); + grammarBuilder.append("KW1417 : 'KW' '1417';\n"); + grammarBuilder.append("KW1418 : 'KW' '1418';\n"); + grammarBuilder.append("KW1419 : 'KW' '1419';\n"); + grammarBuilder.append("KW1420 : 'KW' '1420';\n"); + grammarBuilder.append("KW1421 : 'KW' '1421';\n"); + grammarBuilder.append("KW1422 : 'KW' '1422';\n"); + grammarBuilder.append("KW1423 : 'KW' '1423';\n"); + grammarBuilder.append("KW1424 : 'KW' '1424';\n"); + grammarBuilder.append("KW1425 : 'KW' '1425';\n"); + grammarBuilder.append("KW1426 : 'KW' '1426';\n"); + grammarBuilder.append("KW1427 : 'KW' '1427';\n"); + grammarBuilder.append("KW1428 : 'KW' '1428';\n"); + grammarBuilder.append("KW1429 : 'KW' '1429';\n"); + grammarBuilder.append("KW1430 : 'KW' '1430';\n"); + grammarBuilder.append("KW1431 : 'KW' '1431';\n"); + grammarBuilder.append("KW1432 : 'KW' '1432';\n"); + grammarBuilder.append("KW1433 : 'KW' '1433';\n"); + grammarBuilder.append("KW1434 : 'KW' '1434';\n"); + grammarBuilder.append("KW1435 : 'KW' '1435';\n"); + grammarBuilder.append("KW1436 : 'KW' '1436';\n"); + grammarBuilder.append("KW1437 : 'KW' '1437';\n"); + grammarBuilder.append("KW1438 : 'KW' '1438';\n"); + grammarBuilder.append("KW1439 : 'KW' '1439';\n"); + grammarBuilder.append("KW1440 : 'KW' '1440';\n"); + grammarBuilder.append("KW1441 : 'KW' '1441';\n"); + grammarBuilder.append("KW1442 : 'KW' '1442';\n"); + grammarBuilder.append("KW1443 : 'KW' '1443';\n"); + grammarBuilder.append("KW1444 : 'KW' '1444';\n"); + grammarBuilder.append("KW1445 : 'KW' '1445';\n"); + grammarBuilder.append("KW1446 : 'KW' '1446';\n"); + grammarBuilder.append("KW1447 : 'KW' '1447';\n"); + grammarBuilder.append("KW1448 : 'KW' '1448';\n"); + grammarBuilder.append("KW1449 : 'KW' '1449';\n"); + grammarBuilder.append("KW1450 : 'KW' '1450';\n"); + grammarBuilder.append("KW1451 : 'KW' '1451';\n"); + grammarBuilder.append("KW1452 : 'KW' '1452';\n"); + grammarBuilder.append("KW1453 : 'KW' '1453';\n"); + grammarBuilder.append("KW1454 : 'KW' '1454';\n"); + grammarBuilder.append("KW1455 : 'KW' '1455';\n"); + grammarBuilder.append("KW1456 : 'KW' '1456';\n"); + grammarBuilder.append("KW1457 : 'KW' '1457';\n"); + grammarBuilder.append("KW1458 : 'KW' '1458';\n"); + grammarBuilder.append("KW1459 : 'KW' '1459';\n"); + grammarBuilder.append("KW1460 : 'KW' '1460';\n"); + grammarBuilder.append("KW1461 : 'KW' '1461';\n"); + grammarBuilder.append("KW1462 : 'KW' '1462';\n"); + grammarBuilder.append("KW1463 : 'KW' '1463';\n"); + grammarBuilder.append("KW1464 : 'KW' '1464';\n"); + grammarBuilder.append("KW1465 : 'KW' '1465';\n"); + grammarBuilder.append("KW1466 : 'KW' '1466';\n"); + grammarBuilder.append("KW1467 : 'KW' '1467';\n"); + grammarBuilder.append("KW1468 : 'KW' '1468';\n"); + grammarBuilder.append("KW1469 : 'KW' '1469';\n"); + grammarBuilder.append("KW1470 : 'KW' '1470';\n"); + grammarBuilder.append("KW1471 : 'KW' '1471';\n"); + grammarBuilder.append("KW1472 : 'KW' '1472';\n"); + grammarBuilder.append("KW1473 : 'KW' '1473';\n"); + grammarBuilder.append("KW1474 : 'KW' '1474';\n"); + grammarBuilder.append("KW1475 : 'KW' '1475';\n"); + grammarBuilder.append("KW1476 : 'KW' '1476';\n"); + grammarBuilder.append("KW1477 : 'KW' '1477';\n"); + grammarBuilder.append("KW1478 : 'KW' '1478';\n"); + grammarBuilder.append("KW1479 : 'KW' '1479';\n"); + grammarBuilder.append("KW1480 : 'KW' '1480';\n"); + grammarBuilder.append("KW1481 : 'KW' '1481';\n"); + grammarBuilder.append("KW1482 : 'KW' '1482';\n"); + grammarBuilder.append("KW1483 : 'KW' '1483';\n"); + grammarBuilder.append("KW1484 : 'KW' '1484';\n"); + grammarBuilder.append("KW1485 : 'KW' '1485';\n"); + grammarBuilder.append("KW1486 : 'KW' '1486';\n"); + grammarBuilder.append("KW1487 : 'KW' '1487';\n"); + grammarBuilder.append("KW1488 : 'KW' '1488';\n"); + grammarBuilder.append("KW1489 : 'KW' '1489';\n"); + grammarBuilder.append("KW1490 : 'KW' '1490';\n"); + grammarBuilder.append("KW1491 : 'KW' '1491';\n"); + grammarBuilder.append("KW1492 : 'KW' '1492';\n"); + grammarBuilder.append("KW1493 : 'KW' '1493';\n"); + grammarBuilder.append("KW1494 : 'KW' '1494';\n"); + grammarBuilder.append("KW1495 : 'KW' '1495';\n"); + grammarBuilder.append("KW1496 : 'KW' '1496';\n"); + grammarBuilder.append("KW1497 : 'KW' '1497';\n"); + grammarBuilder.append("KW1498 : 'KW' '1498';\n"); + grammarBuilder.append("KW1499 : 'KW' '1499';\n"); + grammarBuilder.append("KW1500 : 'KW' '1500';\n"); + grammarBuilder.append("KW1501 : 'KW' '1501';\n"); + grammarBuilder.append("KW1502 : 'KW' '1502';\n"); + grammarBuilder.append("KW1503 : 'KW' '1503';\n"); + grammarBuilder.append("KW1504 : 'KW' '1504';\n"); + grammarBuilder.append("KW1505 : 'KW' '1505';\n"); + grammarBuilder.append("KW1506 : 'KW' '1506';\n"); + grammarBuilder.append("KW1507 : 'KW' '1507';\n"); + grammarBuilder.append("KW1508 : 'KW' '1508';\n"); + grammarBuilder.append("KW1509 : 'KW' '1509';\n"); + grammarBuilder.append("KW1510 : 'KW' '1510';\n"); + grammarBuilder.append("KW1511 : 'KW' '1511';\n"); + grammarBuilder.append("KW1512 : 'KW' '1512';\n"); + grammarBuilder.append("KW1513 : 'KW' '1513';\n"); + grammarBuilder.append("KW1514 : 'KW' '1514';\n"); + grammarBuilder.append("KW1515 : 'KW' '1515';\n"); + grammarBuilder.append("KW1516 : 'KW' '1516';\n"); + grammarBuilder.append("KW1517 : 'KW' '1517';\n"); + grammarBuilder.append("KW1518 : 'KW' '1518';\n"); + grammarBuilder.append("KW1519 : 'KW' '1519';\n"); + grammarBuilder.append("KW1520 : 'KW' '1520';\n"); + grammarBuilder.append("KW1521 : 'KW' '1521';\n"); + grammarBuilder.append("KW1522 : 'KW' '1522';\n"); + grammarBuilder.append("KW1523 : 'KW' '1523';\n"); + grammarBuilder.append("KW1524 : 'KW' '1524';\n"); + grammarBuilder.append("KW1525 : 'KW' '1525';\n"); + grammarBuilder.append("KW1526 : 'KW' '1526';\n"); + grammarBuilder.append("KW1527 : 'KW' '1527';\n"); + grammarBuilder.append("KW1528 : 'KW' '1528';\n"); + grammarBuilder.append("KW1529 : 'KW' '1529';\n"); + grammarBuilder.append("KW1530 : 'KW' '1530';\n"); + grammarBuilder.append("KW1531 : 'KW' '1531';\n"); + grammarBuilder.append("KW1532 : 'KW' '1532';\n"); + grammarBuilder.append("KW1533 : 'KW' '1533';\n"); + grammarBuilder.append("KW1534 : 'KW' '1534';\n"); + grammarBuilder.append("KW1535 : 'KW' '1535';\n"); + grammarBuilder.append("KW1536 : 'KW' '1536';\n"); + grammarBuilder.append("KW1537 : 'KW' '1537';\n"); + grammarBuilder.append("KW1538 : 'KW' '1538';\n"); + grammarBuilder.append("KW1539 : 'KW' '1539';\n"); + grammarBuilder.append("KW1540 : 'KW' '1540';\n"); + grammarBuilder.append("KW1541 : 'KW' '1541';\n"); + grammarBuilder.append("KW1542 : 'KW' '1542';\n"); + grammarBuilder.append("KW1543 : 'KW' '1543';\n"); + grammarBuilder.append("KW1544 : 'KW' '1544';\n"); + grammarBuilder.append("KW1545 : 'KW' '1545';\n"); + grammarBuilder.append("KW1546 : 'KW' '1546';\n"); + grammarBuilder.append("KW1547 : 'KW' '1547';\n"); + grammarBuilder.append("KW1548 : 'KW' '1548';\n"); + grammarBuilder.append("KW1549 : 'KW' '1549';\n"); + grammarBuilder.append("KW1550 : 'KW' '1550';\n"); + grammarBuilder.append("KW1551 : 'KW' '1551';\n"); + grammarBuilder.append("KW1552 : 'KW' '1552';\n"); + grammarBuilder.append("KW1553 : 'KW' '1553';\n"); + grammarBuilder.append("KW1554 : 'KW' '1554';\n"); + grammarBuilder.append("KW1555 : 'KW' '1555';\n"); + grammarBuilder.append("KW1556 : 'KW' '1556';\n"); + grammarBuilder.append("KW1557 : 'KW' '1557';\n"); + grammarBuilder.append("KW1558 : 'KW' '1558';\n"); + grammarBuilder.append("KW1559 : 'KW' '1559';\n"); + grammarBuilder.append("KW1560 : 'KW' '1560';\n"); + grammarBuilder.append("KW1561 : 'KW' '1561';\n"); + grammarBuilder.append("KW1562 : 'KW' '1562';\n"); + grammarBuilder.append("KW1563 : 'KW' '1563';\n"); + grammarBuilder.append("KW1564 : 'KW' '1564';\n"); + grammarBuilder.append("KW1565 : 'KW' '1565';\n"); + grammarBuilder.append("KW1566 : 'KW' '1566';\n"); + grammarBuilder.append("KW1567 : 'KW' '1567';\n"); + grammarBuilder.append("KW1568 : 'KW' '1568';\n"); + grammarBuilder.append("KW1569 : 'KW' '1569';\n"); + grammarBuilder.append("KW1570 : 'KW' '1570';\n"); + grammarBuilder.append("KW1571 : 'KW' '1571';\n"); + grammarBuilder.append("KW1572 : 'KW' '1572';\n"); + grammarBuilder.append("KW1573 : 'KW' '1573';\n"); + grammarBuilder.append("KW1574 : 'KW' '1574';\n"); + grammarBuilder.append("KW1575 : 'KW' '1575';\n"); + grammarBuilder.append("KW1576 : 'KW' '1576';\n"); + grammarBuilder.append("KW1577 : 'KW' '1577';\n"); + grammarBuilder.append("KW1578 : 'KW' '1578';\n"); + grammarBuilder.append("KW1579 : 'KW' '1579';\n"); + grammarBuilder.append("KW1580 : 'KW' '1580';\n"); + grammarBuilder.append("KW1581 : 'KW' '1581';\n"); + grammarBuilder.append("KW1582 : 'KW' '1582';\n"); + grammarBuilder.append("KW1583 : 'KW' '1583';\n"); + grammarBuilder.append("KW1584 : 'KW' '1584';\n"); + grammarBuilder.append("KW1585 : 'KW' '1585';\n"); + grammarBuilder.append("KW1586 : 'KW' '1586';\n"); + grammarBuilder.append("KW1587 : 'KW' '1587';\n"); + grammarBuilder.append("KW1588 : 'KW' '1588';\n"); + grammarBuilder.append("KW1589 : 'KW' '1589';\n"); + grammarBuilder.append("KW1590 : 'KW' '1590';\n"); + grammarBuilder.append("KW1591 : 'KW' '1591';\n"); + grammarBuilder.append("KW1592 : 'KW' '1592';\n"); + grammarBuilder.append("KW1593 : 'KW' '1593';\n"); + grammarBuilder.append("KW1594 : 'KW' '1594';\n"); + grammarBuilder.append("KW1595 : 'KW' '1595';\n"); + grammarBuilder.append("KW1596 : 'KW' '1596';\n"); + grammarBuilder.append("KW1597 : 'KW' '1597';\n"); + grammarBuilder.append("KW1598 : 'KW' '1598';\n"); + grammarBuilder.append("KW1599 : 'KW' '1599';\n"); + grammarBuilder.append("KW1600 : 'KW' '1600';\n"); + grammarBuilder.append("KW1601 : 'KW' '1601';\n"); + grammarBuilder.append("KW1602 : 'KW' '1602';\n"); + grammarBuilder.append("KW1603 : 'KW' '1603';\n"); + grammarBuilder.append("KW1604 : 'KW' '1604';\n"); + grammarBuilder.append("KW1605 : 'KW' '1605';\n"); + grammarBuilder.append("KW1606 : 'KW' '1606';\n"); + grammarBuilder.append("KW1607 : 'KW' '1607';\n"); + grammarBuilder.append("KW1608 : 'KW' '1608';\n"); + grammarBuilder.append("KW1609 : 'KW' '1609';\n"); + grammarBuilder.append("KW1610 : 'KW' '1610';\n"); + grammarBuilder.append("KW1611 : 'KW' '1611';\n"); + grammarBuilder.append("KW1612 : 'KW' '1612';\n"); + grammarBuilder.append("KW1613 : 'KW' '1613';\n"); + grammarBuilder.append("KW1614 : 'KW' '1614';\n"); + grammarBuilder.append("KW1615 : 'KW' '1615';\n"); + grammarBuilder.append("KW1616 : 'KW' '1616';\n"); + grammarBuilder.append("KW1617 : 'KW' '1617';\n"); + grammarBuilder.append("KW1618 : 'KW' '1618';\n"); + grammarBuilder.append("KW1619 : 'KW' '1619';\n"); + grammarBuilder.append("KW1620 : 'KW' '1620';\n"); + grammarBuilder.append("KW1621 : 'KW' '1621';\n"); + grammarBuilder.append("KW1622 : 'KW' '1622';\n"); + grammarBuilder.append("KW1623 : 'KW' '1623';\n"); + grammarBuilder.append("KW1624 : 'KW' '1624';\n"); + grammarBuilder.append("KW1625 : 'KW' '1625';\n"); + grammarBuilder.append("KW1626 : 'KW' '1626';\n"); + grammarBuilder.append("KW1627 : 'KW' '1627';\n"); + grammarBuilder.append("KW1628 : 'KW' '1628';\n"); + grammarBuilder.append("KW1629 : 'KW' '1629';\n"); + grammarBuilder.append("KW1630 : 'KW' '1630';\n"); + grammarBuilder.append("KW1631 : 'KW' '1631';\n"); + grammarBuilder.append("KW1632 : 'KW' '1632';\n"); + grammarBuilder.append("KW1633 : 'KW' '1633';\n"); + grammarBuilder.append("KW1634 : 'KW' '1634';\n"); + grammarBuilder.append("KW1635 : 'KW' '1635';\n"); + grammarBuilder.append("KW1636 : 'KW' '1636';\n"); + grammarBuilder.append("KW1637 : 'KW' '1637';\n"); + grammarBuilder.append("KW1638 : 'KW' '1638';\n"); + grammarBuilder.append("KW1639 : 'KW' '1639';\n"); + grammarBuilder.append("KW1640 : 'KW' '1640';\n"); + grammarBuilder.append("KW1641 : 'KW' '1641';\n"); + grammarBuilder.append("KW1642 : 'KW' '1642';\n"); + grammarBuilder.append("KW1643 : 'KW' '1643';\n"); + grammarBuilder.append("KW1644 : 'KW' '1644';\n"); + grammarBuilder.append("KW1645 : 'KW' '1645';\n"); + grammarBuilder.append("KW1646 : 'KW' '1646';\n"); + grammarBuilder.append("KW1647 : 'KW' '1647';\n"); + grammarBuilder.append("KW1648 : 'KW' '1648';\n"); + grammarBuilder.append("KW1649 : 'KW' '1649';\n"); + grammarBuilder.append("KW1650 : 'KW' '1650';\n"); + grammarBuilder.append("KW1651 : 'KW' '1651';\n"); + grammarBuilder.append("KW1652 : 'KW' '1652';\n"); + grammarBuilder.append("KW1653 : 'KW' '1653';\n"); + grammarBuilder.append("KW1654 : 'KW' '1654';\n"); + grammarBuilder.append("KW1655 : 'KW' '1655';\n"); + grammarBuilder.append("KW1656 : 'KW' '1656';\n"); + grammarBuilder.append("KW1657 : 'KW' '1657';\n"); + grammarBuilder.append("KW1658 : 'KW' '1658';\n"); + grammarBuilder.append("KW1659 : 'KW' '1659';\n"); + grammarBuilder.append("KW1660 : 'KW' '1660';\n"); + grammarBuilder.append("KW1661 : 'KW' '1661';\n"); + grammarBuilder.append("KW1662 : 'KW' '1662';\n"); + grammarBuilder.append("KW1663 : 'KW' '1663';\n"); + grammarBuilder.append("KW1664 : 'KW' '1664';\n"); + grammarBuilder.append("KW1665 : 'KW' '1665';\n"); + grammarBuilder.append("KW1666 : 'KW' '1666';\n"); + grammarBuilder.append("KW1667 : 'KW' '1667';\n"); + grammarBuilder.append("KW1668 : 'KW' '1668';\n"); + grammarBuilder.append("KW1669 : 'KW' '1669';\n"); + grammarBuilder.append("KW1670 : 'KW' '1670';\n"); + grammarBuilder.append("KW1671 : 'KW' '1671';\n"); + grammarBuilder.append("KW1672 : 'KW' '1672';\n"); + grammarBuilder.append("KW1673 : 'KW' '1673';\n"); + grammarBuilder.append("KW1674 : 'KW' '1674';\n"); + grammarBuilder.append("KW1675 : 'KW' '1675';\n"); + grammarBuilder.append("KW1676 : 'KW' '1676';\n"); + grammarBuilder.append("KW1677 : 'KW' '1677';\n"); + grammarBuilder.append("KW1678 : 'KW' '1678';\n"); + grammarBuilder.append("KW1679 : 'KW' '1679';\n"); + grammarBuilder.append("KW1680 : 'KW' '1680';\n"); + grammarBuilder.append("KW1681 : 'KW' '1681';\n"); + grammarBuilder.append("KW1682 : 'KW' '1682';\n"); + grammarBuilder.append("KW1683 : 'KW' '1683';\n"); + grammarBuilder.append("KW1684 : 'KW' '1684';\n"); + grammarBuilder.append("KW1685 : 'KW' '1685';\n"); + grammarBuilder.append("KW1686 : 'KW' '1686';\n"); + grammarBuilder.append("KW1687 : 'KW' '1687';\n"); + grammarBuilder.append("KW1688 : 'KW' '1688';\n"); + grammarBuilder.append("KW1689 : 'KW' '1689';\n"); + grammarBuilder.append("KW1690 : 'KW' '1690';\n"); + grammarBuilder.append("KW1691 : 'KW' '1691';\n"); + grammarBuilder.append("KW1692 : 'KW' '1692';\n"); + grammarBuilder.append("KW1693 : 'KW' '1693';\n"); + grammarBuilder.append("KW1694 : 'KW' '1694';\n"); + grammarBuilder.append("KW1695 : 'KW' '1695';\n"); + grammarBuilder.append("KW1696 : 'KW' '1696';\n"); + grammarBuilder.append("KW1697 : 'KW' '1697';\n"); + grammarBuilder.append("KW1698 : 'KW' '1698';\n"); + grammarBuilder.append("KW1699 : 'KW' '1699';\n"); + grammarBuilder.append("KW1700 : 'KW' '1700';\n"); + grammarBuilder.append("KW1701 : 'KW' '1701';\n"); + grammarBuilder.append("KW1702 : 'KW' '1702';\n"); + grammarBuilder.append("KW1703 : 'KW' '1703';\n"); + grammarBuilder.append("KW1704 : 'KW' '1704';\n"); + grammarBuilder.append("KW1705 : 'KW' '1705';\n"); + grammarBuilder.append("KW1706 : 'KW' '1706';\n"); + grammarBuilder.append("KW1707 : 'KW' '1707';\n"); + grammarBuilder.append("KW1708 : 'KW' '1708';\n"); + grammarBuilder.append("KW1709 : 'KW' '1709';\n"); + grammarBuilder.append("KW1710 : 'KW' '1710';\n"); + grammarBuilder.append("KW1711 : 'KW' '1711';\n"); + grammarBuilder.append("KW1712 : 'KW' '1712';\n"); + grammarBuilder.append("KW1713 : 'KW' '1713';\n"); + grammarBuilder.append("KW1714 : 'KW' '1714';\n"); + grammarBuilder.append("KW1715 : 'KW' '1715';\n"); + grammarBuilder.append("KW1716 : 'KW' '1716';\n"); + grammarBuilder.append("KW1717 : 'KW' '1717';\n"); + grammarBuilder.append("KW1718 : 'KW' '1718';\n"); + grammarBuilder.append("KW1719 : 'KW' '1719';\n"); + grammarBuilder.append("KW1720 : 'KW' '1720';\n"); + grammarBuilder.append("KW1721 : 'KW' '1721';\n"); + grammarBuilder.append("KW1722 : 'KW' '1722';\n"); + grammarBuilder.append("KW1723 : 'KW' '1723';\n"); + grammarBuilder.append("KW1724 : 'KW' '1724';\n"); + grammarBuilder.append("KW1725 : 'KW' '1725';\n"); + grammarBuilder.append("KW1726 : 'KW' '1726';\n"); + grammarBuilder.append("KW1727 : 'KW' '1727';\n"); + grammarBuilder.append("KW1728 : 'KW' '1728';\n"); + grammarBuilder.append("KW1729 : 'KW' '1729';\n"); + grammarBuilder.append("KW1730 : 'KW' '1730';\n"); + grammarBuilder.append("KW1731 : 'KW' '1731';\n"); + grammarBuilder.append("KW1732 : 'KW' '1732';\n"); + grammarBuilder.append("KW1733 : 'KW' '1733';\n"); + grammarBuilder.append("KW1734 : 'KW' '1734';\n"); + grammarBuilder.append("KW1735 : 'KW' '1735';\n"); + grammarBuilder.append("KW1736 : 'KW' '1736';\n"); + grammarBuilder.append("KW1737 : 'KW' '1737';\n"); + grammarBuilder.append("KW1738 : 'KW' '1738';\n"); + grammarBuilder.append("KW1739 : 'KW' '1739';\n"); + grammarBuilder.append("KW1740 : 'KW' '1740';\n"); + grammarBuilder.append("KW1741 : 'KW' '1741';\n"); + grammarBuilder.append("KW1742 : 'KW' '1742';\n"); + grammarBuilder.append("KW1743 : 'KW' '1743';\n"); + grammarBuilder.append("KW1744 : 'KW' '1744';\n"); + grammarBuilder.append("KW1745 : 'KW' '1745';\n"); + grammarBuilder.append("KW1746 : 'KW' '1746';\n"); + grammarBuilder.append("KW1747 : 'KW' '1747';\n"); + grammarBuilder.append("KW1748 : 'KW' '1748';\n"); + grammarBuilder.append("KW1749 : 'KW' '1749';\n"); + grammarBuilder.append("KW1750 : 'KW' '1750';\n"); + grammarBuilder.append("KW1751 : 'KW' '1751';\n"); + grammarBuilder.append("KW1752 : 'KW' '1752';\n"); + grammarBuilder.append("KW1753 : 'KW' '1753';\n"); + grammarBuilder.append("KW1754 : 'KW' '1754';\n"); + grammarBuilder.append("KW1755 : 'KW' '1755';\n"); + grammarBuilder.append("KW1756 : 'KW' '1756';\n"); + grammarBuilder.append("KW1757 : 'KW' '1757';\n"); + grammarBuilder.append("KW1758 : 'KW' '1758';\n"); + grammarBuilder.append("KW1759 : 'KW' '1759';\n"); + grammarBuilder.append("KW1760 : 'KW' '1760';\n"); + grammarBuilder.append("KW1761 : 'KW' '1761';\n"); + grammarBuilder.append("KW1762 : 'KW' '1762';\n"); + grammarBuilder.append("KW1763 : 'KW' '1763';\n"); + grammarBuilder.append("KW1764 : 'KW' '1764';\n"); + grammarBuilder.append("KW1765 : 'KW' '1765';\n"); + grammarBuilder.append("KW1766 : 'KW' '1766';\n"); + grammarBuilder.append("KW1767 : 'KW' '1767';\n"); + grammarBuilder.append("KW1768 : 'KW' '1768';\n"); + grammarBuilder.append("KW1769 : 'KW' '1769';\n"); + grammarBuilder.append("KW1770 : 'KW' '1770';\n"); + grammarBuilder.append("KW1771 : 'KW' '1771';\n"); + grammarBuilder.append("KW1772 : 'KW' '1772';\n"); + grammarBuilder.append("KW1773 : 'KW' '1773';\n"); + grammarBuilder.append("KW1774 : 'KW' '1774';\n"); + grammarBuilder.append("KW1775 : 'KW' '1775';\n"); + grammarBuilder.append("KW1776 : 'KW' '1776';\n"); + grammarBuilder.append("KW1777 : 'KW' '1777';\n"); + grammarBuilder.append("KW1778 : 'KW' '1778';\n"); + grammarBuilder.append("KW1779 : 'KW' '1779';\n"); + grammarBuilder.append("KW1780 : 'KW' '1780';\n"); + grammarBuilder.append("KW1781 : 'KW' '1781';\n"); + grammarBuilder.append("KW1782 : 'KW' '1782';\n"); + grammarBuilder.append("KW1783 : 'KW' '1783';\n"); + grammarBuilder.append("KW1784 : 'KW' '1784';\n"); + grammarBuilder.append("KW1785 : 'KW' '1785';\n"); + grammarBuilder.append("KW1786 : 'KW' '1786';\n"); + grammarBuilder.append("KW1787 : 'KW' '1787';\n"); + grammarBuilder.append("KW1788 : 'KW' '1788';\n"); + grammarBuilder.append("KW1789 : 'KW' '1789';\n"); + grammarBuilder.append("KW1790 : 'KW' '1790';\n"); + grammarBuilder.append("KW1791 : 'KW' '1791';\n"); + grammarBuilder.append("KW1792 : 'KW' '1792';\n"); + grammarBuilder.append("KW1793 : 'KW' '1793';\n"); + grammarBuilder.append("KW1794 : 'KW' '1794';\n"); + grammarBuilder.append("KW1795 : 'KW' '1795';\n"); + grammarBuilder.append("KW1796 : 'KW' '1796';\n"); + grammarBuilder.append("KW1797 : 'KW' '1797';\n"); + grammarBuilder.append("KW1798 : 'KW' '1798';\n"); + grammarBuilder.append("KW1799 : 'KW' '1799';\n"); + grammarBuilder.append("KW1800 : 'KW' '1800';\n"); + grammarBuilder.append("KW1801 : 'KW' '1801';\n"); + grammarBuilder.append("KW1802 : 'KW' '1802';\n"); + grammarBuilder.append("KW1803 : 'KW' '1803';\n"); + grammarBuilder.append("KW1804 : 'KW' '1804';\n"); + grammarBuilder.append("KW1805 : 'KW' '1805';\n"); + grammarBuilder.append("KW1806 : 'KW' '1806';\n"); + grammarBuilder.append("KW1807 : 'KW' '1807';\n"); + grammarBuilder.append("KW1808 : 'KW' '1808';\n"); + grammarBuilder.append("KW1809 : 'KW' '1809';\n"); + grammarBuilder.append("KW1810 : 'KW' '1810';\n"); + grammarBuilder.append("KW1811 : 'KW' '1811';\n"); + grammarBuilder.append("KW1812 : 'KW' '1812';\n"); + grammarBuilder.append("KW1813 : 'KW' '1813';\n"); + grammarBuilder.append("KW1814 : 'KW' '1814';\n"); + grammarBuilder.append("KW1815 : 'KW' '1815';\n"); + grammarBuilder.append("KW1816 : 'KW' '1816';\n"); + grammarBuilder.append("KW1817 : 'KW' '1817';\n"); + grammarBuilder.append("KW1818 : 'KW' '1818';\n"); + grammarBuilder.append("KW1819 : 'KW' '1819';\n"); + grammarBuilder.append("KW1820 : 'KW' '1820';\n"); + grammarBuilder.append("KW1821 : 'KW' '1821';\n"); + grammarBuilder.append("KW1822 : 'KW' '1822';\n"); + grammarBuilder.append("KW1823 : 'KW' '1823';\n"); + grammarBuilder.append("KW1824 : 'KW' '1824';\n"); + grammarBuilder.append("KW1825 : 'KW' '1825';\n"); + grammarBuilder.append("KW1826 : 'KW' '1826';\n"); + grammarBuilder.append("KW1827 : 'KW' '1827';\n"); + grammarBuilder.append("KW1828 : 'KW' '1828';\n"); + grammarBuilder.append("KW1829 : 'KW' '1829';\n"); + grammarBuilder.append("KW1830 : 'KW' '1830';\n"); + grammarBuilder.append("KW1831 : 'KW' '1831';\n"); + grammarBuilder.append("KW1832 : 'KW' '1832';\n"); + grammarBuilder.append("KW1833 : 'KW' '1833';\n"); + grammarBuilder.append("KW1834 : 'KW' '1834';\n"); + grammarBuilder.append("KW1835 : 'KW' '1835';\n"); + grammarBuilder.append("KW1836 : 'KW' '1836';\n"); + grammarBuilder.append("KW1837 : 'KW' '1837';\n"); + grammarBuilder.append("KW1838 : 'KW' '1838';\n"); + grammarBuilder.append("KW1839 : 'KW' '1839';\n"); + grammarBuilder.append("KW1840 : 'KW' '1840';\n"); + grammarBuilder.append("KW1841 : 'KW' '1841';\n"); + grammarBuilder.append("KW1842 : 'KW' '1842';\n"); + grammarBuilder.append("KW1843 : 'KW' '1843';\n"); + grammarBuilder.append("KW1844 : 'KW' '1844';\n"); + grammarBuilder.append("KW1845 : 'KW' '1845';\n"); + grammarBuilder.append("KW1846 : 'KW' '1846';\n"); + grammarBuilder.append("KW1847 : 'KW' '1847';\n"); + grammarBuilder.append("KW1848 : 'KW' '1848';\n"); + grammarBuilder.append("KW1849 : 'KW' '1849';\n"); + grammarBuilder.append("KW1850 : 'KW' '1850';\n"); + grammarBuilder.append("KW1851 : 'KW' '1851';\n"); + grammarBuilder.append("KW1852 : 'KW' '1852';\n"); + grammarBuilder.append("KW1853 : 'KW' '1853';\n"); + grammarBuilder.append("KW1854 : 'KW' '1854';\n"); + grammarBuilder.append("KW1855 : 'KW' '1855';\n"); + grammarBuilder.append("KW1856 : 'KW' '1856';\n"); + grammarBuilder.append("KW1857 : 'KW' '1857';\n"); + grammarBuilder.append("KW1858 : 'KW' '1858';\n"); + grammarBuilder.append("KW1859 : 'KW' '1859';\n"); + grammarBuilder.append("KW1860 : 'KW' '1860';\n"); + grammarBuilder.append("KW1861 : 'KW' '1861';\n"); + grammarBuilder.append("KW1862 : 'KW' '1862';\n"); + grammarBuilder.append("KW1863 : 'KW' '1863';\n"); + grammarBuilder.append("KW1864 : 'KW' '1864';\n"); + grammarBuilder.append("KW1865 : 'KW' '1865';\n"); + grammarBuilder.append("KW1866 : 'KW' '1866';\n"); + grammarBuilder.append("KW1867 : 'KW' '1867';\n"); + grammarBuilder.append("KW1868 : 'KW' '1868';\n"); + grammarBuilder.append("KW1869 : 'KW' '1869';\n"); + grammarBuilder.append("KW1870 : 'KW' '1870';\n"); + grammarBuilder.append("KW1871 : 'KW' '1871';\n"); + grammarBuilder.append("KW1872 : 'KW' '1872';\n"); + grammarBuilder.append("KW1873 : 'KW' '1873';\n"); + grammarBuilder.append("KW1874 : 'KW' '1874';\n"); + grammarBuilder.append("KW1875 : 'KW' '1875';\n"); + grammarBuilder.append("KW1876 : 'KW' '1876';\n"); + grammarBuilder.append("KW1877 : 'KW' '1877';\n"); + grammarBuilder.append("KW1878 : 'KW' '1878';\n"); + grammarBuilder.append("KW1879 : 'KW' '1879';\n"); + grammarBuilder.append("KW1880 : 'KW' '1880';\n"); + grammarBuilder.append("KW1881 : 'KW' '1881';\n"); + grammarBuilder.append("KW1882 : 'KW' '1882';\n"); + grammarBuilder.append("KW1883 : 'KW' '1883';\n"); + grammarBuilder.append("KW1884 : 'KW' '1884';\n"); + grammarBuilder.append("KW1885 : 'KW' '1885';\n"); + grammarBuilder.append("KW1886 : 'KW' '1886';\n"); + grammarBuilder.append("KW1887 : 'KW' '1887';\n"); + grammarBuilder.append("KW1888 : 'KW' '1888';\n"); + grammarBuilder.append("KW1889 : 'KW' '1889';\n"); + grammarBuilder.append("KW1890 : 'KW' '1890';\n"); + grammarBuilder.append("KW1891 : 'KW' '1891';\n"); + grammarBuilder.append("KW1892 : 'KW' '1892';\n"); + grammarBuilder.append("KW1893 : 'KW' '1893';\n"); + grammarBuilder.append("KW1894 : 'KW' '1894';\n"); + grammarBuilder.append("KW1895 : 'KW' '1895';\n"); + grammarBuilder.append("KW1896 : 'KW' '1896';\n"); + grammarBuilder.append("KW1897 : 'KW' '1897';\n"); + grammarBuilder.append("KW1898 : 'KW' '1898';\n"); + grammarBuilder.append("KW1899 : 'KW' '1899';\n"); + grammarBuilder.append("KW1900 : 'KW' '1900';\n"); + grammarBuilder.append("KW1901 : 'KW' '1901';\n"); + grammarBuilder.append("KW1902 : 'KW' '1902';\n"); + grammarBuilder.append("KW1903 : 'KW' '1903';\n"); + grammarBuilder.append("KW1904 : 'KW' '1904';\n"); + grammarBuilder.append("KW1905 : 'KW' '1905';\n"); + grammarBuilder.append("KW1906 : 'KW' '1906';\n"); + grammarBuilder.append("KW1907 : 'KW' '1907';\n"); + grammarBuilder.append("KW1908 : 'KW' '1908';\n"); + grammarBuilder.append("KW1909 : 'KW' '1909';\n"); + grammarBuilder.append("KW1910 : 'KW' '1910';\n"); + grammarBuilder.append("KW1911 : 'KW' '1911';\n"); + grammarBuilder.append("KW1912 : 'KW' '1912';\n"); + grammarBuilder.append("KW1913 : 'KW' '1913';\n"); + grammarBuilder.append("KW1914 : 'KW' '1914';\n"); + grammarBuilder.append("KW1915 : 'KW' '1915';\n"); + grammarBuilder.append("KW1916 : 'KW' '1916';\n"); + grammarBuilder.append("KW1917 : 'KW' '1917';\n"); + grammarBuilder.append("KW1918 : 'KW' '1918';\n"); + grammarBuilder.append("KW1919 : 'KW' '1919';\n"); + grammarBuilder.append("KW1920 : 'KW' '1920';\n"); + grammarBuilder.append("KW1921 : 'KW' '1921';\n"); + grammarBuilder.append("KW1922 : 'KW' '1922';\n"); + grammarBuilder.append("KW1923 : 'KW' '1923';\n"); + grammarBuilder.append("KW1924 : 'KW' '1924';\n"); + grammarBuilder.append("KW1925 : 'KW' '1925';\n"); + grammarBuilder.append("KW1926 : 'KW' '1926';\n"); + grammarBuilder.append("KW1927 : 'KW' '1927';\n"); + grammarBuilder.append("KW1928 : 'KW' '1928';\n"); + grammarBuilder.append("KW1929 : 'KW' '1929';\n"); + grammarBuilder.append("KW1930 : 'KW' '1930';\n"); + grammarBuilder.append("KW1931 : 'KW' '1931';\n"); + grammarBuilder.append("KW1932 : 'KW' '1932';\n"); + grammarBuilder.append("KW1933 : 'KW' '1933';\n"); + grammarBuilder.append("KW1934 : 'KW' '1934';\n"); + grammarBuilder.append("KW1935 : 'KW' '1935';\n"); + grammarBuilder.append("KW1936 : 'KW' '1936';\n"); + grammarBuilder.append("KW1937 : 'KW' '1937';\n"); + grammarBuilder.append("KW1938 : 'KW' '1938';\n"); + grammarBuilder.append("KW1939 : 'KW' '1939';\n"); + grammarBuilder.append("KW1940 : 'KW' '1940';\n"); + grammarBuilder.append("KW1941 : 'KW' '1941';\n"); + grammarBuilder.append("KW1942 : 'KW' '1942';\n"); + grammarBuilder.append("KW1943 : 'KW' '1943';\n"); + grammarBuilder.append("KW1944 : 'KW' '1944';\n"); + grammarBuilder.append("KW1945 : 'KW' '1945';\n"); + grammarBuilder.append("KW1946 : 'KW' '1946';\n"); + grammarBuilder.append("KW1947 : 'KW' '1947';\n"); + grammarBuilder.append("KW1948 : 'KW' '1948';\n"); + grammarBuilder.append("KW1949 : 'KW' '1949';\n"); + grammarBuilder.append("KW1950 : 'KW' '1950';\n"); + grammarBuilder.append("KW1951 : 'KW' '1951';\n"); + grammarBuilder.append("KW1952 : 'KW' '1952';\n"); + grammarBuilder.append("KW1953 : 'KW' '1953';\n"); + grammarBuilder.append("KW1954 : 'KW' '1954';\n"); + grammarBuilder.append("KW1955 : 'KW' '1955';\n"); + grammarBuilder.append("KW1956 : 'KW' '1956';\n"); + grammarBuilder.append("KW1957 : 'KW' '1957';\n"); + grammarBuilder.append("KW1958 : 'KW' '1958';\n"); + grammarBuilder.append("KW1959 : 'KW' '1959';\n"); + grammarBuilder.append("KW1960 : 'KW' '1960';\n"); + grammarBuilder.append("KW1961 : 'KW' '1961';\n"); + grammarBuilder.append("KW1962 : 'KW' '1962';\n"); + grammarBuilder.append("KW1963 : 'KW' '1963';\n"); + grammarBuilder.append("KW1964 : 'KW' '1964';\n"); + grammarBuilder.append("KW1965 : 'KW' '1965';\n"); + grammarBuilder.append("KW1966 : 'KW' '1966';\n"); + grammarBuilder.append("KW1967 : 'KW' '1967';\n"); + grammarBuilder.append("KW1968 : 'KW' '1968';\n"); + grammarBuilder.append("KW1969 : 'KW' '1969';\n"); + grammarBuilder.append("KW1970 : 'KW' '1970';\n"); + grammarBuilder.append("KW1971 : 'KW' '1971';\n"); + grammarBuilder.append("KW1972 : 'KW' '1972';\n"); + grammarBuilder.append("KW1973 : 'KW' '1973';\n"); + grammarBuilder.append("KW1974 : 'KW' '1974';\n"); + grammarBuilder.append("KW1975 : 'KW' '1975';\n"); + grammarBuilder.append("KW1976 : 'KW' '1976';\n"); + grammarBuilder.append("KW1977 : 'KW' '1977';\n"); + grammarBuilder.append("KW1978 : 'KW' '1978';\n"); + grammarBuilder.append("KW1979 : 'KW' '1979';\n"); + grammarBuilder.append("KW1980 : 'KW' '1980';\n"); + grammarBuilder.append("KW1981 : 'KW' '1981';\n"); + grammarBuilder.append("KW1982 : 'KW' '1982';\n"); + grammarBuilder.append("KW1983 : 'KW' '1983';\n"); + grammarBuilder.append("KW1984 : 'KW' '1984';\n"); + grammarBuilder.append("KW1985 : 'KW' '1985';\n"); + grammarBuilder.append("KW1986 : 'KW' '1986';\n"); + grammarBuilder.append("KW1987 : 'KW' '1987';\n"); + grammarBuilder.append("KW1988 : 'KW' '1988';\n"); + grammarBuilder.append("KW1989 : 'KW' '1989';\n"); + grammarBuilder.append("KW1990 : 'KW' '1990';\n"); + grammarBuilder.append("KW1991 : 'KW' '1991';\n"); + grammarBuilder.append("KW1992 : 'KW' '1992';\n"); + grammarBuilder.append("KW1993 : 'KW' '1993';\n"); + grammarBuilder.append("KW1994 : 'KW' '1994';\n"); + grammarBuilder.append("KW1995 : 'KW' '1995';\n"); + grammarBuilder.append("KW1996 : 'KW' '1996';\n"); + grammarBuilder.append("KW1997 : 'KW' '1997';\n"); + grammarBuilder.append("KW1998 : 'KW' '1998';\n"); + grammarBuilder.append("KW1999 : 'KW' '1999';\n"); + grammarBuilder.append("KW2000 : 'KW' '2000';\n"); + grammarBuilder.append("KW2001 : 'KW' '2001';\n"); + grammarBuilder.append("KW2002 : 'KW' '2002';\n"); + grammarBuilder.append("KW2003 : 'KW' '2003';\n"); + grammarBuilder.append("KW2004 : 'KW' '2004';\n"); + grammarBuilder.append("KW2005 : 'KW' '2005';\n"); + grammarBuilder.append("KW2006 : 'KW' '2006';\n"); + grammarBuilder.append("KW2007 : 'KW' '2007';\n"); + grammarBuilder.append("KW2008 : 'KW' '2008';\n"); + grammarBuilder.append("KW2009 : 'KW' '2009';\n"); + grammarBuilder.append("KW2010 : 'KW' '2010';\n"); + grammarBuilder.append("KW2011 : 'KW' '2011';\n"); + grammarBuilder.append("KW2012 : 'KW' '2012';\n"); + grammarBuilder.append("KW2013 : 'KW' '2013';\n"); + grammarBuilder.append("KW2014 : 'KW' '2014';\n"); + grammarBuilder.append("KW2015 : 'KW' '2015';\n"); + grammarBuilder.append("KW2016 : 'KW' '2016';\n"); + grammarBuilder.append("KW2017 : 'KW' '2017';\n"); + grammarBuilder.append("KW2018 : 'KW' '2018';\n"); + grammarBuilder.append("KW2019 : 'KW' '2019';\n"); + grammarBuilder.append("KW2020 : 'KW' '2020';\n"); + grammarBuilder.append("KW2021 : 'KW' '2021';\n"); + grammarBuilder.append("KW2022 : 'KW' '2022';\n"); + grammarBuilder.append("KW2023 : 'KW' '2023';\n"); + grammarBuilder.append("KW2024 : 'KW' '2024';\n"); + grammarBuilder.append("KW2025 : 'KW' '2025';\n"); + grammarBuilder.append("KW2026 : 'KW' '2026';\n"); + grammarBuilder.append("KW2027 : 'KW' '2027';\n"); + grammarBuilder.append("KW2028 : 'KW' '2028';\n"); + grammarBuilder.append("KW2029 : 'KW' '2029';\n"); + grammarBuilder.append("KW2030 : 'KW' '2030';\n"); + grammarBuilder.append("KW2031 : 'KW' '2031';\n"); + grammarBuilder.append("KW2032 : 'KW' '2032';\n"); + grammarBuilder.append("KW2033 : 'KW' '2033';\n"); + grammarBuilder.append("KW2034 : 'KW' '2034';\n"); + grammarBuilder.append("KW2035 : 'KW' '2035';\n"); + grammarBuilder.append("KW2036 : 'KW' '2036';\n"); + grammarBuilder.append("KW2037 : 'KW' '2037';\n"); + grammarBuilder.append("KW2038 : 'KW' '2038';\n"); + grammarBuilder.append("KW2039 : 'KW' '2039';\n"); + grammarBuilder.append("KW2040 : 'KW' '2040';\n"); + grammarBuilder.append("KW2041 : 'KW' '2041';\n"); + grammarBuilder.append("KW2042 : 'KW' '2042';\n"); + grammarBuilder.append("KW2043 : 'KW' '2043';\n"); + grammarBuilder.append("KW2044 : 'KW' '2044';\n"); + grammarBuilder.append("KW2045 : 'KW' '2045';\n"); + grammarBuilder.append("KW2046 : 'KW' '2046';\n"); + grammarBuilder.append("KW2047 : 'KW' '2047';\n"); + grammarBuilder.append("KW2048 : 'KW' '2048';\n"); + grammarBuilder.append("KW2049 : 'KW' '2049';\n"); + grammarBuilder.append("KW2050 : 'KW' '2050';\n"); + grammarBuilder.append("KW2051 : 'KW' '2051';\n"); + grammarBuilder.append("KW2052 : 'KW' '2052';\n"); + grammarBuilder.append("KW2053 : 'KW' '2053';\n"); + grammarBuilder.append("KW2054 : 'KW' '2054';\n"); + grammarBuilder.append("KW2055 : 'KW' '2055';\n"); + grammarBuilder.append("KW2056 : 'KW' '2056';\n"); + grammarBuilder.append("KW2057 : 'KW' '2057';\n"); + grammarBuilder.append("KW2058 : 'KW' '2058';\n"); + grammarBuilder.append("KW2059 : 'KW' '2059';\n"); + grammarBuilder.append("KW2060 : 'KW' '2060';\n"); + grammarBuilder.append("KW2061 : 'KW' '2061';\n"); + grammarBuilder.append("KW2062 : 'KW' '2062';\n"); + grammarBuilder.append("KW2063 : 'KW' '2063';\n"); + grammarBuilder.append("KW2064 : 'KW' '2064';\n"); + grammarBuilder.append("KW2065 : 'KW' '2065';\n"); + grammarBuilder.append("KW2066 : 'KW' '2066';\n"); + grammarBuilder.append("KW2067 : 'KW' '2067';\n"); + grammarBuilder.append("KW2068 : 'KW' '2068';\n"); + grammarBuilder.append("KW2069 : 'KW' '2069';\n"); + grammarBuilder.append("KW2070 : 'KW' '2070';\n"); + grammarBuilder.append("KW2071 : 'KW' '2071';\n"); + grammarBuilder.append("KW2072 : 'KW' '2072';\n"); + grammarBuilder.append("KW2073 : 'KW' '2073';\n"); + grammarBuilder.append("KW2074 : 'KW' '2074';\n"); + grammarBuilder.append("KW2075 : 'KW' '2075';\n"); + grammarBuilder.append("KW2076 : 'KW' '2076';\n"); + grammarBuilder.append("KW2077 : 'KW' '2077';\n"); + grammarBuilder.append("KW2078 : 'KW' '2078';\n"); + grammarBuilder.append("KW2079 : 'KW' '2079';\n"); + grammarBuilder.append("KW2080 : 'KW' '2080';\n"); + grammarBuilder.append("KW2081 : 'KW' '2081';\n"); + grammarBuilder.append("KW2082 : 'KW' '2082';\n"); + grammarBuilder.append("KW2083 : 'KW' '2083';\n"); + grammarBuilder.append("KW2084 : 'KW' '2084';\n"); + grammarBuilder.append("KW2085 : 'KW' '2085';\n"); + grammarBuilder.append("KW2086 : 'KW' '2086';\n"); + grammarBuilder.append("KW2087 : 'KW' '2087';\n"); + grammarBuilder.append("KW2088 : 'KW' '2088';\n"); + grammarBuilder.append("KW2089 : 'KW' '2089';\n"); + grammarBuilder.append("KW2090 : 'KW' '2090';\n"); + grammarBuilder.append("KW2091 : 'KW' '2091';\n"); + grammarBuilder.append("KW2092 : 'KW' '2092';\n"); + grammarBuilder.append("KW2093 : 'KW' '2093';\n"); + grammarBuilder.append("KW2094 : 'KW' '2094';\n"); + grammarBuilder.append("KW2095 : 'KW' '2095';\n"); + grammarBuilder.append("KW2096 : 'KW' '2096';\n"); + grammarBuilder.append("KW2097 : 'KW' '2097';\n"); + grammarBuilder.append("KW2098 : 'KW' '2098';\n"); + grammarBuilder.append("KW2099 : 'KW' '2099';\n"); + grammarBuilder.append("KW2100 : 'KW' '2100';\n"); + grammarBuilder.append("KW2101 : 'KW' '2101';\n"); + grammarBuilder.append("KW2102 : 'KW' '2102';\n"); + grammarBuilder.append("KW2103 : 'KW' '2103';\n"); + grammarBuilder.append("KW2104 : 'KW' '2104';\n"); + grammarBuilder.append("KW2105 : 'KW' '2105';\n"); + grammarBuilder.append("KW2106 : 'KW' '2106';\n"); + grammarBuilder.append("KW2107 : 'KW' '2107';\n"); + grammarBuilder.append("KW2108 : 'KW' '2108';\n"); + grammarBuilder.append("KW2109 : 'KW' '2109';\n"); + grammarBuilder.append("KW2110 : 'KW' '2110';\n"); + grammarBuilder.append("KW2111 : 'KW' '2111';\n"); + grammarBuilder.append("KW2112 : 'KW' '2112';\n"); + grammarBuilder.append("KW2113 : 'KW' '2113';\n"); + grammarBuilder.append("KW2114 : 'KW' '2114';\n"); + grammarBuilder.append("KW2115 : 'KW' '2115';\n"); + grammarBuilder.append("KW2116 : 'KW' '2116';\n"); + grammarBuilder.append("KW2117 : 'KW' '2117';\n"); + grammarBuilder.append("KW2118 : 'KW' '2118';\n"); + grammarBuilder.append("KW2119 : 'KW' '2119';\n"); + grammarBuilder.append("KW2120 : 'KW' '2120';\n"); + grammarBuilder.append("KW2121 : 'KW' '2121';\n"); + grammarBuilder.append("KW2122 : 'KW' '2122';\n"); + grammarBuilder.append("KW2123 : 'KW' '2123';\n"); + grammarBuilder.append("KW2124 : 'KW' '2124';\n"); + grammarBuilder.append("KW2125 : 'KW' '2125';\n"); + grammarBuilder.append("KW2126 : 'KW' '2126';\n"); + grammarBuilder.append("KW2127 : 'KW' '2127';\n"); + grammarBuilder.append("KW2128 : 'KW' '2128';\n"); + grammarBuilder.append("KW2129 : 'KW' '2129';\n"); + grammarBuilder.append("KW2130 : 'KW' '2130';\n"); + grammarBuilder.append("KW2131 : 'KW' '2131';\n"); + grammarBuilder.append("KW2132 : 'KW' '2132';\n"); + grammarBuilder.append("KW2133 : 'KW' '2133';\n"); + grammarBuilder.append("KW2134 : 'KW' '2134';\n"); + grammarBuilder.append("KW2135 : 'KW' '2135';\n"); + grammarBuilder.append("KW2136 : 'KW' '2136';\n"); + grammarBuilder.append("KW2137 : 'KW' '2137';\n"); + grammarBuilder.append("KW2138 : 'KW' '2138';\n"); + grammarBuilder.append("KW2139 : 'KW' '2139';\n"); + grammarBuilder.append("KW2140 : 'KW' '2140';\n"); + grammarBuilder.append("KW2141 : 'KW' '2141';\n"); + grammarBuilder.append("KW2142 : 'KW' '2142';\n"); + grammarBuilder.append("KW2143 : 'KW' '2143';\n"); + grammarBuilder.append("KW2144 : 'KW' '2144';\n"); + grammarBuilder.append("KW2145 : 'KW' '2145';\n"); + grammarBuilder.append("KW2146 : 'KW' '2146';\n"); + grammarBuilder.append("KW2147 : 'KW' '2147';\n"); + grammarBuilder.append("KW2148 : 'KW' '2148';\n"); + grammarBuilder.append("KW2149 : 'KW' '2149';\n"); + grammarBuilder.append("KW2150 : 'KW' '2150';\n"); + grammarBuilder.append("KW2151 : 'KW' '2151';\n"); + grammarBuilder.append("KW2152 : 'KW' '2152';\n"); + grammarBuilder.append("KW2153 : 'KW' '2153';\n"); + grammarBuilder.append("KW2154 : 'KW' '2154';\n"); + grammarBuilder.append("KW2155 : 'KW' '2155';\n"); + grammarBuilder.append("KW2156 : 'KW' '2156';\n"); + grammarBuilder.append("KW2157 : 'KW' '2157';\n"); + grammarBuilder.append("KW2158 : 'KW' '2158';\n"); + grammarBuilder.append("KW2159 : 'KW' '2159';\n"); + grammarBuilder.append("KW2160 : 'KW' '2160';\n"); + grammarBuilder.append("KW2161 : 'KW' '2161';\n"); + grammarBuilder.append("KW2162 : 'KW' '2162';\n"); + grammarBuilder.append("KW2163 : 'KW' '2163';\n"); + grammarBuilder.append("KW2164 : 'KW' '2164';\n"); + grammarBuilder.append("KW2165 : 'KW' '2165';\n"); + grammarBuilder.append("KW2166 : 'KW' '2166';\n"); + grammarBuilder.append("KW2167 : 'KW' '2167';\n"); + grammarBuilder.append("KW2168 : 'KW' '2168';\n"); + grammarBuilder.append("KW2169 : 'KW' '2169';\n"); + grammarBuilder.append("KW2170 : 'KW' '2170';\n"); + grammarBuilder.append("KW2171 : 'KW' '2171';\n"); + grammarBuilder.append("KW2172 : 'KW' '2172';\n"); + grammarBuilder.append("KW2173 : 'KW' '2173';\n"); + grammarBuilder.append("KW2174 : 'KW' '2174';\n"); + grammarBuilder.append("KW2175 : 'KW' '2175';\n"); + grammarBuilder.append("KW2176 : 'KW' '2176';\n"); + grammarBuilder.append("KW2177 : 'KW' '2177';\n"); + grammarBuilder.append("KW2178 : 'KW' '2178';\n"); + grammarBuilder.append("KW2179 : 'KW' '2179';\n"); + grammarBuilder.append("KW2180 : 'KW' '2180';\n"); + grammarBuilder.append("KW2181 : 'KW' '2181';\n"); + grammarBuilder.append("KW2182 : 'KW' '2182';\n"); + grammarBuilder.append("KW2183 : 'KW' '2183';\n"); + grammarBuilder.append("KW2184 : 'KW' '2184';\n"); + grammarBuilder.append("KW2185 : 'KW' '2185';\n"); + grammarBuilder.append("KW2186 : 'KW' '2186';\n"); + grammarBuilder.append("KW2187 : 'KW' '2187';\n"); + grammarBuilder.append("KW2188 : 'KW' '2188';\n"); + grammarBuilder.append("KW2189 : 'KW' '2189';\n"); + grammarBuilder.append("KW2190 : 'KW' '2190';\n"); + grammarBuilder.append("KW2191 : 'KW' '2191';\n"); + grammarBuilder.append("KW2192 : 'KW' '2192';\n"); + grammarBuilder.append("KW2193 : 'KW' '2193';\n"); + grammarBuilder.append("KW2194 : 'KW' '2194';\n"); + grammarBuilder.append("KW2195 : 'KW' '2195';\n"); + grammarBuilder.append("KW2196 : 'KW' '2196';\n"); + grammarBuilder.append("KW2197 : 'KW' '2197';\n"); + grammarBuilder.append("KW2198 : 'KW' '2198';\n"); + grammarBuilder.append("KW2199 : 'KW' '2199';\n"); + grammarBuilder.append("KW2200 : 'KW' '2200';\n"); + grammarBuilder.append("KW2201 : 'KW' '2201';\n"); + grammarBuilder.append("KW2202 : 'KW' '2202';\n"); + grammarBuilder.append("KW2203 : 'KW' '2203';\n"); + grammarBuilder.append("KW2204 : 'KW' '2204';\n"); + grammarBuilder.append("KW2205 : 'KW' '2205';\n"); + grammarBuilder.append("KW2206 : 'KW' '2206';\n"); + grammarBuilder.append("KW2207 : 'KW' '2207';\n"); + grammarBuilder.append("KW2208 : 'KW' '2208';\n"); + grammarBuilder.append("KW2209 : 'KW' '2209';\n"); + grammarBuilder.append("KW2210 : 'KW' '2210';\n"); + grammarBuilder.append("KW2211 : 'KW' '2211';\n"); + grammarBuilder.append("KW2212 : 'KW' '2212';\n"); + grammarBuilder.append("KW2213 : 'KW' '2213';\n"); + grammarBuilder.append("KW2214 : 'KW' '2214';\n"); + grammarBuilder.append("KW2215 : 'KW' '2215';\n"); + grammarBuilder.append("KW2216 : 'KW' '2216';\n"); + grammarBuilder.append("KW2217 : 'KW' '2217';\n"); + grammarBuilder.append("KW2218 : 'KW' '2218';\n"); + grammarBuilder.append("KW2219 : 'KW' '2219';\n"); + grammarBuilder.append("KW2220 : 'KW' '2220';\n"); + grammarBuilder.append("KW2221 : 'KW' '2221';\n"); + grammarBuilder.append("KW2222 : 'KW' '2222';\n"); + grammarBuilder.append("KW2223 : 'KW' '2223';\n"); + grammarBuilder.append("KW2224 : 'KW' '2224';\n"); + grammarBuilder.append("KW2225 : 'KW' '2225';\n"); + grammarBuilder.append("KW2226 : 'KW' '2226';\n"); + grammarBuilder.append("KW2227 : 'KW' '2227';\n"); + grammarBuilder.append("KW2228 : 'KW' '2228';\n"); + grammarBuilder.append("KW2229 : 'KW' '2229';\n"); + grammarBuilder.append("KW2230 : 'KW' '2230';\n"); + grammarBuilder.append("KW2231 : 'KW' '2231';\n"); + grammarBuilder.append("KW2232 : 'KW' '2232';\n"); + grammarBuilder.append("KW2233 : 'KW' '2233';\n"); + grammarBuilder.append("KW2234 : 'KW' '2234';\n"); + grammarBuilder.append("KW2235 : 'KW' '2235';\n"); + grammarBuilder.append("KW2236 : 'KW' '2236';\n"); + grammarBuilder.append("KW2237 : 'KW' '2237';\n"); + grammarBuilder.append("KW2238 : 'KW' '2238';\n"); + grammarBuilder.append("KW2239 : 'KW' '2239';\n"); + grammarBuilder.append("KW2240 : 'KW' '2240';\n"); + grammarBuilder.append("KW2241 : 'KW' '2241';\n"); + grammarBuilder.append("KW2242 : 'KW' '2242';\n"); + grammarBuilder.append("KW2243 : 'KW' '2243';\n"); + grammarBuilder.append("KW2244 : 'KW' '2244';\n"); + grammarBuilder.append("KW2245 : 'KW' '2245';\n"); + grammarBuilder.append("KW2246 : 'KW' '2246';\n"); + grammarBuilder.append("KW2247 : 'KW' '2247';\n"); + grammarBuilder.append("KW2248 : 'KW' '2248';\n"); + grammarBuilder.append("KW2249 : 'KW' '2249';\n"); + grammarBuilder.append("KW2250 : 'KW' '2250';\n"); + grammarBuilder.append("KW2251 : 'KW' '2251';\n"); + grammarBuilder.append("KW2252 : 'KW' '2252';\n"); + grammarBuilder.append("KW2253 : 'KW' '2253';\n"); + grammarBuilder.append("KW2254 : 'KW' '2254';\n"); + grammarBuilder.append("KW2255 : 'KW' '2255';\n"); + grammarBuilder.append("KW2256 : 'KW' '2256';\n"); + grammarBuilder.append("KW2257 : 'KW' '2257';\n"); + grammarBuilder.append("KW2258 : 'KW' '2258';\n"); + grammarBuilder.append("KW2259 : 'KW' '2259';\n"); + grammarBuilder.append("KW2260 : 'KW' '2260';\n"); + grammarBuilder.append("KW2261 : 'KW' '2261';\n"); + grammarBuilder.append("KW2262 : 'KW' '2262';\n"); + grammarBuilder.append("KW2263 : 'KW' '2263';\n"); + grammarBuilder.append("KW2264 : 'KW' '2264';\n"); + grammarBuilder.append("KW2265 : 'KW' '2265';\n"); + grammarBuilder.append("KW2266 : 'KW' '2266';\n"); + grammarBuilder.append("KW2267 : 'KW' '2267';\n"); + grammarBuilder.append("KW2268 : 'KW' '2268';\n"); + grammarBuilder.append("KW2269 : 'KW' '2269';\n"); + grammarBuilder.append("KW2270 : 'KW' '2270';\n"); + grammarBuilder.append("KW2271 : 'KW' '2271';\n"); + grammarBuilder.append("KW2272 : 'KW' '2272';\n"); + grammarBuilder.append("KW2273 : 'KW' '2273';\n"); + grammarBuilder.append("KW2274 : 'KW' '2274';\n"); + grammarBuilder.append("KW2275 : 'KW' '2275';\n"); + grammarBuilder.append("KW2276 : 'KW' '2276';\n"); + grammarBuilder.append("KW2277 : 'KW' '2277';\n"); + grammarBuilder.append("KW2278 : 'KW' '2278';\n"); + grammarBuilder.append("KW2279 : 'KW' '2279';\n"); + grammarBuilder.append("KW2280 : 'KW' '2280';\n"); + grammarBuilder.append("KW2281 : 'KW' '2281';\n"); + grammarBuilder.append("KW2282 : 'KW' '2282';\n"); + grammarBuilder.append("KW2283 : 'KW' '2283';\n"); + grammarBuilder.append("KW2284 : 'KW' '2284';\n"); + grammarBuilder.append("KW2285 : 'KW' '2285';\n"); + grammarBuilder.append("KW2286 : 'KW' '2286';\n"); + grammarBuilder.append("KW2287 : 'KW' '2287';\n"); + grammarBuilder.append("KW2288 : 'KW' '2288';\n"); + grammarBuilder.append("KW2289 : 'KW' '2289';\n"); + grammarBuilder.append("KW2290 : 'KW' '2290';\n"); + grammarBuilder.append("KW2291 : 'KW' '2291';\n"); + grammarBuilder.append("KW2292 : 'KW' '2292';\n"); + grammarBuilder.append("KW2293 : 'KW' '2293';\n"); + grammarBuilder.append("KW2294 : 'KW' '2294';\n"); + grammarBuilder.append("KW2295 : 'KW' '2295';\n"); + grammarBuilder.append("KW2296 : 'KW' '2296';\n"); + grammarBuilder.append("KW2297 : 'KW' '2297';\n"); + grammarBuilder.append("KW2298 : 'KW' '2298';\n"); + grammarBuilder.append("KW2299 : 'KW' '2299';\n"); + grammarBuilder.append("KW2300 : 'KW' '2300';\n"); + grammarBuilder.append("KW2301 : 'KW' '2301';\n"); + grammarBuilder.append("KW2302 : 'KW' '2302';\n"); + grammarBuilder.append("KW2303 : 'KW' '2303';\n"); + grammarBuilder.append("KW2304 : 'KW' '2304';\n"); + grammarBuilder.append("KW2305 : 'KW' '2305';\n"); + grammarBuilder.append("KW2306 : 'KW' '2306';\n"); + grammarBuilder.append("KW2307 : 'KW' '2307';\n"); + grammarBuilder.append("KW2308 : 'KW' '2308';\n"); + grammarBuilder.append("KW2309 : 'KW' '2309';\n"); + grammarBuilder.append("KW2310 : 'KW' '2310';\n"); + grammarBuilder.append("KW2311 : 'KW' '2311';\n"); + grammarBuilder.append("KW2312 : 'KW' '2312';\n"); + grammarBuilder.append("KW2313 : 'KW' '2313';\n"); + grammarBuilder.append("KW2314 : 'KW' '2314';\n"); + grammarBuilder.append("KW2315 : 'KW' '2315';\n"); + grammarBuilder.append("KW2316 : 'KW' '2316';\n"); + grammarBuilder.append("KW2317 : 'KW' '2317';\n"); + grammarBuilder.append("KW2318 : 'KW' '2318';\n"); + grammarBuilder.append("KW2319 : 'KW' '2319';\n"); + grammarBuilder.append("KW2320 : 'KW' '2320';\n"); + grammarBuilder.append("KW2321 : 'KW' '2321';\n"); + grammarBuilder.append("KW2322 : 'KW' '2322';\n"); + grammarBuilder.append("KW2323 : 'KW' '2323';\n"); + grammarBuilder.append("KW2324 : 'KW' '2324';\n"); + grammarBuilder.append("KW2325 : 'KW' '2325';\n"); + grammarBuilder.append("KW2326 : 'KW' '2326';\n"); + grammarBuilder.append("KW2327 : 'KW' '2327';\n"); + grammarBuilder.append("KW2328 : 'KW' '2328';\n"); + grammarBuilder.append("KW2329 : 'KW' '2329';\n"); + grammarBuilder.append("KW2330 : 'KW' '2330';\n"); + grammarBuilder.append("KW2331 : 'KW' '2331';\n"); + grammarBuilder.append("KW2332 : 'KW' '2332';\n"); + grammarBuilder.append("KW2333 : 'KW' '2333';\n"); + grammarBuilder.append("KW2334 : 'KW' '2334';\n"); + grammarBuilder.append("KW2335 : 'KW' '2335';\n"); + grammarBuilder.append("KW2336 : 'KW' '2336';\n"); + grammarBuilder.append("KW2337 : 'KW' '2337';\n"); + grammarBuilder.append("KW2338 : 'KW' '2338';\n"); + grammarBuilder.append("KW2339 : 'KW' '2339';\n"); + grammarBuilder.append("KW2340 : 'KW' '2340';\n"); + grammarBuilder.append("KW2341 : 'KW' '2341';\n"); + grammarBuilder.append("KW2342 : 'KW' '2342';\n"); + grammarBuilder.append("KW2343 : 'KW' '2343';\n"); + grammarBuilder.append("KW2344 : 'KW' '2344';\n"); + grammarBuilder.append("KW2345 : 'KW' '2345';\n"); + grammarBuilder.append("KW2346 : 'KW' '2346';\n"); + grammarBuilder.append("KW2347 : 'KW' '2347';\n"); + grammarBuilder.append("KW2348 : 'KW' '2348';\n"); + grammarBuilder.append("KW2349 : 'KW' '2349';\n"); + grammarBuilder.append("KW2350 : 'KW' '2350';\n"); + grammarBuilder.append("KW2351 : 'KW' '2351';\n"); + grammarBuilder.append("KW2352 : 'KW' '2352';\n"); + grammarBuilder.append("KW2353 : 'KW' '2353';\n"); + grammarBuilder.append("KW2354 : 'KW' '2354';\n"); + grammarBuilder.append("KW2355 : 'KW' '2355';\n"); + grammarBuilder.append("KW2356 : 'KW' '2356';\n"); + grammarBuilder.append("KW2357 : 'KW' '2357';\n"); + grammarBuilder.append("KW2358 : 'KW' '2358';\n"); + grammarBuilder.append("KW2359 : 'KW' '2359';\n"); + grammarBuilder.append("KW2360 : 'KW' '2360';\n"); + grammarBuilder.append("KW2361 : 'KW' '2361';\n"); + grammarBuilder.append("KW2362 : 'KW' '2362';\n"); + grammarBuilder.append("KW2363 : 'KW' '2363';\n"); + grammarBuilder.append("KW2364 : 'KW' '2364';\n"); + grammarBuilder.append("KW2365 : 'KW' '2365';\n"); + grammarBuilder.append("KW2366 : 'KW' '2366';\n"); + grammarBuilder.append("KW2367 : 'KW' '2367';\n"); + grammarBuilder.append("KW2368 : 'KW' '2368';\n"); + grammarBuilder.append("KW2369 : 'KW' '2369';\n"); + grammarBuilder.append("KW2370 : 'KW' '2370';\n"); + grammarBuilder.append("KW2371 : 'KW' '2371';\n"); + grammarBuilder.append("KW2372 : 'KW' '2372';\n"); + grammarBuilder.append("KW2373 : 'KW' '2373';\n"); + grammarBuilder.append("KW2374 : 'KW' '2374';\n"); + grammarBuilder.append("KW2375 : 'KW' '2375';\n"); + grammarBuilder.append("KW2376 : 'KW' '2376';\n"); + grammarBuilder.append("KW2377 : 'KW' '2377';\n"); + grammarBuilder.append("KW2378 : 'KW' '2378';\n"); + grammarBuilder.append("KW2379 : 'KW' '2379';\n"); + grammarBuilder.append("KW2380 : 'KW' '2380';\n"); + grammarBuilder.append("KW2381 : 'KW' '2381';\n"); + grammarBuilder.append("KW2382 : 'KW' '2382';\n"); + grammarBuilder.append("KW2383 : 'KW' '2383';\n"); + grammarBuilder.append("KW2384 : 'KW' '2384';\n"); + grammarBuilder.append("KW2385 : 'KW' '2385';\n"); + grammarBuilder.append("KW2386 : 'KW' '2386';\n"); + grammarBuilder.append("KW2387 : 'KW' '2387';\n"); + grammarBuilder.append("KW2388 : 'KW' '2388';\n"); + grammarBuilder.append("KW2389 : 'KW' '2389';\n"); + grammarBuilder.append("KW2390 : 'KW' '2390';\n"); + grammarBuilder.append("KW2391 : 'KW' '2391';\n"); + grammarBuilder.append("KW2392 : 'KW' '2392';\n"); + grammarBuilder.append("KW2393 : 'KW' '2393';\n"); + grammarBuilder.append("KW2394 : 'KW' '2394';\n"); + grammarBuilder.append("KW2395 : 'KW' '2395';\n"); + grammarBuilder.append("KW2396 : 'KW' '2396';\n"); + grammarBuilder.append("KW2397 : 'KW' '2397';\n"); + grammarBuilder.append("KW2398 : 'KW' '2398';\n"); + grammarBuilder.append("KW2399 : 'KW' '2399';\n"); + grammarBuilder.append("KW2400 : 'KW' '2400';\n"); + grammarBuilder.append("KW2401 : 'KW' '2401';\n"); + grammarBuilder.append("KW2402 : 'KW' '2402';\n"); + grammarBuilder.append("KW2403 : 'KW' '2403';\n"); + grammarBuilder.append("KW2404 : 'KW' '2404';\n"); + grammarBuilder.append("KW2405 : 'KW' '2405';\n"); + grammarBuilder.append("KW2406 : 'KW' '2406';\n"); + grammarBuilder.append("KW2407 : 'KW' '2407';\n"); + grammarBuilder.append("KW2408 : 'KW' '2408';\n"); + grammarBuilder.append("KW2409 : 'KW' '2409';\n"); + grammarBuilder.append("KW2410 : 'KW' '2410';\n"); + grammarBuilder.append("KW2411 : 'KW' '2411';\n"); + grammarBuilder.append("KW2412 : 'KW' '2412';\n"); + grammarBuilder.append("KW2413 : 'KW' '2413';\n"); + grammarBuilder.append("KW2414 : 'KW' '2414';\n"); + grammarBuilder.append("KW2415 : 'KW' '2415';\n"); + grammarBuilder.append("KW2416 : 'KW' '2416';\n"); + grammarBuilder.append("KW2417 : 'KW' '2417';\n"); + grammarBuilder.append("KW2418 : 'KW' '2418';\n"); + grammarBuilder.append("KW2419 : 'KW' '2419';\n"); + grammarBuilder.append("KW2420 : 'KW' '2420';\n"); + grammarBuilder.append("KW2421 : 'KW' '2421';\n"); + grammarBuilder.append("KW2422 : 'KW' '2422';\n"); + grammarBuilder.append("KW2423 : 'KW' '2423';\n"); + grammarBuilder.append("KW2424 : 'KW' '2424';\n"); + grammarBuilder.append("KW2425 : 'KW' '2425';\n"); + grammarBuilder.append("KW2426 : 'KW' '2426';\n"); + grammarBuilder.append("KW2427 : 'KW' '2427';\n"); + grammarBuilder.append("KW2428 : 'KW' '2428';\n"); + grammarBuilder.append("KW2429 : 'KW' '2429';\n"); + grammarBuilder.append("KW2430 : 'KW' '2430';\n"); + grammarBuilder.append("KW2431 : 'KW' '2431';\n"); + grammarBuilder.append("KW2432 : 'KW' '2432';\n"); + grammarBuilder.append("KW2433 : 'KW' '2433';\n"); + grammarBuilder.append("KW2434 : 'KW' '2434';\n"); + grammarBuilder.append("KW2435 : 'KW' '2435';\n"); + grammarBuilder.append("KW2436 : 'KW' '2436';\n"); + grammarBuilder.append("KW2437 : 'KW' '2437';\n"); + grammarBuilder.append("KW2438 : 'KW' '2438';\n"); + grammarBuilder.append("KW2439 : 'KW' '2439';\n"); + grammarBuilder.append("KW2440 : 'KW' '2440';\n"); + grammarBuilder.append("KW2441 : 'KW' '2441';\n"); + grammarBuilder.append("KW2442 : 'KW' '2442';\n"); + grammarBuilder.append("KW2443 : 'KW' '2443';\n"); + grammarBuilder.append("KW2444 : 'KW' '2444';\n"); + grammarBuilder.append("KW2445 : 'KW' '2445';\n"); + grammarBuilder.append("KW2446 : 'KW' '2446';\n"); + grammarBuilder.append("KW2447 : 'KW' '2447';\n"); + grammarBuilder.append("KW2448 : 'KW' '2448';\n"); + grammarBuilder.append("KW2449 : 'KW' '2449';\n"); + grammarBuilder.append("KW2450 : 'KW' '2450';\n"); + grammarBuilder.append("KW2451 : 'KW' '2451';\n"); + grammarBuilder.append("KW2452 : 'KW' '2452';\n"); + grammarBuilder.append("KW2453 : 'KW' '2453';\n"); + grammarBuilder.append("KW2454 : 'KW' '2454';\n"); + grammarBuilder.append("KW2455 : 'KW' '2455';\n"); + grammarBuilder.append("KW2456 : 'KW' '2456';\n"); + grammarBuilder.append("KW2457 : 'KW' '2457';\n"); + grammarBuilder.append("KW2458 : 'KW' '2458';\n"); + grammarBuilder.append("KW2459 : 'KW' '2459';\n"); + grammarBuilder.append("KW2460 : 'KW' '2460';\n"); + grammarBuilder.append("KW2461 : 'KW' '2461';\n"); + grammarBuilder.append("KW2462 : 'KW' '2462';\n"); + grammarBuilder.append("KW2463 : 'KW' '2463';\n"); + grammarBuilder.append("KW2464 : 'KW' '2464';\n"); + grammarBuilder.append("KW2465 : 'KW' '2465';\n"); + grammarBuilder.append("KW2466 : 'KW' '2466';\n"); + grammarBuilder.append("KW2467 : 'KW' '2467';\n"); + grammarBuilder.append("KW2468 : 'KW' '2468';\n"); + grammarBuilder.append("KW2469 : 'KW' '2469';\n"); + grammarBuilder.append("KW2470 : 'KW' '2470';\n"); + grammarBuilder.append("KW2471 : 'KW' '2471';\n"); + grammarBuilder.append("KW2472 : 'KW' '2472';\n"); + grammarBuilder.append("KW2473 : 'KW' '2473';\n"); + grammarBuilder.append("KW2474 : 'KW' '2474';\n"); + grammarBuilder.append("KW2475 : 'KW' '2475';\n"); + grammarBuilder.append("KW2476 : 'KW' '2476';\n"); + grammarBuilder.append("KW2477 : 'KW' '2477';\n"); + grammarBuilder.append("KW2478 : 'KW' '2478';\n"); + grammarBuilder.append("KW2479 : 'KW' '2479';\n"); + grammarBuilder.append("KW2480 : 'KW' '2480';\n"); + grammarBuilder.append("KW2481 : 'KW' '2481';\n"); + grammarBuilder.append("KW2482 : 'KW' '2482';\n"); + grammarBuilder.append("KW2483 : 'KW' '2483';\n"); + grammarBuilder.append("KW2484 : 'KW' '2484';\n"); + grammarBuilder.append("KW2485 : 'KW' '2485';\n"); + grammarBuilder.append("KW2486 : 'KW' '2486';\n"); + grammarBuilder.append("KW2487 : 'KW' '2487';\n"); + grammarBuilder.append("KW2488 : 'KW' '2488';\n"); + grammarBuilder.append("KW2489 : 'KW' '2489';\n"); + grammarBuilder.append("KW2490 : 'KW' '2490';\n"); + grammarBuilder.append("KW2491 : 'KW' '2491';\n"); + grammarBuilder.append("KW2492 : 'KW' '2492';\n"); + grammarBuilder.append("KW2493 : 'KW' '2493';\n"); + grammarBuilder.append("KW2494 : 'KW' '2494';\n"); + grammarBuilder.append("KW2495 : 'KW' '2495';\n"); + grammarBuilder.append("KW2496 : 'KW' '2496';\n"); + grammarBuilder.append("KW2497 : 'KW' '2497';\n"); + grammarBuilder.append("KW2498 : 'KW' '2498';\n"); + grammarBuilder.append("KW2499 : 'KW' '2499';\n"); + grammarBuilder.append("KW2500 : 'KW' '2500';\n"); + grammarBuilder.append("KW2501 : 'KW' '2501';\n"); + grammarBuilder.append("KW2502 : 'KW' '2502';\n"); + grammarBuilder.append("KW2503 : 'KW' '2503';\n"); + grammarBuilder.append("KW2504 : 'KW' '2504';\n"); + grammarBuilder.append("KW2505 : 'KW' '2505';\n"); + grammarBuilder.append("KW2506 : 'KW' '2506';\n"); + grammarBuilder.append("KW2507 : 'KW' '2507';\n"); + grammarBuilder.append("KW2508 : 'KW' '2508';\n"); + grammarBuilder.append("KW2509 : 'KW' '2509';\n"); + grammarBuilder.append("KW2510 : 'KW' '2510';\n"); + grammarBuilder.append("KW2511 : 'KW' '2511';\n"); + grammarBuilder.append("KW2512 : 'KW' '2512';\n"); + grammarBuilder.append("KW2513 : 'KW' '2513';\n"); + grammarBuilder.append("KW2514 : 'KW' '2514';\n"); + grammarBuilder.append("KW2515 : 'KW' '2515';\n"); + grammarBuilder.append("KW2516 : 'KW' '2516';\n"); + grammarBuilder.append("KW2517 : 'KW' '2517';\n"); + grammarBuilder.append("KW2518 : 'KW' '2518';\n"); + grammarBuilder.append("KW2519 : 'KW' '2519';\n"); + grammarBuilder.append("KW2520 : 'KW' '2520';\n"); + grammarBuilder.append("KW2521 : 'KW' '2521';\n"); + grammarBuilder.append("KW2522 : 'KW' '2522';\n"); + grammarBuilder.append("KW2523 : 'KW' '2523';\n"); + grammarBuilder.append("KW2524 : 'KW' '2524';\n"); + grammarBuilder.append("KW2525 : 'KW' '2525';\n"); + grammarBuilder.append("KW2526 : 'KW' '2526';\n"); + grammarBuilder.append("KW2527 : 'KW' '2527';\n"); + grammarBuilder.append("KW2528 : 'KW' '2528';\n"); + grammarBuilder.append("KW2529 : 'KW' '2529';\n"); + grammarBuilder.append("KW2530 : 'KW' '2530';\n"); + grammarBuilder.append("KW2531 : 'KW' '2531';\n"); + grammarBuilder.append("KW2532 : 'KW' '2532';\n"); + grammarBuilder.append("KW2533 : 'KW' '2533';\n"); + grammarBuilder.append("KW2534 : 'KW' '2534';\n"); + grammarBuilder.append("KW2535 : 'KW' '2535';\n"); + grammarBuilder.append("KW2536 : 'KW' '2536';\n"); + grammarBuilder.append("KW2537 : 'KW' '2537';\n"); + grammarBuilder.append("KW2538 : 'KW' '2538';\n"); + grammarBuilder.append("KW2539 : 'KW' '2539';\n"); + grammarBuilder.append("KW2540 : 'KW' '2540';\n"); + grammarBuilder.append("KW2541 : 'KW' '2541';\n"); + grammarBuilder.append("KW2542 : 'KW' '2542';\n"); + grammarBuilder.append("KW2543 : 'KW' '2543';\n"); + grammarBuilder.append("KW2544 : 'KW' '2544';\n"); + grammarBuilder.append("KW2545 : 'KW' '2545';\n"); + grammarBuilder.append("KW2546 : 'KW' '2546';\n"); + grammarBuilder.append("KW2547 : 'KW' '2547';\n"); + grammarBuilder.append("KW2548 : 'KW' '2548';\n"); + grammarBuilder.append("KW2549 : 'KW' '2549';\n"); + grammarBuilder.append("KW2550 : 'KW' '2550';\n"); + grammarBuilder.append("KW2551 : 'KW' '2551';\n"); + grammarBuilder.append("KW2552 : 'KW' '2552';\n"); + grammarBuilder.append("KW2553 : 'KW' '2553';\n"); + grammarBuilder.append("KW2554 : 'KW' '2554';\n"); + grammarBuilder.append("KW2555 : 'KW' '2555';\n"); + grammarBuilder.append("KW2556 : 'KW' '2556';\n"); + grammarBuilder.append("KW2557 : 'KW' '2557';\n"); + grammarBuilder.append("KW2558 : 'KW' '2558';\n"); + grammarBuilder.append("KW2559 : 'KW' '2559';\n"); + grammarBuilder.append("KW2560 : 'KW' '2560';\n"); + grammarBuilder.append("KW2561 : 'KW' '2561';\n"); + grammarBuilder.append("KW2562 : 'KW' '2562';\n"); + grammarBuilder.append("KW2563 : 'KW' '2563';\n"); + grammarBuilder.append("KW2564 : 'KW' '2564';\n"); + grammarBuilder.append("KW2565 : 'KW' '2565';\n"); + grammarBuilder.append("KW2566 : 'KW' '2566';\n"); + grammarBuilder.append("KW2567 : 'KW' '2567';\n"); + grammarBuilder.append("KW2568 : 'KW' '2568';\n"); + grammarBuilder.append("KW2569 : 'KW' '2569';\n"); + grammarBuilder.append("KW2570 : 'KW' '2570';\n"); + grammarBuilder.append("KW2571 : 'KW' '2571';\n"); + grammarBuilder.append("KW2572 : 'KW' '2572';\n"); + grammarBuilder.append("KW2573 : 'KW' '2573';\n"); + grammarBuilder.append("KW2574 : 'KW' '2574';\n"); + grammarBuilder.append("KW2575 : 'KW' '2575';\n"); + grammarBuilder.append("KW2576 : 'KW' '2576';\n"); + grammarBuilder.append("KW2577 : 'KW' '2577';\n"); + grammarBuilder.append("KW2578 : 'KW' '2578';\n"); + grammarBuilder.append("KW2579 : 'KW' '2579';\n"); + grammarBuilder.append("KW2580 : 'KW' '2580';\n"); + grammarBuilder.append("KW2581 : 'KW' '2581';\n"); + grammarBuilder.append("KW2582 : 'KW' '2582';\n"); + grammarBuilder.append("KW2583 : 'KW' '2583';\n"); + grammarBuilder.append("KW2584 : 'KW' '2584';\n"); + grammarBuilder.append("KW2585 : 'KW' '2585';\n"); + grammarBuilder.append("KW2586 : 'KW' '2586';\n"); + grammarBuilder.append("KW2587 : 'KW' '2587';\n"); + grammarBuilder.append("KW2588 : 'KW' '2588';\n"); + grammarBuilder.append("KW2589 : 'KW' '2589';\n"); + grammarBuilder.append("KW2590 : 'KW' '2590';\n"); + grammarBuilder.append("KW2591 : 'KW' '2591';\n"); + grammarBuilder.append("KW2592 : 'KW' '2592';\n"); + grammarBuilder.append("KW2593 : 'KW' '2593';\n"); + grammarBuilder.append("KW2594 : 'KW' '2594';\n"); + grammarBuilder.append("KW2595 : 'KW' '2595';\n"); + grammarBuilder.append("KW2596 : 'KW' '2596';\n"); + grammarBuilder.append("KW2597 : 'KW' '2597';\n"); + grammarBuilder.append("KW2598 : 'KW' '2598';\n"); + grammarBuilder.append("KW2599 : 'KW' '2599';\n"); + grammarBuilder.append("KW2600 : 'KW' '2600';\n"); + grammarBuilder.append("KW2601 : 'KW' '2601';\n"); + grammarBuilder.append("KW2602 : 'KW' '2602';\n"); + grammarBuilder.append("KW2603 : 'KW' '2603';\n"); + grammarBuilder.append("KW2604 : 'KW' '2604';\n"); + grammarBuilder.append("KW2605 : 'KW' '2605';\n"); + grammarBuilder.append("KW2606 : 'KW' '2606';\n"); + grammarBuilder.append("KW2607 : 'KW' '2607';\n"); + grammarBuilder.append("KW2608 : 'KW' '2608';\n"); + grammarBuilder.append("KW2609 : 'KW' '2609';\n"); + grammarBuilder.append("KW2610 : 'KW' '2610';\n"); + grammarBuilder.append("KW2611 : 'KW' '2611';\n"); + grammarBuilder.append("KW2612 : 'KW' '2612';\n"); + grammarBuilder.append("KW2613 : 'KW' '2613';\n"); + grammarBuilder.append("KW2614 : 'KW' '2614';\n"); + grammarBuilder.append("KW2615 : 'KW' '2615';\n"); + grammarBuilder.append("KW2616 : 'KW' '2616';\n"); + grammarBuilder.append("KW2617 : 'KW' '2617';\n"); + grammarBuilder.append("KW2618 : 'KW' '2618';\n"); + grammarBuilder.append("KW2619 : 'KW' '2619';\n"); + grammarBuilder.append("KW2620 : 'KW' '2620';\n"); + grammarBuilder.append("KW2621 : 'KW' '2621';\n"); + grammarBuilder.append("KW2622 : 'KW' '2622';\n"); + grammarBuilder.append("KW2623 : 'KW' '2623';\n"); + grammarBuilder.append("KW2624 : 'KW' '2624';\n"); + grammarBuilder.append("KW2625 : 'KW' '2625';\n"); + grammarBuilder.append("KW2626 : 'KW' '2626';\n"); + grammarBuilder.append("KW2627 : 'KW' '2627';\n"); + grammarBuilder.append("KW2628 : 'KW' '2628';\n"); + grammarBuilder.append("KW2629 : 'KW' '2629';\n"); + grammarBuilder.append("KW2630 : 'KW' '2630';\n"); + grammarBuilder.append("KW2631 : 'KW' '2631';\n"); + grammarBuilder.append("KW2632 : 'KW' '2632';\n"); + grammarBuilder.append("KW2633 : 'KW' '2633';\n"); + grammarBuilder.append("KW2634 : 'KW' '2634';\n"); + grammarBuilder.append("KW2635 : 'KW' '2635';\n"); + grammarBuilder.append("KW2636 : 'KW' '2636';\n"); + grammarBuilder.append("KW2637 : 'KW' '2637';\n"); + grammarBuilder.append("KW2638 : 'KW' '2638';\n"); + grammarBuilder.append("KW2639 : 'KW' '2639';\n"); + grammarBuilder.append("KW2640 : 'KW' '2640';\n"); + grammarBuilder.append("KW2641 : 'KW' '2641';\n"); + grammarBuilder.append("KW2642 : 'KW' '2642';\n"); + grammarBuilder.append("KW2643 : 'KW' '2643';\n"); + grammarBuilder.append("KW2644 : 'KW' '2644';\n"); + grammarBuilder.append("KW2645 : 'KW' '2645';\n"); + grammarBuilder.append("KW2646 : 'KW' '2646';\n"); + grammarBuilder.append("KW2647 : 'KW' '2647';\n"); + grammarBuilder.append("KW2648 : 'KW' '2648';\n"); + grammarBuilder.append("KW2649 : 'KW' '2649';\n"); + grammarBuilder.append("KW2650 : 'KW' '2650';\n"); + grammarBuilder.append("KW2651 : 'KW' '2651';\n"); + grammarBuilder.append("KW2652 : 'KW' '2652';\n"); + grammarBuilder.append("KW2653 : 'KW' '2653';\n"); + grammarBuilder.append("KW2654 : 'KW' '2654';\n"); + grammarBuilder.append("KW2655 : 'KW' '2655';\n"); + grammarBuilder.append("KW2656 : 'KW' '2656';\n"); + grammarBuilder.append("KW2657 : 'KW' '2657';\n"); + grammarBuilder.append("KW2658 : 'KW' '2658';\n"); + grammarBuilder.append("KW2659 : 'KW' '2659';\n"); + grammarBuilder.append("KW2660 : 'KW' '2660';\n"); + grammarBuilder.append("KW2661 : 'KW' '2661';\n"); + grammarBuilder.append("KW2662 : 'KW' '2662';\n"); + grammarBuilder.append("KW2663 : 'KW' '2663';\n"); + grammarBuilder.append("KW2664 : 'KW' '2664';\n"); + grammarBuilder.append("KW2665 : 'KW' '2665';\n"); + grammarBuilder.append("KW2666 : 'KW' '2666';\n"); + grammarBuilder.append("KW2667 : 'KW' '2667';\n"); + grammarBuilder.append("KW2668 : 'KW' '2668';\n"); + grammarBuilder.append("KW2669 : 'KW' '2669';\n"); + grammarBuilder.append("KW2670 : 'KW' '2670';\n"); + grammarBuilder.append("KW2671 : 'KW' '2671';\n"); + grammarBuilder.append("KW2672 : 'KW' '2672';\n"); + grammarBuilder.append("KW2673 : 'KW' '2673';\n"); + grammarBuilder.append("KW2674 : 'KW' '2674';\n"); + grammarBuilder.append("KW2675 : 'KW' '2675';\n"); + grammarBuilder.append("KW2676 : 'KW' '2676';\n"); + grammarBuilder.append("KW2677 : 'KW' '2677';\n"); + grammarBuilder.append("KW2678 : 'KW' '2678';\n"); + grammarBuilder.append("KW2679 : 'KW' '2679';\n"); + grammarBuilder.append("KW2680 : 'KW' '2680';\n"); + grammarBuilder.append("KW2681 : 'KW' '2681';\n"); + grammarBuilder.append("KW2682 : 'KW' '2682';\n"); + grammarBuilder.append("KW2683 : 'KW' '2683';\n"); + grammarBuilder.append("KW2684 : 'KW' '2684';\n"); + grammarBuilder.append("KW2685 : 'KW' '2685';\n"); + grammarBuilder.append("KW2686 : 'KW' '2686';\n"); + grammarBuilder.append("KW2687 : 'KW' '2687';\n"); + grammarBuilder.append("KW2688 : 'KW' '2688';\n"); + grammarBuilder.append("KW2689 : 'KW' '2689';\n"); + grammarBuilder.append("KW2690 : 'KW' '2690';\n"); + grammarBuilder.append("KW2691 : 'KW' '2691';\n"); + grammarBuilder.append("KW2692 : 'KW' '2692';\n"); + grammarBuilder.append("KW2693 : 'KW' '2693';\n"); + grammarBuilder.append("KW2694 : 'KW' '2694';\n"); + grammarBuilder.append("KW2695 : 'KW' '2695';\n"); + grammarBuilder.append("KW2696 : 'KW' '2696';\n"); + grammarBuilder.append("KW2697 : 'KW' '2697';\n"); + grammarBuilder.append("KW2698 : 'KW' '2698';\n"); + grammarBuilder.append("KW2699 : 'KW' '2699';\n"); + grammarBuilder.append("KW2700 : 'KW' '2700';\n"); + grammarBuilder.append("KW2701 : 'KW' '2701';\n"); + grammarBuilder.append("KW2702 : 'KW' '2702';\n"); + grammarBuilder.append("KW2703 : 'KW' '2703';\n"); + grammarBuilder.append("KW2704 : 'KW' '2704';\n"); + grammarBuilder.append("KW2705 : 'KW' '2705';\n"); + grammarBuilder.append("KW2706 : 'KW' '2706';\n"); + grammarBuilder.append("KW2707 : 'KW' '2707';\n"); + grammarBuilder.append("KW2708 : 'KW' '2708';\n"); + grammarBuilder.append("KW2709 : 'KW' '2709';\n"); + grammarBuilder.append("KW2710 : 'KW' '2710';\n"); + grammarBuilder.append("KW2711 : 'KW' '2711';\n"); + grammarBuilder.append("KW2712 : 'KW' '2712';\n"); + grammarBuilder.append("KW2713 : 'KW' '2713';\n"); + grammarBuilder.append("KW2714 : 'KW' '2714';\n"); + grammarBuilder.append("KW2715 : 'KW' '2715';\n"); + grammarBuilder.append("KW2716 : 'KW' '2716';\n"); + grammarBuilder.append("KW2717 : 'KW' '2717';\n"); + grammarBuilder.append("KW2718 : 'KW' '2718';\n"); + grammarBuilder.append("KW2719 : 'KW' '2719';\n"); + grammarBuilder.append("KW2720 : 'KW' '2720';\n"); + grammarBuilder.append("KW2721 : 'KW' '2721';\n"); + grammarBuilder.append("KW2722 : 'KW' '2722';\n"); + grammarBuilder.append("KW2723 : 'KW' '2723';\n"); + grammarBuilder.append("KW2724 : 'KW' '2724';\n"); + grammarBuilder.append("KW2725 : 'KW' '2725';\n"); + grammarBuilder.append("KW2726 : 'KW' '2726';\n"); + grammarBuilder.append("KW2727 : 'KW' '2727';\n"); + grammarBuilder.append("KW2728 : 'KW' '2728';\n"); + grammarBuilder.append("KW2729 : 'KW' '2729';\n"); + grammarBuilder.append("KW2730 : 'KW' '2730';\n"); + grammarBuilder.append("KW2731 : 'KW' '2731';\n"); + grammarBuilder.append("KW2732 : 'KW' '2732';\n"); + grammarBuilder.append("KW2733 : 'KW' '2733';\n"); + grammarBuilder.append("KW2734 : 'KW' '2734';\n"); + grammarBuilder.append("KW2735 : 'KW' '2735';\n"); + grammarBuilder.append("KW2736 : 'KW' '2736';\n"); + grammarBuilder.append("KW2737 : 'KW' '2737';\n"); + grammarBuilder.append("KW2738 : 'KW' '2738';\n"); + grammarBuilder.append("KW2739 : 'KW' '2739';\n"); + grammarBuilder.append("KW2740 : 'KW' '2740';\n"); + grammarBuilder.append("KW2741 : 'KW' '2741';\n"); + grammarBuilder.append("KW2742 : 'KW' '2742';\n"); + grammarBuilder.append("KW2743 : 'KW' '2743';\n"); + grammarBuilder.append("KW2744 : 'KW' '2744';\n"); + grammarBuilder.append("KW2745 : 'KW' '2745';\n"); + grammarBuilder.append("KW2746 : 'KW' '2746';\n"); + grammarBuilder.append("KW2747 : 'KW' '2747';\n"); + grammarBuilder.append("KW2748 : 'KW' '2748';\n"); + grammarBuilder.append("KW2749 : 'KW' '2749';\n"); + grammarBuilder.append("KW2750 : 'KW' '2750';\n"); + grammarBuilder.append("KW2751 : 'KW' '2751';\n"); + grammarBuilder.append("KW2752 : 'KW' '2752';\n"); + grammarBuilder.append("KW2753 : 'KW' '2753';\n"); + grammarBuilder.append("KW2754 : 'KW' '2754';\n"); + grammarBuilder.append("KW2755 : 'KW' '2755';\n"); + grammarBuilder.append("KW2756 : 'KW' '2756';\n"); + grammarBuilder.append("KW2757 : 'KW' '2757';\n"); + grammarBuilder.append("KW2758 : 'KW' '2758';\n"); + grammarBuilder.append("KW2759 : 'KW' '2759';\n"); + grammarBuilder.append("KW2760 : 'KW' '2760';\n"); + grammarBuilder.append("KW2761 : 'KW' '2761';\n"); + grammarBuilder.append("KW2762 : 'KW' '2762';\n"); + grammarBuilder.append("KW2763 : 'KW' '2763';\n"); + grammarBuilder.append("KW2764 : 'KW' '2764';\n"); + grammarBuilder.append("KW2765 : 'KW' '2765';\n"); + grammarBuilder.append("KW2766 : 'KW' '2766';\n"); + grammarBuilder.append("KW2767 : 'KW' '2767';\n"); + grammarBuilder.append("KW2768 : 'KW' '2768';\n"); + grammarBuilder.append("KW2769 : 'KW' '2769';\n"); + grammarBuilder.append("KW2770 : 'KW' '2770';\n"); + grammarBuilder.append("KW2771 : 'KW' '2771';\n"); + grammarBuilder.append("KW2772 : 'KW' '2772';\n"); + grammarBuilder.append("KW2773 : 'KW' '2773';\n"); + grammarBuilder.append("KW2774 : 'KW' '2774';\n"); + grammarBuilder.append("KW2775 : 'KW' '2775';\n"); + grammarBuilder.append("KW2776 : 'KW' '2776';\n"); + grammarBuilder.append("KW2777 : 'KW' '2777';\n"); + grammarBuilder.append("KW2778 : 'KW' '2778';\n"); + grammarBuilder.append("KW2779 : 'KW' '2779';\n"); + grammarBuilder.append("KW2780 : 'KW' '2780';\n"); + grammarBuilder.append("KW2781 : 'KW' '2781';\n"); + grammarBuilder.append("KW2782 : 'KW' '2782';\n"); + grammarBuilder.append("KW2783 : 'KW' '2783';\n"); + grammarBuilder.append("KW2784 : 'KW' '2784';\n"); + grammarBuilder.append("KW2785 : 'KW' '2785';\n"); + grammarBuilder.append("KW2786 : 'KW' '2786';\n"); + grammarBuilder.append("KW2787 : 'KW' '2787';\n"); + grammarBuilder.append("KW2788 : 'KW' '2788';\n"); + grammarBuilder.append("KW2789 : 'KW' '2789';\n"); + grammarBuilder.append("KW2790 : 'KW' '2790';\n"); + grammarBuilder.append("KW2791 : 'KW' '2791';\n"); + grammarBuilder.append("KW2792 : 'KW' '2792';\n"); + grammarBuilder.append("KW2793 : 'KW' '2793';\n"); + grammarBuilder.append("KW2794 : 'KW' '2794';\n"); + grammarBuilder.append("KW2795 : 'KW' '2795';\n"); + grammarBuilder.append("KW2796 : 'KW' '2796';\n"); + grammarBuilder.append("KW2797 : 'KW' '2797';\n"); + grammarBuilder.append("KW2798 : 'KW' '2798';\n"); + grammarBuilder.append("KW2799 : 'KW' '2799';\n"); + grammarBuilder.append("KW2800 : 'KW' '2800';\n"); + grammarBuilder.append("KW2801 : 'KW' '2801';\n"); + grammarBuilder.append("KW2802 : 'KW' '2802';\n"); + grammarBuilder.append("KW2803 : 'KW' '2803';\n"); + grammarBuilder.append("KW2804 : 'KW' '2804';\n"); + grammarBuilder.append("KW2805 : 'KW' '2805';\n"); + grammarBuilder.append("KW2806 : 'KW' '2806';\n"); + grammarBuilder.append("KW2807 : 'KW' '2807';\n"); + grammarBuilder.append("KW2808 : 'KW' '2808';\n"); + grammarBuilder.append("KW2809 : 'KW' '2809';\n"); + grammarBuilder.append("KW2810 : 'KW' '2810';\n"); + grammarBuilder.append("KW2811 : 'KW' '2811';\n"); + grammarBuilder.append("KW2812 : 'KW' '2812';\n"); + grammarBuilder.append("KW2813 : 'KW' '2813';\n"); + grammarBuilder.append("KW2814 : 'KW' '2814';\n"); + grammarBuilder.append("KW2815 : 'KW' '2815';\n"); + grammarBuilder.append("KW2816 : 'KW' '2816';\n"); + grammarBuilder.append("KW2817 : 'KW' '2817';\n"); + grammarBuilder.append("KW2818 : 'KW' '2818';\n"); + grammarBuilder.append("KW2819 : 'KW' '2819';\n"); + grammarBuilder.append("KW2820 : 'KW' '2820';\n"); + grammarBuilder.append("KW2821 : 'KW' '2821';\n"); + grammarBuilder.append("KW2822 : 'KW' '2822';\n"); + grammarBuilder.append("KW2823 : 'KW' '2823';\n"); + grammarBuilder.append("KW2824 : 'KW' '2824';\n"); + grammarBuilder.append("KW2825 : 'KW' '2825';\n"); + grammarBuilder.append("KW2826 : 'KW' '2826';\n"); + grammarBuilder.append("KW2827 : 'KW' '2827';\n"); + grammarBuilder.append("KW2828 : 'KW' '2828';\n"); + grammarBuilder.append("KW2829 : 'KW' '2829';\n"); + grammarBuilder.append("KW2830 : 'KW' '2830';\n"); + grammarBuilder.append("KW2831 : 'KW' '2831';\n"); + grammarBuilder.append("KW2832 : 'KW' '2832';\n"); + grammarBuilder.append("KW2833 : 'KW' '2833';\n"); + grammarBuilder.append("KW2834 : 'KW' '2834';\n"); + grammarBuilder.append("KW2835 : 'KW' '2835';\n"); + grammarBuilder.append("KW2836 : 'KW' '2836';\n"); + grammarBuilder.append("KW2837 : 'KW' '2837';\n"); + grammarBuilder.append("KW2838 : 'KW' '2838';\n"); + grammarBuilder.append("KW2839 : 'KW' '2839';\n"); + grammarBuilder.append("KW2840 : 'KW' '2840';\n"); + grammarBuilder.append("KW2841 : 'KW' '2841';\n"); + grammarBuilder.append("KW2842 : 'KW' '2842';\n"); + grammarBuilder.append("KW2843 : 'KW' '2843';\n"); + grammarBuilder.append("KW2844 : 'KW' '2844';\n"); + grammarBuilder.append("KW2845 : 'KW' '2845';\n"); + grammarBuilder.append("KW2846 : 'KW' '2846';\n"); + grammarBuilder.append("KW2847 : 'KW' '2847';\n"); + grammarBuilder.append("KW2848 : 'KW' '2848';\n"); + grammarBuilder.append("KW2849 : 'KW' '2849';\n"); + grammarBuilder.append("KW2850 : 'KW' '2850';\n"); + grammarBuilder.append("KW2851 : 'KW' '2851';\n"); + grammarBuilder.append("KW2852 : 'KW' '2852';\n"); + grammarBuilder.append("KW2853 : 'KW' '2853';\n"); + grammarBuilder.append("KW2854 : 'KW' '2854';\n"); + grammarBuilder.append("KW2855 : 'KW' '2855';\n"); + grammarBuilder.append("KW2856 : 'KW' '2856';\n"); + grammarBuilder.append("KW2857 : 'KW' '2857';\n"); + grammarBuilder.append("KW2858 : 'KW' '2858';\n"); + grammarBuilder.append("KW2859 : 'KW' '2859';\n"); + grammarBuilder.append("KW2860 : 'KW' '2860';\n"); + grammarBuilder.append("KW2861 : 'KW' '2861';\n"); + grammarBuilder.append("KW2862 : 'KW' '2862';\n"); + grammarBuilder.append("KW2863 : 'KW' '2863';\n"); + grammarBuilder.append("KW2864 : 'KW' '2864';\n"); + grammarBuilder.append("KW2865 : 'KW' '2865';\n"); + grammarBuilder.append("KW2866 : 'KW' '2866';\n"); + grammarBuilder.append("KW2867 : 'KW' '2867';\n"); + grammarBuilder.append("KW2868 : 'KW' '2868';\n"); + grammarBuilder.append("KW2869 : 'KW' '2869';\n"); + grammarBuilder.append("KW2870 : 'KW' '2870';\n"); + grammarBuilder.append("KW2871 : 'KW' '2871';\n"); + grammarBuilder.append("KW2872 : 'KW' '2872';\n"); + grammarBuilder.append("KW2873 : 'KW' '2873';\n"); + grammarBuilder.append("KW2874 : 'KW' '2874';\n"); + grammarBuilder.append("KW2875 : 'KW' '2875';\n"); + grammarBuilder.append("KW2876 : 'KW' '2876';\n"); + grammarBuilder.append("KW2877 : 'KW' '2877';\n"); + grammarBuilder.append("KW2878 : 'KW' '2878';\n"); + grammarBuilder.append("KW2879 : 'KW' '2879';\n"); + grammarBuilder.append("KW2880 : 'KW' '2880';\n"); + grammarBuilder.append("KW2881 : 'KW' '2881';\n"); + grammarBuilder.append("KW2882 : 'KW' '2882';\n"); + grammarBuilder.append("KW2883 : 'KW' '2883';\n"); + grammarBuilder.append("KW2884 : 'KW' '2884';\n"); + grammarBuilder.append("KW2885 : 'KW' '2885';\n"); + grammarBuilder.append("KW2886 : 'KW' '2886';\n"); + grammarBuilder.append("KW2887 : 'KW' '2887';\n"); + grammarBuilder.append("KW2888 : 'KW' '2888';\n"); + grammarBuilder.append("KW2889 : 'KW' '2889';\n"); + grammarBuilder.append("KW2890 : 'KW' '2890';\n"); + grammarBuilder.append("KW2891 : 'KW' '2891';\n"); + grammarBuilder.append("KW2892 : 'KW' '2892';\n"); + grammarBuilder.append("KW2893 : 'KW' '2893';\n"); + grammarBuilder.append("KW2894 : 'KW' '2894';\n"); + grammarBuilder.append("KW2895 : 'KW' '2895';\n"); + grammarBuilder.append("KW2896 : 'KW' '2896';\n"); + grammarBuilder.append("KW2897 : 'KW' '2897';\n"); + grammarBuilder.append("KW2898 : 'KW' '2898';\n"); + grammarBuilder.append("KW2899 : 'KW' '2899';\n"); + grammarBuilder.append("KW2900 : 'KW' '2900';\n"); + grammarBuilder.append("KW2901 : 'KW' '2901';\n"); + grammarBuilder.append("KW2902 : 'KW' '2902';\n"); + grammarBuilder.append("KW2903 : 'KW' '2903';\n"); + grammarBuilder.append("KW2904 : 'KW' '2904';\n"); + grammarBuilder.append("KW2905 : 'KW' '2905';\n"); + grammarBuilder.append("KW2906 : 'KW' '2906';\n"); + grammarBuilder.append("KW2907 : 'KW' '2907';\n"); + grammarBuilder.append("KW2908 : 'KW' '2908';\n"); + grammarBuilder.append("KW2909 : 'KW' '2909';\n"); + grammarBuilder.append("KW2910 : 'KW' '2910';\n"); + grammarBuilder.append("KW2911 : 'KW' '2911';\n"); + grammarBuilder.append("KW2912 : 'KW' '2912';\n"); + grammarBuilder.append("KW2913 : 'KW' '2913';\n"); + grammarBuilder.append("KW2914 : 'KW' '2914';\n"); + grammarBuilder.append("KW2915 : 'KW' '2915';\n"); + grammarBuilder.append("KW2916 : 'KW' '2916';\n"); + grammarBuilder.append("KW2917 : 'KW' '2917';\n"); + grammarBuilder.append("KW2918 : 'KW' '2918';\n"); + grammarBuilder.append("KW2919 : 'KW' '2919';\n"); + grammarBuilder.append("KW2920 : 'KW' '2920';\n"); + grammarBuilder.append("KW2921 : 'KW' '2921';\n"); + grammarBuilder.append("KW2922 : 'KW' '2922';\n"); + grammarBuilder.append("KW2923 : 'KW' '2923';\n"); + grammarBuilder.append("KW2924 : 'KW' '2924';\n"); + grammarBuilder.append("KW2925 : 'KW' '2925';\n"); + grammarBuilder.append("KW2926 : 'KW' '2926';\n"); + grammarBuilder.append("KW2927 : 'KW' '2927';\n"); + grammarBuilder.append("KW2928 : 'KW' '2928';\n"); + grammarBuilder.append("KW2929 : 'KW' '2929';\n"); + grammarBuilder.append("KW2930 : 'KW' '2930';\n"); + grammarBuilder.append("KW2931 : 'KW' '2931';\n"); + grammarBuilder.append("KW2932 : 'KW' '2932';\n"); + grammarBuilder.append("KW2933 : 'KW' '2933';\n"); + grammarBuilder.append("KW2934 : 'KW' '2934';\n"); + grammarBuilder.append("KW2935 : 'KW' '2935';\n"); + grammarBuilder.append("KW2936 : 'KW' '2936';\n"); + grammarBuilder.append("KW2937 : 'KW' '2937';\n"); + grammarBuilder.append("KW2938 : 'KW' '2938';\n"); + grammarBuilder.append("KW2939 : 'KW' '2939';\n"); + grammarBuilder.append("KW2940 : 'KW' '2940';\n"); + grammarBuilder.append("KW2941 : 'KW' '2941';\n"); + grammarBuilder.append("KW2942 : 'KW' '2942';\n"); + grammarBuilder.append("KW2943 : 'KW' '2943';\n"); + grammarBuilder.append("KW2944 : 'KW' '2944';\n"); + grammarBuilder.append("KW2945 : 'KW' '2945';\n"); + grammarBuilder.append("KW2946 : 'KW' '2946';\n"); + grammarBuilder.append("KW2947 : 'KW' '2947';\n"); + grammarBuilder.append("KW2948 : 'KW' '2948';\n"); + grammarBuilder.append("KW2949 : 'KW' '2949';\n"); + grammarBuilder.append("KW2950 : 'KW' '2950';\n"); + grammarBuilder.append("KW2951 : 'KW' '2951';\n"); + grammarBuilder.append("KW2952 : 'KW' '2952';\n"); + grammarBuilder.append("KW2953 : 'KW' '2953';\n"); + grammarBuilder.append("KW2954 : 'KW' '2954';\n"); + grammarBuilder.append("KW2955 : 'KW' '2955';\n"); + grammarBuilder.append("KW2956 : 'KW' '2956';\n"); + grammarBuilder.append("KW2957 : 'KW' '2957';\n"); + grammarBuilder.append("KW2958 : 'KW' '2958';\n"); + grammarBuilder.append("KW2959 : 'KW' '2959';\n"); + grammarBuilder.append("KW2960 : 'KW' '2960';\n"); + grammarBuilder.append("KW2961 : 'KW' '2961';\n"); + grammarBuilder.append("KW2962 : 'KW' '2962';\n"); + grammarBuilder.append("KW2963 : 'KW' '2963';\n"); + grammarBuilder.append("KW2964 : 'KW' '2964';\n"); + grammarBuilder.append("KW2965 : 'KW' '2965';\n"); + grammarBuilder.append("KW2966 : 'KW' '2966';\n"); + grammarBuilder.append("KW2967 : 'KW' '2967';\n"); + grammarBuilder.append("KW2968 : 'KW' '2968';\n"); + grammarBuilder.append("KW2969 : 'KW' '2969';\n"); + grammarBuilder.append("KW2970 : 'KW' '2970';\n"); + grammarBuilder.append("KW2971 : 'KW' '2971';\n"); + grammarBuilder.append("KW2972 : 'KW' '2972';\n"); + grammarBuilder.append("KW2973 : 'KW' '2973';\n"); + grammarBuilder.append("KW2974 : 'KW' '2974';\n"); + grammarBuilder.append("KW2975 : 'KW' '2975';\n"); + grammarBuilder.append("KW2976 : 'KW' '2976';\n"); + grammarBuilder.append("KW2977 : 'KW' '2977';\n"); + grammarBuilder.append("KW2978 : 'KW' '2978';\n"); + grammarBuilder.append("KW2979 : 'KW' '2979';\n"); + grammarBuilder.append("KW2980 : 'KW' '2980';\n"); + grammarBuilder.append("KW2981 : 'KW' '2981';\n"); + grammarBuilder.append("KW2982 : 'KW' '2982';\n"); + grammarBuilder.append("KW2983 : 'KW' '2983';\n"); + grammarBuilder.append("KW2984 : 'KW' '2984';\n"); + grammarBuilder.append("KW2985 : 'KW' '2985';\n"); + grammarBuilder.append("KW2986 : 'KW' '2986';\n"); + grammarBuilder.append("KW2987 : 'KW' '2987';\n"); + grammarBuilder.append("KW2988 : 'KW' '2988';\n"); + grammarBuilder.append("KW2989 : 'KW' '2989';\n"); + grammarBuilder.append("KW2990 : 'KW' '2990';\n"); + grammarBuilder.append("KW2991 : 'KW' '2991';\n"); + grammarBuilder.append("KW2992 : 'KW' '2992';\n"); + grammarBuilder.append("KW2993 : 'KW' '2993';\n"); + grammarBuilder.append("KW2994 : 'KW' '2994';\n"); + grammarBuilder.append("KW2995 : 'KW' '2995';\n"); + grammarBuilder.append("KW2996 : 'KW' '2996';\n"); + grammarBuilder.append("KW2997 : 'KW' '2997';\n"); + grammarBuilder.append("KW2998 : 'KW' '2998';\n"); + grammarBuilder.append("KW2999 : 'KW' '2999';\n"); + grammarBuilder.append("KW3000 : 'KW' '3000';\n"); + grammarBuilder.append("KW3001 : 'KW' '3001';\n"); + grammarBuilder.append("KW3002 : 'KW' '3002';\n"); + grammarBuilder.append("KW3003 : 'KW' '3003';\n"); + grammarBuilder.append("KW3004 : 'KW' '3004';\n"); + grammarBuilder.append("KW3005 : 'KW' '3005';\n"); + grammarBuilder.append("KW3006 : 'KW' '3006';\n"); + grammarBuilder.append("KW3007 : 'KW' '3007';\n"); + grammarBuilder.append("KW3008 : 'KW' '3008';\n"); + grammarBuilder.append("KW3009 : 'KW' '3009';\n"); + grammarBuilder.append("KW3010 : 'KW' '3010';\n"); + grammarBuilder.append("KW3011 : 'KW' '3011';\n"); + grammarBuilder.append("KW3012 : 'KW' '3012';\n"); + grammarBuilder.append("KW3013 : 'KW' '3013';\n"); + grammarBuilder.append("KW3014 : 'KW' '3014';\n"); + grammarBuilder.append("KW3015 : 'KW' '3015';\n"); + grammarBuilder.append("KW3016 : 'KW' '3016';\n"); + grammarBuilder.append("KW3017 : 'KW' '3017';\n"); + grammarBuilder.append("KW3018 : 'KW' '3018';\n"); + grammarBuilder.append("KW3019 : 'KW' '3019';\n"); + grammarBuilder.append("KW3020 : 'KW' '3020';\n"); + grammarBuilder.append("KW3021 : 'KW' '3021';\n"); + grammarBuilder.append("KW3022 : 'KW' '3022';\n"); + grammarBuilder.append("KW3023 : 'KW' '3023';\n"); + grammarBuilder.append("KW3024 : 'KW' '3024';\n"); + grammarBuilder.append("KW3025 : 'KW' '3025';\n"); + grammarBuilder.append("KW3026 : 'KW' '3026';\n"); + grammarBuilder.append("KW3027 : 'KW' '3027';\n"); + grammarBuilder.append("KW3028 : 'KW' '3028';\n"); + grammarBuilder.append("KW3029 : 'KW' '3029';\n"); + grammarBuilder.append("KW3030 : 'KW' '3030';\n"); + grammarBuilder.append("KW3031 : 'KW' '3031';\n"); + grammarBuilder.append("KW3032 : 'KW' '3032';\n"); + grammarBuilder.append("KW3033 : 'KW' '3033';\n"); + grammarBuilder.append("KW3034 : 'KW' '3034';\n"); + grammarBuilder.append("KW3035 : 'KW' '3035';\n"); + grammarBuilder.append("KW3036 : 'KW' '3036';\n"); + grammarBuilder.append("KW3037 : 'KW' '3037';\n"); + grammarBuilder.append("KW3038 : 'KW' '3038';\n"); + grammarBuilder.append("KW3039 : 'KW' '3039';\n"); + grammarBuilder.append("KW3040 : 'KW' '3040';\n"); + grammarBuilder.append("KW3041 : 'KW' '3041';\n"); + grammarBuilder.append("KW3042 : 'KW' '3042';\n"); + grammarBuilder.append("KW3043 : 'KW' '3043';\n"); + grammarBuilder.append("KW3044 : 'KW' '3044';\n"); + grammarBuilder.append("KW3045 : 'KW' '3045';\n"); + grammarBuilder.append("KW3046 : 'KW' '3046';\n"); + grammarBuilder.append("KW3047 : 'KW' '3047';\n"); + grammarBuilder.append("KW3048 : 'KW' '3048';\n"); + grammarBuilder.append("KW3049 : 'KW' '3049';\n"); + grammarBuilder.append("KW3050 : 'KW' '3050';\n"); + grammarBuilder.append("KW3051 : 'KW' '3051';\n"); + grammarBuilder.append("KW3052 : 'KW' '3052';\n"); + grammarBuilder.append("KW3053 : 'KW' '3053';\n"); + grammarBuilder.append("KW3054 : 'KW' '3054';\n"); + grammarBuilder.append("KW3055 : 'KW' '3055';\n"); + grammarBuilder.append("KW3056 : 'KW' '3056';\n"); + grammarBuilder.append("KW3057 : 'KW' '3057';\n"); + grammarBuilder.append("KW3058 : 'KW' '3058';\n"); + grammarBuilder.append("KW3059 : 'KW' '3059';\n"); + grammarBuilder.append("KW3060 : 'KW' '3060';\n"); + grammarBuilder.append("KW3061 : 'KW' '3061';\n"); + grammarBuilder.append("KW3062 : 'KW' '3062';\n"); + grammarBuilder.append("KW3063 : 'KW' '3063';\n"); + grammarBuilder.append("KW3064 : 'KW' '3064';\n"); + grammarBuilder.append("KW3065 : 'KW' '3065';\n"); + grammarBuilder.append("KW3066 : 'KW' '3066';\n"); + grammarBuilder.append("KW3067 : 'KW' '3067';\n"); + grammarBuilder.append("KW3068 : 'KW' '3068';\n"); + grammarBuilder.append("KW3069 : 'KW' '3069';\n"); + grammarBuilder.append("KW3070 : 'KW' '3070';\n"); + grammarBuilder.append("KW3071 : 'KW' '3071';\n"); + grammarBuilder.append("KW3072 : 'KW' '3072';\n"); + grammarBuilder.append("KW3073 : 'KW' '3073';\n"); + grammarBuilder.append("KW3074 : 'KW' '3074';\n"); + grammarBuilder.append("KW3075 : 'KW' '3075';\n"); + grammarBuilder.append("KW3076 : 'KW' '3076';\n"); + grammarBuilder.append("KW3077 : 'KW' '3077';\n"); + grammarBuilder.append("KW3078 : 'KW' '3078';\n"); + grammarBuilder.append("KW3079 : 'KW' '3079';\n"); + grammarBuilder.append("KW3080 : 'KW' '3080';\n"); + grammarBuilder.append("KW3081 : 'KW' '3081';\n"); + grammarBuilder.append("KW3082 : 'KW' '3082';\n"); + grammarBuilder.append("KW3083 : 'KW' '3083';\n"); + grammarBuilder.append("KW3084 : 'KW' '3084';\n"); + grammarBuilder.append("KW3085 : 'KW' '3085';\n"); + grammarBuilder.append("KW3086 : 'KW' '3086';\n"); + grammarBuilder.append("KW3087 : 'KW' '3087';\n"); + grammarBuilder.append("KW3088 : 'KW' '3088';\n"); + grammarBuilder.append("KW3089 : 'KW' '3089';\n"); + grammarBuilder.append("KW3090 : 'KW' '3090';\n"); + grammarBuilder.append("KW3091 : 'KW' '3091';\n"); + grammarBuilder.append("KW3092 : 'KW' '3092';\n"); + grammarBuilder.append("KW3093 : 'KW' '3093';\n"); + grammarBuilder.append("KW3094 : 'KW' '3094';\n"); + grammarBuilder.append("KW3095 : 'KW' '3095';\n"); + grammarBuilder.append("KW3096 : 'KW' '3096';\n"); + grammarBuilder.append("KW3097 : 'KW' '3097';\n"); + grammarBuilder.append("KW3098 : 'KW' '3098';\n"); + grammarBuilder.append("KW3099 : 'KW' '3099';\n"); + grammarBuilder.append("KW3100 : 'KW' '3100';\n"); + grammarBuilder.append("KW3101 : 'KW' '3101';\n"); + grammarBuilder.append("KW3102 : 'KW' '3102';\n"); + grammarBuilder.append("KW3103 : 'KW' '3103';\n"); + grammarBuilder.append("KW3104 : 'KW' '3104';\n"); + grammarBuilder.append("KW3105 : 'KW' '3105';\n"); + grammarBuilder.append("KW3106 : 'KW' '3106';\n"); + grammarBuilder.append("KW3107 : 'KW' '3107';\n"); + grammarBuilder.append("KW3108 : 'KW' '3108';\n"); + grammarBuilder.append("KW3109 : 'KW' '3109';\n"); + grammarBuilder.append("KW3110 : 'KW' '3110';\n"); + grammarBuilder.append("KW3111 : 'KW' '3111';\n"); + grammarBuilder.append("KW3112 : 'KW' '3112';\n"); + grammarBuilder.append("KW3113 : 'KW' '3113';\n"); + grammarBuilder.append("KW3114 : 'KW' '3114';\n"); + grammarBuilder.append("KW3115 : 'KW' '3115';\n"); + grammarBuilder.append("KW3116 : 'KW' '3116';\n"); + grammarBuilder.append("KW3117 : 'KW' '3117';\n"); + grammarBuilder.append("KW3118 : 'KW' '3118';\n"); + grammarBuilder.append("KW3119 : 'KW' '3119';\n"); + grammarBuilder.append("KW3120 : 'KW' '3120';\n"); + grammarBuilder.append("KW3121 : 'KW' '3121';\n"); + grammarBuilder.append("KW3122 : 'KW' '3122';\n"); + grammarBuilder.append("KW3123 : 'KW' '3123';\n"); + grammarBuilder.append("KW3124 : 'KW' '3124';\n"); + grammarBuilder.append("KW3125 : 'KW' '3125';\n"); + grammarBuilder.append("KW3126 : 'KW' '3126';\n"); + grammarBuilder.append("KW3127 : 'KW' '3127';\n"); + grammarBuilder.append("KW3128 : 'KW' '3128';\n"); + grammarBuilder.append("KW3129 : 'KW' '3129';\n"); + grammarBuilder.append("KW3130 : 'KW' '3130';\n"); + grammarBuilder.append("KW3131 : 'KW' '3131';\n"); + grammarBuilder.append("KW3132 : 'KW' '3132';\n"); + grammarBuilder.append("KW3133 : 'KW' '3133';\n"); + grammarBuilder.append("KW3134 : 'KW' '3134';\n"); + grammarBuilder.append("KW3135 : 'KW' '3135';\n"); + grammarBuilder.append("KW3136 : 'KW' '3136';\n"); + grammarBuilder.append("KW3137 : 'KW' '3137';\n"); + grammarBuilder.append("KW3138 : 'KW' '3138';\n"); + grammarBuilder.append("KW3139 : 'KW' '3139';\n"); + grammarBuilder.append("KW3140 : 'KW' '3140';\n"); + grammarBuilder.append("KW3141 : 'KW' '3141';\n"); + grammarBuilder.append("KW3142 : 'KW' '3142';\n"); + grammarBuilder.append("KW3143 : 'KW' '3143';\n"); + grammarBuilder.append("KW3144 : 'KW' '3144';\n"); + grammarBuilder.append("KW3145 : 'KW' '3145';\n"); + grammarBuilder.append("KW3146 : 'KW' '3146';\n"); + grammarBuilder.append("KW3147 : 'KW' '3147';\n"); + grammarBuilder.append("KW3148 : 'KW' '3148';\n"); + grammarBuilder.append("KW3149 : 'KW' '3149';\n"); + grammarBuilder.append("KW3150 : 'KW' '3150';\n"); + grammarBuilder.append("KW3151 : 'KW' '3151';\n"); + grammarBuilder.append("KW3152 : 'KW' '3152';\n"); + grammarBuilder.append("KW3153 : 'KW' '3153';\n"); + grammarBuilder.append("KW3154 : 'KW' '3154';\n"); + grammarBuilder.append("KW3155 : 'KW' '3155';\n"); + grammarBuilder.append("KW3156 : 'KW' '3156';\n"); + grammarBuilder.append("KW3157 : 'KW' '3157';\n"); + grammarBuilder.append("KW3158 : 'KW' '3158';\n"); + grammarBuilder.append("KW3159 : 'KW' '3159';\n"); + grammarBuilder.append("KW3160 : 'KW' '3160';\n"); + grammarBuilder.append("KW3161 : 'KW' '3161';\n"); + grammarBuilder.append("KW3162 : 'KW' '3162';\n"); + grammarBuilder.append("KW3163 : 'KW' '3163';\n"); + grammarBuilder.append("KW3164 : 'KW' '3164';\n"); + grammarBuilder.append("KW3165 : 'KW' '3165';\n"); + grammarBuilder.append("KW3166 : 'KW' '3166';\n"); + grammarBuilder.append("KW3167 : 'KW' '3167';\n"); + grammarBuilder.append("KW3168 : 'KW' '3168';\n"); + grammarBuilder.append("KW3169 : 'KW' '3169';\n"); + grammarBuilder.append("KW3170 : 'KW' '3170';\n"); + grammarBuilder.append("KW3171 : 'KW' '3171';\n"); + grammarBuilder.append("KW3172 : 'KW' '3172';\n"); + grammarBuilder.append("KW3173 : 'KW' '3173';\n"); + grammarBuilder.append("KW3174 : 'KW' '3174';\n"); + grammarBuilder.append("KW3175 : 'KW' '3175';\n"); + grammarBuilder.append("KW3176 : 'KW' '3176';\n"); + grammarBuilder.append("KW3177 : 'KW' '3177';\n"); + grammarBuilder.append("KW3178 : 'KW' '3178';\n"); + grammarBuilder.append("KW3179 : 'KW' '3179';\n"); + grammarBuilder.append("KW3180 : 'KW' '3180';\n"); + grammarBuilder.append("KW3181 : 'KW' '3181';\n"); + grammarBuilder.append("KW3182 : 'KW' '3182';\n"); + grammarBuilder.append("KW3183 : 'KW' '3183';\n"); + grammarBuilder.append("KW3184 : 'KW' '3184';\n"); + grammarBuilder.append("KW3185 : 'KW' '3185';\n"); + grammarBuilder.append("KW3186 : 'KW' '3186';\n"); + grammarBuilder.append("KW3187 : 'KW' '3187';\n"); + grammarBuilder.append("KW3188 : 'KW' '3188';\n"); + grammarBuilder.append("KW3189 : 'KW' '3189';\n"); + grammarBuilder.append("KW3190 : 'KW' '3190';\n"); + grammarBuilder.append("KW3191 : 'KW' '3191';\n"); + grammarBuilder.append("KW3192 : 'KW' '3192';\n"); + grammarBuilder.append("KW3193 : 'KW' '3193';\n"); + grammarBuilder.append("KW3194 : 'KW' '3194';\n"); + grammarBuilder.append("KW3195 : 'KW' '3195';\n"); + grammarBuilder.append("KW3196 : 'KW' '3196';\n"); + grammarBuilder.append("KW3197 : 'KW' '3197';\n"); + grammarBuilder.append("KW3198 : 'KW' '3198';\n"); + grammarBuilder.append("KW3199 : 'KW' '3199';\n"); + grammarBuilder.append("KW3200 : 'KW' '3200';\n"); + grammarBuilder.append("KW3201 : 'KW' '3201';\n"); + grammarBuilder.append("KW3202 : 'KW' '3202';\n"); + grammarBuilder.append("KW3203 : 'KW' '3203';\n"); + grammarBuilder.append("KW3204 : 'KW' '3204';\n"); + grammarBuilder.append("KW3205 : 'KW' '3205';\n"); + grammarBuilder.append("KW3206 : 'KW' '3206';\n"); + grammarBuilder.append("KW3207 : 'KW' '3207';\n"); + grammarBuilder.append("KW3208 : 'KW' '3208';\n"); + grammarBuilder.append("KW3209 : 'KW' '3209';\n"); + grammarBuilder.append("KW3210 : 'KW' '3210';\n"); + grammarBuilder.append("KW3211 : 'KW' '3211';\n"); + grammarBuilder.append("KW3212 : 'KW' '3212';\n"); + grammarBuilder.append("KW3213 : 'KW' '3213';\n"); + grammarBuilder.append("KW3214 : 'KW' '3214';\n"); + grammarBuilder.append("KW3215 : 'KW' '3215';\n"); + grammarBuilder.append("KW3216 : 'KW' '3216';\n"); + grammarBuilder.append("KW3217 : 'KW' '3217';\n"); + grammarBuilder.append("KW3218 : 'KW' '3218';\n"); + grammarBuilder.append("KW3219 : 'KW' '3219';\n"); + grammarBuilder.append("KW3220 : 'KW' '3220';\n"); + grammarBuilder.append("KW3221 : 'KW' '3221';\n"); + grammarBuilder.append("KW3222 : 'KW' '3222';\n"); + grammarBuilder.append("KW3223 : 'KW' '3223';\n"); + grammarBuilder.append("KW3224 : 'KW' '3224';\n"); + grammarBuilder.append("KW3225 : 'KW' '3225';\n"); + grammarBuilder.append("KW3226 : 'KW' '3226';\n"); + grammarBuilder.append("KW3227 : 'KW' '3227';\n"); + grammarBuilder.append("KW3228 : 'KW' '3228';\n"); + grammarBuilder.append("KW3229 : 'KW' '3229';\n"); + grammarBuilder.append("KW3230 : 'KW' '3230';\n"); + grammarBuilder.append("KW3231 : 'KW' '3231';\n"); + grammarBuilder.append("KW3232 : 'KW' '3232';\n"); + grammarBuilder.append("KW3233 : 'KW' '3233';\n"); + grammarBuilder.append("KW3234 : 'KW' '3234';\n"); + grammarBuilder.append("KW3235 : 'KW' '3235';\n"); + grammarBuilder.append("KW3236 : 'KW' '3236';\n"); + grammarBuilder.append("KW3237 : 'KW' '3237';\n"); + grammarBuilder.append("KW3238 : 'KW' '3238';\n"); + grammarBuilder.append("KW3239 : 'KW' '3239';\n"); + grammarBuilder.append("KW3240 : 'KW' '3240';\n"); + grammarBuilder.append("KW3241 : 'KW' '3241';\n"); + grammarBuilder.append("KW3242 : 'KW' '3242';\n"); + grammarBuilder.append("KW3243 : 'KW' '3243';\n"); + grammarBuilder.append("KW3244 : 'KW' '3244';\n"); + grammarBuilder.append("KW3245 : 'KW' '3245';\n"); + grammarBuilder.append("KW3246 : 'KW' '3246';\n"); + grammarBuilder.append("KW3247 : 'KW' '3247';\n"); + grammarBuilder.append("KW3248 : 'KW' '3248';\n"); + grammarBuilder.append("KW3249 : 'KW' '3249';\n"); + grammarBuilder.append("KW3250 : 'KW' '3250';\n"); + grammarBuilder.append("KW3251 : 'KW' '3251';\n"); + grammarBuilder.append("KW3252 : 'KW' '3252';\n"); + grammarBuilder.append("KW3253 : 'KW' '3253';\n"); + grammarBuilder.append("KW3254 : 'KW' '3254';\n"); + grammarBuilder.append("KW3255 : 'KW' '3255';\n"); + grammarBuilder.append("KW3256 : 'KW' '3256';\n"); + grammarBuilder.append("KW3257 : 'KW' '3257';\n"); + grammarBuilder.append("KW3258 : 'KW' '3258';\n"); + grammarBuilder.append("KW3259 : 'KW' '3259';\n"); + grammarBuilder.append("KW3260 : 'KW' '3260';\n"); + grammarBuilder.append("KW3261 : 'KW' '3261';\n"); + grammarBuilder.append("KW3262 : 'KW' '3262';\n"); + grammarBuilder.append("KW3263 : 'KW' '3263';\n"); + grammarBuilder.append("KW3264 : 'KW' '3264';\n"); + grammarBuilder.append("KW3265 : 'KW' '3265';\n"); + grammarBuilder.append("KW3266 : 'KW' '3266';\n"); + grammarBuilder.append("KW3267 : 'KW' '3267';\n"); + grammarBuilder.append("KW3268 : 'KW' '3268';\n"); + grammarBuilder.append("KW3269 : 'KW' '3269';\n"); + grammarBuilder.append("KW3270 : 'KW' '3270';\n"); + grammarBuilder.append("KW3271 : 'KW' '3271';\n"); + grammarBuilder.append("KW3272 : 'KW' '3272';\n"); + grammarBuilder.append("KW3273 : 'KW' '3273';\n"); + grammarBuilder.append("KW3274 : 'KW' '3274';\n"); + grammarBuilder.append("KW3275 : 'KW' '3275';\n"); + grammarBuilder.append("KW3276 : 'KW' '3276';\n"); + grammarBuilder.append("KW3277 : 'KW' '3277';\n"); + grammarBuilder.append("KW3278 : 'KW' '3278';\n"); + grammarBuilder.append("KW3279 : 'KW' '3279';\n"); + grammarBuilder.append("KW3280 : 'KW' '3280';\n"); + grammarBuilder.append("KW3281 : 'KW' '3281';\n"); + grammarBuilder.append("KW3282 : 'KW' '3282';\n"); + grammarBuilder.append("KW3283 : 'KW' '3283';\n"); + grammarBuilder.append("KW3284 : 'KW' '3284';\n"); + grammarBuilder.append("KW3285 : 'KW' '3285';\n"); + grammarBuilder.append("KW3286 : 'KW' '3286';\n"); + grammarBuilder.append("KW3287 : 'KW' '3287';\n"); + grammarBuilder.append("KW3288 : 'KW' '3288';\n"); + grammarBuilder.append("KW3289 : 'KW' '3289';\n"); + grammarBuilder.append("KW3290 : 'KW' '3290';\n"); + grammarBuilder.append("KW3291 : 'KW' '3291';\n"); + grammarBuilder.append("KW3292 : 'KW' '3292';\n"); + grammarBuilder.append("KW3293 : 'KW' '3293';\n"); + grammarBuilder.append("KW3294 : 'KW' '3294';\n"); + grammarBuilder.append("KW3295 : 'KW' '3295';\n"); + grammarBuilder.append("KW3296 : 'KW' '3296';\n"); + grammarBuilder.append("KW3297 : 'KW' '3297';\n"); + grammarBuilder.append("KW3298 : 'KW' '3298';\n"); + grammarBuilder.append("KW3299 : 'KW' '3299';\n"); + grammarBuilder.append("KW3300 : 'KW' '3300';\n"); + grammarBuilder.append("KW3301 : 'KW' '3301';\n"); + grammarBuilder.append("KW3302 : 'KW' '3302';\n"); + grammarBuilder.append("KW3303 : 'KW' '3303';\n"); + grammarBuilder.append("KW3304 : 'KW' '3304';\n"); + grammarBuilder.append("KW3305 : 'KW' '3305';\n"); + grammarBuilder.append("KW3306 : 'KW' '3306';\n"); + grammarBuilder.append("KW3307 : 'KW' '3307';\n"); + grammarBuilder.append("KW3308 : 'KW' '3308';\n"); + grammarBuilder.append("KW3309 : 'KW' '3309';\n"); + grammarBuilder.append("KW3310 : 'KW' '3310';\n"); + grammarBuilder.append("KW3311 : 'KW' '3311';\n"); + grammarBuilder.append("KW3312 : 'KW' '3312';\n"); + grammarBuilder.append("KW3313 : 'KW' '3313';\n"); + grammarBuilder.append("KW3314 : 'KW' '3314';\n"); + grammarBuilder.append("KW3315 : 'KW' '3315';\n"); + grammarBuilder.append("KW3316 : 'KW' '3316';\n"); + grammarBuilder.append("KW3317 : 'KW' '3317';\n"); + grammarBuilder.append("KW3318 : 'KW' '3318';\n"); + grammarBuilder.append("KW3319 : 'KW' '3319';\n"); + grammarBuilder.append("KW3320 : 'KW' '3320';\n"); + grammarBuilder.append("KW3321 : 'KW' '3321';\n"); + grammarBuilder.append("KW3322 : 'KW' '3322';\n"); + grammarBuilder.append("KW3323 : 'KW' '3323';\n"); + grammarBuilder.append("KW3324 : 'KW' '3324';\n"); + grammarBuilder.append("KW3325 : 'KW' '3325';\n"); + grammarBuilder.append("KW3326 : 'KW' '3326';\n"); + grammarBuilder.append("KW3327 : 'KW' '3327';\n"); + grammarBuilder.append("KW3328 : 'KW' '3328';\n"); + grammarBuilder.append("KW3329 : 'KW' '3329';\n"); + grammarBuilder.append("KW3330 : 'KW' '3330';\n"); + grammarBuilder.append("KW3331 : 'KW' '3331';\n"); + grammarBuilder.append("KW3332 : 'KW' '3332';\n"); + grammarBuilder.append("KW3333 : 'KW' '3333';\n"); + grammarBuilder.append("KW3334 : 'KW' '3334';\n"); + grammarBuilder.append("KW3335 : 'KW' '3335';\n"); + grammarBuilder.append("KW3336 : 'KW' '3336';\n"); + grammarBuilder.append("KW3337 : 'KW' '3337';\n"); + grammarBuilder.append("KW3338 : 'KW' '3338';\n"); + grammarBuilder.append("KW3339 : 'KW' '3339';\n"); + grammarBuilder.append("KW3340 : 'KW' '3340';\n"); + grammarBuilder.append("KW3341 : 'KW' '3341';\n"); + grammarBuilder.append("KW3342 : 'KW' '3342';\n"); + grammarBuilder.append("KW3343 : 'KW' '3343';\n"); + grammarBuilder.append("KW3344 : 'KW' '3344';\n"); + grammarBuilder.append("KW3345 : 'KW' '3345';\n"); + grammarBuilder.append("KW3346 : 'KW' '3346';\n"); + grammarBuilder.append("KW3347 : 'KW' '3347';\n"); + grammarBuilder.append("KW3348 : 'KW' '3348';\n"); + grammarBuilder.append("KW3349 : 'KW' '3349';\n"); + grammarBuilder.append("KW3350 : 'KW' '3350';\n"); + grammarBuilder.append("KW3351 : 'KW' '3351';\n"); + grammarBuilder.append("KW3352 : 'KW' '3352';\n"); + grammarBuilder.append("KW3353 : 'KW' '3353';\n"); + grammarBuilder.append("KW3354 : 'KW' '3354';\n"); + grammarBuilder.append("KW3355 : 'KW' '3355';\n"); + grammarBuilder.append("KW3356 : 'KW' '3356';\n"); + grammarBuilder.append("KW3357 : 'KW' '3357';\n"); + grammarBuilder.append("KW3358 : 'KW' '3358';\n"); + grammarBuilder.append("KW3359 : 'KW' '3359';\n"); + grammarBuilder.append("KW3360 : 'KW' '3360';\n"); + grammarBuilder.append("KW3361 : 'KW' '3361';\n"); + grammarBuilder.append("KW3362 : 'KW' '3362';\n"); + grammarBuilder.append("KW3363 : 'KW' '3363';\n"); + grammarBuilder.append("KW3364 : 'KW' '3364';\n"); + grammarBuilder.append("KW3365 : 'KW' '3365';\n"); + grammarBuilder.append("KW3366 : 'KW' '3366';\n"); + grammarBuilder.append("KW3367 : 'KW' '3367';\n"); + grammarBuilder.append("KW3368 : 'KW' '3368';\n"); + grammarBuilder.append("KW3369 : 'KW' '3369';\n"); + grammarBuilder.append("KW3370 : 'KW' '3370';\n"); + grammarBuilder.append("KW3371 : 'KW' '3371';\n"); + grammarBuilder.append("KW3372 : 'KW' '3372';\n"); + grammarBuilder.append("KW3373 : 'KW' '3373';\n"); + grammarBuilder.append("KW3374 : 'KW' '3374';\n"); + grammarBuilder.append("KW3375 : 'KW' '3375';\n"); + grammarBuilder.append("KW3376 : 'KW' '3376';\n"); + grammarBuilder.append("KW3377 : 'KW' '3377';\n"); + grammarBuilder.append("KW3378 : 'KW' '3378';\n"); + grammarBuilder.append("KW3379 : 'KW' '3379';\n"); + grammarBuilder.append("KW3380 : 'KW' '3380';\n"); + grammarBuilder.append("KW3381 : 'KW' '3381';\n"); + grammarBuilder.append("KW3382 : 'KW' '3382';\n"); + grammarBuilder.append("KW3383 : 'KW' '3383';\n"); + grammarBuilder.append("KW3384 : 'KW' '3384';\n"); + grammarBuilder.append("KW3385 : 'KW' '3385';\n"); + grammarBuilder.append("KW3386 : 'KW' '3386';\n"); + grammarBuilder.append("KW3387 : 'KW' '3387';\n"); + grammarBuilder.append("KW3388 : 'KW' '3388';\n"); + grammarBuilder.append("KW3389 : 'KW' '3389';\n"); + grammarBuilder.append("KW3390 : 'KW' '3390';\n"); + grammarBuilder.append("KW3391 : 'KW' '3391';\n"); + grammarBuilder.append("KW3392 : 'KW' '3392';\n"); + grammarBuilder.append("KW3393 : 'KW' '3393';\n"); + grammarBuilder.append("KW3394 : 'KW' '3394';\n"); + grammarBuilder.append("KW3395 : 'KW' '3395';\n"); + grammarBuilder.append("KW3396 : 'KW' '3396';\n"); + grammarBuilder.append("KW3397 : 'KW' '3397';\n"); + grammarBuilder.append("KW3398 : 'KW' '3398';\n"); + grammarBuilder.append("KW3399 : 'KW' '3399';\n"); + grammarBuilder.append("KW3400 : 'KW' '3400';\n"); + grammarBuilder.append("KW3401 : 'KW' '3401';\n"); + grammarBuilder.append("KW3402 : 'KW' '3402';\n"); + grammarBuilder.append("KW3403 : 'KW' '3403';\n"); + grammarBuilder.append("KW3404 : 'KW' '3404';\n"); + grammarBuilder.append("KW3405 : 'KW' '3405';\n"); + grammarBuilder.append("KW3406 : 'KW' '3406';\n"); + grammarBuilder.append("KW3407 : 'KW' '3407';\n"); + grammarBuilder.append("KW3408 : 'KW' '3408';\n"); + grammarBuilder.append("KW3409 : 'KW' '3409';\n"); + grammarBuilder.append("KW3410 : 'KW' '3410';\n"); + grammarBuilder.append("KW3411 : 'KW' '3411';\n"); + grammarBuilder.append("KW3412 : 'KW' '3412';\n"); + grammarBuilder.append("KW3413 : 'KW' '3413';\n"); + grammarBuilder.append("KW3414 : 'KW' '3414';\n"); + grammarBuilder.append("KW3415 : 'KW' '3415';\n"); + grammarBuilder.append("KW3416 : 'KW' '3416';\n"); + grammarBuilder.append("KW3417 : 'KW' '3417';\n"); + grammarBuilder.append("KW3418 : 'KW' '3418';\n"); + grammarBuilder.append("KW3419 : 'KW' '3419';\n"); + grammarBuilder.append("KW3420 : 'KW' '3420';\n"); + grammarBuilder.append("KW3421 : 'KW' '3421';\n"); + grammarBuilder.append("KW3422 : 'KW' '3422';\n"); + grammarBuilder.append("KW3423 : 'KW' '3423';\n"); + grammarBuilder.append("KW3424 : 'KW' '3424';\n"); + grammarBuilder.append("KW3425 : 'KW' '3425';\n"); + grammarBuilder.append("KW3426 : 'KW' '3426';\n"); + grammarBuilder.append("KW3427 : 'KW' '3427';\n"); + grammarBuilder.append("KW3428 : 'KW' '3428';\n"); + grammarBuilder.append("KW3429 : 'KW' '3429';\n"); + grammarBuilder.append("KW3430 : 'KW' '3430';\n"); + grammarBuilder.append("KW3431 : 'KW' '3431';\n"); + grammarBuilder.append("KW3432 : 'KW' '3432';\n"); + grammarBuilder.append("KW3433 : 'KW' '3433';\n"); + grammarBuilder.append("KW3434 : 'KW' '3434';\n"); + grammarBuilder.append("KW3435 : 'KW' '3435';\n"); + grammarBuilder.append("KW3436 : 'KW' '3436';\n"); + grammarBuilder.append("KW3437 : 'KW' '3437';\n"); + grammarBuilder.append("KW3438 : 'KW' '3438';\n"); + grammarBuilder.append("KW3439 : 'KW' '3439';\n"); + grammarBuilder.append("KW3440 : 'KW' '3440';\n"); + grammarBuilder.append("KW3441 : 'KW' '3441';\n"); + grammarBuilder.append("KW3442 : 'KW' '3442';\n"); + grammarBuilder.append("KW3443 : 'KW' '3443';\n"); + grammarBuilder.append("KW3444 : 'KW' '3444';\n"); + grammarBuilder.append("KW3445 : 'KW' '3445';\n"); + grammarBuilder.append("KW3446 : 'KW' '3446';\n"); + grammarBuilder.append("KW3447 : 'KW' '3447';\n"); + grammarBuilder.append("KW3448 : 'KW' '3448';\n"); + grammarBuilder.append("KW3449 : 'KW' '3449';\n"); + grammarBuilder.append("KW3450 : 'KW' '3450';\n"); + grammarBuilder.append("KW3451 : 'KW' '3451';\n"); + grammarBuilder.append("KW3452 : 'KW' '3452';\n"); + grammarBuilder.append("KW3453 : 'KW' '3453';\n"); + grammarBuilder.append("KW3454 : 'KW' '3454';\n"); + grammarBuilder.append("KW3455 : 'KW' '3455';\n"); + grammarBuilder.append("KW3456 : 'KW' '3456';\n"); + grammarBuilder.append("KW3457 : 'KW' '3457';\n"); + grammarBuilder.append("KW3458 : 'KW' '3458';\n"); + grammarBuilder.append("KW3459 : 'KW' '3459';\n"); + grammarBuilder.append("KW3460 : 'KW' '3460';\n"); + grammarBuilder.append("KW3461 : 'KW' '3461';\n"); + grammarBuilder.append("KW3462 : 'KW' '3462';\n"); + grammarBuilder.append("KW3463 : 'KW' '3463';\n"); + grammarBuilder.append("KW3464 : 'KW' '3464';\n"); + grammarBuilder.append("KW3465 : 'KW' '3465';\n"); + grammarBuilder.append("KW3466 : 'KW' '3466';\n"); + grammarBuilder.append("KW3467 : 'KW' '3467';\n"); + grammarBuilder.append("KW3468 : 'KW' '3468';\n"); + grammarBuilder.append("KW3469 : 'KW' '3469';\n"); + grammarBuilder.append("KW3470 : 'KW' '3470';\n"); + grammarBuilder.append("KW3471 : 'KW' '3471';\n"); + grammarBuilder.append("KW3472 : 'KW' '3472';\n"); + grammarBuilder.append("KW3473 : 'KW' '3473';\n"); + grammarBuilder.append("KW3474 : 'KW' '3474';\n"); + grammarBuilder.append("KW3475 : 'KW' '3475';\n"); + grammarBuilder.append("KW3476 : 'KW' '3476';\n"); + grammarBuilder.append("KW3477 : 'KW' '3477';\n"); + grammarBuilder.append("KW3478 : 'KW' '3478';\n"); + grammarBuilder.append("KW3479 : 'KW' '3479';\n"); + grammarBuilder.append("KW3480 : 'KW' '3480';\n"); + grammarBuilder.append("KW3481 : 'KW' '3481';\n"); + grammarBuilder.append("KW3482 : 'KW' '3482';\n"); + grammarBuilder.append("KW3483 : 'KW' '3483';\n"); + grammarBuilder.append("KW3484 : 'KW' '3484';\n"); + grammarBuilder.append("KW3485 : 'KW' '3485';\n"); + grammarBuilder.append("KW3486 : 'KW' '3486';\n"); + grammarBuilder.append("KW3487 : 'KW' '3487';\n"); + grammarBuilder.append("KW3488 : 'KW' '3488';\n"); + grammarBuilder.append("KW3489 : 'KW' '3489';\n"); + grammarBuilder.append("KW3490 : 'KW' '3490';\n"); + grammarBuilder.append("KW3491 : 'KW' '3491';\n"); + grammarBuilder.append("KW3492 : 'KW' '3492';\n"); + grammarBuilder.append("KW3493 : 'KW' '3493';\n"); + grammarBuilder.append("KW3494 : 'KW' '3494';\n"); + grammarBuilder.append("KW3495 : 'KW' '3495';\n"); + grammarBuilder.append("KW3496 : 'KW' '3496';\n"); + grammarBuilder.append("KW3497 : 'KW' '3497';\n"); + grammarBuilder.append("KW3498 : 'KW' '3498';\n"); + grammarBuilder.append("KW3499 : 'KW' '3499';\n"); + grammarBuilder.append("KW3500 : 'KW' '3500';\n"); + grammarBuilder.append("KW3501 : 'KW' '3501';\n"); + grammarBuilder.append("KW3502 : 'KW' '3502';\n"); + grammarBuilder.append("KW3503 : 'KW' '3503';\n"); + grammarBuilder.append("KW3504 : 'KW' '3504';\n"); + grammarBuilder.append("KW3505 : 'KW' '3505';\n"); + grammarBuilder.append("KW3506 : 'KW' '3506';\n"); + grammarBuilder.append("KW3507 : 'KW' '3507';\n"); + grammarBuilder.append("KW3508 : 'KW' '3508';\n"); + grammarBuilder.append("KW3509 : 'KW' '3509';\n"); + grammarBuilder.append("KW3510 : 'KW' '3510';\n"); + grammarBuilder.append("KW3511 : 'KW' '3511';\n"); + grammarBuilder.append("KW3512 : 'KW' '3512';\n"); + grammarBuilder.append("KW3513 : 'KW' '3513';\n"); + grammarBuilder.append("KW3514 : 'KW' '3514';\n"); + grammarBuilder.append("KW3515 : 'KW' '3515';\n"); + grammarBuilder.append("KW3516 : 'KW' '3516';\n"); + grammarBuilder.append("KW3517 : 'KW' '3517';\n"); + grammarBuilder.append("KW3518 : 'KW' '3518';\n"); + grammarBuilder.append("KW3519 : 'KW' '3519';\n"); + grammarBuilder.append("KW3520 : 'KW' '3520';\n"); + grammarBuilder.append("KW3521 : 'KW' '3521';\n"); + grammarBuilder.append("KW3522 : 'KW' '3522';\n"); + grammarBuilder.append("KW3523 : 'KW' '3523';\n"); + grammarBuilder.append("KW3524 : 'KW' '3524';\n"); + grammarBuilder.append("KW3525 : 'KW' '3525';\n"); + grammarBuilder.append("KW3526 : 'KW' '3526';\n"); + grammarBuilder.append("KW3527 : 'KW' '3527';\n"); + grammarBuilder.append("KW3528 : 'KW' '3528';\n"); + grammarBuilder.append("KW3529 : 'KW' '3529';\n"); + grammarBuilder.append("KW3530 : 'KW' '3530';\n"); + grammarBuilder.append("KW3531 : 'KW' '3531';\n"); + grammarBuilder.append("KW3532 : 'KW' '3532';\n"); + grammarBuilder.append("KW3533 : 'KW' '3533';\n"); + grammarBuilder.append("KW3534 : 'KW' '3534';\n"); + grammarBuilder.append("KW3535 : 'KW' '3535';\n"); + grammarBuilder.append("KW3536 : 'KW' '3536';\n"); + grammarBuilder.append("KW3537 : 'KW' '3537';\n"); + grammarBuilder.append("KW3538 : 'KW' '3538';\n"); + grammarBuilder.append("KW3539 : 'KW' '3539';\n"); + grammarBuilder.append("KW3540 : 'KW' '3540';\n"); + grammarBuilder.append("KW3541 : 'KW' '3541';\n"); + grammarBuilder.append("KW3542 : 'KW' '3542';\n"); + grammarBuilder.append("KW3543 : 'KW' '3543';\n"); + grammarBuilder.append("KW3544 : 'KW' '3544';\n"); + grammarBuilder.append("KW3545 : 'KW' '3545';\n"); + grammarBuilder.append("KW3546 : 'KW' '3546';\n"); + grammarBuilder.append("KW3547 : 'KW' '3547';\n"); + grammarBuilder.append("KW3548 : 'KW' '3548';\n"); + grammarBuilder.append("KW3549 : 'KW' '3549';\n"); + grammarBuilder.append("KW3550 : 'KW' '3550';\n"); + grammarBuilder.append("KW3551 : 'KW' '3551';\n"); + grammarBuilder.append("KW3552 : 'KW' '3552';\n"); + grammarBuilder.append("KW3553 : 'KW' '3553';\n"); + grammarBuilder.append("KW3554 : 'KW' '3554';\n"); + grammarBuilder.append("KW3555 : 'KW' '3555';\n"); + grammarBuilder.append("KW3556 : 'KW' '3556';\n"); + grammarBuilder.append("KW3557 : 'KW' '3557';\n"); + grammarBuilder.append("KW3558 : 'KW' '3558';\n"); + grammarBuilder.append("KW3559 : 'KW' '3559';\n"); + grammarBuilder.append("KW3560 : 'KW' '3560';\n"); + grammarBuilder.append("KW3561 : 'KW' '3561';\n"); + grammarBuilder.append("KW3562 : 'KW' '3562';\n"); + grammarBuilder.append("KW3563 : 'KW' '3563';\n"); + grammarBuilder.append("KW3564 : 'KW' '3564';\n"); + grammarBuilder.append("KW3565 : 'KW' '3565';\n"); + grammarBuilder.append("KW3566 : 'KW' '3566';\n"); + grammarBuilder.append("KW3567 : 'KW' '3567';\n"); + grammarBuilder.append("KW3568 : 'KW' '3568';\n"); + grammarBuilder.append("KW3569 : 'KW' '3569';\n"); + grammarBuilder.append("KW3570 : 'KW' '3570';\n"); + grammarBuilder.append("KW3571 : 'KW' '3571';\n"); + grammarBuilder.append("KW3572 : 'KW' '3572';\n"); + grammarBuilder.append("KW3573 : 'KW' '3573';\n"); + grammarBuilder.append("KW3574 : 'KW' '3574';\n"); + grammarBuilder.append("KW3575 : 'KW' '3575';\n"); + grammarBuilder.append("KW3576 : 'KW' '3576';\n"); + grammarBuilder.append("KW3577 : 'KW' '3577';\n"); + grammarBuilder.append("KW3578 : 'KW' '3578';\n"); + grammarBuilder.append("KW3579 : 'KW' '3579';\n"); + grammarBuilder.append("KW3580 : 'KW' '3580';\n"); + grammarBuilder.append("KW3581 : 'KW' '3581';\n"); + grammarBuilder.append("KW3582 : 'KW' '3582';\n"); + grammarBuilder.append("KW3583 : 'KW' '3583';\n"); + grammarBuilder.append("KW3584 : 'KW' '3584';\n"); + grammarBuilder.append("KW3585 : 'KW' '3585';\n"); + grammarBuilder.append("KW3586 : 'KW' '3586';\n"); + grammarBuilder.append("KW3587 : 'KW' '3587';\n"); + grammarBuilder.append("KW3588 : 'KW' '3588';\n"); + grammarBuilder.append("KW3589 : 'KW' '3589';\n"); + grammarBuilder.append("KW3590 : 'KW' '3590';\n"); + grammarBuilder.append("KW3591 : 'KW' '3591';\n"); + grammarBuilder.append("KW3592 : 'KW' '3592';\n"); + grammarBuilder.append("KW3593 : 'KW' '3593';\n"); + grammarBuilder.append("KW3594 : 'KW' '3594';\n"); + grammarBuilder.append("KW3595 : 'KW' '3595';\n"); + grammarBuilder.append("KW3596 : 'KW' '3596';\n"); + grammarBuilder.append("KW3597 : 'KW' '3597';\n"); + grammarBuilder.append("KW3598 : 'KW' '3598';\n"); + grammarBuilder.append("KW3599 : 'KW' '3599';\n"); + grammarBuilder.append("KW3600 : 'KW' '3600';\n"); + grammarBuilder.append("KW3601 : 'KW' '3601';\n"); + grammarBuilder.append("KW3602 : 'KW' '3602';\n"); + grammarBuilder.append("KW3603 : 'KW' '3603';\n"); + grammarBuilder.append("KW3604 : 'KW' '3604';\n"); + grammarBuilder.append("KW3605 : 'KW' '3605';\n"); + grammarBuilder.append("KW3606 : 'KW' '3606';\n"); + grammarBuilder.append("KW3607 : 'KW' '3607';\n"); + grammarBuilder.append("KW3608 : 'KW' '3608';\n"); + grammarBuilder.append("KW3609 : 'KW' '3609';\n"); + grammarBuilder.append("KW3610 : 'KW' '3610';\n"); + grammarBuilder.append("KW3611 : 'KW' '3611';\n"); + grammarBuilder.append("KW3612 : 'KW' '3612';\n"); + grammarBuilder.append("KW3613 : 'KW' '3613';\n"); + grammarBuilder.append("KW3614 : 'KW' '3614';\n"); + grammarBuilder.append("KW3615 : 'KW' '3615';\n"); + grammarBuilder.append("KW3616 : 'KW' '3616';\n"); + grammarBuilder.append("KW3617 : 'KW' '3617';\n"); + grammarBuilder.append("KW3618 : 'KW' '3618';\n"); + grammarBuilder.append("KW3619 : 'KW' '3619';\n"); + grammarBuilder.append("KW3620 : 'KW' '3620';\n"); + grammarBuilder.append("KW3621 : 'KW' '3621';\n"); + grammarBuilder.append("KW3622 : 'KW' '3622';\n"); + grammarBuilder.append("KW3623 : 'KW' '3623';\n"); + grammarBuilder.append("KW3624 : 'KW' '3624';\n"); + grammarBuilder.append("KW3625 : 'KW' '3625';\n"); + grammarBuilder.append("KW3626 : 'KW' '3626';\n"); + grammarBuilder.append("KW3627 : 'KW' '3627';\n"); + grammarBuilder.append("KW3628 : 'KW' '3628';\n"); + grammarBuilder.append("KW3629 : 'KW' '3629';\n"); + grammarBuilder.append("KW3630 : 'KW' '3630';\n"); + grammarBuilder.append("KW3631 : 'KW' '3631';\n"); + grammarBuilder.append("KW3632 : 'KW' '3632';\n"); + grammarBuilder.append("KW3633 : 'KW' '3633';\n"); + grammarBuilder.append("KW3634 : 'KW' '3634';\n"); + grammarBuilder.append("KW3635 : 'KW' '3635';\n"); + grammarBuilder.append("KW3636 : 'KW' '3636';\n"); + grammarBuilder.append("KW3637 : 'KW' '3637';\n"); + grammarBuilder.append("KW3638 : 'KW' '3638';\n"); + grammarBuilder.append("KW3639 : 'KW' '3639';\n"); + grammarBuilder.append("KW3640 : 'KW' '3640';\n"); + grammarBuilder.append("KW3641 : 'KW' '3641';\n"); + grammarBuilder.append("KW3642 : 'KW' '3642';\n"); + grammarBuilder.append("KW3643 : 'KW' '3643';\n"); + grammarBuilder.append("KW3644 : 'KW' '3644';\n"); + grammarBuilder.append("KW3645 : 'KW' '3645';\n"); + grammarBuilder.append("KW3646 : 'KW' '3646';\n"); + grammarBuilder.append("KW3647 : 'KW' '3647';\n"); + grammarBuilder.append("KW3648 : 'KW' '3648';\n"); + grammarBuilder.append("KW3649 : 'KW' '3649';\n"); + grammarBuilder.append("KW3650 : 'KW' '3650';\n"); + grammarBuilder.append("KW3651 : 'KW' '3651';\n"); + grammarBuilder.append("KW3652 : 'KW' '3652';\n"); + grammarBuilder.append("KW3653 : 'KW' '3653';\n"); + grammarBuilder.append("KW3654 : 'KW' '3654';\n"); + grammarBuilder.append("KW3655 : 'KW' '3655';\n"); + grammarBuilder.append("KW3656 : 'KW' '3656';\n"); + grammarBuilder.append("KW3657 : 'KW' '3657';\n"); + grammarBuilder.append("KW3658 : 'KW' '3658';\n"); + grammarBuilder.append("KW3659 : 'KW' '3659';\n"); + grammarBuilder.append("KW3660 : 'KW' '3660';\n"); + grammarBuilder.append("KW3661 : 'KW' '3661';\n"); + grammarBuilder.append("KW3662 : 'KW' '3662';\n"); + grammarBuilder.append("KW3663 : 'KW' '3663';\n"); + grammarBuilder.append("KW3664 : 'KW' '3664';\n"); + grammarBuilder.append("KW3665 : 'KW' '3665';\n"); + grammarBuilder.append("KW3666 : 'KW' '3666';\n"); + grammarBuilder.append("KW3667 : 'KW' '3667';\n"); + grammarBuilder.append("KW3668 : 'KW' '3668';\n"); + grammarBuilder.append("KW3669 : 'KW' '3669';\n"); + grammarBuilder.append("KW3670 : 'KW' '3670';\n"); + grammarBuilder.append("KW3671 : 'KW' '3671';\n"); + grammarBuilder.append("KW3672 : 'KW' '3672';\n"); + grammarBuilder.append("KW3673 : 'KW' '3673';\n"); + grammarBuilder.append("KW3674 : 'KW' '3674';\n"); + grammarBuilder.append("KW3675 : 'KW' '3675';\n"); + grammarBuilder.append("KW3676 : 'KW' '3676';\n"); + grammarBuilder.append("KW3677 : 'KW' '3677';\n"); + grammarBuilder.append("KW3678 : 'KW' '3678';\n"); + grammarBuilder.append("KW3679 : 'KW' '3679';\n"); + grammarBuilder.append("KW3680 : 'KW' '3680';\n"); + grammarBuilder.append("KW3681 : 'KW' '3681';\n"); + grammarBuilder.append("KW3682 : 'KW' '3682';\n"); + grammarBuilder.append("KW3683 : 'KW' '3683';\n"); + grammarBuilder.append("KW3684 : 'KW' '3684';\n"); + grammarBuilder.append("KW3685 : 'KW' '3685';\n"); + grammarBuilder.append("KW3686 : 'KW' '3686';\n"); + grammarBuilder.append("KW3687 : 'KW' '3687';\n"); + grammarBuilder.append("KW3688 : 'KW' '3688';\n"); + grammarBuilder.append("KW3689 : 'KW' '3689';\n"); + grammarBuilder.append("KW3690 : 'KW' '3690';\n"); + grammarBuilder.append("KW3691 : 'KW' '3691';\n"); + grammarBuilder.append("KW3692 : 'KW' '3692';\n"); + grammarBuilder.append("KW3693 : 'KW' '3693';\n"); + grammarBuilder.append("KW3694 : 'KW' '3694';\n"); + grammarBuilder.append("KW3695 : 'KW' '3695';\n"); + grammarBuilder.append("KW3696 : 'KW' '3696';\n"); + grammarBuilder.append("KW3697 : 'KW' '3697';\n"); + grammarBuilder.append("KW3698 : 'KW' '3698';\n"); + grammarBuilder.append("KW3699 : 'KW' '3699';\n"); + grammarBuilder.append("KW3700 : 'KW' '3700';\n"); + grammarBuilder.append("KW3701 : 'KW' '3701';\n"); + grammarBuilder.append("KW3702 : 'KW' '3702';\n"); + grammarBuilder.append("KW3703 : 'KW' '3703';\n"); + grammarBuilder.append("KW3704 : 'KW' '3704';\n"); + grammarBuilder.append("KW3705 : 'KW' '3705';\n"); + grammarBuilder.append("KW3706 : 'KW' '3706';\n"); + grammarBuilder.append("KW3707 : 'KW' '3707';\n"); + grammarBuilder.append("KW3708 : 'KW' '3708';\n"); + grammarBuilder.append("KW3709 : 'KW' '3709';\n"); + grammarBuilder.append("KW3710 : 'KW' '3710';\n"); + grammarBuilder.append("KW3711 : 'KW' '3711';\n"); + grammarBuilder.append("KW3712 : 'KW' '3712';\n"); + grammarBuilder.append("KW3713 : 'KW' '3713';\n"); + grammarBuilder.append("KW3714 : 'KW' '3714';\n"); + grammarBuilder.append("KW3715 : 'KW' '3715';\n"); + grammarBuilder.append("KW3716 : 'KW' '3716';\n"); + grammarBuilder.append("KW3717 : 'KW' '3717';\n"); + grammarBuilder.append("KW3718 : 'KW' '3718';\n"); + grammarBuilder.append("KW3719 : 'KW' '3719';\n"); + grammarBuilder.append("KW3720 : 'KW' '3720';\n"); + grammarBuilder.append("KW3721 : 'KW' '3721';\n"); + grammarBuilder.append("KW3722 : 'KW' '3722';\n"); + grammarBuilder.append("KW3723 : 'KW' '3723';\n"); + grammarBuilder.append("KW3724 : 'KW' '3724';\n"); + grammarBuilder.append("KW3725 : 'KW' '3725';\n"); + grammarBuilder.append("KW3726 : 'KW' '3726';\n"); + grammarBuilder.append("KW3727 : 'KW' '3727';\n"); + grammarBuilder.append("KW3728 : 'KW' '3728';\n"); + grammarBuilder.append("KW3729 : 'KW' '3729';\n"); + grammarBuilder.append("KW3730 : 'KW' '3730';\n"); + grammarBuilder.append("KW3731 : 'KW' '3731';\n"); + grammarBuilder.append("KW3732 : 'KW' '3732';\n"); + grammarBuilder.append("KW3733 : 'KW' '3733';\n"); + grammarBuilder.append("KW3734 : 'KW' '3734';\n"); + grammarBuilder.append("KW3735 : 'KW' '3735';\n"); + grammarBuilder.append("KW3736 : 'KW' '3736';\n"); + grammarBuilder.append("KW3737 : 'KW' '3737';\n"); + grammarBuilder.append("KW3738 : 'KW' '3738';\n"); + grammarBuilder.append("KW3739 : 'KW' '3739';\n"); + grammarBuilder.append("KW3740 : 'KW' '3740';\n"); + grammarBuilder.append("KW3741 : 'KW' '3741';\n"); + grammarBuilder.append("KW3742 : 'KW' '3742';\n"); + grammarBuilder.append("KW3743 : 'KW' '3743';\n"); + grammarBuilder.append("KW3744 : 'KW' '3744';\n"); + grammarBuilder.append("KW3745 : 'KW' '3745';\n"); + grammarBuilder.append("KW3746 : 'KW' '3746';\n"); + grammarBuilder.append("KW3747 : 'KW' '3747';\n"); + grammarBuilder.append("KW3748 : 'KW' '3748';\n"); + grammarBuilder.append("KW3749 : 'KW' '3749';\n"); + grammarBuilder.append("KW3750 : 'KW' '3750';\n"); + grammarBuilder.append("KW3751 : 'KW' '3751';\n"); + grammarBuilder.append("KW3752 : 'KW' '3752';\n"); + grammarBuilder.append("KW3753 : 'KW' '3753';\n"); + grammarBuilder.append("KW3754 : 'KW' '3754';\n"); + grammarBuilder.append("KW3755 : 'KW' '3755';\n"); + grammarBuilder.append("KW3756 : 'KW' '3756';\n"); + grammarBuilder.append("KW3757 : 'KW' '3757';\n"); + grammarBuilder.append("KW3758 : 'KW' '3758';\n"); + grammarBuilder.append("KW3759 : 'KW' '3759';\n"); + grammarBuilder.append("KW3760 : 'KW' '3760';\n"); + grammarBuilder.append("KW3761 : 'KW' '3761';\n"); + grammarBuilder.append("KW3762 : 'KW' '3762';\n"); + grammarBuilder.append("KW3763 : 'KW' '3763';\n"); + grammarBuilder.append("KW3764 : 'KW' '3764';\n"); + grammarBuilder.append("KW3765 : 'KW' '3765';\n"); + grammarBuilder.append("KW3766 : 'KW' '3766';\n"); + grammarBuilder.append("KW3767 : 'KW' '3767';\n"); + grammarBuilder.append("KW3768 : 'KW' '3768';\n"); + grammarBuilder.append("KW3769 : 'KW' '3769';\n"); + grammarBuilder.append("KW3770 : 'KW' '3770';\n"); + grammarBuilder.append("KW3771 : 'KW' '3771';\n"); + grammarBuilder.append("KW3772 : 'KW' '3772';\n"); + grammarBuilder.append("KW3773 : 'KW' '3773';\n"); + grammarBuilder.append("KW3774 : 'KW' '3774';\n"); + grammarBuilder.append("KW3775 : 'KW' '3775';\n"); + grammarBuilder.append("KW3776 : 'KW' '3776';\n"); + grammarBuilder.append("KW3777 : 'KW' '3777';\n"); + grammarBuilder.append("KW3778 : 'KW' '3778';\n"); + grammarBuilder.append("KW3779 : 'KW' '3779';\n"); + grammarBuilder.append("KW3780 : 'KW' '3780';\n"); + grammarBuilder.append("KW3781 : 'KW' '3781';\n"); + grammarBuilder.append("KW3782 : 'KW' '3782';\n"); + grammarBuilder.append("KW3783 : 'KW' '3783';\n"); + grammarBuilder.append("KW3784 : 'KW' '3784';\n"); + grammarBuilder.append("KW3785 : 'KW' '3785';\n"); + grammarBuilder.append("KW3786 : 'KW' '3786';\n"); + grammarBuilder.append("KW3787 : 'KW' '3787';\n"); + grammarBuilder.append("KW3788 : 'KW' '3788';\n"); + grammarBuilder.append("KW3789 : 'KW' '3789';\n"); + grammarBuilder.append("KW3790 : 'KW' '3790';\n"); + grammarBuilder.append("KW3791 : 'KW' '3791';\n"); + grammarBuilder.append("KW3792 : 'KW' '3792';\n"); + grammarBuilder.append("KW3793 : 'KW' '3793';\n"); + grammarBuilder.append("KW3794 : 'KW' '3794';\n"); + grammarBuilder.append("KW3795 : 'KW' '3795';\n"); + grammarBuilder.append("KW3796 : 'KW' '3796';\n"); + grammarBuilder.append("KW3797 : 'KW' '3797';\n"); + grammarBuilder.append("KW3798 : 'KW' '3798';\n"); + grammarBuilder.append("KW3799 : 'KW' '3799';\n"); + grammarBuilder.append("KW3800 : 'KW' '3800';\n"); + grammarBuilder.append("KW3801 : 'KW' '3801';\n"); + grammarBuilder.append("KW3802 : 'KW' '3802';\n"); + grammarBuilder.append("KW3803 : 'KW' '3803';\n"); + grammarBuilder.append("KW3804 : 'KW' '3804';\n"); + grammarBuilder.append("KW3805 : 'KW' '3805';\n"); + grammarBuilder.append("KW3806 : 'KW' '3806';\n"); + grammarBuilder.append("KW3807 : 'KW' '3807';\n"); + grammarBuilder.append("KW3808 : 'KW' '3808';\n"); + grammarBuilder.append("KW3809 : 'KW' '3809';\n"); + grammarBuilder.append("KW3810 : 'KW' '3810';\n"); + grammarBuilder.append("KW3811 : 'KW' '3811';\n"); + grammarBuilder.append("KW3812 : 'KW' '3812';\n"); + grammarBuilder.append("KW3813 : 'KW' '3813';\n"); + grammarBuilder.append("KW3814 : 'KW' '3814';\n"); + grammarBuilder.append("KW3815 : 'KW' '3815';\n"); + grammarBuilder.append("KW3816 : 'KW' '3816';\n"); + grammarBuilder.append("KW3817 : 'KW' '3817';\n"); + grammarBuilder.append("KW3818 : 'KW' '3818';\n"); + grammarBuilder.append("KW3819 : 'KW' '3819';\n"); + grammarBuilder.append("KW3820 : 'KW' '3820';\n"); + grammarBuilder.append("KW3821 : 'KW' '3821';\n"); + grammarBuilder.append("KW3822 : 'KW' '3822';\n"); + grammarBuilder.append("KW3823 : 'KW' '3823';\n"); + grammarBuilder.append("KW3824 : 'KW' '3824';\n"); + grammarBuilder.append("KW3825 : 'KW' '3825';\n"); + grammarBuilder.append("KW3826 : 'KW' '3826';\n"); + grammarBuilder.append("KW3827 : 'KW' '3827';\n"); + grammarBuilder.append("KW3828 : 'KW' '3828';\n"); + grammarBuilder.append("KW3829 : 'KW' '3829';\n"); + grammarBuilder.append("KW3830 : 'KW' '3830';\n"); + grammarBuilder.append("KW3831 : 'KW' '3831';\n"); + grammarBuilder.append("KW3832 : 'KW' '3832';\n"); + grammarBuilder.append("KW3833 : 'KW' '3833';\n"); + grammarBuilder.append("KW3834 : 'KW' '3834';\n"); + grammarBuilder.append("KW3835 : 'KW' '3835';\n"); + grammarBuilder.append("KW3836 : 'KW' '3836';\n"); + grammarBuilder.append("KW3837 : 'KW' '3837';\n"); + grammarBuilder.append("KW3838 : 'KW' '3838';\n"); + grammarBuilder.append("KW3839 : 'KW' '3839';\n"); + grammarBuilder.append("KW3840 : 'KW' '3840';\n"); + grammarBuilder.append("KW3841 : 'KW' '3841';\n"); + grammarBuilder.append("KW3842 : 'KW' '3842';\n"); + grammarBuilder.append("KW3843 : 'KW' '3843';\n"); + grammarBuilder.append("KW3844 : 'KW' '3844';\n"); + grammarBuilder.append("KW3845 : 'KW' '3845';\n"); + grammarBuilder.append("KW3846 : 'KW' '3846';\n"); + grammarBuilder.append("KW3847 : 'KW' '3847';\n"); + grammarBuilder.append("KW3848 : 'KW' '3848';\n"); + grammarBuilder.append("KW3849 : 'KW' '3849';\n"); + grammarBuilder.append("KW3850 : 'KW' '3850';\n"); + grammarBuilder.append("KW3851 : 'KW' '3851';\n"); + grammarBuilder.append("KW3852 : 'KW' '3852';\n"); + grammarBuilder.append("KW3853 : 'KW' '3853';\n"); + grammarBuilder.append("KW3854 : 'KW' '3854';\n"); + grammarBuilder.append("KW3855 : 'KW' '3855';\n"); + grammarBuilder.append("KW3856 : 'KW' '3856';\n"); + grammarBuilder.append("KW3857 : 'KW' '3857';\n"); + grammarBuilder.append("KW3858 : 'KW' '3858';\n"); + grammarBuilder.append("KW3859 : 'KW' '3859';\n"); + grammarBuilder.append("KW3860 : 'KW' '3860';\n"); + grammarBuilder.append("KW3861 : 'KW' '3861';\n"); + grammarBuilder.append("KW3862 : 'KW' '3862';\n"); + grammarBuilder.append("KW3863 : 'KW' '3863';\n"); + grammarBuilder.append("KW3864 : 'KW' '3864';\n"); + grammarBuilder.append("KW3865 : 'KW' '3865';\n"); + grammarBuilder.append("KW3866 : 'KW' '3866';\n"); + grammarBuilder.append("KW3867 : 'KW' '3867';\n"); + grammarBuilder.append("KW3868 : 'KW' '3868';\n"); + grammarBuilder.append("KW3869 : 'KW' '3869';\n"); + grammarBuilder.append("KW3870 : 'KW' '3870';\n"); + grammarBuilder.append("KW3871 : 'KW' '3871';\n"); + grammarBuilder.append("KW3872 : 'KW' '3872';\n"); + grammarBuilder.append("KW3873 : 'KW' '3873';\n"); + grammarBuilder.append("KW3874 : 'KW' '3874';\n"); + grammarBuilder.append("KW3875 : 'KW' '3875';\n"); + grammarBuilder.append("KW3876 : 'KW' '3876';\n"); + grammarBuilder.append("KW3877 : 'KW' '3877';\n"); + grammarBuilder.append("KW3878 : 'KW' '3878';\n"); + grammarBuilder.append("KW3879 : 'KW' '3879';\n"); + grammarBuilder.append("KW3880 : 'KW' '3880';\n"); + grammarBuilder.append("KW3881 : 'KW' '3881';\n"); + grammarBuilder.append("KW3882 : 'KW' '3882';\n"); + grammarBuilder.append("KW3883 : 'KW' '3883';\n"); + grammarBuilder.append("KW3884 : 'KW' '3884';\n"); + grammarBuilder.append("KW3885 : 'KW' '3885';\n"); + grammarBuilder.append("KW3886 : 'KW' '3886';\n"); + grammarBuilder.append("KW3887 : 'KW' '3887';\n"); + grammarBuilder.append("KW3888 : 'KW' '3888';\n"); + grammarBuilder.append("KW3889 : 'KW' '3889';\n"); + grammarBuilder.append("KW3890 : 'KW' '3890';\n"); + grammarBuilder.append("KW3891 : 'KW' '3891';\n"); + grammarBuilder.append("KW3892 : 'KW' '3892';\n"); + grammarBuilder.append("KW3893 : 'KW' '3893';\n"); + grammarBuilder.append("KW3894 : 'KW' '3894';\n"); + grammarBuilder.append("KW3895 : 'KW' '3895';\n"); + grammarBuilder.append("KW3896 : 'KW' '3896';\n"); + grammarBuilder.append("KW3897 : 'KW' '3897';\n"); + grammarBuilder.append("KW3898 : 'KW' '3898';\n"); + grammarBuilder.append("KW3899 : 'KW' '3899';\n"); + grammarBuilder.append("KW3900 : 'KW' '3900';\n"); + grammarBuilder.append("KW3901 : 'KW' '3901';\n"); + grammarBuilder.append("KW3902 : 'KW' '3902';\n"); + grammarBuilder.append("KW3903 : 'KW' '3903';\n"); + grammarBuilder.append("KW3904 : 'KW' '3904';\n"); + grammarBuilder.append("KW3905 : 'KW' '3905';\n"); + grammarBuilder.append("KW3906 : 'KW' '3906';\n"); + grammarBuilder.append("KW3907 : 'KW' '3907';\n"); + grammarBuilder.append("KW3908 : 'KW' '3908';\n"); + grammarBuilder.append("KW3909 : 'KW' '3909';\n"); + grammarBuilder.append("KW3910 : 'KW' '3910';\n"); + grammarBuilder.append("KW3911 : 'KW' '3911';\n"); + grammarBuilder.append("KW3912 : 'KW' '3912';\n"); + grammarBuilder.append("KW3913 : 'KW' '3913';\n"); + grammarBuilder.append("KW3914 : 'KW' '3914';\n"); + grammarBuilder.append("KW3915 : 'KW' '3915';\n"); + grammarBuilder.append("KW3916 : 'KW' '3916';\n"); + grammarBuilder.append("KW3917 : 'KW' '3917';\n"); + grammarBuilder.append("KW3918 : 'KW' '3918';\n"); + grammarBuilder.append("KW3919 : 'KW' '3919';\n"); + grammarBuilder.append("KW3920 : 'KW' '3920';\n"); + grammarBuilder.append("KW3921 : 'KW' '3921';\n"); + grammarBuilder.append("KW3922 : 'KW' '3922';\n"); + grammarBuilder.append("KW3923 : 'KW' '3923';\n"); + grammarBuilder.append("KW3924 : 'KW' '3924';\n"); + grammarBuilder.append("KW3925 : 'KW' '3925';\n"); + grammarBuilder.append("KW3926 : 'KW' '3926';\n"); + grammarBuilder.append("KW3927 : 'KW' '3927';\n"); + grammarBuilder.append("KW3928 : 'KW' '3928';\n"); + grammarBuilder.append("KW3929 : 'KW' '3929';\n"); + grammarBuilder.append("KW3930 : 'KW' '3930';\n"); + grammarBuilder.append("KW3931 : 'KW' '3931';\n"); + grammarBuilder.append("KW3932 : 'KW' '3932';\n"); + grammarBuilder.append("KW3933 : 'KW' '3933';\n"); + grammarBuilder.append("KW3934 : 'KW' '3934';\n"); + grammarBuilder.append("KW3935 : 'KW' '3935';\n"); + grammarBuilder.append("KW3936 : 'KW' '3936';\n"); + grammarBuilder.append("KW3937 : 'KW' '3937';\n"); + grammarBuilder.append("KW3938 : 'KW' '3938';\n"); + grammarBuilder.append("KW3939 : 'KW' '3939';\n"); + grammarBuilder.append("KW3940 : 'KW' '3940';\n"); + grammarBuilder.append("KW3941 : 'KW' '3941';\n"); + grammarBuilder.append("KW3942 : 'KW' '3942';\n"); + grammarBuilder.append("KW3943 : 'KW' '3943';\n"); + grammarBuilder.append("KW3944 : 'KW' '3944';\n"); + grammarBuilder.append("KW3945 : 'KW' '3945';\n"); + grammarBuilder.append("KW3946 : 'KW' '3946';\n"); + grammarBuilder.append("KW3947 : 'KW' '3947';\n"); + grammarBuilder.append("KW3948 : 'KW' '3948';\n"); + grammarBuilder.append("KW3949 : 'KW' '3949';\n"); + grammarBuilder.append("KW3950 : 'KW' '3950';\n"); + grammarBuilder.append("KW3951 : 'KW' '3951';\n"); + grammarBuilder.append("KW3952 : 'KW' '3952';\n"); + grammarBuilder.append("KW3953 : 'KW' '3953';\n"); + grammarBuilder.append("KW3954 : 'KW' '3954';\n"); + grammarBuilder.append("KW3955 : 'KW' '3955';\n"); + grammarBuilder.append("KW3956 : 'KW' '3956';\n"); + grammarBuilder.append("KW3957 : 'KW' '3957';\n"); + grammarBuilder.append("KW3958 : 'KW' '3958';\n"); + grammarBuilder.append("KW3959 : 'KW' '3959';\n"); + grammarBuilder.append("KW3960 : 'KW' '3960';\n"); + grammarBuilder.append("KW3961 : 'KW' '3961';\n"); + grammarBuilder.append("KW3962 : 'KW' '3962';\n"); + grammarBuilder.append("KW3963 : 'KW' '3963';\n"); + grammarBuilder.append("KW3964 : 'KW' '3964';\n"); + grammarBuilder.append("KW3965 : 'KW' '3965';\n"); + grammarBuilder.append("KW3966 : 'KW' '3966';\n"); + grammarBuilder.append("KW3967 : 'KW' '3967';\n"); + grammarBuilder.append("KW3968 : 'KW' '3968';\n"); + grammarBuilder.append("KW3969 : 'KW' '3969';\n"); + grammarBuilder.append("KW3970 : 'KW' '3970';\n"); + grammarBuilder.append("KW3971 : 'KW' '3971';\n"); + grammarBuilder.append("KW3972 : 'KW' '3972';\n"); + grammarBuilder.append("KW3973 : 'KW' '3973';\n"); + grammarBuilder.append("KW3974 : 'KW' '3974';\n"); + grammarBuilder.append("KW3975 : 'KW' '3975';\n"); + grammarBuilder.append("KW3976 : 'KW' '3976';\n"); + grammarBuilder.append("KW3977 : 'KW' '3977';\n"); + grammarBuilder.append("KW3978 : 'KW' '3978';\n"); + grammarBuilder.append("KW3979 : 'KW' '3979';\n"); + grammarBuilder.append("KW3980 : 'KW' '3980';\n"); + grammarBuilder.append("KW3981 : 'KW' '3981';\n"); + grammarBuilder.append("KW3982 : 'KW' '3982';\n"); + grammarBuilder.append("KW3983 : 'KW' '3983';\n"); + grammarBuilder.append("KW3984 : 'KW' '3984';\n"); + grammarBuilder.append("KW3985 : 'KW' '3985';\n"); + grammarBuilder.append("KW3986 : 'KW' '3986';\n"); + grammarBuilder.append("KW3987 : 'KW' '3987';\n"); + grammarBuilder.append("KW3988 : 'KW' '3988';\n"); + grammarBuilder.append("KW3989 : 'KW' '3989';\n"); + grammarBuilder.append("KW3990 : 'KW' '3990';\n"); + grammarBuilder.append("KW3991 : 'KW' '3991';\n"); + grammarBuilder.append("KW3992 : 'KW' '3992';\n"); + grammarBuilder.append("KW3993 : 'KW' '3993';\n"); + grammarBuilder.append("KW3994 : 'KW' '3994';\n"); + grammarBuilder.append("KW3995 : 'KW' '3995';\n"); + grammarBuilder.append("KW3996 : 'KW' '3996';\n"); + grammarBuilder.append("KW3997 : 'KW' '3997';\n"); + grammarBuilder.append("KW3998 : 'KW' '3998';\n"); + grammarBuilder.append("KW3999 : 'KW' '3999';"); + String grammar = grammarBuilder.toString(); + + String input ="KW400"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='KW400',<402>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(148); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : .*? ('a' | 'ab') {System.out.println(this.getText());} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : . {System.out.println(this.getText());};"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "a\n" + + "b\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:1='b',<3>,1:1]\n" + + "[@2,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"hi\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:3='\"hi\"',<1>,1:0]\n" + + "[@1,4:8='\"mom\"',<1>,1:4]\n" + + "[@2,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParentheses() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("START_BLOCK: '-.-.-';\n"); + grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); + grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); + grammarBuilder.append("fragment L_A: '.-';\n"); + grammarBuilder.append("fragment L_K: '-.-';\n"); + grammarBuilder.append("SEPARATOR: '!';"); + String grammar = grammarBuilder.toString(); + + String input ="-.-.-!"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='-.-.-',<1>,1:0]\n" + + "[@1,5:5='!',<3>,1:5]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPositionAdjustingLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(2501); + grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("@Override\n"); + grammarBuilder.append("public Token nextToken() {\n"); + grammarBuilder.append(" if (!(_interp instanceof PositionAdjustingLexerATNSimulator)) {\n"); + grammarBuilder.append(" _interp = new PositionAdjustingLexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return super.nextToken();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@Override\n"); + grammarBuilder.append("public Token emit() {\n"); + grammarBuilder.append(" switch (_type) {\n"); + grammarBuilder.append(" case TOKENS:\n"); + grammarBuilder.append(" handleAcceptPositionForKeyword(\"tokens\");\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" case LABEL:\n"); + grammarBuilder.append(" handleAcceptPositionForIdentifier();\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" default:\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return super.emit();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("private boolean handleAcceptPositionForIdentifier() {\n"); + grammarBuilder.append(" String tokenText = getText();\n"); + grammarBuilder.append(" int identifierLength = 0;\n"); + grammarBuilder.append(" while (identifierLength < tokenText.length() && isIdentifierChar(tokenText.charAt(identifierLength))) {\n"); + grammarBuilder.append(" identifierLength++;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" if (getInputStream().index() > _tokenStartCharIndex + identifierLength) {\n"); + grammarBuilder.append(" int offset = identifierLength - 1;\n"); + grammarBuilder.append(" getInterpreter().resetAcceptPosition(getInputStream(), _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("private boolean handleAcceptPositionForKeyword(String keyword) {\n"); + grammarBuilder.append(" if (getInputStream().index() > _tokenStartCharIndex + keyword.length()) {\n"); + grammarBuilder.append(" int offset = keyword.length() - 1;\n"); + grammarBuilder.append(" getInterpreter().resetAcceptPosition(getInputStream(), _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@Override\n"); + grammarBuilder.append("public PositionAdjustingLexerATNSimulator getInterpreter() {\n"); + grammarBuilder.append(" return (PositionAdjustingLexerATNSimulator)super.getInterpreter();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("private static boolean isIdentifierChar(char c) {\n"); + grammarBuilder.append(" return Character.isLetterOrDigit(c) || c == '_';\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("protected static class PositionAdjustingLexerATNSimulator extends LexerATNSimulator {\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" public PositionAdjustingLexerATNSimulator(Lexer recog, ATN atn,\n"); + grammarBuilder.append(" DFA[] decisionToDFA,\n"); + grammarBuilder.append(" PredictionContextCache sharedContextCache)\n"); + grammarBuilder.append(" {\n"); + grammarBuilder.append(" super(recog, atn, decisionToDFA, sharedContextCache);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" protected void resetAcceptPosition(CharStream input, int index, int line, int charPositionInLine) {\n"); + grammarBuilder.append(" input.seek(index);\n"); + grammarBuilder.append(" this.line = line;\n"); + grammarBuilder.append(" this.charPositionInLine = charPositionInLine;\n"); + grammarBuilder.append(" consume(input);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ASSIGN : '=' ;\n"); + grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); + grammarBuilder.append("LCURLY: '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// 'tokens' followed by '{'\n"); + grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); + grammarBuilder.append("LABEL\n"); + grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("IDENTIFIER\n"); + grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("IGNORED\n"); + grammarBuilder.append(" : [ \\t\\r\\n]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("NEWLINE\n"); + grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS\n"); + grammarBuilder.append(" : [ \\t]+ -> skip\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + String input = + "tokens\n" + + "tokens {\n" + + "notLabel\n" + + "label1 =\n" + + "label2 +=\n" + + "notLabel\n"; + String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); + assertEquals( + "[@0,0:5='tokens',<6>,1:0]\n" + + "[@1,7:12='tokens',<4>,2:0]\n" + + "[@2,14:14='{',<3>,2:7]\n" + + "[@3,16:23='notLabel',<6>,3:0]\n" + + "[@4,25:30='label1',<5>,4:0]\n" + + "[@5,32:32='=',<1>,4:7]\n" + + "[@6,34:39='label2',<5>,5:0]\n" + + "[@7,41:42='+=',<2>,5:7]\n" + + "[@8,44:51='notLabel',<6>,6:0]\n" + + "[@9,53:52='',<-1>,7:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testQuoteTranslation() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); + String grammar = grammarBuilder.toString(); + + String input ="\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\"',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : '-' I ;\n"); + grammarBuilder.append("I : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 -21 3"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='34',<2>,1:0]\n" + + "[@1,3:5='-21',<1>,1:3]\n" + + "[@2,7:7='3',<2>,1:7]\n" + + "[@3,8:7='',<-1>,1:8]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSlashes() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("Backslash : '\\\\';\n"); + grammarBuilder.append("Slash : '/';\n"); + grammarBuilder.append("Vee : '\\\\/';\n"); + grammarBuilder.append("Wedge : '/\\\\';\n"); + grammarBuilder.append("WS : [ \\t] -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="\\ / \\/ /\\"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\\',<1>,1:0]\n" + + "[@1,2:2='/',<2>,1:2]\n" + + "[@2,4:5='\\/',<3>,1:4]\n" + + "[@3,7:8='/\\',<4>,1:7]\n" + + "[@4,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testZeroLengthToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("BeginString\n"); + grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("mode StringMode;\n"); + grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); + grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); + grammarBuilder.append("mode EndStringMode; \n"); + grammarBuilder.append(" EndString : '\\'' -> popMode;"); + String grammar = grammarBuilder.toString(); + + String input ="'xxx'"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4=''xxx'',<1>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestListeners.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestListeners.java new file mode 100644 index 000000000..1fff14686 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestListeners.java @@ -0,0 +1,363 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestListeners extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(453); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); + grammarBuilder.append(" public void visitTerminal(TerminalNode node) {\n"); + grammarBuilder.append(" System.out.println(node.getSymbol().getText());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1\n" + + "2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLR() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(633); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); + grammarBuilder.append(" public void exitE(TParser.EContext ctx) {\n"); + grammarBuilder.append(" if (ctx.getChildCount()==3) {\n"); + grammarBuilder.append(" System.out.printf(\"%s %s %s\\n\",ctx.e(0).start.getText(),\n"); + grammarBuilder.append(" ctx.e(1).start.getText(), ctx.e().get(0).start.getText());\n"); + grammarBuilder.append(" } else\n"); + grammarBuilder.append(" System.out.println(ctx.INT().getSymbol().getText());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e op='*' e\n"); + grammarBuilder.append(" | e op='+' e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) + (e (e 2) * (e 3)))\n" + + "1\n" + + "2\n" + + "3\n" + + "2 3 2\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLRWithLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(630); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); + grammarBuilder.append(" public void exitCall(TParser.CallContext ctx) {\n"); + grammarBuilder.append(" System.out.printf(\"%s %s\",ctx.e().start.getText(),ctx.eList());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" public void exitInt(TParser.IntContext ctx) {\n"); + grammarBuilder.append(" System.out.println(ctx.INT().getSymbol().getText());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e '(' eList ')' # Call\n"); + grammarBuilder.append(" | INT # Int\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("eList : e (',' e)* ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1(2,3)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + + "1\n" + + "2\n" + + "3\n" + + "1 [13 6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(650); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); + grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.getChildCount()==2) {\n"); + grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.b(0).start.getText(),\n"); + grammarBuilder.append(" ctx.b(1).start.getText(),ctx.b().get(0).start.getText());\n"); + grammarBuilder.append(" } else\n"); + grammarBuilder.append(" System.out.println(ctx.b(0).start.getText());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b 1) (b 2))\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(650); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); + grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.getChildCount()==2) {\n"); + grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.b(0).start.getText(),\n"); + grammarBuilder.append(" ctx.b(1).start.getText(),ctx.b().get(0).start.getText());\n"); + grammarBuilder.append(" } else\n"); + grammarBuilder.append(" System.out.println(ctx.b(0).start.getText());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b abc))\n" + + "abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(595); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); + grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.getChildCount()==2)\n"); + grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.INT(0).getSymbol().getText(),\n"); + grammarBuilder.append(" ctx.INT(1).getSymbol().getText(),ctx.INT());\n"); + grammarBuilder.append(" else\n"); + grammarBuilder.append(" System.out.println(ctx.ID().getSymbol());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1 2 [1, 2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(595); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); + grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); + grammarBuilder.append(" if (ctx.getChildCount()==2)\n"); + grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.INT(0).getSymbol().getText(),\n"); + grammarBuilder.append(" ctx.INT(1).getSymbol().getText(),ctx.INT());\n"); + grammarBuilder.append(" else\n"); + grammarBuilder.append(" System.out.println(ctx.ID().getSymbol());\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); + grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a abc)\n" + + "[@0,0:2='abc',<4>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParseTrees.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParseTrees.java new file mode 100644 index 000000000..43f7ee799 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParseTrees.java @@ -0,0 +1,310 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParseTrees extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2AltLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyyxyxz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y y x y x z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2Alts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(133); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAltNum() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(562); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("public static class MyRuleNode extends ParserRuleContext {\n"); + grammarBuilder.append(" public int altNum;\n"); + grammarBuilder.append(" public MyRuleNode(ParserRuleContext parent, int invokingStateNumber) {\n"); + grammarBuilder.append(" super(parent, invokingStateNumber);\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" @Override public int getAltNumber() { return altNum; }\n"); + grammarBuilder.append(" @Override public void setAltNumber(int altNum) { this.altNum = altNum; }\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("a : 'f'\n"); + grammarBuilder.append(" | 'g'\n"); + grammarBuilder.append(" | 'x' b 'z'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'e' {} | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a:3 x (b:2 y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExtraToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(146); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="xzy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(148); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a z)\n", found); + + assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleRef() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b 'x'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'y' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="yx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a (b y) x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSync() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'* '!'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xzyy!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y y !)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToken2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenAndRuleContextString() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(176); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("setBuildParseTree(true);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' { \n"); + grammarBuilder.append("System.out.println(getRuleInvocationStack());\n"); + grammarBuilder.append("} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "[a, s]\n" + + "(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserErrors.java new file mode 100644 index 000000000..bbbfcc04c --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserErrors.java @@ -0,0 +1,752 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserErrors extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x='b' {System.out.println(\"conjured=\" + $x);} 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpTokenFromSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(76); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x=('b'|'c') {System.out.println(\"conjured=\" + $x);} 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testContextListGetters() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(221); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members{\n"); + grammarBuilder.append("void foo() {\n"); + grammarBuilder.append(" SContext s = null;\n"); + grammarBuilder.append(" List a = s.a();\n"); + grammarBuilder.append(" List b = s.b();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : (a | b)+;\n"); + grammarBuilder.append("a : 'a' {System.out.print(\"a\");};\n"); + grammarBuilder.append("b : 'b' {System.out.print(\"b\");};"); + String grammar = grammarBuilder.toString(); + + + String input ="abab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("abab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidATNStateRemoval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input ="x:x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidEmptyInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID+;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + + assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1ErrorInfo() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(306); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); + grammarBuilder.append("animal : (DOG | CAT );\n"); + grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); + grammarBuilder.append("AND : 'and';\n"); + grammarBuilder.append("DOG : 'dog';\n"); + grammarBuilder.append("CAT : 'cat';\n"); + grammarBuilder.append("HARDWARE: 'hardware';\n"); + grammarBuilder.append("SOFTWARE: 'software';\n"); + grammarBuilder.append("WS : ' ' -> skip ;\n"); + grammarBuilder.append("acClass\n"); + grammarBuilder.append("@init\n"); + grammarBuilder.append("{System.out.println(this.getExpectedTokens().toString(this.tokenNames));}\n"); + grammarBuilder.append(" : ;"); + String grammar = grammarBuilder.toString(); + + + String input ="dog and software"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("{'hardware', 'software'}\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'\n"); + grammarBuilder.append(" | 'a' 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(55); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c'\n"); + grammarBuilder.append(" | 'a' 'b' 'd'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abe"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLLStar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aaae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAltAvoidance() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e '!' ;\n"); + grammarBuilder.append("e : 'a' 'b'\n"); + grammarBuilder.append(" | 'a'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a."; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(34); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(89); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {System.out.println(\"\" + $myset.stop);} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@0,0:0='a',<3>,1:0]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('b' | 'c')\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'a'\n"); + grammarBuilder.append(";"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(25); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(32); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforePredict() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="caaab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(89); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {System.out.println(\"\" + $myset.stop);} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="aabd"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@2,2:2='b',<1>,1:2]\n", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionExpectingSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); + grammarBuilder.append("expr: ID '=' STR ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="( ~FORCE_ERROR~ "; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserExec.java new file mode 100644 index 000000000..5a40846ae --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestParserExec.java @@ -0,0 +1,823 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserExec extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID+ {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(96); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)+ {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(96); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(96); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorB() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID {\n"); + grammarBuilder.append("System.out.println(\"alt 1\");\n"); + grammarBuilder.append("} | INT {\n"); + grammarBuilder.append("System.out.println(\"alt 2\");\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})+ {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(112); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID INT {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFInClosure() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : stat EOF;\n"); + grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(200); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(200); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(201); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(200); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(117); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(117); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("System.out.println($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : a* EOF;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : label=subrule {System.out.println($label.text);} #One\n"); + grammarBuilder.append(" | label='y' {System.out.println($label.text);} #Two\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("subrule : 'x';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "x\n" + + "y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); + grammarBuilder.append("b : id_=ID val+=INT*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelForClosureContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(462); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("ifStatement\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("List __ttt__ = $ctx.elseIfStatement();\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : 'if' expression\n"); + grammarBuilder.append(" ( ( 'then'\n"); + grammarBuilder.append(" executableStatement*\n"); + grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); + grammarBuilder.append(" elseStatement?\n"); + grammarBuilder.append(" 'end' 'if'\n"); + grammarBuilder.append(" ) | executableStatement )\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("elseIfStatement\n"); + grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expression : 'a' ;\n"); + grammarBuilder.append("executableStatement : 'a' ;\n"); + grammarBuilder.append("elseStatement : 'a' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelsOnSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b b* ';' ;\n"); + grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleEOFHandling() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(42); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserProperty() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(168); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("boolean Property() {\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("a : {$parser.Property()}? ID {System.out.println(\"valid\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("valid\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedIfIfElse() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(175); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : stmt EOF ;\n"); + grammarBuilder.append("stmt : ifStmt | ID;\n"); + grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { this._input.LA(1)!=TParser.ELSE }?);\n"); + grammarBuilder.append("ELSE : 'else';\n"); + grammarBuilder.append("ID : [a-zA-Z]+;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x if x a else b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredictionIssue334() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(255); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_ @init{\n"); + grammarBuilder.append("setErrorHandler(new BailErrorStrategy());\n"); + grammarBuilder.append("} \n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("System.out.println($ctx.toStringTree(this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); + grammarBuilder.append("item : A B?;\n"); + grammarBuilder.append("SEMICOLON: ';';\n"); + grammarBuilder.append("A : 'a'|'A';\n"); + grammarBuilder.append("B : 'b'|'B';\n"); + grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); + + assertEquals("(file_ (item a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(120); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {System.out.println($text);} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(120); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {System.out.println($text);} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestPerformance.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestPerformance.java new file mode 100644 index 000000000..2ced0bff2 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestPerformance.java @@ -0,0 +1,220 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestPerformance extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalLexer.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalLexer.java new file mode 100644 index 000000000..cef5e0f91 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalLexer.java @@ -0,0 +1,218 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalLexer extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisableRule() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("E1 : 'enum' { false }? ;\n"); + grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<3>,1:5]\n" + + "[@2,8:7='',<-1>,1:8]\n" + + "s0-' '->:s5=>4\n" + + "s0-'a'->:s6=>3\n" + + "s0-'e'->:s1=>3\n" + + ":s1=>3-'n'->:s2=>3\n" + + ":s2=>3-'u'->:s3=>3\n" + + ":s6=>3-'b'->:s6=>3\n" + + ":s6=>3-'c'->:s6=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnumNotID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(108); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { this.getText().equals(\"enum\") }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<1>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s3=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDnotEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s2=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDvsEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s5=>3\n" + + "s0-'a'->:s4=>2\n" + + "s0-'e'->:s1=>2\n" + + ":s1=>2-'n'->:s2=>2\n" + + ":s2=>2-'u'->:s3=>2\n" + + ":s4=>2-'b'->:s4=>2\n" + + ":s4=>2-'c'->:s4=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndent() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(161); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("INDENT : [ \\t]+ { this._tokenStartCharPositionInLine==0 }?\n"); + grammarBuilder.append(" { System.out.println(\"INDENT\"); } ;\n"); + grammarBuilder.append("NL : '\\n';\n"); + grammarBuilder.append("WS : [ \\t]+ ;"); + String grammar = grammarBuilder.toString(); + + String input = + "abc\n" + + " def \n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "INDENT\n" + + "[@0,0:2='abc',<1>,1:0]\n" + + "[@1,3:3='\\n',<3>,1:3]\n" + + "[@2,4:5=' ',<2>,2:0]\n" + + "[@3,6:8='def',<1>,2:2]\n" + + "[@4,9:10=' ',<4>,2:5]\n" + + "[@5,11:11='\\n',<3>,2:7]\n" + + "[@6,12:11='',<-1>,3:0]\n" + + "s0-'\n" + + "'->:s2=>3\n" + + "s0-'a'->:s1=>1\n" + + "s0-'d'->:s1=>1\n" + + ":s1=>1-'b'->:s1=>1\n" + + ":s1=>1-'c'->:s1=>1\n" + + ":s1=>1-'e'->:s1=>1\n" + + ":s1=>1-'f'->:s1=>1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerInputPositionSensitivePredicates() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(278); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WORD1 : ID1+ { System.out.println(this.getText()); } ;\n"); + grammarBuilder.append("WORD2 : ID2+ { System.out.println(this.getText()); } ;\n"); + grammarBuilder.append("fragment ID1 : { this.getCharPositionInLine() < 2 }? [a-zA-Z];\n"); + grammarBuilder.append("fragment ID2 : { this.getCharPositionInLine() >= 2 }? [a-zA-Z];\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input = + "a cde\n" + + "abcde\n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "a\n" + + "cde\n" + + "ab\n" + + "cde\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:4='cde',<2>,1:2]\n" + + "[@2,6:7='ab',<1>,2:0]\n" + + "[@3,8:10='cde',<2>,2:2]\n" + + "[@4,12:11='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedKeywords() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(187); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { this.getText().equals(\"enum\") }? { System.out.println(\"enum!\"); } ;\n"); + grammarBuilder.append("ID : [a-z]+ { System.out.println(\"ID \" + this.getText()); } ;\n"); + grammarBuilder.append("WS : [ \\n] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="enum enu a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "enum!\n" + + "ID enu\n" + + "ID a\n" + + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='enu',<2>,1:5]\n" + + "[@2,9:9='a',<2>,1:9]\n" + + "[@3,10:9='',<-1>,1:10]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalParser.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalParser.java new file mode 100644 index 000000000..08d2d1755 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSemPredEvalParser.java @@ -0,0 +1,789 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalParser extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAlts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(315); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);} a ';' a; // do 2x: once in ATN, next in DFA\n"); + grammarBuilder.append("a : ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" | {false}? ID {System.out.println(\"alt 3\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + + assertEquals( + "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + + "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(374); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);} a ';' a ';' a;\n"); + grammarBuilder.append("a : INT {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | ID {System.out.println(\"alt 2\");} // must pick this one for ID since pred is false\n"); + grammarBuilder.append(" | ID {System.out.println(\"alt 3\");}\n"); + grammarBuilder.append(" | {false}? ID {System.out.println(\"alt 4\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34; x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 2\n" + + "alt 2\n", found); + + assertEquals( + "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + + "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionHidesPreds() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a+ ;\n"); + grammarBuilder.append("a : {this.i = 1;} ID {this.i == 1}? {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {this.i = 2;} ID {this.i == 2}? {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionsHidePredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(299); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("boolean pred(boolean v) {\n"); + grammarBuilder.append(" System.out.println(\"eval=\"+v);\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {} {this.pred(true)}? {System.out.println(\"parse\");} '!' ;\n"); + grammarBuilder.append("t : e {} {this.pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAtomWithClosureInTranslatedLRRule() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : e[0] EOF;\n"); + grammarBuilder.append("e[int _p]\n"); + grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); + grammarBuilder.append(" ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b+a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDepedentPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(322); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("boolean pred(boolean v) {\n"); + grammarBuilder.append(" System.out.println(\"eval=\"+v);\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : a[99] ;\n"); + grammarBuilder.append("a[int i] : e {this.pred($i==99)}? {System.out.println(\"parse\");} '!' ;\n"); + grammarBuilder.append("b[int i] : e {this.pred($i==99)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(284); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); + grammarBuilder.append("b[int i] : a[i] ;\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {$i==2}? ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisabledAlternative() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); + grammarBuilder.append("content: anything | {false}? .;\n"); + grammarBuilder.append("anything: ANY_CHAR;\n"); + grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); + String grammar = grammarBuilder.toString(); + + + String input ="hello"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(197); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b ';' | b '.' ;\n"); + grammarBuilder.append("b : a ;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : {false}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoTruePredsThrowsNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(185); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {false}? ID INT {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {false}? ID INT {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOrder() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(311); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); + grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); + grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); + grammarBuilder.append("a : ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(211); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {System.out.println($ctx.toStringTree(this));}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); + + assertEquals( + "line 5:0 mismatched input '' expecting '\n" + + "'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(211); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {System.out.println($ctx.toStringTree(this));}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n" + + "\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(226); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {boolean enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {System.out.println(\"ID \"+$ID.text);}\n"); + grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {System.out.println(\"enum\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("ID abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(226); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {boolean enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {System.out.println(\"ID \"+$ID.text);}\n"); + grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {System.out.println(\"enum\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="enum"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(222); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {$i==2}? ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID \n"); + grammarBuilder.append(" | {$i==2}? ID \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(293); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("boolean pred(boolean v) {\n"); + grammarBuilder.append(" System.out.println(\"eval=\"+v);\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {this.pred(true)}? {System.out.println(\"parse\");} '!' ;\n"); + grammarBuilder.append("t : e {this.pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRewindBeforePredEval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(253); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {this._input.LT(1).getText().equals(\"x\")}? ID INT {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {this._input.LT(1).getText().equals(\"y\")}? ID INT {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(277); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); + grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" | INT {System.out.println(\"alt 3\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y 3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(178); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(181); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a;\n"); + grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="3 4 x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n", found); + + assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeft() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(178); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append(" s : a+ ;\n"); + grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeftWithVaryingPredicate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(296); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {int i = 0;}\n"); + grammarBuilder.append("s : ({this.i += 1;\n"); + grammarBuilder.append("System.out.print(\"i=\");\n"); + grammarBuilder.append("System.out.println(this.i);} a)+ ;\n"); + grammarBuilder.append("a : {this.i % 2 == 0}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {this.i % 2 != 0}? ID {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "i=1\n" + + "alt 2\n" + + "i=2\n" + + "alt 1\n" + + "i=3\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testUnpredicatedPathsInAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(197); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | b {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("a : {false}? ID INT\n"); + grammarBuilder.append(" | ID INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testValidateInDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(346); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ';' a;\n"); + grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); + grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); + grammarBuilder.append("// throws an exception if the validating predicate fails\n"); + grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {System.out.println(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x ; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 no viable alternative at input 'x'\n" + + "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSets.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSets.java new file mode 100644 index 000000000..6f1ba6091 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestSets.java @@ -0,0 +1,500 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSets extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetLiteral() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(92); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (A {System.out.println($A.text);})+ ;\n"); + grammarBuilder.append("A : [AaBb] ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="A a B b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals( + "A\n" + + "a\n" + + "B\n" + + "b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testComplementSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("parse : ~NEW_LINE;\n"); + grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 token recognition error at: 'a'\n" + + "line 1:1 missing {} at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotChar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); + grammarBuilder.append("A : ~'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(66); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); + grammarBuilder.append("A : ~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(68); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); + grammarBuilder.append("A : h=~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithRuleRef3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(132); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); + grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("B : ~('a'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(76); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')? 'c' {System.out.println(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A? 'c' {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~('x'|'y') 'z' {System.out.println($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ~'x' 'z' {System.out.println(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("zz\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotTokenWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~'x' 'z' {System.out.println($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=('x'|'y') {System.out.println($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(76); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {System.out.println(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleAsSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {System.out.println(this._input.getText());} : 'a' | 'b' |'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSeqDoesNotBecomeSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(120); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : C {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("fragment A : '1' | '2';\n"); + grammarBuilder.append("fragment B : '3' '4';\n"); + grammarBuilder.append("C : A | B;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(76); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')* 'c' {System.out.println(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestVisitors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestVisitors.java new file mode 100644 index 000000000..101d9b0bf --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/java/TestVisitors.java @@ -0,0 +1,53 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.java; + +import org.junit.Ignore; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestVisitors extends LegacyBaseJavaTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testBasic() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLR() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLRWithLabels() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_2() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_2() throws Exception { + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/browser/BaseBrowserTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/browser/BaseBrowserTest.java new file mode 100644 index 000000000..b02a58b18 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/browser/BaseBrowserTest.java @@ -0,0 +1,1081 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.javascript.browser; + +import org.antlr.v4.Tool; +import org.antlr.v4.automata.ATNFactory; +import org.antlr.v4.automata.ATNPrinter; +import org.antlr.v4.automata.LexerATNFactory; +import org.antlr.v4.automata.ParserATNFactory; +import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.IntStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.RuleContext; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.WritableToken; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ATNSerializer; +import org.antlr.v4.runtime.atn.ATNState; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.IntegerList; +import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.semantics.SemanticPipeline; +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.DOTGenerator; +import org.antlr.v4.tool.DefaultToolListener; +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.antlr.v4.tool.LexerGrammar; +import org.antlr.v4.tool.Rule; +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.DefaultHandler; +import org.eclipse.jetty.server.handler.HandlerList; +import org.eclipse.jetty.server.handler.ResourceHandler; +import org.junit.Before; +import org.junit.rules.TestRule; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; +import org.openqa.selenium.By.ById; +import org.openqa.selenium.WebDriver; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupString; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.BindException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public abstract class BaseBrowserTest { + // -J-Dorg.antlr.v4.test.BaseTest.level=FINE + // private static final Logger LOGGER = Logger.getLogger(BaseTest.class.getName()); + + public static final String newline = System.getProperty("line.separator"); + public static final String pathSep = System.getProperty("path.separator"); + + public String httpdir = null; + public String tmpdir = null; + + /** If error during parser execution, store stderr here; can't return + * stdout and stderr. This doesn't trap errors from running antlr. + */ + protected String stderrDuringParse; + + @org.junit.Rule + public final TestRule testWatcher = new TestWatcher() { + + @Override + protected void succeeded(Description description) { + // remove tmpdir if no error. + eraseTempDir(); + } + + }; + + @Before + public void setUp() throws Exception { + // new output dir for each test + String prop = System.getProperty("antlr-javascript-test-dir"); + if(prop!=null && prop.length()>0) + httpdir = prop; + else + httpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); + File dir = new File(httpdir); + if(dir.exists()) + this.eraseFiles(dir); + tmpdir = new File(httpdir, "parser").getAbsolutePath(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { + Tool tool = new Tool(args); + return tool; + } + + protected Tool newTool() { + org.antlr.v4.Tool tool = new Tool(new String[] {"-o", tmpdir}); + return tool; + } + + protected ATN createATN(Grammar g, boolean useSerializer) { + if ( g.atn==null ) { + semanticProcess(g); + assertEquals(0, g.tool.getNumErrors()); + + ParserATNFactory f; + if ( g.isLexer() ) { + f = new LexerATNFactory((LexerGrammar)g); + } + else { + f = new ParserATNFactory(g); + } + + g.atn = f.createATN(); + assertEquals(0, g.tool.getNumErrors()); + } + + ATN atn = g.atn; + if (useSerializer) { + char[] serialized = ATNSerializer.getSerializedAsChars(atn); + return new ATNDeserializer().deserialize(serialized); + } + + return atn; + } + + protected void semanticProcess(Grammar g) { + if ( g.ast!=null && !g.ast.hasErrors ) { + System.out.println(g.ast.toStringTree()); + Tool antlr = new Tool(); + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + if ( g.getImportedGrammars()!=null ) { // process imported grammars (if any) + for (Grammar imp : g.getImportedGrammars()) { + antlr.processNonCombinedGrammar(imp, false); + } + } + } + } + + + IntegerList getTypesFromString(Grammar g, String expecting) { + IntegerList expectingTokenTypes = new IntegerList(); + if ( expecting!=null && !expecting.trim().isEmpty() ) { + for (String tname : expecting.replace(" ", "").split(",")) { + int ttype = g.getTokenType(tname); + expectingTokenTypes.add(ttype); + } + } + return expectingTokenTypes; + } + + public IntegerList getTokenTypesViaATN(String input, LexerATNSimulator lexerATN) { + ANTLRInputStream in = new ANTLRInputStream(input); + IntegerList tokenTypes = new IntegerList(); + int ttype; + do { + ttype = lexerATN.match(in, Lexer.DEFAULT_MODE); + tokenTypes.add(ttype); + } while ( ttype!= Token.EOF ); + return tokenTypes; + } + + public List getTokenTypes(LexerGrammar lg, + ATN atn, + CharStream input) + { + LexerATNSimulator interp = new LexerATNSimulator(atn,new DFA[] { new DFA(atn.modeToStartState.get(Lexer.DEFAULT_MODE)) },null); + List tokenTypes = new ArrayList(); + int ttype; + boolean hitEOF = false; + do { + if ( hitEOF ) { + tokenTypes.add("EOF"); + break; + } + int t = input.LA(1); + ttype = interp.match(input, Lexer.DEFAULT_MODE); + if ( ttype == Token.EOF ) { + tokenTypes.add("EOF"); + } + else { + tokenTypes.add(lg.typeToTokenList.get(ttype)); + } + + if ( t==IntStream.EOF ) { + hitEOF = true; + } + } while ( ttype!=Token.EOF ); + return tokenTypes; + } + + + /** Return true if all is ok, no errors */ + protected ErrorQueue antlr(String fileName, String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { + System.out.println("dir "+tmpdir); + mkdir(tmpdir); + writeFile(tmpdir, fileName, grammarStr); + final List options = new ArrayList(); + Collections.addAll(options, extraOptions); + options.add("-Dlanguage=JavaScript"); + options.add("-o"); + options.add(tmpdir); + options.add("-lib"); + options.add(tmpdir); + options.add(new File(tmpdir,grammarFileName).toString()); + + final String[] optionsA = new String[options.size()]; + options.toArray(optionsA); + Tool antlr = newTool(optionsA); + ErrorQueue equeue = new ErrorQueue(antlr); + antlr.addListener(equeue); + if (defaultListener) { + antlr.addListener(new DefaultToolListener(antlr)); + } + antlr.processGrammarsOnCommandLine(); + + if ( !defaultListener && !equeue.errors.isEmpty() ) { + System.err.println("antlr reports errors from "+options); + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage msg = equeue.errors.get(i); + System.err.println(msg); + } + System.out.println("!!!\ngrammar:"); + System.out.println(grammarStr); + System.out.println("###"); + } + if ( !defaultListener && !equeue.warnings.isEmpty() ) { + System.err.println("antlr reports warnings from "+options); + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage msg = equeue.warnings.get(i); + System.err.println(msg); + } + } + + return equeue; + } + + protected String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, boolean showDFA) throws Exception + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, + null, + lexerName,"-no-listener"); + assertTrue(success); + writeLexerTestFile(lexerName, showDFA); + String output = execHtmlPage("Test.html", input); + if ( stderrDuringParse!=null && stderrDuringParse.length()>0 ) { + System.err.println(stderrDuringParse); + } + return output; + } + + protected String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean debug) throws Exception + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, + parserName, + lexerName, + "-visitor"); + assertTrue(success); + rawBuildRecognizerTestFile(parserName, + lexerName, + listenerName, + visitorName, + startRuleName, + debug); + return execRecognizer(input); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) + { + return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) + { + ErrorQueue equeue = + antlr(grammarFileName, grammarFileName, grammarStr, defaultListener, extraOptions); + if (!equeue.errors.isEmpty()) { + return false; + } + + List files = new ArrayList(); + if ( lexerName!=null ) { + files.add(lexerName+".js"); + } + if ( parserName!=null ) { + files.add(parserName+".js"); + Set optionsSet = new HashSet(Arrays.asList(extraOptions)); + if (!optionsSet.contains("-no-listener")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Listener.js"); + } + if (optionsSet.contains("-visitor")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Visitor.js"); + } + } + return true; // allIsWell: no compile + } + + protected void rawBuildRecognizerTestFile(String parserName, + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, boolean debug) + { + this.stderrDuringParse = null; + if ( parserName==null ) { + writeLexerTestFile(lexerName, false); + } + else { + writeParserTestFile(parserName, + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug); + } + } + + public String execRecognizer(String input) throws Exception { + return execHtmlPage("Test.html", input); + } + + static int httpPort = 8080; + + class ServerThread extends Thread { + + Server server; + String runtimePath; + String fileName; + Exception ex; + + public ServerThread(String fileName) { + this.runtimePath = locateRuntime(); + this.fileName = fileName; + } + + @Override + public void run() { + try { + Server server = new Server(httpPort); + ResourceHandler rh1 = new ResourceHandler(); + rh1.setDirectoriesListed(false); + rh1.setResourceBase(httpdir); + rh1.setWelcomeFiles(new String[] { fileName }); + ResourceHandler rh2 = new ResourceHandler(); + rh2.setDirectoriesListed(false); + rh2.setResourceBase(runtimePath); + HandlerList handlers = new HandlerList(); + handlers.setHandlers(new Handler[] { rh1, rh2, new DefaultHandler() }); + server.setHandler(handlers); + server.start(); + this.server = server; + this.server.join(); + } catch(BindException e) { + httpPort++; + run(); + } catch (Exception e) { + ex = e; + } + } + } + + protected static WebDriver driver; + + public String execHtmlPage(String fileName, String input) throws Exception { + // 'file' protocol is not supported by Selenium drivers + // so we run an embedded Jetty server + ServerThread thread = new ServerThread(fileName); + thread.start(); + try { + while(thread.server==null && thread.ex==null) + Thread.sleep(10); + if(thread.ex!=null) + throw thread.ex; + while(thread.server.isStarting()) + Thread.sleep(10); + Thread.sleep(400); // despite all the above precautions, driver.get often fails if you don't give time to Jetty + driver.get("http://localhost:" + httpPort + "/" + fileName); + driver.findElement(new ById("input")).clear(); + driver.findElement(new ById("output")).clear(); + driver.findElement(new ById("errors")).clear(); + driver.navigate().refresh(); + driver.findElement(new ById("input")).sendKeys(input); + driver.findElement(new ById("load")).click(); + driver.findElement(new ById("submit")).click(); + String errors = driver.findElement(new ById("errors")).getAttribute("value"); + if(errors!=null && errors.length()>0) { + this.stderrDuringParse = errors; + System.err.print(errors); + } + String value = driver.findElement(new ById("output")).getAttribute("value"); + // mimic stdout which adds a NL + if(value.length()>0 && !value.endsWith("\n")) + value = value + "\n"; + return value; + } + catch (Exception e) { + System.err.println("can't exec recognizer"); + e.printStackTrace(System.err); + } finally { + if(thread.server!=null) { + thread.server.stop(); + while(!thread.server.isStopped()) + Thread.sleep(10); + Thread.sleep(100); // ensure the port is freed + } + } + return null; + } + + private String locateRuntime() { + String propName = "antlr-javascript-runtime"; + String prop = System.getProperty(propName); + if(prop==null || prop.length()==0) + prop = "../runtime/JavaScript/src"; + File file = new File(prop); + System.out.println(file.getAbsolutePath()); + if(!file.exists()) + throw new RuntimeException("Missing system property:" + propName); + return file.getAbsolutePath(); + } + + public void testErrors(String[] pairs, boolean printTree) { + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; + + String[] lines = input.split("\n"); + String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); + ErrorQueue equeue = antlr(fileName, fileName, input, false); + + String actual = equeue.toString(true); + actual = actual.replace(tmpdir + File.separator, ""); + System.err.println(actual); + String msg = input; + msg = msg.replace("\n","\\n"); + msg = msg.replace("\r","\\r"); + msg = msg.replace("\t","\\t"); + + assertEquals("error in: "+msg,expect,actual); + } + } + + public String getFilenameFromFirstLineOfGrammar(String line) { + String fileName = "A" + Tool.GRAMMAR_EXTENSION; + int grIndex = line.lastIndexOf("grammar"); + int semi = line.lastIndexOf(';'); + if ( grIndex>=0 && semi>=0 ) { + int space = line.indexOf(' ', grIndex); + fileName = line.substring(space+1, semi)+Tool.GRAMMAR_EXTENSION; + } + if ( fileName.length()==Tool.GRAMMAR_EXTENSION.length() ) fileName = "A" + Tool.GRAMMAR_EXTENSION; + return fileName; + } + + List getMessagesOfType(List msgs, Class c) { + List filtered = new ArrayList(); + for (ANTLRMessage m : msgs) { + if ( m.getClass() == c ) filtered.add(m); + } + return filtered; + } + + void checkRuleATN(Grammar g, String ruleName, String expecting) { + ParserATNFactory f = new ParserATNFactory(g); + ATN atn = f.createATN(); + + DOTGenerator dot = new DOTGenerator(g); + System.out.println(dot.getDOT(atn.ruleToStartState[g.getRule(ruleName).index])); + + Rule r = g.getRule(ruleName); + ATNState startState = atn.ruleToStartState[r.index]; + ATNPrinter serializer = new ATNPrinter(g, startState); + String result = serializer.asString(); + + //System.out.print(result); + assertEquals(expecting, result); + } + + public void testActions(String templates, String actionName, String action, String expected) throws org.antlr.runtime.RecognitionException { + int lp = templates.indexOf('('); + String name = templates.substring(0, lp); + STGroup group = new STGroupString(templates); + ST st = group.getInstanceOf(name); + st.add(actionName, action); + String grammar = st.render(); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(grammar, equeue); + if ( g.ast!=null && !g.ast.hasErrors ) { + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + + ATNFactory factory = new ParserATNFactory(g); + if ( g.isLexer() ) factory = new LexerATNFactory((LexerGrammar)g); + g.atn = factory.createATN(); + + CodeGenerator gen = new CodeGenerator(g); + ST outputFileST = gen.generateParser(); + String output = outputFileST.render(); + //System.out.println(output); + String b = "#" + actionName + "#"; + int start = output.indexOf(b); + String e = "#end-" + actionName + "#"; + int end = output.indexOf(e); + String snippet = output.substring(start+b.length(),end); + assertEquals(expected, snippet); + } + if ( equeue.size()>0 ) { + System.err.println(equeue.toString()); + } + } + + public static class StreamVacuum implements Runnable { + StringBuilder buf = new StringBuilder(); + BufferedReader in; + Thread sucker; + public StreamVacuum(InputStream in) { + this.in = new BufferedReader( new InputStreamReader(in) ); + } + public void start() { + sucker = new Thread(this); + sucker.start(); + } + @Override + public void run() { + try { + String line = in.readLine(); + while (line!=null) { + buf.append(line); + buf.append('\n'); + line = in.readLine(); + } + } + catch (IOException ioe) { + System.err.println("can't read output from process"); + } + } + /** wait for the thread to finish */ + public void join() throws InterruptedException { + sucker.join(); + } + @Override + public String toString() { + return buf.toString(); + } + } + + protected void checkGrammarSemanticsError(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkGrammarSemanticsWarning(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage m = equeue.warnings.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkError(ErrorQueue equeue, + ANTLRMessage expectedMessage) + throws Exception + { + //System.out.println("errors="+equeue); + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertTrue("no error; "+expectedMessage.getErrorType()+" expected", !equeue.errors.isEmpty()); + assertTrue("too many errors; "+equeue.errors, equeue.errors.size()<=1); + assertNotNull("couldn't find expected error: "+expectedMessage.getErrorType(), foundMsg); + /* + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + */ + assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); + } + + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { + return false; + } + + Token t = get(i); + if ( hide.contains(t.getType()) ) { + ((WritableToken)t).setChannel(Token.HIDDEN_CHANNEL); + } + + return true; + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } + + public static void writeFile(String dir, String fileName, String content) { + try { + File f = new File(dir, fileName); + FileWriter w = new FileWriter(f); + BufferedWriter bw = new BufferedWriter(w); + bw.write(content); + bw.close(); + w.close(); + } + catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + protected void mkdir(String dir) { + File f = new File(dir); + f.mkdirs(); + } + + protected void writeParserTestFile(String parserName, + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, boolean debug) { + String html = "\r\n" + + "\r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + " \r\n" + + "\r\n"; + writeFile(httpdir, "Test.html", html); + }; + + + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + String html = "\r\n" + + "\r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + " \r\n" + + "\r\n"; + writeFile(httpdir, "Test.html", html); + } + + public void writeRecognizer(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug) { + if ( parserName==null ) + writeLexerTestFile(lexerName, debug); + else + writeParserTestFile(parserName, + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug); + } + + + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(httpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(httpdir+"/"+files[i]).delete(); + } + } + } + + protected void eraseFiles(File dir) { + String[] files = dir.list(); + for(int i = 0; files!=null && i < files.length; i++) { + new File(dir,files[i]).delete(); + } + } + + protected void eraseTempDir() { + boolean doErase = true; + String propName = "antlr-javascript-erase-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + doErase = Boolean.getBoolean(prop); + if(doErase) { + File tmpdirF = new File(httpdir); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + } + + public String getFirstLineOfException() { + if ( this.stderrDuringParse ==null ) { + return null; + } + String[] lines = this.stderrDuringParse.split("\n"); + String prefix="Exception in thread \"main\" "; + return lines[0].substring(prefix.length(),lines[0].length()); + } + + /** + * When looking at a result set that consists of a Map/HashTable + * we cannot rely on the output order, as the hashing algorithm or other aspects + * of the implementation may be different on differnt JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a + * bit of a hack, but guarantees that we get the same order on all systems. We assume that + * the keys are strings. + * + * @param m The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } + + System.out.println("Map toString looks like: " + m.toString()); + + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); + + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } + + public List realElements(List elements) { + return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); + } + + public void assertNotNullOrEmpty(String message, String text) { + assertNotNull(message, text); + assertFalse(message, text.isEmpty()); + } + + public void assertNotNullOrEmpty(String text) { + assertNotNull(text); + assertFalse(text.isEmpty()); + } + + public static class IntTokenStream implements TokenStream { + IntegerList types; + int p=0; + public IntTokenStream(IntegerList types) { this.types = types; } + + @Override + public void consume() { p++; } + + @Override + public int LA(int i) { return LT(i).getType(); } + + @Override + public int mark() { + return index(); + } + + @Override + public int index() { return p; } + + @Override + public void release(int marker) { + seek(marker); + } + + @Override + public void seek(int index) { + p = index; + } + + @Override + public int size() { + return types.size(); + } + + @Override + public String getSourceName() { + return null; + } + + @Override + public Token LT(int i) { + CommonToken t; + int rawIndex = p + i - 1; + if ( rawIndex>=types.size() ) t = new CommonToken(Token.EOF); + else t = new CommonToken(types.get(rawIndex)); + t.setTokenIndex(rawIndex); + return t; + } + + @Override + public Token get(int i) { + return new org.antlr.v4.runtime.CommonToken(types.get(i)); + } + + @Override + public TokenSource getTokenSource() { + return null; + } + + + @Override + public String getText() { + throw new UnsupportedOperationException("can't give strings"); + } + + + @Override + public String getText(Interval interval) { + throw new UnsupportedOperationException("can't give strings"); + } + + + @Override + public String getText(RuleContext ctx) { + throw new UnsupportedOperationException("can't give strings"); + } + + + @Override + public String getText(Token start, Token stop) { + throw new UnsupportedOperationException("can't give strings"); + } + } + + /** Sort a list */ + public > List sort(List data) { + List dup = new ArrayList(); + dup.addAll(data); + Collections.sort(dup); + return dup; + } + + /** Return map sorted by key */ + public ,V> LinkedHashMap sort(Map data) { + LinkedHashMap dup = new LinkedHashMap(); + List keys = new ArrayList(); + keys.addAll(data.keySet()); + Collections.sort(keys); + for (K k : keys) { + dup.put(k, data.get(k)); + } + return dup; + } +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/BaseChromeTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/BaseChromeTest.java new file mode 100644 index 000000000..3378e1ea5 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/BaseChromeTest.java @@ -0,0 +1,48 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.javascript.chrome; + +import org.antlr.v4.test.runtime.legacy.javascript.browser.BaseBrowserTest; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +public abstract class BaseChromeTest extends BaseBrowserTest { + + @BeforeClass + public static void initWebDriver() { + driver = SharedWebDriver.init(); + } + + @AfterClass + public static void closeWebDriver() { + SharedWebDriver.close(); + } + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/SharedWebDriver.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/SharedWebDriver.java new file mode 100644 index 000000000..7f9811f28 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/SharedWebDriver.java @@ -0,0 +1,50 @@ +package org.antlr.v4.test.runtime.legacy.javascript.chrome; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; + +import java.io.File; +import java.net.URL; +import java.util.Timer; +import java.util.TimerTask; + +import static org.junit.Assert.assertTrue; + +public class SharedWebDriver { + + static WebDriver driver; + static Timer timer; + + public static WebDriver init() { + if(driver==null) { + String path = SharedWebDriver.class.getPackage().getName().replace(".", "/") + "/chromedriver.bin"; + URL url = Thread.currentThread().getContextClassLoader().getResource(path); + File file = new File(url.toExternalForm().substring(5)); // skip 'file:' + assertTrue(file.exists()); + System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); + driver = new ChromeDriver(); + } else if(timer!=null) { + timer.cancel(); + timer = null; + } + + return driver; + } + + public static void close() { + if(driver!=null) { + if(timer!=null) { + timer.cancel(); + timer = null; + } + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override public void run() { + driver.quit(); + driver = null; + } + }, 2000); // close with delay to allow next Test to start + } + } + +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/chromedriver.bin b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/chromedriver.bin similarity index 100% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/chromedriver.bin rename to runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/chrome/chromedriver.bin diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/explorer/BaseExplorerTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/explorer/BaseExplorerTest.java new file mode 100644 index 000000000..ac1688259 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/explorer/BaseExplorerTest.java @@ -0,0 +1,52 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.javascript.explorer; + +import org.antlr.v4.test.runtime.legacy.javascript.browser.BaseBrowserTest; +import org.junit.After; +import org.junit.Before; +import org.openqa.selenium.ie.InternetExplorerDriver; + +public abstract class BaseExplorerTest extends BaseBrowserTest { + + @Before + public void initWebDriver() { + System.setProperty("webdriver.ie.driver", "C:\\Program Files (x86)\\Selenium\\IEDriverServer.exe"); + driver = new InternetExplorerDriver(); + } + + @After + public void closeWebDriver() { + if(driver!=null) { + driver.quit(); + } + } + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/BaseFirefoxTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/BaseFirefoxTest.java new file mode 100644 index 000000000..44d209b3e --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/BaseFirefoxTest.java @@ -0,0 +1,48 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.javascript.firefox; + +import org.antlr.v4.test.runtime.legacy.javascript.browser.BaseBrowserTest; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +public abstract class BaseFirefoxTest extends BaseBrowserTest { + + @BeforeClass + public static void initWebDriver() { + driver = SharedWebDriver.init(); + } + + @AfterClass + public static void closeWebDriver() { + SharedWebDriver.close(); + } + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/SharedWebDriver.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/SharedWebDriver.java new file mode 100644 index 000000000..6d433d923 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/firefox/SharedWebDriver.java @@ -0,0 +1,41 @@ +package org.antlr.v4.test.runtime.legacy.javascript.firefox; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; + +import java.util.Timer; +import java.util.TimerTask; + +public class SharedWebDriver { + + static WebDriver driver; + static Timer timer; + + public static WebDriver init() { + if(driver==null) { + driver = new FirefoxDriver(); + } else if(timer!=null) { + timer.cancel(); + timer = null; + } + + return driver; + } + + public static void close() { + if(driver!=null) { + if(timer!=null) { + timer.cancel(); + timer = null; + } + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override public void run() { + driver.quit(); + driver = null; + } + }, 2000); // close with delay to allow next Test to start + } + } + +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/BaseNodeTest.java similarity index 99% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseTest.java rename to runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/BaseNodeTest.java index 8db0f0716..bbf18efbb 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseTest.java +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/BaseNodeTest.java @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.antlr.v4.test.runtime.javascript.node; +package org.antlr.v4.test.runtime.legacy.javascript.node; import org.antlr.v4.Tool; import org.antlr.v4.automata.ATNFactory; @@ -55,7 +55,7 @@ import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntegerList; import org.antlr.v4.runtime.misc.Interval; import org.antlr.v4.semantics.SemanticPipeline; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; import org.antlr.v4.tool.ANTLRMessage; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.DefaultToolListener; @@ -97,7 +97,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public abstract class BaseTest { +public abstract class BaseNodeTest { // -J-Dorg.antlr.v4.test.BaseTest.level=FINE // private static final Logger LOGGER = // Logger.getLogger(BaseTest.class.getName()); diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeLexers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeLexers.java new file mode 100644 index 000000000..3fdbd6912 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeLexers.java @@ -0,0 +1,71 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeLexers extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {console.log(\"S.A\");};\n" + + "C : 'c' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="abc"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "S.A\n" + + "[@0,0:0='a',<3>,1:0]\n" + + "[@1,1:1='b',<1>,1:1]\n" + + "[@2,2:2='c',<4>,1:2]\n" + + "[@3,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {console.log(\"S.A\");} ;\n" + + "B : 'b' {console.log(\"S.B\");} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("A : 'a' B {console.log(\"M.A\");} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "M.A\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeParsers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeParsers.java new file mode 100644 index 000000000..5787c9a0a --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestCompositeParsers.java @@ -0,0 +1,502 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.Grammar; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeParsers extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBringInLiteralsFromDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : '=' 'a' {process.stdout.write(\"S.a\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="=a"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCombinedImportsCombined() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : 'x' INT {console.log(\"S.x\");};\n" + + "INT : '0'..'9'+ ;\n" + + "WS : (' '|'\\n') -> skip ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(31); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : x INT;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + + + String input ="x 34 9"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatesSeeSameTokenType() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { C, B, A } // reverse order\n" + + "y : A {console.log(\"T.y\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : A {console.log(\"S.x\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(598); + grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); + grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); + grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); + grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); + grammarBuilder.append("// mapping in each parser:\n"); + grammarBuilder.append("// public static final int C=6;\n"); + grammarBuilder.append("// public static final int EOF=-1;\n"); + grammarBuilder.append("// public static final int B=5;\n"); + grammarBuilder.append("// public static final int WS=7;\n"); + grammarBuilder.append("// public static final int A=4;\n"); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); + grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); + grammarBuilder.append("A : 'a' ; \n"); + grammarBuilder.append("C : 'c' ; \n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + + + String input ="aa"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals( + "S.x\n" + + "T.y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorAccessesDelegateMembers() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "@parser::members {\n" + + "this.foo = function() {console.log('foo');};\n" + + "}\n" + + "a : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar M; // uses no rules from the import\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : 'b' {this.foo();} ; // gS is import pointer\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("foo\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {console.log(\"S.a\");};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a[int x] returns [int y] : B {process.stdout.write(\"S.a\");} {$y=1000;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(138); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : label=a[3] {console.log($label.y);} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a1000\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {process.stdout.write(\"S.a\");} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(137); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a {process.stdout.write($a.text);} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.ab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "a : B {console.log(\"T.a\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {console.log(\"S.a\");};\n" + + "b : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : b {process.stdout.write(\"S.a\");};\n" + + "b : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("b : 'b'|'c';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegates() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { A }\n" + + "b : 'b' {console.log(\"T.b\");};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {console.log(\"S.a\");};\n" + + "b : 'b' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S, T;\n"); + grammarBuilder.append("b : 'b'|'c' {console.log(\"M.b\");}|B|A;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.b\n" + + "S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "type_ : 'int' ;\n" + + "decl : type_ ID ';'\n" + + " | type_ ID init ';' {process.stdout.write(\"JavaDecl: \" + $text);};\n" + + "init : '=' INT;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("prog : decl ;\n"); + grammarBuilder.append("type_ : 'int' | 'float' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="float x = 3;"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); + + assertEquals("JavaDecl: floatx=3;\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportLexerWithOnlyFragmentRules() throws Exception { + mkdir(tmpdir); + + String slave_Unicode = + "lexer grammar Unicode;\n" + + "\n" + + "fragment\n" + + "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + + " | '\\u2000'..'\\u200A'\n" + + " | '\\u202F' | '\\u205F' | '\\u3000'\n" + + " ;\n"; + writeFile(tmpdir, "Unicode.g4", slave_Unicode); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar Test;\n"); + grammarBuilder.append("import Unicode;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program : 'test' 'test';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="test test"; + String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedGrammarWithEmptyOptions() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "options {}\n" + + "a : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedRuleWithAction() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a @after {this.x = 0;} : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordVSIDOrder() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "ID : 'a'..'z'+;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(115); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("a : A {console.log(\"M.a: \" + $A);};\n"); + grammarBuilder.append("A : 'abc' {console.log(\"M.A\");};\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.A\n" + + "M.a: [@0,0:2='abc',<1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestFullContextParsing.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestFullContextParsing.java new file mode 100644 index 000000000..d8b32f60a --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestFullContextParsing.java @@ -0,0 +1,522 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestFullContextParsing extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigYieldsCtxSensitiveDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(101); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : ID | ID {} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-ID->:s1^=>1\n", found); + + assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbiguityNoLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(224); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append(" : expr expr {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: '@'\n"); + grammarBuilder.append(" | ID '@'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a@"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("alt 1\n", found); + + assertEquals( + "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + + "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + + "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFATwoDiffInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc @ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 2:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + + "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(162); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="@ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(304); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append(": expr[0] {console.log($expr.ctx.toStringTree(null, this));};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(304); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append(": expr[0] {console.log($expr.ctx.toStringTree(null, this));};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b * (expr c)))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + + "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + + "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s1=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo else bar }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + + "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(252); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append("@after {this.dumpDFA();}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLoopsSimulateTailRecursion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); + grammarBuilder.append(" : expr_or_assign*;\n"); + grammarBuilder.append("expr_or_assign\n"); + grammarBuilder.append(" : expr '++' {console.log(\"fail.\");}\n"); + grammarBuilder.append(" | expr {console.log(\"pass: \"+$expr.text);}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); + grammarBuilder.append("expr_primary\n"); + grammarBuilder.append(" : '(' ID ')'\n"); + grammarBuilder.append(" | ID '(' ID ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a(i)<-x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("pass: a(i)<-x\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + + "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSLLSeesEOFInLLGrammar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {this.dumpDFA();}\n"); + grammarBuilder.append(" : a;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + + "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLeftRecursion.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLeftRecursion.java new file mode 100644 index 000000000..f4bed6c6a --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLeftRecursion.java @@ -0,0 +1,3502 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLeftRecursion extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="1\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a = 5\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="b = 6\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*2\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(*a)[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="**a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[3]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator b) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator ( (declarator a) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[]()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[][]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(398); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {console.log($ctx.toStringTree(null, this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {console.log($ctx.toStringTree(null, this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a x) y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {console.log($ctx.toStringTree(null, this));} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a (a x) y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 1) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) - (e 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.this"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . this) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e - (e a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(257); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a|b&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f(x)==T.c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_11() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f().g(x,1)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_12() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new T[((n-1) * x) + 1]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a|b)&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a > b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) > (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a >> b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) >> (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a^b^c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new A().b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1254); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)t.f()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(245); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(245); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(245); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(184); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(184); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(184); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(638); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(638); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(638); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(638); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrecedenceFilterConsidersContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog \n"); + grammarBuilder.append("@after {console.log($ctx.toStringTree(null, this));}\n"); + grammarBuilder.append(": statement* EOF {};\n"); + grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); + grammarBuilder.append("letterA: 'a';"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(223); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (literal - 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(223); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1 + -1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(336); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(336); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a+b)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(336); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.result);} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b+c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("((a=b)+c)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(454); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(454); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(454); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(454); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(307); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(246); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v, list ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(246); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v, list ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(246); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v, list ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(246); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {console.log($e.v);}; \n"); + grammarBuilder.append("e returns [int v, list ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("9\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPred() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); + grammarBuilder.append("a : a {true}? ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPredFailOption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); + grammarBuilder.append("a : a ID {false}?\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y z))\n", found); + + assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a x))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(290); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1,3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1, 3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerErrors.java new file mode 100644 index 000000000..78ed1755c --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerErrors.java @@ -0,0 +1,259 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerErrors extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatFailsBackToDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(39); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:3='ab',<1>,1:2]\n" + + "[@2,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;\n"); + grammarBuilder.append("C : 'abcd' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababcx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:4='abc',<2>,1:2]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { } }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='{ { } }',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testErrorInMiddle() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStart() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,1:0='',<-1>,1:1]\n", found); + + assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStartAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,2:1='',<-1>,1:2]\n", found); + + assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInTokenAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + + assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerExecDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar L;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + String input ="x : x"; + String found = execLexer("L.g4", grammar, "LLexer", input, false); + assertEquals( + "[@0,0:0='x',<3>,1:0]\n" + + "[@1,2:2=':',<1>,1:2]\n" + + "[@2,4:4='x',<3>,1:4]\n" + + "[@3,5:4='',<-1>,1:5]\n", found); + + assertEquals( + "line 1:1 token recognition error at: ' '\n" + + "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo\"]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerExec.java new file mode 100644 index 000000000..a8b4c2056 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestLexerExec.java @@ -0,0 +1,5011 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerExec extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionPlacement() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(263); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ({console.log(\"stuff fail: \" + this.text);} 'a'\n"); + grammarBuilder.append("| {console.log(\"stuff0: \" + this.text);}\n"); + grammarBuilder.append(" 'a' {console.log(\"stuff1: \" + this.text);}\n"); + grammarBuilder.append(" 'b' {console.log(\"stuff2: \" + this.text);})\n"); + grammarBuilder.append(" {console.log(this.text);} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "stuff0: \n" + + "stuff1: a\n" + + "stuff2: ab\n" + + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(79); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {console.log(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetInSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(86); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : (~[ab \\n]|'a') {console.log(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="a x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:2='x',<1>,1:2]\n" + + "[@2,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetNot() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(89); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {console.log(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="xaf"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:2='xaf',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetPlus() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {console.log(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(129); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {console.log(\"I\");} ;\n"); + grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {console.log(\"ID\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34 a2 abc \n" + + " "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "ID\n" + + "ID\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,7:8='a2',<2>,2:4]\n" + + "[@3,10:12='abc',<2>,2:7]\n" + + "[@4,18:17='',<-1>,3:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithEscapedChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(88); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DASHBRACK : [\\-\\]]+ {console.log(\"DASHBRACK\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="- ] "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "DASHBRACK\n" + + "DASHBRACK\n" + + "[@0,0:0='-',<1>,1:0]\n" + + "[@1,2:2=']',<1>,1:2]\n" + + "[@2,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEndRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(76); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-]+ {console.log(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="00\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='00',<1>,1:0]\n" + + "[@1,3:2='',<-1>,2:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEscapeChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(71); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {console.log(\"I\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(74); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"a-z]+ {console.log(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:2='b\"a',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(75); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"\\\\ab]+ {console.log(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"\\a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:3='b\"\\a',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithReversedRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(72); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [z-a9]+ {console.log(\"A\");} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="9"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:0='9',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFByItself() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DONE : EOF ;\n"); + grammarBuilder.append("A : 'a';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:-1='',<1>,1:0]\n" + + "[@1,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input ="a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ('a' | 'ab') {console.log(this.text);} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testHexVsID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); + grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); + grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="x 0 1 a.b a.l"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='x',<5>,1:0]\n" + + "[@1,1:1=' ',<6>,1:1]\n" + + "[@2,2:2='0',<2>,1:2]\n" + + "[@3,3:3=' ',<6>,1:3]\n" + + "[@4,4:4='1',<2>,1:4]\n" + + "[@5,5:5=' ',<6>,1:5]\n" + + "[@6,6:6='a',<5>,1:6]\n" + + "[@7,7:7='.',<4>,1:7]\n" + + "[@8,8:8='b',<5>,1:8]\n" + + "[@9,9:9=' ',<6>,1:9]\n" + + "[@10,10:10='a',<5>,1:10]\n" + + "[@11,11:11='.',<4>,1:11]\n" + + "[@12,12:12='l',<5>,1:12]\n" + + "[@13,13:12='',<-1>,1:13]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("KEND : 'end' ; // has priority\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="end eend ending a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:2='end',<1>,1:0]\n" + + "[@1,3:3=' ',<3>,1:3]\n" + + "[@2,4:7='eend',<2>,1:4]\n" + + "[@3,8:8=' ',<3>,1:8]\n" + + "[@4,9:14='ending',<2>,1:9]\n" + + "[@5,15:15=' ',<3>,1:15]\n" + + "[@6,16:16='a',<2>,1:16]\n" + + "[@7,17:16='',<-1>,1:17]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLargeLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85821); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); + grammarBuilder.append("KW0 : 'KW' '0';\n"); + grammarBuilder.append("KW1 : 'KW' '1';\n"); + grammarBuilder.append("KW2 : 'KW' '2';\n"); + grammarBuilder.append("KW3 : 'KW' '3';\n"); + grammarBuilder.append("KW4 : 'KW' '4';\n"); + grammarBuilder.append("KW5 : 'KW' '5';\n"); + grammarBuilder.append("KW6 : 'KW' '6';\n"); + grammarBuilder.append("KW7 : 'KW' '7';\n"); + grammarBuilder.append("KW8 : 'KW' '8';\n"); + grammarBuilder.append("KW9 : 'KW' '9';\n"); + grammarBuilder.append("KW10 : 'KW' '10';\n"); + grammarBuilder.append("KW11 : 'KW' '11';\n"); + grammarBuilder.append("KW12 : 'KW' '12';\n"); + grammarBuilder.append("KW13 : 'KW' '13';\n"); + grammarBuilder.append("KW14 : 'KW' '14';\n"); + grammarBuilder.append("KW15 : 'KW' '15';\n"); + grammarBuilder.append("KW16 : 'KW' '16';\n"); + grammarBuilder.append("KW17 : 'KW' '17';\n"); + grammarBuilder.append("KW18 : 'KW' '18';\n"); + grammarBuilder.append("KW19 : 'KW' '19';\n"); + grammarBuilder.append("KW20 : 'KW' '20';\n"); + grammarBuilder.append("KW21 : 'KW' '21';\n"); + grammarBuilder.append("KW22 : 'KW' '22';\n"); + grammarBuilder.append("KW23 : 'KW' '23';\n"); + grammarBuilder.append("KW24 : 'KW' '24';\n"); + grammarBuilder.append("KW25 : 'KW' '25';\n"); + grammarBuilder.append("KW26 : 'KW' '26';\n"); + grammarBuilder.append("KW27 : 'KW' '27';\n"); + grammarBuilder.append("KW28 : 'KW' '28';\n"); + grammarBuilder.append("KW29 : 'KW' '29';\n"); + grammarBuilder.append("KW30 : 'KW' '30';\n"); + grammarBuilder.append("KW31 : 'KW' '31';\n"); + grammarBuilder.append("KW32 : 'KW' '32';\n"); + grammarBuilder.append("KW33 : 'KW' '33';\n"); + grammarBuilder.append("KW34 : 'KW' '34';\n"); + grammarBuilder.append("KW35 : 'KW' '35';\n"); + grammarBuilder.append("KW36 : 'KW' '36';\n"); + grammarBuilder.append("KW37 : 'KW' '37';\n"); + grammarBuilder.append("KW38 : 'KW' '38';\n"); + grammarBuilder.append("KW39 : 'KW' '39';\n"); + grammarBuilder.append("KW40 : 'KW' '40';\n"); + grammarBuilder.append("KW41 : 'KW' '41';\n"); + grammarBuilder.append("KW42 : 'KW' '42';\n"); + grammarBuilder.append("KW43 : 'KW' '43';\n"); + grammarBuilder.append("KW44 : 'KW' '44';\n"); + grammarBuilder.append("KW45 : 'KW' '45';\n"); + grammarBuilder.append("KW46 : 'KW' '46';\n"); + grammarBuilder.append("KW47 : 'KW' '47';\n"); + grammarBuilder.append("KW48 : 'KW' '48';\n"); + grammarBuilder.append("KW49 : 'KW' '49';\n"); + grammarBuilder.append("KW50 : 'KW' '50';\n"); + grammarBuilder.append("KW51 : 'KW' '51';\n"); + grammarBuilder.append("KW52 : 'KW' '52';\n"); + grammarBuilder.append("KW53 : 'KW' '53';\n"); + grammarBuilder.append("KW54 : 'KW' '54';\n"); + grammarBuilder.append("KW55 : 'KW' '55';\n"); + grammarBuilder.append("KW56 : 'KW' '56';\n"); + grammarBuilder.append("KW57 : 'KW' '57';\n"); + grammarBuilder.append("KW58 : 'KW' '58';\n"); + grammarBuilder.append("KW59 : 'KW' '59';\n"); + grammarBuilder.append("KW60 : 'KW' '60';\n"); + grammarBuilder.append("KW61 : 'KW' '61';\n"); + grammarBuilder.append("KW62 : 'KW' '62';\n"); + grammarBuilder.append("KW63 : 'KW' '63';\n"); + grammarBuilder.append("KW64 : 'KW' '64';\n"); + grammarBuilder.append("KW65 : 'KW' '65';\n"); + grammarBuilder.append("KW66 : 'KW' '66';\n"); + grammarBuilder.append("KW67 : 'KW' '67';\n"); + grammarBuilder.append("KW68 : 'KW' '68';\n"); + grammarBuilder.append("KW69 : 'KW' '69';\n"); + grammarBuilder.append("KW70 : 'KW' '70';\n"); + grammarBuilder.append("KW71 : 'KW' '71';\n"); + grammarBuilder.append("KW72 : 'KW' '72';\n"); + grammarBuilder.append("KW73 : 'KW' '73';\n"); + grammarBuilder.append("KW74 : 'KW' '74';\n"); + grammarBuilder.append("KW75 : 'KW' '75';\n"); + grammarBuilder.append("KW76 : 'KW' '76';\n"); + grammarBuilder.append("KW77 : 'KW' '77';\n"); + grammarBuilder.append("KW78 : 'KW' '78';\n"); + grammarBuilder.append("KW79 : 'KW' '79';\n"); + grammarBuilder.append("KW80 : 'KW' '80';\n"); + grammarBuilder.append("KW81 : 'KW' '81';\n"); + grammarBuilder.append("KW82 : 'KW' '82';\n"); + grammarBuilder.append("KW83 : 'KW' '83';\n"); + grammarBuilder.append("KW84 : 'KW' '84';\n"); + grammarBuilder.append("KW85 : 'KW' '85';\n"); + grammarBuilder.append("KW86 : 'KW' '86';\n"); + grammarBuilder.append("KW87 : 'KW' '87';\n"); + grammarBuilder.append("KW88 : 'KW' '88';\n"); + grammarBuilder.append("KW89 : 'KW' '89';\n"); + grammarBuilder.append("KW90 : 'KW' '90';\n"); + grammarBuilder.append("KW91 : 'KW' '91';\n"); + grammarBuilder.append("KW92 : 'KW' '92';\n"); + grammarBuilder.append("KW93 : 'KW' '93';\n"); + grammarBuilder.append("KW94 : 'KW' '94';\n"); + grammarBuilder.append("KW95 : 'KW' '95';\n"); + grammarBuilder.append("KW96 : 'KW' '96';\n"); + grammarBuilder.append("KW97 : 'KW' '97';\n"); + grammarBuilder.append("KW98 : 'KW' '98';\n"); + grammarBuilder.append("KW99 : 'KW' '99';\n"); + grammarBuilder.append("KW100 : 'KW' '100';\n"); + grammarBuilder.append("KW101 : 'KW' '101';\n"); + grammarBuilder.append("KW102 : 'KW' '102';\n"); + grammarBuilder.append("KW103 : 'KW' '103';\n"); + grammarBuilder.append("KW104 : 'KW' '104';\n"); + grammarBuilder.append("KW105 : 'KW' '105';\n"); + grammarBuilder.append("KW106 : 'KW' '106';\n"); + grammarBuilder.append("KW107 : 'KW' '107';\n"); + grammarBuilder.append("KW108 : 'KW' '108';\n"); + grammarBuilder.append("KW109 : 'KW' '109';\n"); + grammarBuilder.append("KW110 : 'KW' '110';\n"); + grammarBuilder.append("KW111 : 'KW' '111';\n"); + grammarBuilder.append("KW112 : 'KW' '112';\n"); + grammarBuilder.append("KW113 : 'KW' '113';\n"); + grammarBuilder.append("KW114 : 'KW' '114';\n"); + grammarBuilder.append("KW115 : 'KW' '115';\n"); + grammarBuilder.append("KW116 : 'KW' '116';\n"); + grammarBuilder.append("KW117 : 'KW' '117';\n"); + grammarBuilder.append("KW118 : 'KW' '118';\n"); + grammarBuilder.append("KW119 : 'KW' '119';\n"); + grammarBuilder.append("KW120 : 'KW' '120';\n"); + grammarBuilder.append("KW121 : 'KW' '121';\n"); + grammarBuilder.append("KW122 : 'KW' '122';\n"); + grammarBuilder.append("KW123 : 'KW' '123';\n"); + grammarBuilder.append("KW124 : 'KW' '124';\n"); + grammarBuilder.append("KW125 : 'KW' '125';\n"); + grammarBuilder.append("KW126 : 'KW' '126';\n"); + grammarBuilder.append("KW127 : 'KW' '127';\n"); + grammarBuilder.append("KW128 : 'KW' '128';\n"); + grammarBuilder.append("KW129 : 'KW' '129';\n"); + grammarBuilder.append("KW130 : 'KW' '130';\n"); + grammarBuilder.append("KW131 : 'KW' '131';\n"); + grammarBuilder.append("KW132 : 'KW' '132';\n"); + grammarBuilder.append("KW133 : 'KW' '133';\n"); + grammarBuilder.append("KW134 : 'KW' '134';\n"); + grammarBuilder.append("KW135 : 'KW' '135';\n"); + grammarBuilder.append("KW136 : 'KW' '136';\n"); + grammarBuilder.append("KW137 : 'KW' '137';\n"); + grammarBuilder.append("KW138 : 'KW' '138';\n"); + grammarBuilder.append("KW139 : 'KW' '139';\n"); + grammarBuilder.append("KW140 : 'KW' '140';\n"); + grammarBuilder.append("KW141 : 'KW' '141';\n"); + grammarBuilder.append("KW142 : 'KW' '142';\n"); + grammarBuilder.append("KW143 : 'KW' '143';\n"); + grammarBuilder.append("KW144 : 'KW' '144';\n"); + grammarBuilder.append("KW145 : 'KW' '145';\n"); + grammarBuilder.append("KW146 : 'KW' '146';\n"); + grammarBuilder.append("KW147 : 'KW' '147';\n"); + grammarBuilder.append("KW148 : 'KW' '148';\n"); + grammarBuilder.append("KW149 : 'KW' '149';\n"); + grammarBuilder.append("KW150 : 'KW' '150';\n"); + grammarBuilder.append("KW151 : 'KW' '151';\n"); + grammarBuilder.append("KW152 : 'KW' '152';\n"); + grammarBuilder.append("KW153 : 'KW' '153';\n"); + grammarBuilder.append("KW154 : 'KW' '154';\n"); + grammarBuilder.append("KW155 : 'KW' '155';\n"); + grammarBuilder.append("KW156 : 'KW' '156';\n"); + grammarBuilder.append("KW157 : 'KW' '157';\n"); + grammarBuilder.append("KW158 : 'KW' '158';\n"); + grammarBuilder.append("KW159 : 'KW' '159';\n"); + grammarBuilder.append("KW160 : 'KW' '160';\n"); + grammarBuilder.append("KW161 : 'KW' '161';\n"); + grammarBuilder.append("KW162 : 'KW' '162';\n"); + grammarBuilder.append("KW163 : 'KW' '163';\n"); + grammarBuilder.append("KW164 : 'KW' '164';\n"); + grammarBuilder.append("KW165 : 'KW' '165';\n"); + grammarBuilder.append("KW166 : 'KW' '166';\n"); + grammarBuilder.append("KW167 : 'KW' '167';\n"); + grammarBuilder.append("KW168 : 'KW' '168';\n"); + grammarBuilder.append("KW169 : 'KW' '169';\n"); + grammarBuilder.append("KW170 : 'KW' '170';\n"); + grammarBuilder.append("KW171 : 'KW' '171';\n"); + grammarBuilder.append("KW172 : 'KW' '172';\n"); + grammarBuilder.append("KW173 : 'KW' '173';\n"); + grammarBuilder.append("KW174 : 'KW' '174';\n"); + grammarBuilder.append("KW175 : 'KW' '175';\n"); + grammarBuilder.append("KW176 : 'KW' '176';\n"); + grammarBuilder.append("KW177 : 'KW' '177';\n"); + grammarBuilder.append("KW178 : 'KW' '178';\n"); + grammarBuilder.append("KW179 : 'KW' '179';\n"); + grammarBuilder.append("KW180 : 'KW' '180';\n"); + grammarBuilder.append("KW181 : 'KW' '181';\n"); + grammarBuilder.append("KW182 : 'KW' '182';\n"); + grammarBuilder.append("KW183 : 'KW' '183';\n"); + grammarBuilder.append("KW184 : 'KW' '184';\n"); + grammarBuilder.append("KW185 : 'KW' '185';\n"); + grammarBuilder.append("KW186 : 'KW' '186';\n"); + grammarBuilder.append("KW187 : 'KW' '187';\n"); + grammarBuilder.append("KW188 : 'KW' '188';\n"); + grammarBuilder.append("KW189 : 'KW' '189';\n"); + grammarBuilder.append("KW190 : 'KW' '190';\n"); + grammarBuilder.append("KW191 : 'KW' '191';\n"); + grammarBuilder.append("KW192 : 'KW' '192';\n"); + grammarBuilder.append("KW193 : 'KW' '193';\n"); + grammarBuilder.append("KW194 : 'KW' '194';\n"); + grammarBuilder.append("KW195 : 'KW' '195';\n"); + grammarBuilder.append("KW196 : 'KW' '196';\n"); + grammarBuilder.append("KW197 : 'KW' '197';\n"); + grammarBuilder.append("KW198 : 'KW' '198';\n"); + grammarBuilder.append("KW199 : 'KW' '199';\n"); + grammarBuilder.append("KW200 : 'KW' '200';\n"); + grammarBuilder.append("KW201 : 'KW' '201';\n"); + grammarBuilder.append("KW202 : 'KW' '202';\n"); + grammarBuilder.append("KW203 : 'KW' '203';\n"); + grammarBuilder.append("KW204 : 'KW' '204';\n"); + grammarBuilder.append("KW205 : 'KW' '205';\n"); + grammarBuilder.append("KW206 : 'KW' '206';\n"); + grammarBuilder.append("KW207 : 'KW' '207';\n"); + grammarBuilder.append("KW208 : 'KW' '208';\n"); + grammarBuilder.append("KW209 : 'KW' '209';\n"); + grammarBuilder.append("KW210 : 'KW' '210';\n"); + grammarBuilder.append("KW211 : 'KW' '211';\n"); + grammarBuilder.append("KW212 : 'KW' '212';\n"); + grammarBuilder.append("KW213 : 'KW' '213';\n"); + grammarBuilder.append("KW214 : 'KW' '214';\n"); + grammarBuilder.append("KW215 : 'KW' '215';\n"); + grammarBuilder.append("KW216 : 'KW' '216';\n"); + grammarBuilder.append("KW217 : 'KW' '217';\n"); + grammarBuilder.append("KW218 : 'KW' '218';\n"); + grammarBuilder.append("KW219 : 'KW' '219';\n"); + grammarBuilder.append("KW220 : 'KW' '220';\n"); + grammarBuilder.append("KW221 : 'KW' '221';\n"); + grammarBuilder.append("KW222 : 'KW' '222';\n"); + grammarBuilder.append("KW223 : 'KW' '223';\n"); + grammarBuilder.append("KW224 : 'KW' '224';\n"); + grammarBuilder.append("KW225 : 'KW' '225';\n"); + grammarBuilder.append("KW226 : 'KW' '226';\n"); + grammarBuilder.append("KW227 : 'KW' '227';\n"); + grammarBuilder.append("KW228 : 'KW' '228';\n"); + grammarBuilder.append("KW229 : 'KW' '229';\n"); + grammarBuilder.append("KW230 : 'KW' '230';\n"); + grammarBuilder.append("KW231 : 'KW' '231';\n"); + grammarBuilder.append("KW232 : 'KW' '232';\n"); + grammarBuilder.append("KW233 : 'KW' '233';\n"); + grammarBuilder.append("KW234 : 'KW' '234';\n"); + grammarBuilder.append("KW235 : 'KW' '235';\n"); + grammarBuilder.append("KW236 : 'KW' '236';\n"); + grammarBuilder.append("KW237 : 'KW' '237';\n"); + grammarBuilder.append("KW238 : 'KW' '238';\n"); + grammarBuilder.append("KW239 : 'KW' '239';\n"); + grammarBuilder.append("KW240 : 'KW' '240';\n"); + grammarBuilder.append("KW241 : 'KW' '241';\n"); + grammarBuilder.append("KW242 : 'KW' '242';\n"); + grammarBuilder.append("KW243 : 'KW' '243';\n"); + grammarBuilder.append("KW244 : 'KW' '244';\n"); + grammarBuilder.append("KW245 : 'KW' '245';\n"); + grammarBuilder.append("KW246 : 'KW' '246';\n"); + grammarBuilder.append("KW247 : 'KW' '247';\n"); + grammarBuilder.append("KW248 : 'KW' '248';\n"); + grammarBuilder.append("KW249 : 'KW' '249';\n"); + grammarBuilder.append("KW250 : 'KW' '250';\n"); + grammarBuilder.append("KW251 : 'KW' '251';\n"); + grammarBuilder.append("KW252 : 'KW' '252';\n"); + grammarBuilder.append("KW253 : 'KW' '253';\n"); + grammarBuilder.append("KW254 : 'KW' '254';\n"); + grammarBuilder.append("KW255 : 'KW' '255';\n"); + grammarBuilder.append("KW256 : 'KW' '256';\n"); + grammarBuilder.append("KW257 : 'KW' '257';\n"); + grammarBuilder.append("KW258 : 'KW' '258';\n"); + grammarBuilder.append("KW259 : 'KW' '259';\n"); + grammarBuilder.append("KW260 : 'KW' '260';\n"); + grammarBuilder.append("KW261 : 'KW' '261';\n"); + grammarBuilder.append("KW262 : 'KW' '262';\n"); + grammarBuilder.append("KW263 : 'KW' '263';\n"); + grammarBuilder.append("KW264 : 'KW' '264';\n"); + grammarBuilder.append("KW265 : 'KW' '265';\n"); + grammarBuilder.append("KW266 : 'KW' '266';\n"); + grammarBuilder.append("KW267 : 'KW' '267';\n"); + grammarBuilder.append("KW268 : 'KW' '268';\n"); + grammarBuilder.append("KW269 : 'KW' '269';\n"); + grammarBuilder.append("KW270 : 'KW' '270';\n"); + grammarBuilder.append("KW271 : 'KW' '271';\n"); + grammarBuilder.append("KW272 : 'KW' '272';\n"); + grammarBuilder.append("KW273 : 'KW' '273';\n"); + grammarBuilder.append("KW274 : 'KW' '274';\n"); + grammarBuilder.append("KW275 : 'KW' '275';\n"); + grammarBuilder.append("KW276 : 'KW' '276';\n"); + grammarBuilder.append("KW277 : 'KW' '277';\n"); + grammarBuilder.append("KW278 : 'KW' '278';\n"); + grammarBuilder.append("KW279 : 'KW' '279';\n"); + grammarBuilder.append("KW280 : 'KW' '280';\n"); + grammarBuilder.append("KW281 : 'KW' '281';\n"); + grammarBuilder.append("KW282 : 'KW' '282';\n"); + grammarBuilder.append("KW283 : 'KW' '283';\n"); + grammarBuilder.append("KW284 : 'KW' '284';\n"); + grammarBuilder.append("KW285 : 'KW' '285';\n"); + grammarBuilder.append("KW286 : 'KW' '286';\n"); + grammarBuilder.append("KW287 : 'KW' '287';\n"); + grammarBuilder.append("KW288 : 'KW' '288';\n"); + grammarBuilder.append("KW289 : 'KW' '289';\n"); + grammarBuilder.append("KW290 : 'KW' '290';\n"); + grammarBuilder.append("KW291 : 'KW' '291';\n"); + grammarBuilder.append("KW292 : 'KW' '292';\n"); + grammarBuilder.append("KW293 : 'KW' '293';\n"); + grammarBuilder.append("KW294 : 'KW' '294';\n"); + grammarBuilder.append("KW295 : 'KW' '295';\n"); + grammarBuilder.append("KW296 : 'KW' '296';\n"); + grammarBuilder.append("KW297 : 'KW' '297';\n"); + grammarBuilder.append("KW298 : 'KW' '298';\n"); + grammarBuilder.append("KW299 : 'KW' '299';\n"); + grammarBuilder.append("KW300 : 'KW' '300';\n"); + grammarBuilder.append("KW301 : 'KW' '301';\n"); + grammarBuilder.append("KW302 : 'KW' '302';\n"); + grammarBuilder.append("KW303 : 'KW' '303';\n"); + grammarBuilder.append("KW304 : 'KW' '304';\n"); + grammarBuilder.append("KW305 : 'KW' '305';\n"); + grammarBuilder.append("KW306 : 'KW' '306';\n"); + grammarBuilder.append("KW307 : 'KW' '307';\n"); + grammarBuilder.append("KW308 : 'KW' '308';\n"); + grammarBuilder.append("KW309 : 'KW' '309';\n"); + grammarBuilder.append("KW310 : 'KW' '310';\n"); + grammarBuilder.append("KW311 : 'KW' '311';\n"); + grammarBuilder.append("KW312 : 'KW' '312';\n"); + grammarBuilder.append("KW313 : 'KW' '313';\n"); + grammarBuilder.append("KW314 : 'KW' '314';\n"); + grammarBuilder.append("KW315 : 'KW' '315';\n"); + grammarBuilder.append("KW316 : 'KW' '316';\n"); + grammarBuilder.append("KW317 : 'KW' '317';\n"); + grammarBuilder.append("KW318 : 'KW' '318';\n"); + grammarBuilder.append("KW319 : 'KW' '319';\n"); + grammarBuilder.append("KW320 : 'KW' '320';\n"); + grammarBuilder.append("KW321 : 'KW' '321';\n"); + grammarBuilder.append("KW322 : 'KW' '322';\n"); + grammarBuilder.append("KW323 : 'KW' '323';\n"); + grammarBuilder.append("KW324 : 'KW' '324';\n"); + grammarBuilder.append("KW325 : 'KW' '325';\n"); + grammarBuilder.append("KW326 : 'KW' '326';\n"); + grammarBuilder.append("KW327 : 'KW' '327';\n"); + grammarBuilder.append("KW328 : 'KW' '328';\n"); + grammarBuilder.append("KW329 : 'KW' '329';\n"); + grammarBuilder.append("KW330 : 'KW' '330';\n"); + grammarBuilder.append("KW331 : 'KW' '331';\n"); + grammarBuilder.append("KW332 : 'KW' '332';\n"); + grammarBuilder.append("KW333 : 'KW' '333';\n"); + grammarBuilder.append("KW334 : 'KW' '334';\n"); + grammarBuilder.append("KW335 : 'KW' '335';\n"); + grammarBuilder.append("KW336 : 'KW' '336';\n"); + grammarBuilder.append("KW337 : 'KW' '337';\n"); + grammarBuilder.append("KW338 : 'KW' '338';\n"); + grammarBuilder.append("KW339 : 'KW' '339';\n"); + grammarBuilder.append("KW340 : 'KW' '340';\n"); + grammarBuilder.append("KW341 : 'KW' '341';\n"); + grammarBuilder.append("KW342 : 'KW' '342';\n"); + grammarBuilder.append("KW343 : 'KW' '343';\n"); + grammarBuilder.append("KW344 : 'KW' '344';\n"); + grammarBuilder.append("KW345 : 'KW' '345';\n"); + grammarBuilder.append("KW346 : 'KW' '346';\n"); + grammarBuilder.append("KW347 : 'KW' '347';\n"); + grammarBuilder.append("KW348 : 'KW' '348';\n"); + grammarBuilder.append("KW349 : 'KW' '349';\n"); + grammarBuilder.append("KW350 : 'KW' '350';\n"); + grammarBuilder.append("KW351 : 'KW' '351';\n"); + grammarBuilder.append("KW352 : 'KW' '352';\n"); + grammarBuilder.append("KW353 : 'KW' '353';\n"); + grammarBuilder.append("KW354 : 'KW' '354';\n"); + grammarBuilder.append("KW355 : 'KW' '355';\n"); + grammarBuilder.append("KW356 : 'KW' '356';\n"); + grammarBuilder.append("KW357 : 'KW' '357';\n"); + grammarBuilder.append("KW358 : 'KW' '358';\n"); + grammarBuilder.append("KW359 : 'KW' '359';\n"); + grammarBuilder.append("KW360 : 'KW' '360';\n"); + grammarBuilder.append("KW361 : 'KW' '361';\n"); + grammarBuilder.append("KW362 : 'KW' '362';\n"); + grammarBuilder.append("KW363 : 'KW' '363';\n"); + grammarBuilder.append("KW364 : 'KW' '364';\n"); + grammarBuilder.append("KW365 : 'KW' '365';\n"); + grammarBuilder.append("KW366 : 'KW' '366';\n"); + grammarBuilder.append("KW367 : 'KW' '367';\n"); + grammarBuilder.append("KW368 : 'KW' '368';\n"); + grammarBuilder.append("KW369 : 'KW' '369';\n"); + grammarBuilder.append("KW370 : 'KW' '370';\n"); + grammarBuilder.append("KW371 : 'KW' '371';\n"); + grammarBuilder.append("KW372 : 'KW' '372';\n"); + grammarBuilder.append("KW373 : 'KW' '373';\n"); + grammarBuilder.append("KW374 : 'KW' '374';\n"); + grammarBuilder.append("KW375 : 'KW' '375';\n"); + grammarBuilder.append("KW376 : 'KW' '376';\n"); + grammarBuilder.append("KW377 : 'KW' '377';\n"); + grammarBuilder.append("KW378 : 'KW' '378';\n"); + grammarBuilder.append("KW379 : 'KW' '379';\n"); + grammarBuilder.append("KW380 : 'KW' '380';\n"); + grammarBuilder.append("KW381 : 'KW' '381';\n"); + grammarBuilder.append("KW382 : 'KW' '382';\n"); + grammarBuilder.append("KW383 : 'KW' '383';\n"); + grammarBuilder.append("KW384 : 'KW' '384';\n"); + grammarBuilder.append("KW385 : 'KW' '385';\n"); + grammarBuilder.append("KW386 : 'KW' '386';\n"); + grammarBuilder.append("KW387 : 'KW' '387';\n"); + grammarBuilder.append("KW388 : 'KW' '388';\n"); + grammarBuilder.append("KW389 : 'KW' '389';\n"); + grammarBuilder.append("KW390 : 'KW' '390';\n"); + grammarBuilder.append("KW391 : 'KW' '391';\n"); + grammarBuilder.append("KW392 : 'KW' '392';\n"); + grammarBuilder.append("KW393 : 'KW' '393';\n"); + grammarBuilder.append("KW394 : 'KW' '394';\n"); + grammarBuilder.append("KW395 : 'KW' '395';\n"); + grammarBuilder.append("KW396 : 'KW' '396';\n"); + grammarBuilder.append("KW397 : 'KW' '397';\n"); + grammarBuilder.append("KW398 : 'KW' '398';\n"); + grammarBuilder.append("KW399 : 'KW' '399';\n"); + grammarBuilder.append("KW400 : 'KW' '400';\n"); + grammarBuilder.append("KW401 : 'KW' '401';\n"); + grammarBuilder.append("KW402 : 'KW' '402';\n"); + grammarBuilder.append("KW403 : 'KW' '403';\n"); + grammarBuilder.append("KW404 : 'KW' '404';\n"); + grammarBuilder.append("KW405 : 'KW' '405';\n"); + grammarBuilder.append("KW406 : 'KW' '406';\n"); + grammarBuilder.append("KW407 : 'KW' '407';\n"); + grammarBuilder.append("KW408 : 'KW' '408';\n"); + grammarBuilder.append("KW409 : 'KW' '409';\n"); + grammarBuilder.append("KW410 : 'KW' '410';\n"); + grammarBuilder.append("KW411 : 'KW' '411';\n"); + grammarBuilder.append("KW412 : 'KW' '412';\n"); + grammarBuilder.append("KW413 : 'KW' '413';\n"); + grammarBuilder.append("KW414 : 'KW' '414';\n"); + grammarBuilder.append("KW415 : 'KW' '415';\n"); + grammarBuilder.append("KW416 : 'KW' '416';\n"); + grammarBuilder.append("KW417 : 'KW' '417';\n"); + grammarBuilder.append("KW418 : 'KW' '418';\n"); + grammarBuilder.append("KW419 : 'KW' '419';\n"); + grammarBuilder.append("KW420 : 'KW' '420';\n"); + grammarBuilder.append("KW421 : 'KW' '421';\n"); + grammarBuilder.append("KW422 : 'KW' '422';\n"); + grammarBuilder.append("KW423 : 'KW' '423';\n"); + grammarBuilder.append("KW424 : 'KW' '424';\n"); + grammarBuilder.append("KW425 : 'KW' '425';\n"); + grammarBuilder.append("KW426 : 'KW' '426';\n"); + grammarBuilder.append("KW427 : 'KW' '427';\n"); + grammarBuilder.append("KW428 : 'KW' '428';\n"); + grammarBuilder.append("KW429 : 'KW' '429';\n"); + grammarBuilder.append("KW430 : 'KW' '430';\n"); + grammarBuilder.append("KW431 : 'KW' '431';\n"); + grammarBuilder.append("KW432 : 'KW' '432';\n"); + grammarBuilder.append("KW433 : 'KW' '433';\n"); + grammarBuilder.append("KW434 : 'KW' '434';\n"); + grammarBuilder.append("KW435 : 'KW' '435';\n"); + grammarBuilder.append("KW436 : 'KW' '436';\n"); + grammarBuilder.append("KW437 : 'KW' '437';\n"); + grammarBuilder.append("KW438 : 'KW' '438';\n"); + grammarBuilder.append("KW439 : 'KW' '439';\n"); + grammarBuilder.append("KW440 : 'KW' '440';\n"); + grammarBuilder.append("KW441 : 'KW' '441';\n"); + grammarBuilder.append("KW442 : 'KW' '442';\n"); + grammarBuilder.append("KW443 : 'KW' '443';\n"); + grammarBuilder.append("KW444 : 'KW' '444';\n"); + grammarBuilder.append("KW445 : 'KW' '445';\n"); + grammarBuilder.append("KW446 : 'KW' '446';\n"); + grammarBuilder.append("KW447 : 'KW' '447';\n"); + grammarBuilder.append("KW448 : 'KW' '448';\n"); + grammarBuilder.append("KW449 : 'KW' '449';\n"); + grammarBuilder.append("KW450 : 'KW' '450';\n"); + grammarBuilder.append("KW451 : 'KW' '451';\n"); + grammarBuilder.append("KW452 : 'KW' '452';\n"); + grammarBuilder.append("KW453 : 'KW' '453';\n"); + grammarBuilder.append("KW454 : 'KW' '454';\n"); + grammarBuilder.append("KW455 : 'KW' '455';\n"); + grammarBuilder.append("KW456 : 'KW' '456';\n"); + grammarBuilder.append("KW457 : 'KW' '457';\n"); + grammarBuilder.append("KW458 : 'KW' '458';\n"); + grammarBuilder.append("KW459 : 'KW' '459';\n"); + grammarBuilder.append("KW460 : 'KW' '460';\n"); + grammarBuilder.append("KW461 : 'KW' '461';\n"); + grammarBuilder.append("KW462 : 'KW' '462';\n"); + grammarBuilder.append("KW463 : 'KW' '463';\n"); + grammarBuilder.append("KW464 : 'KW' '464';\n"); + grammarBuilder.append("KW465 : 'KW' '465';\n"); + grammarBuilder.append("KW466 : 'KW' '466';\n"); + grammarBuilder.append("KW467 : 'KW' '467';\n"); + grammarBuilder.append("KW468 : 'KW' '468';\n"); + grammarBuilder.append("KW469 : 'KW' '469';\n"); + grammarBuilder.append("KW470 : 'KW' '470';\n"); + grammarBuilder.append("KW471 : 'KW' '471';\n"); + grammarBuilder.append("KW472 : 'KW' '472';\n"); + grammarBuilder.append("KW473 : 'KW' '473';\n"); + grammarBuilder.append("KW474 : 'KW' '474';\n"); + grammarBuilder.append("KW475 : 'KW' '475';\n"); + grammarBuilder.append("KW476 : 'KW' '476';\n"); + grammarBuilder.append("KW477 : 'KW' '477';\n"); + grammarBuilder.append("KW478 : 'KW' '478';\n"); + grammarBuilder.append("KW479 : 'KW' '479';\n"); + grammarBuilder.append("KW480 : 'KW' '480';\n"); + grammarBuilder.append("KW481 : 'KW' '481';\n"); + grammarBuilder.append("KW482 : 'KW' '482';\n"); + grammarBuilder.append("KW483 : 'KW' '483';\n"); + grammarBuilder.append("KW484 : 'KW' '484';\n"); + grammarBuilder.append("KW485 : 'KW' '485';\n"); + grammarBuilder.append("KW486 : 'KW' '486';\n"); + grammarBuilder.append("KW487 : 'KW' '487';\n"); + grammarBuilder.append("KW488 : 'KW' '488';\n"); + grammarBuilder.append("KW489 : 'KW' '489';\n"); + grammarBuilder.append("KW490 : 'KW' '490';\n"); + grammarBuilder.append("KW491 : 'KW' '491';\n"); + grammarBuilder.append("KW492 : 'KW' '492';\n"); + grammarBuilder.append("KW493 : 'KW' '493';\n"); + grammarBuilder.append("KW494 : 'KW' '494';\n"); + grammarBuilder.append("KW495 : 'KW' '495';\n"); + grammarBuilder.append("KW496 : 'KW' '496';\n"); + grammarBuilder.append("KW497 : 'KW' '497';\n"); + grammarBuilder.append("KW498 : 'KW' '498';\n"); + grammarBuilder.append("KW499 : 'KW' '499';\n"); + grammarBuilder.append("KW500 : 'KW' '500';\n"); + grammarBuilder.append("KW501 : 'KW' '501';\n"); + grammarBuilder.append("KW502 : 'KW' '502';\n"); + grammarBuilder.append("KW503 : 'KW' '503';\n"); + grammarBuilder.append("KW504 : 'KW' '504';\n"); + grammarBuilder.append("KW505 : 'KW' '505';\n"); + grammarBuilder.append("KW506 : 'KW' '506';\n"); + grammarBuilder.append("KW507 : 'KW' '507';\n"); + grammarBuilder.append("KW508 : 'KW' '508';\n"); + grammarBuilder.append("KW509 : 'KW' '509';\n"); + grammarBuilder.append("KW510 : 'KW' '510';\n"); + grammarBuilder.append("KW511 : 'KW' '511';\n"); + grammarBuilder.append("KW512 : 'KW' '512';\n"); + grammarBuilder.append("KW513 : 'KW' '513';\n"); + grammarBuilder.append("KW514 : 'KW' '514';\n"); + grammarBuilder.append("KW515 : 'KW' '515';\n"); + grammarBuilder.append("KW516 : 'KW' '516';\n"); + grammarBuilder.append("KW517 : 'KW' '517';\n"); + grammarBuilder.append("KW518 : 'KW' '518';\n"); + grammarBuilder.append("KW519 : 'KW' '519';\n"); + grammarBuilder.append("KW520 : 'KW' '520';\n"); + grammarBuilder.append("KW521 : 'KW' '521';\n"); + grammarBuilder.append("KW522 : 'KW' '522';\n"); + grammarBuilder.append("KW523 : 'KW' '523';\n"); + grammarBuilder.append("KW524 : 'KW' '524';\n"); + grammarBuilder.append("KW525 : 'KW' '525';\n"); + grammarBuilder.append("KW526 : 'KW' '526';\n"); + grammarBuilder.append("KW527 : 'KW' '527';\n"); + grammarBuilder.append("KW528 : 'KW' '528';\n"); + grammarBuilder.append("KW529 : 'KW' '529';\n"); + grammarBuilder.append("KW530 : 'KW' '530';\n"); + grammarBuilder.append("KW531 : 'KW' '531';\n"); + grammarBuilder.append("KW532 : 'KW' '532';\n"); + grammarBuilder.append("KW533 : 'KW' '533';\n"); + grammarBuilder.append("KW534 : 'KW' '534';\n"); + grammarBuilder.append("KW535 : 'KW' '535';\n"); + grammarBuilder.append("KW536 : 'KW' '536';\n"); + grammarBuilder.append("KW537 : 'KW' '537';\n"); + grammarBuilder.append("KW538 : 'KW' '538';\n"); + grammarBuilder.append("KW539 : 'KW' '539';\n"); + grammarBuilder.append("KW540 : 'KW' '540';\n"); + grammarBuilder.append("KW541 : 'KW' '541';\n"); + grammarBuilder.append("KW542 : 'KW' '542';\n"); + grammarBuilder.append("KW543 : 'KW' '543';\n"); + grammarBuilder.append("KW544 : 'KW' '544';\n"); + grammarBuilder.append("KW545 : 'KW' '545';\n"); + grammarBuilder.append("KW546 : 'KW' '546';\n"); + grammarBuilder.append("KW547 : 'KW' '547';\n"); + grammarBuilder.append("KW548 : 'KW' '548';\n"); + grammarBuilder.append("KW549 : 'KW' '549';\n"); + grammarBuilder.append("KW550 : 'KW' '550';\n"); + grammarBuilder.append("KW551 : 'KW' '551';\n"); + grammarBuilder.append("KW552 : 'KW' '552';\n"); + grammarBuilder.append("KW553 : 'KW' '553';\n"); + grammarBuilder.append("KW554 : 'KW' '554';\n"); + grammarBuilder.append("KW555 : 'KW' '555';\n"); + grammarBuilder.append("KW556 : 'KW' '556';\n"); + grammarBuilder.append("KW557 : 'KW' '557';\n"); + grammarBuilder.append("KW558 : 'KW' '558';\n"); + grammarBuilder.append("KW559 : 'KW' '559';\n"); + grammarBuilder.append("KW560 : 'KW' '560';\n"); + grammarBuilder.append("KW561 : 'KW' '561';\n"); + grammarBuilder.append("KW562 : 'KW' '562';\n"); + grammarBuilder.append("KW563 : 'KW' '563';\n"); + grammarBuilder.append("KW564 : 'KW' '564';\n"); + grammarBuilder.append("KW565 : 'KW' '565';\n"); + grammarBuilder.append("KW566 : 'KW' '566';\n"); + grammarBuilder.append("KW567 : 'KW' '567';\n"); + grammarBuilder.append("KW568 : 'KW' '568';\n"); + grammarBuilder.append("KW569 : 'KW' '569';\n"); + grammarBuilder.append("KW570 : 'KW' '570';\n"); + grammarBuilder.append("KW571 : 'KW' '571';\n"); + grammarBuilder.append("KW572 : 'KW' '572';\n"); + grammarBuilder.append("KW573 : 'KW' '573';\n"); + grammarBuilder.append("KW574 : 'KW' '574';\n"); + grammarBuilder.append("KW575 : 'KW' '575';\n"); + grammarBuilder.append("KW576 : 'KW' '576';\n"); + grammarBuilder.append("KW577 : 'KW' '577';\n"); + grammarBuilder.append("KW578 : 'KW' '578';\n"); + grammarBuilder.append("KW579 : 'KW' '579';\n"); + grammarBuilder.append("KW580 : 'KW' '580';\n"); + grammarBuilder.append("KW581 : 'KW' '581';\n"); + grammarBuilder.append("KW582 : 'KW' '582';\n"); + grammarBuilder.append("KW583 : 'KW' '583';\n"); + grammarBuilder.append("KW584 : 'KW' '584';\n"); + grammarBuilder.append("KW585 : 'KW' '585';\n"); + grammarBuilder.append("KW586 : 'KW' '586';\n"); + grammarBuilder.append("KW587 : 'KW' '587';\n"); + grammarBuilder.append("KW588 : 'KW' '588';\n"); + grammarBuilder.append("KW589 : 'KW' '589';\n"); + grammarBuilder.append("KW590 : 'KW' '590';\n"); + grammarBuilder.append("KW591 : 'KW' '591';\n"); + grammarBuilder.append("KW592 : 'KW' '592';\n"); + grammarBuilder.append("KW593 : 'KW' '593';\n"); + grammarBuilder.append("KW594 : 'KW' '594';\n"); + grammarBuilder.append("KW595 : 'KW' '595';\n"); + grammarBuilder.append("KW596 : 'KW' '596';\n"); + grammarBuilder.append("KW597 : 'KW' '597';\n"); + grammarBuilder.append("KW598 : 'KW' '598';\n"); + grammarBuilder.append("KW599 : 'KW' '599';\n"); + grammarBuilder.append("KW600 : 'KW' '600';\n"); + grammarBuilder.append("KW601 : 'KW' '601';\n"); + grammarBuilder.append("KW602 : 'KW' '602';\n"); + grammarBuilder.append("KW603 : 'KW' '603';\n"); + grammarBuilder.append("KW604 : 'KW' '604';\n"); + grammarBuilder.append("KW605 : 'KW' '605';\n"); + grammarBuilder.append("KW606 : 'KW' '606';\n"); + grammarBuilder.append("KW607 : 'KW' '607';\n"); + grammarBuilder.append("KW608 : 'KW' '608';\n"); + grammarBuilder.append("KW609 : 'KW' '609';\n"); + grammarBuilder.append("KW610 : 'KW' '610';\n"); + grammarBuilder.append("KW611 : 'KW' '611';\n"); + grammarBuilder.append("KW612 : 'KW' '612';\n"); + grammarBuilder.append("KW613 : 'KW' '613';\n"); + grammarBuilder.append("KW614 : 'KW' '614';\n"); + grammarBuilder.append("KW615 : 'KW' '615';\n"); + grammarBuilder.append("KW616 : 'KW' '616';\n"); + grammarBuilder.append("KW617 : 'KW' '617';\n"); + grammarBuilder.append("KW618 : 'KW' '618';\n"); + grammarBuilder.append("KW619 : 'KW' '619';\n"); + grammarBuilder.append("KW620 : 'KW' '620';\n"); + grammarBuilder.append("KW621 : 'KW' '621';\n"); + grammarBuilder.append("KW622 : 'KW' '622';\n"); + grammarBuilder.append("KW623 : 'KW' '623';\n"); + grammarBuilder.append("KW624 : 'KW' '624';\n"); + grammarBuilder.append("KW625 : 'KW' '625';\n"); + grammarBuilder.append("KW626 : 'KW' '626';\n"); + grammarBuilder.append("KW627 : 'KW' '627';\n"); + grammarBuilder.append("KW628 : 'KW' '628';\n"); + grammarBuilder.append("KW629 : 'KW' '629';\n"); + grammarBuilder.append("KW630 : 'KW' '630';\n"); + grammarBuilder.append("KW631 : 'KW' '631';\n"); + grammarBuilder.append("KW632 : 'KW' '632';\n"); + grammarBuilder.append("KW633 : 'KW' '633';\n"); + grammarBuilder.append("KW634 : 'KW' '634';\n"); + grammarBuilder.append("KW635 : 'KW' '635';\n"); + grammarBuilder.append("KW636 : 'KW' '636';\n"); + grammarBuilder.append("KW637 : 'KW' '637';\n"); + grammarBuilder.append("KW638 : 'KW' '638';\n"); + grammarBuilder.append("KW639 : 'KW' '639';\n"); + grammarBuilder.append("KW640 : 'KW' '640';\n"); + grammarBuilder.append("KW641 : 'KW' '641';\n"); + grammarBuilder.append("KW642 : 'KW' '642';\n"); + grammarBuilder.append("KW643 : 'KW' '643';\n"); + grammarBuilder.append("KW644 : 'KW' '644';\n"); + grammarBuilder.append("KW645 : 'KW' '645';\n"); + grammarBuilder.append("KW646 : 'KW' '646';\n"); + grammarBuilder.append("KW647 : 'KW' '647';\n"); + grammarBuilder.append("KW648 : 'KW' '648';\n"); + grammarBuilder.append("KW649 : 'KW' '649';\n"); + grammarBuilder.append("KW650 : 'KW' '650';\n"); + grammarBuilder.append("KW651 : 'KW' '651';\n"); + grammarBuilder.append("KW652 : 'KW' '652';\n"); + grammarBuilder.append("KW653 : 'KW' '653';\n"); + grammarBuilder.append("KW654 : 'KW' '654';\n"); + grammarBuilder.append("KW655 : 'KW' '655';\n"); + grammarBuilder.append("KW656 : 'KW' '656';\n"); + grammarBuilder.append("KW657 : 'KW' '657';\n"); + grammarBuilder.append("KW658 : 'KW' '658';\n"); + grammarBuilder.append("KW659 : 'KW' '659';\n"); + grammarBuilder.append("KW660 : 'KW' '660';\n"); + grammarBuilder.append("KW661 : 'KW' '661';\n"); + grammarBuilder.append("KW662 : 'KW' '662';\n"); + grammarBuilder.append("KW663 : 'KW' '663';\n"); + grammarBuilder.append("KW664 : 'KW' '664';\n"); + grammarBuilder.append("KW665 : 'KW' '665';\n"); + grammarBuilder.append("KW666 : 'KW' '666';\n"); + grammarBuilder.append("KW667 : 'KW' '667';\n"); + grammarBuilder.append("KW668 : 'KW' '668';\n"); + grammarBuilder.append("KW669 : 'KW' '669';\n"); + grammarBuilder.append("KW670 : 'KW' '670';\n"); + grammarBuilder.append("KW671 : 'KW' '671';\n"); + grammarBuilder.append("KW672 : 'KW' '672';\n"); + grammarBuilder.append("KW673 : 'KW' '673';\n"); + grammarBuilder.append("KW674 : 'KW' '674';\n"); + grammarBuilder.append("KW675 : 'KW' '675';\n"); + grammarBuilder.append("KW676 : 'KW' '676';\n"); + grammarBuilder.append("KW677 : 'KW' '677';\n"); + grammarBuilder.append("KW678 : 'KW' '678';\n"); + grammarBuilder.append("KW679 : 'KW' '679';\n"); + grammarBuilder.append("KW680 : 'KW' '680';\n"); + grammarBuilder.append("KW681 : 'KW' '681';\n"); + grammarBuilder.append("KW682 : 'KW' '682';\n"); + grammarBuilder.append("KW683 : 'KW' '683';\n"); + grammarBuilder.append("KW684 : 'KW' '684';\n"); + grammarBuilder.append("KW685 : 'KW' '685';\n"); + grammarBuilder.append("KW686 : 'KW' '686';\n"); + grammarBuilder.append("KW687 : 'KW' '687';\n"); + grammarBuilder.append("KW688 : 'KW' '688';\n"); + grammarBuilder.append("KW689 : 'KW' '689';\n"); + grammarBuilder.append("KW690 : 'KW' '690';\n"); + grammarBuilder.append("KW691 : 'KW' '691';\n"); + grammarBuilder.append("KW692 : 'KW' '692';\n"); + grammarBuilder.append("KW693 : 'KW' '693';\n"); + grammarBuilder.append("KW694 : 'KW' '694';\n"); + grammarBuilder.append("KW695 : 'KW' '695';\n"); + grammarBuilder.append("KW696 : 'KW' '696';\n"); + grammarBuilder.append("KW697 : 'KW' '697';\n"); + grammarBuilder.append("KW698 : 'KW' '698';\n"); + grammarBuilder.append("KW699 : 'KW' '699';\n"); + grammarBuilder.append("KW700 : 'KW' '700';\n"); + grammarBuilder.append("KW701 : 'KW' '701';\n"); + grammarBuilder.append("KW702 : 'KW' '702';\n"); + grammarBuilder.append("KW703 : 'KW' '703';\n"); + grammarBuilder.append("KW704 : 'KW' '704';\n"); + grammarBuilder.append("KW705 : 'KW' '705';\n"); + grammarBuilder.append("KW706 : 'KW' '706';\n"); + grammarBuilder.append("KW707 : 'KW' '707';\n"); + grammarBuilder.append("KW708 : 'KW' '708';\n"); + grammarBuilder.append("KW709 : 'KW' '709';\n"); + grammarBuilder.append("KW710 : 'KW' '710';\n"); + grammarBuilder.append("KW711 : 'KW' '711';\n"); + grammarBuilder.append("KW712 : 'KW' '712';\n"); + grammarBuilder.append("KW713 : 'KW' '713';\n"); + grammarBuilder.append("KW714 : 'KW' '714';\n"); + grammarBuilder.append("KW715 : 'KW' '715';\n"); + grammarBuilder.append("KW716 : 'KW' '716';\n"); + grammarBuilder.append("KW717 : 'KW' '717';\n"); + grammarBuilder.append("KW718 : 'KW' '718';\n"); + grammarBuilder.append("KW719 : 'KW' '719';\n"); + grammarBuilder.append("KW720 : 'KW' '720';\n"); + grammarBuilder.append("KW721 : 'KW' '721';\n"); + grammarBuilder.append("KW722 : 'KW' '722';\n"); + grammarBuilder.append("KW723 : 'KW' '723';\n"); + grammarBuilder.append("KW724 : 'KW' '724';\n"); + grammarBuilder.append("KW725 : 'KW' '725';\n"); + grammarBuilder.append("KW726 : 'KW' '726';\n"); + grammarBuilder.append("KW727 : 'KW' '727';\n"); + grammarBuilder.append("KW728 : 'KW' '728';\n"); + grammarBuilder.append("KW729 : 'KW' '729';\n"); + grammarBuilder.append("KW730 : 'KW' '730';\n"); + grammarBuilder.append("KW731 : 'KW' '731';\n"); + grammarBuilder.append("KW732 : 'KW' '732';\n"); + grammarBuilder.append("KW733 : 'KW' '733';\n"); + grammarBuilder.append("KW734 : 'KW' '734';\n"); + grammarBuilder.append("KW735 : 'KW' '735';\n"); + grammarBuilder.append("KW736 : 'KW' '736';\n"); + grammarBuilder.append("KW737 : 'KW' '737';\n"); + grammarBuilder.append("KW738 : 'KW' '738';\n"); + grammarBuilder.append("KW739 : 'KW' '739';\n"); + grammarBuilder.append("KW740 : 'KW' '740';\n"); + grammarBuilder.append("KW741 : 'KW' '741';\n"); + grammarBuilder.append("KW742 : 'KW' '742';\n"); + grammarBuilder.append("KW743 : 'KW' '743';\n"); + grammarBuilder.append("KW744 : 'KW' '744';\n"); + grammarBuilder.append("KW745 : 'KW' '745';\n"); + grammarBuilder.append("KW746 : 'KW' '746';\n"); + grammarBuilder.append("KW747 : 'KW' '747';\n"); + grammarBuilder.append("KW748 : 'KW' '748';\n"); + grammarBuilder.append("KW749 : 'KW' '749';\n"); + grammarBuilder.append("KW750 : 'KW' '750';\n"); + grammarBuilder.append("KW751 : 'KW' '751';\n"); + grammarBuilder.append("KW752 : 'KW' '752';\n"); + grammarBuilder.append("KW753 : 'KW' '753';\n"); + grammarBuilder.append("KW754 : 'KW' '754';\n"); + grammarBuilder.append("KW755 : 'KW' '755';\n"); + grammarBuilder.append("KW756 : 'KW' '756';\n"); + grammarBuilder.append("KW757 : 'KW' '757';\n"); + grammarBuilder.append("KW758 : 'KW' '758';\n"); + grammarBuilder.append("KW759 : 'KW' '759';\n"); + grammarBuilder.append("KW760 : 'KW' '760';\n"); + grammarBuilder.append("KW761 : 'KW' '761';\n"); + grammarBuilder.append("KW762 : 'KW' '762';\n"); + grammarBuilder.append("KW763 : 'KW' '763';\n"); + grammarBuilder.append("KW764 : 'KW' '764';\n"); + grammarBuilder.append("KW765 : 'KW' '765';\n"); + grammarBuilder.append("KW766 : 'KW' '766';\n"); + grammarBuilder.append("KW767 : 'KW' '767';\n"); + grammarBuilder.append("KW768 : 'KW' '768';\n"); + grammarBuilder.append("KW769 : 'KW' '769';\n"); + grammarBuilder.append("KW770 : 'KW' '770';\n"); + grammarBuilder.append("KW771 : 'KW' '771';\n"); + grammarBuilder.append("KW772 : 'KW' '772';\n"); + grammarBuilder.append("KW773 : 'KW' '773';\n"); + grammarBuilder.append("KW774 : 'KW' '774';\n"); + grammarBuilder.append("KW775 : 'KW' '775';\n"); + grammarBuilder.append("KW776 : 'KW' '776';\n"); + grammarBuilder.append("KW777 : 'KW' '777';\n"); + grammarBuilder.append("KW778 : 'KW' '778';\n"); + grammarBuilder.append("KW779 : 'KW' '779';\n"); + grammarBuilder.append("KW780 : 'KW' '780';\n"); + grammarBuilder.append("KW781 : 'KW' '781';\n"); + grammarBuilder.append("KW782 : 'KW' '782';\n"); + grammarBuilder.append("KW783 : 'KW' '783';\n"); + grammarBuilder.append("KW784 : 'KW' '784';\n"); + grammarBuilder.append("KW785 : 'KW' '785';\n"); + grammarBuilder.append("KW786 : 'KW' '786';\n"); + grammarBuilder.append("KW787 : 'KW' '787';\n"); + grammarBuilder.append("KW788 : 'KW' '788';\n"); + grammarBuilder.append("KW789 : 'KW' '789';\n"); + grammarBuilder.append("KW790 : 'KW' '790';\n"); + grammarBuilder.append("KW791 : 'KW' '791';\n"); + grammarBuilder.append("KW792 : 'KW' '792';\n"); + grammarBuilder.append("KW793 : 'KW' '793';\n"); + grammarBuilder.append("KW794 : 'KW' '794';\n"); + grammarBuilder.append("KW795 : 'KW' '795';\n"); + grammarBuilder.append("KW796 : 'KW' '796';\n"); + grammarBuilder.append("KW797 : 'KW' '797';\n"); + grammarBuilder.append("KW798 : 'KW' '798';\n"); + grammarBuilder.append("KW799 : 'KW' '799';\n"); + grammarBuilder.append("KW800 : 'KW' '800';\n"); + grammarBuilder.append("KW801 : 'KW' '801';\n"); + grammarBuilder.append("KW802 : 'KW' '802';\n"); + grammarBuilder.append("KW803 : 'KW' '803';\n"); + grammarBuilder.append("KW804 : 'KW' '804';\n"); + grammarBuilder.append("KW805 : 'KW' '805';\n"); + grammarBuilder.append("KW806 : 'KW' '806';\n"); + grammarBuilder.append("KW807 : 'KW' '807';\n"); + grammarBuilder.append("KW808 : 'KW' '808';\n"); + grammarBuilder.append("KW809 : 'KW' '809';\n"); + grammarBuilder.append("KW810 : 'KW' '810';\n"); + grammarBuilder.append("KW811 : 'KW' '811';\n"); + grammarBuilder.append("KW812 : 'KW' '812';\n"); + grammarBuilder.append("KW813 : 'KW' '813';\n"); + grammarBuilder.append("KW814 : 'KW' '814';\n"); + grammarBuilder.append("KW815 : 'KW' '815';\n"); + grammarBuilder.append("KW816 : 'KW' '816';\n"); + grammarBuilder.append("KW817 : 'KW' '817';\n"); + grammarBuilder.append("KW818 : 'KW' '818';\n"); + grammarBuilder.append("KW819 : 'KW' '819';\n"); + grammarBuilder.append("KW820 : 'KW' '820';\n"); + grammarBuilder.append("KW821 : 'KW' '821';\n"); + grammarBuilder.append("KW822 : 'KW' '822';\n"); + grammarBuilder.append("KW823 : 'KW' '823';\n"); + grammarBuilder.append("KW824 : 'KW' '824';\n"); + grammarBuilder.append("KW825 : 'KW' '825';\n"); + grammarBuilder.append("KW826 : 'KW' '826';\n"); + grammarBuilder.append("KW827 : 'KW' '827';\n"); + grammarBuilder.append("KW828 : 'KW' '828';\n"); + grammarBuilder.append("KW829 : 'KW' '829';\n"); + grammarBuilder.append("KW830 : 'KW' '830';\n"); + grammarBuilder.append("KW831 : 'KW' '831';\n"); + grammarBuilder.append("KW832 : 'KW' '832';\n"); + grammarBuilder.append("KW833 : 'KW' '833';\n"); + grammarBuilder.append("KW834 : 'KW' '834';\n"); + grammarBuilder.append("KW835 : 'KW' '835';\n"); + grammarBuilder.append("KW836 : 'KW' '836';\n"); + grammarBuilder.append("KW837 : 'KW' '837';\n"); + grammarBuilder.append("KW838 : 'KW' '838';\n"); + grammarBuilder.append("KW839 : 'KW' '839';\n"); + grammarBuilder.append("KW840 : 'KW' '840';\n"); + grammarBuilder.append("KW841 : 'KW' '841';\n"); + grammarBuilder.append("KW842 : 'KW' '842';\n"); + grammarBuilder.append("KW843 : 'KW' '843';\n"); + grammarBuilder.append("KW844 : 'KW' '844';\n"); + grammarBuilder.append("KW845 : 'KW' '845';\n"); + grammarBuilder.append("KW846 : 'KW' '846';\n"); + grammarBuilder.append("KW847 : 'KW' '847';\n"); + grammarBuilder.append("KW848 : 'KW' '848';\n"); + grammarBuilder.append("KW849 : 'KW' '849';\n"); + grammarBuilder.append("KW850 : 'KW' '850';\n"); + grammarBuilder.append("KW851 : 'KW' '851';\n"); + grammarBuilder.append("KW852 : 'KW' '852';\n"); + grammarBuilder.append("KW853 : 'KW' '853';\n"); + grammarBuilder.append("KW854 : 'KW' '854';\n"); + grammarBuilder.append("KW855 : 'KW' '855';\n"); + grammarBuilder.append("KW856 : 'KW' '856';\n"); + grammarBuilder.append("KW857 : 'KW' '857';\n"); + grammarBuilder.append("KW858 : 'KW' '858';\n"); + grammarBuilder.append("KW859 : 'KW' '859';\n"); + grammarBuilder.append("KW860 : 'KW' '860';\n"); + grammarBuilder.append("KW861 : 'KW' '861';\n"); + grammarBuilder.append("KW862 : 'KW' '862';\n"); + grammarBuilder.append("KW863 : 'KW' '863';\n"); + grammarBuilder.append("KW864 : 'KW' '864';\n"); + grammarBuilder.append("KW865 : 'KW' '865';\n"); + grammarBuilder.append("KW866 : 'KW' '866';\n"); + grammarBuilder.append("KW867 : 'KW' '867';\n"); + grammarBuilder.append("KW868 : 'KW' '868';\n"); + grammarBuilder.append("KW869 : 'KW' '869';\n"); + grammarBuilder.append("KW870 : 'KW' '870';\n"); + grammarBuilder.append("KW871 : 'KW' '871';\n"); + grammarBuilder.append("KW872 : 'KW' '872';\n"); + grammarBuilder.append("KW873 : 'KW' '873';\n"); + grammarBuilder.append("KW874 : 'KW' '874';\n"); + grammarBuilder.append("KW875 : 'KW' '875';\n"); + grammarBuilder.append("KW876 : 'KW' '876';\n"); + grammarBuilder.append("KW877 : 'KW' '877';\n"); + grammarBuilder.append("KW878 : 'KW' '878';\n"); + grammarBuilder.append("KW879 : 'KW' '879';\n"); + grammarBuilder.append("KW880 : 'KW' '880';\n"); + grammarBuilder.append("KW881 : 'KW' '881';\n"); + grammarBuilder.append("KW882 : 'KW' '882';\n"); + grammarBuilder.append("KW883 : 'KW' '883';\n"); + grammarBuilder.append("KW884 : 'KW' '884';\n"); + grammarBuilder.append("KW885 : 'KW' '885';\n"); + grammarBuilder.append("KW886 : 'KW' '886';\n"); + grammarBuilder.append("KW887 : 'KW' '887';\n"); + grammarBuilder.append("KW888 : 'KW' '888';\n"); + grammarBuilder.append("KW889 : 'KW' '889';\n"); + grammarBuilder.append("KW890 : 'KW' '890';\n"); + grammarBuilder.append("KW891 : 'KW' '891';\n"); + grammarBuilder.append("KW892 : 'KW' '892';\n"); + grammarBuilder.append("KW893 : 'KW' '893';\n"); + grammarBuilder.append("KW894 : 'KW' '894';\n"); + grammarBuilder.append("KW895 : 'KW' '895';\n"); + grammarBuilder.append("KW896 : 'KW' '896';\n"); + grammarBuilder.append("KW897 : 'KW' '897';\n"); + grammarBuilder.append("KW898 : 'KW' '898';\n"); + grammarBuilder.append("KW899 : 'KW' '899';\n"); + grammarBuilder.append("KW900 : 'KW' '900';\n"); + grammarBuilder.append("KW901 : 'KW' '901';\n"); + grammarBuilder.append("KW902 : 'KW' '902';\n"); + grammarBuilder.append("KW903 : 'KW' '903';\n"); + grammarBuilder.append("KW904 : 'KW' '904';\n"); + grammarBuilder.append("KW905 : 'KW' '905';\n"); + grammarBuilder.append("KW906 : 'KW' '906';\n"); + grammarBuilder.append("KW907 : 'KW' '907';\n"); + grammarBuilder.append("KW908 : 'KW' '908';\n"); + grammarBuilder.append("KW909 : 'KW' '909';\n"); + grammarBuilder.append("KW910 : 'KW' '910';\n"); + grammarBuilder.append("KW911 : 'KW' '911';\n"); + grammarBuilder.append("KW912 : 'KW' '912';\n"); + grammarBuilder.append("KW913 : 'KW' '913';\n"); + grammarBuilder.append("KW914 : 'KW' '914';\n"); + grammarBuilder.append("KW915 : 'KW' '915';\n"); + grammarBuilder.append("KW916 : 'KW' '916';\n"); + grammarBuilder.append("KW917 : 'KW' '917';\n"); + grammarBuilder.append("KW918 : 'KW' '918';\n"); + grammarBuilder.append("KW919 : 'KW' '919';\n"); + grammarBuilder.append("KW920 : 'KW' '920';\n"); + grammarBuilder.append("KW921 : 'KW' '921';\n"); + grammarBuilder.append("KW922 : 'KW' '922';\n"); + grammarBuilder.append("KW923 : 'KW' '923';\n"); + grammarBuilder.append("KW924 : 'KW' '924';\n"); + grammarBuilder.append("KW925 : 'KW' '925';\n"); + grammarBuilder.append("KW926 : 'KW' '926';\n"); + grammarBuilder.append("KW927 : 'KW' '927';\n"); + grammarBuilder.append("KW928 : 'KW' '928';\n"); + grammarBuilder.append("KW929 : 'KW' '929';\n"); + grammarBuilder.append("KW930 : 'KW' '930';\n"); + grammarBuilder.append("KW931 : 'KW' '931';\n"); + grammarBuilder.append("KW932 : 'KW' '932';\n"); + grammarBuilder.append("KW933 : 'KW' '933';\n"); + grammarBuilder.append("KW934 : 'KW' '934';\n"); + grammarBuilder.append("KW935 : 'KW' '935';\n"); + grammarBuilder.append("KW936 : 'KW' '936';\n"); + grammarBuilder.append("KW937 : 'KW' '937';\n"); + grammarBuilder.append("KW938 : 'KW' '938';\n"); + grammarBuilder.append("KW939 : 'KW' '939';\n"); + grammarBuilder.append("KW940 : 'KW' '940';\n"); + grammarBuilder.append("KW941 : 'KW' '941';\n"); + grammarBuilder.append("KW942 : 'KW' '942';\n"); + grammarBuilder.append("KW943 : 'KW' '943';\n"); + grammarBuilder.append("KW944 : 'KW' '944';\n"); + grammarBuilder.append("KW945 : 'KW' '945';\n"); + grammarBuilder.append("KW946 : 'KW' '946';\n"); + grammarBuilder.append("KW947 : 'KW' '947';\n"); + grammarBuilder.append("KW948 : 'KW' '948';\n"); + grammarBuilder.append("KW949 : 'KW' '949';\n"); + grammarBuilder.append("KW950 : 'KW' '950';\n"); + grammarBuilder.append("KW951 : 'KW' '951';\n"); + grammarBuilder.append("KW952 : 'KW' '952';\n"); + grammarBuilder.append("KW953 : 'KW' '953';\n"); + grammarBuilder.append("KW954 : 'KW' '954';\n"); + grammarBuilder.append("KW955 : 'KW' '955';\n"); + grammarBuilder.append("KW956 : 'KW' '956';\n"); + grammarBuilder.append("KW957 : 'KW' '957';\n"); + grammarBuilder.append("KW958 : 'KW' '958';\n"); + grammarBuilder.append("KW959 : 'KW' '959';\n"); + grammarBuilder.append("KW960 : 'KW' '960';\n"); + grammarBuilder.append("KW961 : 'KW' '961';\n"); + grammarBuilder.append("KW962 : 'KW' '962';\n"); + grammarBuilder.append("KW963 : 'KW' '963';\n"); + grammarBuilder.append("KW964 : 'KW' '964';\n"); + grammarBuilder.append("KW965 : 'KW' '965';\n"); + grammarBuilder.append("KW966 : 'KW' '966';\n"); + grammarBuilder.append("KW967 : 'KW' '967';\n"); + grammarBuilder.append("KW968 : 'KW' '968';\n"); + grammarBuilder.append("KW969 : 'KW' '969';\n"); + grammarBuilder.append("KW970 : 'KW' '970';\n"); + grammarBuilder.append("KW971 : 'KW' '971';\n"); + grammarBuilder.append("KW972 : 'KW' '972';\n"); + grammarBuilder.append("KW973 : 'KW' '973';\n"); + grammarBuilder.append("KW974 : 'KW' '974';\n"); + grammarBuilder.append("KW975 : 'KW' '975';\n"); + grammarBuilder.append("KW976 : 'KW' '976';\n"); + grammarBuilder.append("KW977 : 'KW' '977';\n"); + grammarBuilder.append("KW978 : 'KW' '978';\n"); + grammarBuilder.append("KW979 : 'KW' '979';\n"); + grammarBuilder.append("KW980 : 'KW' '980';\n"); + grammarBuilder.append("KW981 : 'KW' '981';\n"); + grammarBuilder.append("KW982 : 'KW' '982';\n"); + grammarBuilder.append("KW983 : 'KW' '983';\n"); + grammarBuilder.append("KW984 : 'KW' '984';\n"); + grammarBuilder.append("KW985 : 'KW' '985';\n"); + grammarBuilder.append("KW986 : 'KW' '986';\n"); + grammarBuilder.append("KW987 : 'KW' '987';\n"); + grammarBuilder.append("KW988 : 'KW' '988';\n"); + grammarBuilder.append("KW989 : 'KW' '989';\n"); + grammarBuilder.append("KW990 : 'KW' '990';\n"); + grammarBuilder.append("KW991 : 'KW' '991';\n"); + grammarBuilder.append("KW992 : 'KW' '992';\n"); + grammarBuilder.append("KW993 : 'KW' '993';\n"); + grammarBuilder.append("KW994 : 'KW' '994';\n"); + grammarBuilder.append("KW995 : 'KW' '995';\n"); + grammarBuilder.append("KW996 : 'KW' '996';\n"); + grammarBuilder.append("KW997 : 'KW' '997';\n"); + grammarBuilder.append("KW998 : 'KW' '998';\n"); + grammarBuilder.append("KW999 : 'KW' '999';\n"); + grammarBuilder.append("KW1000 : 'KW' '1000';\n"); + grammarBuilder.append("KW1001 : 'KW' '1001';\n"); + grammarBuilder.append("KW1002 : 'KW' '1002';\n"); + grammarBuilder.append("KW1003 : 'KW' '1003';\n"); + grammarBuilder.append("KW1004 : 'KW' '1004';\n"); + grammarBuilder.append("KW1005 : 'KW' '1005';\n"); + grammarBuilder.append("KW1006 : 'KW' '1006';\n"); + grammarBuilder.append("KW1007 : 'KW' '1007';\n"); + grammarBuilder.append("KW1008 : 'KW' '1008';\n"); + grammarBuilder.append("KW1009 : 'KW' '1009';\n"); + grammarBuilder.append("KW1010 : 'KW' '1010';\n"); + grammarBuilder.append("KW1011 : 'KW' '1011';\n"); + grammarBuilder.append("KW1012 : 'KW' '1012';\n"); + grammarBuilder.append("KW1013 : 'KW' '1013';\n"); + grammarBuilder.append("KW1014 : 'KW' '1014';\n"); + grammarBuilder.append("KW1015 : 'KW' '1015';\n"); + grammarBuilder.append("KW1016 : 'KW' '1016';\n"); + grammarBuilder.append("KW1017 : 'KW' '1017';\n"); + grammarBuilder.append("KW1018 : 'KW' '1018';\n"); + grammarBuilder.append("KW1019 : 'KW' '1019';\n"); + grammarBuilder.append("KW1020 : 'KW' '1020';\n"); + grammarBuilder.append("KW1021 : 'KW' '1021';\n"); + grammarBuilder.append("KW1022 : 'KW' '1022';\n"); + grammarBuilder.append("KW1023 : 'KW' '1023';\n"); + grammarBuilder.append("KW1024 : 'KW' '1024';\n"); + grammarBuilder.append("KW1025 : 'KW' '1025';\n"); + grammarBuilder.append("KW1026 : 'KW' '1026';\n"); + grammarBuilder.append("KW1027 : 'KW' '1027';\n"); + grammarBuilder.append("KW1028 : 'KW' '1028';\n"); + grammarBuilder.append("KW1029 : 'KW' '1029';\n"); + grammarBuilder.append("KW1030 : 'KW' '1030';\n"); + grammarBuilder.append("KW1031 : 'KW' '1031';\n"); + grammarBuilder.append("KW1032 : 'KW' '1032';\n"); + grammarBuilder.append("KW1033 : 'KW' '1033';\n"); + grammarBuilder.append("KW1034 : 'KW' '1034';\n"); + grammarBuilder.append("KW1035 : 'KW' '1035';\n"); + grammarBuilder.append("KW1036 : 'KW' '1036';\n"); + grammarBuilder.append("KW1037 : 'KW' '1037';\n"); + grammarBuilder.append("KW1038 : 'KW' '1038';\n"); + grammarBuilder.append("KW1039 : 'KW' '1039';\n"); + grammarBuilder.append("KW1040 : 'KW' '1040';\n"); + grammarBuilder.append("KW1041 : 'KW' '1041';\n"); + grammarBuilder.append("KW1042 : 'KW' '1042';\n"); + grammarBuilder.append("KW1043 : 'KW' '1043';\n"); + grammarBuilder.append("KW1044 : 'KW' '1044';\n"); + grammarBuilder.append("KW1045 : 'KW' '1045';\n"); + grammarBuilder.append("KW1046 : 'KW' '1046';\n"); + grammarBuilder.append("KW1047 : 'KW' '1047';\n"); + grammarBuilder.append("KW1048 : 'KW' '1048';\n"); + grammarBuilder.append("KW1049 : 'KW' '1049';\n"); + grammarBuilder.append("KW1050 : 'KW' '1050';\n"); + grammarBuilder.append("KW1051 : 'KW' '1051';\n"); + grammarBuilder.append("KW1052 : 'KW' '1052';\n"); + grammarBuilder.append("KW1053 : 'KW' '1053';\n"); + grammarBuilder.append("KW1054 : 'KW' '1054';\n"); + grammarBuilder.append("KW1055 : 'KW' '1055';\n"); + grammarBuilder.append("KW1056 : 'KW' '1056';\n"); + grammarBuilder.append("KW1057 : 'KW' '1057';\n"); + grammarBuilder.append("KW1058 : 'KW' '1058';\n"); + grammarBuilder.append("KW1059 : 'KW' '1059';\n"); + grammarBuilder.append("KW1060 : 'KW' '1060';\n"); + grammarBuilder.append("KW1061 : 'KW' '1061';\n"); + grammarBuilder.append("KW1062 : 'KW' '1062';\n"); + grammarBuilder.append("KW1063 : 'KW' '1063';\n"); + grammarBuilder.append("KW1064 : 'KW' '1064';\n"); + grammarBuilder.append("KW1065 : 'KW' '1065';\n"); + grammarBuilder.append("KW1066 : 'KW' '1066';\n"); + grammarBuilder.append("KW1067 : 'KW' '1067';\n"); + grammarBuilder.append("KW1068 : 'KW' '1068';\n"); + grammarBuilder.append("KW1069 : 'KW' '1069';\n"); + grammarBuilder.append("KW1070 : 'KW' '1070';\n"); + grammarBuilder.append("KW1071 : 'KW' '1071';\n"); + grammarBuilder.append("KW1072 : 'KW' '1072';\n"); + grammarBuilder.append("KW1073 : 'KW' '1073';\n"); + grammarBuilder.append("KW1074 : 'KW' '1074';\n"); + grammarBuilder.append("KW1075 : 'KW' '1075';\n"); + grammarBuilder.append("KW1076 : 'KW' '1076';\n"); + grammarBuilder.append("KW1077 : 'KW' '1077';\n"); + grammarBuilder.append("KW1078 : 'KW' '1078';\n"); + grammarBuilder.append("KW1079 : 'KW' '1079';\n"); + grammarBuilder.append("KW1080 : 'KW' '1080';\n"); + grammarBuilder.append("KW1081 : 'KW' '1081';\n"); + grammarBuilder.append("KW1082 : 'KW' '1082';\n"); + grammarBuilder.append("KW1083 : 'KW' '1083';\n"); + grammarBuilder.append("KW1084 : 'KW' '1084';\n"); + grammarBuilder.append("KW1085 : 'KW' '1085';\n"); + grammarBuilder.append("KW1086 : 'KW' '1086';\n"); + grammarBuilder.append("KW1087 : 'KW' '1087';\n"); + grammarBuilder.append("KW1088 : 'KW' '1088';\n"); + grammarBuilder.append("KW1089 : 'KW' '1089';\n"); + grammarBuilder.append("KW1090 : 'KW' '1090';\n"); + grammarBuilder.append("KW1091 : 'KW' '1091';\n"); + grammarBuilder.append("KW1092 : 'KW' '1092';\n"); + grammarBuilder.append("KW1093 : 'KW' '1093';\n"); + grammarBuilder.append("KW1094 : 'KW' '1094';\n"); + grammarBuilder.append("KW1095 : 'KW' '1095';\n"); + grammarBuilder.append("KW1096 : 'KW' '1096';\n"); + grammarBuilder.append("KW1097 : 'KW' '1097';\n"); + grammarBuilder.append("KW1098 : 'KW' '1098';\n"); + grammarBuilder.append("KW1099 : 'KW' '1099';\n"); + grammarBuilder.append("KW1100 : 'KW' '1100';\n"); + grammarBuilder.append("KW1101 : 'KW' '1101';\n"); + grammarBuilder.append("KW1102 : 'KW' '1102';\n"); + grammarBuilder.append("KW1103 : 'KW' '1103';\n"); + grammarBuilder.append("KW1104 : 'KW' '1104';\n"); + grammarBuilder.append("KW1105 : 'KW' '1105';\n"); + grammarBuilder.append("KW1106 : 'KW' '1106';\n"); + grammarBuilder.append("KW1107 : 'KW' '1107';\n"); + grammarBuilder.append("KW1108 : 'KW' '1108';\n"); + grammarBuilder.append("KW1109 : 'KW' '1109';\n"); + grammarBuilder.append("KW1110 : 'KW' '1110';\n"); + grammarBuilder.append("KW1111 : 'KW' '1111';\n"); + grammarBuilder.append("KW1112 : 'KW' '1112';\n"); + grammarBuilder.append("KW1113 : 'KW' '1113';\n"); + grammarBuilder.append("KW1114 : 'KW' '1114';\n"); + grammarBuilder.append("KW1115 : 'KW' '1115';\n"); + grammarBuilder.append("KW1116 : 'KW' '1116';\n"); + grammarBuilder.append("KW1117 : 'KW' '1117';\n"); + grammarBuilder.append("KW1118 : 'KW' '1118';\n"); + grammarBuilder.append("KW1119 : 'KW' '1119';\n"); + grammarBuilder.append("KW1120 : 'KW' '1120';\n"); + grammarBuilder.append("KW1121 : 'KW' '1121';\n"); + grammarBuilder.append("KW1122 : 'KW' '1122';\n"); + grammarBuilder.append("KW1123 : 'KW' '1123';\n"); + grammarBuilder.append("KW1124 : 'KW' '1124';\n"); + grammarBuilder.append("KW1125 : 'KW' '1125';\n"); + grammarBuilder.append("KW1126 : 'KW' '1126';\n"); + grammarBuilder.append("KW1127 : 'KW' '1127';\n"); + grammarBuilder.append("KW1128 : 'KW' '1128';\n"); + grammarBuilder.append("KW1129 : 'KW' '1129';\n"); + grammarBuilder.append("KW1130 : 'KW' '1130';\n"); + grammarBuilder.append("KW1131 : 'KW' '1131';\n"); + grammarBuilder.append("KW1132 : 'KW' '1132';\n"); + grammarBuilder.append("KW1133 : 'KW' '1133';\n"); + grammarBuilder.append("KW1134 : 'KW' '1134';\n"); + grammarBuilder.append("KW1135 : 'KW' '1135';\n"); + grammarBuilder.append("KW1136 : 'KW' '1136';\n"); + grammarBuilder.append("KW1137 : 'KW' '1137';\n"); + grammarBuilder.append("KW1138 : 'KW' '1138';\n"); + grammarBuilder.append("KW1139 : 'KW' '1139';\n"); + grammarBuilder.append("KW1140 : 'KW' '1140';\n"); + grammarBuilder.append("KW1141 : 'KW' '1141';\n"); + grammarBuilder.append("KW1142 : 'KW' '1142';\n"); + grammarBuilder.append("KW1143 : 'KW' '1143';\n"); + grammarBuilder.append("KW1144 : 'KW' '1144';\n"); + grammarBuilder.append("KW1145 : 'KW' '1145';\n"); + grammarBuilder.append("KW1146 : 'KW' '1146';\n"); + grammarBuilder.append("KW1147 : 'KW' '1147';\n"); + grammarBuilder.append("KW1148 : 'KW' '1148';\n"); + grammarBuilder.append("KW1149 : 'KW' '1149';\n"); + grammarBuilder.append("KW1150 : 'KW' '1150';\n"); + grammarBuilder.append("KW1151 : 'KW' '1151';\n"); + grammarBuilder.append("KW1152 : 'KW' '1152';\n"); + grammarBuilder.append("KW1153 : 'KW' '1153';\n"); + grammarBuilder.append("KW1154 : 'KW' '1154';\n"); + grammarBuilder.append("KW1155 : 'KW' '1155';\n"); + grammarBuilder.append("KW1156 : 'KW' '1156';\n"); + grammarBuilder.append("KW1157 : 'KW' '1157';\n"); + grammarBuilder.append("KW1158 : 'KW' '1158';\n"); + grammarBuilder.append("KW1159 : 'KW' '1159';\n"); + grammarBuilder.append("KW1160 : 'KW' '1160';\n"); + grammarBuilder.append("KW1161 : 'KW' '1161';\n"); + grammarBuilder.append("KW1162 : 'KW' '1162';\n"); + grammarBuilder.append("KW1163 : 'KW' '1163';\n"); + grammarBuilder.append("KW1164 : 'KW' '1164';\n"); + grammarBuilder.append("KW1165 : 'KW' '1165';\n"); + grammarBuilder.append("KW1166 : 'KW' '1166';\n"); + grammarBuilder.append("KW1167 : 'KW' '1167';\n"); + grammarBuilder.append("KW1168 : 'KW' '1168';\n"); + grammarBuilder.append("KW1169 : 'KW' '1169';\n"); + grammarBuilder.append("KW1170 : 'KW' '1170';\n"); + grammarBuilder.append("KW1171 : 'KW' '1171';\n"); + grammarBuilder.append("KW1172 : 'KW' '1172';\n"); + grammarBuilder.append("KW1173 : 'KW' '1173';\n"); + grammarBuilder.append("KW1174 : 'KW' '1174';\n"); + grammarBuilder.append("KW1175 : 'KW' '1175';\n"); + grammarBuilder.append("KW1176 : 'KW' '1176';\n"); + grammarBuilder.append("KW1177 : 'KW' '1177';\n"); + grammarBuilder.append("KW1178 : 'KW' '1178';\n"); + grammarBuilder.append("KW1179 : 'KW' '1179';\n"); + grammarBuilder.append("KW1180 : 'KW' '1180';\n"); + grammarBuilder.append("KW1181 : 'KW' '1181';\n"); + grammarBuilder.append("KW1182 : 'KW' '1182';\n"); + grammarBuilder.append("KW1183 : 'KW' '1183';\n"); + grammarBuilder.append("KW1184 : 'KW' '1184';\n"); + grammarBuilder.append("KW1185 : 'KW' '1185';\n"); + grammarBuilder.append("KW1186 : 'KW' '1186';\n"); + grammarBuilder.append("KW1187 : 'KW' '1187';\n"); + grammarBuilder.append("KW1188 : 'KW' '1188';\n"); + grammarBuilder.append("KW1189 : 'KW' '1189';\n"); + grammarBuilder.append("KW1190 : 'KW' '1190';\n"); + grammarBuilder.append("KW1191 : 'KW' '1191';\n"); + grammarBuilder.append("KW1192 : 'KW' '1192';\n"); + grammarBuilder.append("KW1193 : 'KW' '1193';\n"); + grammarBuilder.append("KW1194 : 'KW' '1194';\n"); + grammarBuilder.append("KW1195 : 'KW' '1195';\n"); + grammarBuilder.append("KW1196 : 'KW' '1196';\n"); + grammarBuilder.append("KW1197 : 'KW' '1197';\n"); + grammarBuilder.append("KW1198 : 'KW' '1198';\n"); + grammarBuilder.append("KW1199 : 'KW' '1199';\n"); + grammarBuilder.append("KW1200 : 'KW' '1200';\n"); + grammarBuilder.append("KW1201 : 'KW' '1201';\n"); + grammarBuilder.append("KW1202 : 'KW' '1202';\n"); + grammarBuilder.append("KW1203 : 'KW' '1203';\n"); + grammarBuilder.append("KW1204 : 'KW' '1204';\n"); + grammarBuilder.append("KW1205 : 'KW' '1205';\n"); + grammarBuilder.append("KW1206 : 'KW' '1206';\n"); + grammarBuilder.append("KW1207 : 'KW' '1207';\n"); + grammarBuilder.append("KW1208 : 'KW' '1208';\n"); + grammarBuilder.append("KW1209 : 'KW' '1209';\n"); + grammarBuilder.append("KW1210 : 'KW' '1210';\n"); + grammarBuilder.append("KW1211 : 'KW' '1211';\n"); + grammarBuilder.append("KW1212 : 'KW' '1212';\n"); + grammarBuilder.append("KW1213 : 'KW' '1213';\n"); + grammarBuilder.append("KW1214 : 'KW' '1214';\n"); + grammarBuilder.append("KW1215 : 'KW' '1215';\n"); + grammarBuilder.append("KW1216 : 'KW' '1216';\n"); + grammarBuilder.append("KW1217 : 'KW' '1217';\n"); + grammarBuilder.append("KW1218 : 'KW' '1218';\n"); + grammarBuilder.append("KW1219 : 'KW' '1219';\n"); + grammarBuilder.append("KW1220 : 'KW' '1220';\n"); + grammarBuilder.append("KW1221 : 'KW' '1221';\n"); + grammarBuilder.append("KW1222 : 'KW' '1222';\n"); + grammarBuilder.append("KW1223 : 'KW' '1223';\n"); + grammarBuilder.append("KW1224 : 'KW' '1224';\n"); + grammarBuilder.append("KW1225 : 'KW' '1225';\n"); + grammarBuilder.append("KW1226 : 'KW' '1226';\n"); + grammarBuilder.append("KW1227 : 'KW' '1227';\n"); + grammarBuilder.append("KW1228 : 'KW' '1228';\n"); + grammarBuilder.append("KW1229 : 'KW' '1229';\n"); + grammarBuilder.append("KW1230 : 'KW' '1230';\n"); + grammarBuilder.append("KW1231 : 'KW' '1231';\n"); + grammarBuilder.append("KW1232 : 'KW' '1232';\n"); + grammarBuilder.append("KW1233 : 'KW' '1233';\n"); + grammarBuilder.append("KW1234 : 'KW' '1234';\n"); + grammarBuilder.append("KW1235 : 'KW' '1235';\n"); + grammarBuilder.append("KW1236 : 'KW' '1236';\n"); + grammarBuilder.append("KW1237 : 'KW' '1237';\n"); + grammarBuilder.append("KW1238 : 'KW' '1238';\n"); + grammarBuilder.append("KW1239 : 'KW' '1239';\n"); + grammarBuilder.append("KW1240 : 'KW' '1240';\n"); + grammarBuilder.append("KW1241 : 'KW' '1241';\n"); + grammarBuilder.append("KW1242 : 'KW' '1242';\n"); + grammarBuilder.append("KW1243 : 'KW' '1243';\n"); + grammarBuilder.append("KW1244 : 'KW' '1244';\n"); + grammarBuilder.append("KW1245 : 'KW' '1245';\n"); + grammarBuilder.append("KW1246 : 'KW' '1246';\n"); + grammarBuilder.append("KW1247 : 'KW' '1247';\n"); + grammarBuilder.append("KW1248 : 'KW' '1248';\n"); + grammarBuilder.append("KW1249 : 'KW' '1249';\n"); + grammarBuilder.append("KW1250 : 'KW' '1250';\n"); + grammarBuilder.append("KW1251 : 'KW' '1251';\n"); + grammarBuilder.append("KW1252 : 'KW' '1252';\n"); + grammarBuilder.append("KW1253 : 'KW' '1253';\n"); + grammarBuilder.append("KW1254 : 'KW' '1254';\n"); + grammarBuilder.append("KW1255 : 'KW' '1255';\n"); + grammarBuilder.append("KW1256 : 'KW' '1256';\n"); + grammarBuilder.append("KW1257 : 'KW' '1257';\n"); + grammarBuilder.append("KW1258 : 'KW' '1258';\n"); + grammarBuilder.append("KW1259 : 'KW' '1259';\n"); + grammarBuilder.append("KW1260 : 'KW' '1260';\n"); + grammarBuilder.append("KW1261 : 'KW' '1261';\n"); + grammarBuilder.append("KW1262 : 'KW' '1262';\n"); + grammarBuilder.append("KW1263 : 'KW' '1263';\n"); + grammarBuilder.append("KW1264 : 'KW' '1264';\n"); + grammarBuilder.append("KW1265 : 'KW' '1265';\n"); + grammarBuilder.append("KW1266 : 'KW' '1266';\n"); + grammarBuilder.append("KW1267 : 'KW' '1267';\n"); + grammarBuilder.append("KW1268 : 'KW' '1268';\n"); + grammarBuilder.append("KW1269 : 'KW' '1269';\n"); + grammarBuilder.append("KW1270 : 'KW' '1270';\n"); + grammarBuilder.append("KW1271 : 'KW' '1271';\n"); + grammarBuilder.append("KW1272 : 'KW' '1272';\n"); + grammarBuilder.append("KW1273 : 'KW' '1273';\n"); + grammarBuilder.append("KW1274 : 'KW' '1274';\n"); + grammarBuilder.append("KW1275 : 'KW' '1275';\n"); + grammarBuilder.append("KW1276 : 'KW' '1276';\n"); + grammarBuilder.append("KW1277 : 'KW' '1277';\n"); + grammarBuilder.append("KW1278 : 'KW' '1278';\n"); + grammarBuilder.append("KW1279 : 'KW' '1279';\n"); + grammarBuilder.append("KW1280 : 'KW' '1280';\n"); + grammarBuilder.append("KW1281 : 'KW' '1281';\n"); + grammarBuilder.append("KW1282 : 'KW' '1282';\n"); + grammarBuilder.append("KW1283 : 'KW' '1283';\n"); + grammarBuilder.append("KW1284 : 'KW' '1284';\n"); + grammarBuilder.append("KW1285 : 'KW' '1285';\n"); + grammarBuilder.append("KW1286 : 'KW' '1286';\n"); + grammarBuilder.append("KW1287 : 'KW' '1287';\n"); + grammarBuilder.append("KW1288 : 'KW' '1288';\n"); + grammarBuilder.append("KW1289 : 'KW' '1289';\n"); + grammarBuilder.append("KW1290 : 'KW' '1290';\n"); + grammarBuilder.append("KW1291 : 'KW' '1291';\n"); + grammarBuilder.append("KW1292 : 'KW' '1292';\n"); + grammarBuilder.append("KW1293 : 'KW' '1293';\n"); + grammarBuilder.append("KW1294 : 'KW' '1294';\n"); + grammarBuilder.append("KW1295 : 'KW' '1295';\n"); + grammarBuilder.append("KW1296 : 'KW' '1296';\n"); + grammarBuilder.append("KW1297 : 'KW' '1297';\n"); + grammarBuilder.append("KW1298 : 'KW' '1298';\n"); + grammarBuilder.append("KW1299 : 'KW' '1299';\n"); + grammarBuilder.append("KW1300 : 'KW' '1300';\n"); + grammarBuilder.append("KW1301 : 'KW' '1301';\n"); + grammarBuilder.append("KW1302 : 'KW' '1302';\n"); + grammarBuilder.append("KW1303 : 'KW' '1303';\n"); + grammarBuilder.append("KW1304 : 'KW' '1304';\n"); + grammarBuilder.append("KW1305 : 'KW' '1305';\n"); + grammarBuilder.append("KW1306 : 'KW' '1306';\n"); + grammarBuilder.append("KW1307 : 'KW' '1307';\n"); + grammarBuilder.append("KW1308 : 'KW' '1308';\n"); + grammarBuilder.append("KW1309 : 'KW' '1309';\n"); + grammarBuilder.append("KW1310 : 'KW' '1310';\n"); + grammarBuilder.append("KW1311 : 'KW' '1311';\n"); + grammarBuilder.append("KW1312 : 'KW' '1312';\n"); + grammarBuilder.append("KW1313 : 'KW' '1313';\n"); + grammarBuilder.append("KW1314 : 'KW' '1314';\n"); + grammarBuilder.append("KW1315 : 'KW' '1315';\n"); + grammarBuilder.append("KW1316 : 'KW' '1316';\n"); + grammarBuilder.append("KW1317 : 'KW' '1317';\n"); + grammarBuilder.append("KW1318 : 'KW' '1318';\n"); + grammarBuilder.append("KW1319 : 'KW' '1319';\n"); + grammarBuilder.append("KW1320 : 'KW' '1320';\n"); + grammarBuilder.append("KW1321 : 'KW' '1321';\n"); + grammarBuilder.append("KW1322 : 'KW' '1322';\n"); + grammarBuilder.append("KW1323 : 'KW' '1323';\n"); + grammarBuilder.append("KW1324 : 'KW' '1324';\n"); + grammarBuilder.append("KW1325 : 'KW' '1325';\n"); + grammarBuilder.append("KW1326 : 'KW' '1326';\n"); + grammarBuilder.append("KW1327 : 'KW' '1327';\n"); + grammarBuilder.append("KW1328 : 'KW' '1328';\n"); + grammarBuilder.append("KW1329 : 'KW' '1329';\n"); + grammarBuilder.append("KW1330 : 'KW' '1330';\n"); + grammarBuilder.append("KW1331 : 'KW' '1331';\n"); + grammarBuilder.append("KW1332 : 'KW' '1332';\n"); + grammarBuilder.append("KW1333 : 'KW' '1333';\n"); + grammarBuilder.append("KW1334 : 'KW' '1334';\n"); + grammarBuilder.append("KW1335 : 'KW' '1335';\n"); + grammarBuilder.append("KW1336 : 'KW' '1336';\n"); + grammarBuilder.append("KW1337 : 'KW' '1337';\n"); + grammarBuilder.append("KW1338 : 'KW' '1338';\n"); + grammarBuilder.append("KW1339 : 'KW' '1339';\n"); + grammarBuilder.append("KW1340 : 'KW' '1340';\n"); + grammarBuilder.append("KW1341 : 'KW' '1341';\n"); + grammarBuilder.append("KW1342 : 'KW' '1342';\n"); + grammarBuilder.append("KW1343 : 'KW' '1343';\n"); + grammarBuilder.append("KW1344 : 'KW' '1344';\n"); + grammarBuilder.append("KW1345 : 'KW' '1345';\n"); + grammarBuilder.append("KW1346 : 'KW' '1346';\n"); + grammarBuilder.append("KW1347 : 'KW' '1347';\n"); + grammarBuilder.append("KW1348 : 'KW' '1348';\n"); + grammarBuilder.append("KW1349 : 'KW' '1349';\n"); + grammarBuilder.append("KW1350 : 'KW' '1350';\n"); + grammarBuilder.append("KW1351 : 'KW' '1351';\n"); + grammarBuilder.append("KW1352 : 'KW' '1352';\n"); + grammarBuilder.append("KW1353 : 'KW' '1353';\n"); + grammarBuilder.append("KW1354 : 'KW' '1354';\n"); + grammarBuilder.append("KW1355 : 'KW' '1355';\n"); + grammarBuilder.append("KW1356 : 'KW' '1356';\n"); + grammarBuilder.append("KW1357 : 'KW' '1357';\n"); + grammarBuilder.append("KW1358 : 'KW' '1358';\n"); + grammarBuilder.append("KW1359 : 'KW' '1359';\n"); + grammarBuilder.append("KW1360 : 'KW' '1360';\n"); + grammarBuilder.append("KW1361 : 'KW' '1361';\n"); + grammarBuilder.append("KW1362 : 'KW' '1362';\n"); + grammarBuilder.append("KW1363 : 'KW' '1363';\n"); + grammarBuilder.append("KW1364 : 'KW' '1364';\n"); + grammarBuilder.append("KW1365 : 'KW' '1365';\n"); + grammarBuilder.append("KW1366 : 'KW' '1366';\n"); + grammarBuilder.append("KW1367 : 'KW' '1367';\n"); + grammarBuilder.append("KW1368 : 'KW' '1368';\n"); + grammarBuilder.append("KW1369 : 'KW' '1369';\n"); + grammarBuilder.append("KW1370 : 'KW' '1370';\n"); + grammarBuilder.append("KW1371 : 'KW' '1371';\n"); + grammarBuilder.append("KW1372 : 'KW' '1372';\n"); + grammarBuilder.append("KW1373 : 'KW' '1373';\n"); + grammarBuilder.append("KW1374 : 'KW' '1374';\n"); + grammarBuilder.append("KW1375 : 'KW' '1375';\n"); + grammarBuilder.append("KW1376 : 'KW' '1376';\n"); + grammarBuilder.append("KW1377 : 'KW' '1377';\n"); + grammarBuilder.append("KW1378 : 'KW' '1378';\n"); + grammarBuilder.append("KW1379 : 'KW' '1379';\n"); + grammarBuilder.append("KW1380 : 'KW' '1380';\n"); + grammarBuilder.append("KW1381 : 'KW' '1381';\n"); + grammarBuilder.append("KW1382 : 'KW' '1382';\n"); + grammarBuilder.append("KW1383 : 'KW' '1383';\n"); + grammarBuilder.append("KW1384 : 'KW' '1384';\n"); + grammarBuilder.append("KW1385 : 'KW' '1385';\n"); + grammarBuilder.append("KW1386 : 'KW' '1386';\n"); + grammarBuilder.append("KW1387 : 'KW' '1387';\n"); + grammarBuilder.append("KW1388 : 'KW' '1388';\n"); + grammarBuilder.append("KW1389 : 'KW' '1389';\n"); + grammarBuilder.append("KW1390 : 'KW' '1390';\n"); + grammarBuilder.append("KW1391 : 'KW' '1391';\n"); + grammarBuilder.append("KW1392 : 'KW' '1392';\n"); + grammarBuilder.append("KW1393 : 'KW' '1393';\n"); + grammarBuilder.append("KW1394 : 'KW' '1394';\n"); + grammarBuilder.append("KW1395 : 'KW' '1395';\n"); + grammarBuilder.append("KW1396 : 'KW' '1396';\n"); + grammarBuilder.append("KW1397 : 'KW' '1397';\n"); + grammarBuilder.append("KW1398 : 'KW' '1398';\n"); + grammarBuilder.append("KW1399 : 'KW' '1399';\n"); + grammarBuilder.append("KW1400 : 'KW' '1400';\n"); + grammarBuilder.append("KW1401 : 'KW' '1401';\n"); + grammarBuilder.append("KW1402 : 'KW' '1402';\n"); + grammarBuilder.append("KW1403 : 'KW' '1403';\n"); + grammarBuilder.append("KW1404 : 'KW' '1404';\n"); + grammarBuilder.append("KW1405 : 'KW' '1405';\n"); + grammarBuilder.append("KW1406 : 'KW' '1406';\n"); + grammarBuilder.append("KW1407 : 'KW' '1407';\n"); + grammarBuilder.append("KW1408 : 'KW' '1408';\n"); + grammarBuilder.append("KW1409 : 'KW' '1409';\n"); + grammarBuilder.append("KW1410 : 'KW' '1410';\n"); + grammarBuilder.append("KW1411 : 'KW' '1411';\n"); + grammarBuilder.append("KW1412 : 'KW' '1412';\n"); + grammarBuilder.append("KW1413 : 'KW' '1413';\n"); + grammarBuilder.append("KW1414 : 'KW' '1414';\n"); + grammarBuilder.append("KW1415 : 'KW' '1415';\n"); + grammarBuilder.append("KW1416 : 'KW' '1416';\n"); + grammarBuilder.append("KW1417 : 'KW' '1417';\n"); + grammarBuilder.append("KW1418 : 'KW' '1418';\n"); + grammarBuilder.append("KW1419 : 'KW' '1419';\n"); + grammarBuilder.append("KW1420 : 'KW' '1420';\n"); + grammarBuilder.append("KW1421 : 'KW' '1421';\n"); + grammarBuilder.append("KW1422 : 'KW' '1422';\n"); + grammarBuilder.append("KW1423 : 'KW' '1423';\n"); + grammarBuilder.append("KW1424 : 'KW' '1424';\n"); + grammarBuilder.append("KW1425 : 'KW' '1425';\n"); + grammarBuilder.append("KW1426 : 'KW' '1426';\n"); + grammarBuilder.append("KW1427 : 'KW' '1427';\n"); + grammarBuilder.append("KW1428 : 'KW' '1428';\n"); + grammarBuilder.append("KW1429 : 'KW' '1429';\n"); + grammarBuilder.append("KW1430 : 'KW' '1430';\n"); + grammarBuilder.append("KW1431 : 'KW' '1431';\n"); + grammarBuilder.append("KW1432 : 'KW' '1432';\n"); + grammarBuilder.append("KW1433 : 'KW' '1433';\n"); + grammarBuilder.append("KW1434 : 'KW' '1434';\n"); + grammarBuilder.append("KW1435 : 'KW' '1435';\n"); + grammarBuilder.append("KW1436 : 'KW' '1436';\n"); + grammarBuilder.append("KW1437 : 'KW' '1437';\n"); + grammarBuilder.append("KW1438 : 'KW' '1438';\n"); + grammarBuilder.append("KW1439 : 'KW' '1439';\n"); + grammarBuilder.append("KW1440 : 'KW' '1440';\n"); + grammarBuilder.append("KW1441 : 'KW' '1441';\n"); + grammarBuilder.append("KW1442 : 'KW' '1442';\n"); + grammarBuilder.append("KW1443 : 'KW' '1443';\n"); + grammarBuilder.append("KW1444 : 'KW' '1444';\n"); + grammarBuilder.append("KW1445 : 'KW' '1445';\n"); + grammarBuilder.append("KW1446 : 'KW' '1446';\n"); + grammarBuilder.append("KW1447 : 'KW' '1447';\n"); + grammarBuilder.append("KW1448 : 'KW' '1448';\n"); + grammarBuilder.append("KW1449 : 'KW' '1449';\n"); + grammarBuilder.append("KW1450 : 'KW' '1450';\n"); + grammarBuilder.append("KW1451 : 'KW' '1451';\n"); + grammarBuilder.append("KW1452 : 'KW' '1452';\n"); + grammarBuilder.append("KW1453 : 'KW' '1453';\n"); + grammarBuilder.append("KW1454 : 'KW' '1454';\n"); + grammarBuilder.append("KW1455 : 'KW' '1455';\n"); + grammarBuilder.append("KW1456 : 'KW' '1456';\n"); + grammarBuilder.append("KW1457 : 'KW' '1457';\n"); + grammarBuilder.append("KW1458 : 'KW' '1458';\n"); + grammarBuilder.append("KW1459 : 'KW' '1459';\n"); + grammarBuilder.append("KW1460 : 'KW' '1460';\n"); + grammarBuilder.append("KW1461 : 'KW' '1461';\n"); + grammarBuilder.append("KW1462 : 'KW' '1462';\n"); + grammarBuilder.append("KW1463 : 'KW' '1463';\n"); + grammarBuilder.append("KW1464 : 'KW' '1464';\n"); + grammarBuilder.append("KW1465 : 'KW' '1465';\n"); + grammarBuilder.append("KW1466 : 'KW' '1466';\n"); + grammarBuilder.append("KW1467 : 'KW' '1467';\n"); + grammarBuilder.append("KW1468 : 'KW' '1468';\n"); + grammarBuilder.append("KW1469 : 'KW' '1469';\n"); + grammarBuilder.append("KW1470 : 'KW' '1470';\n"); + grammarBuilder.append("KW1471 : 'KW' '1471';\n"); + grammarBuilder.append("KW1472 : 'KW' '1472';\n"); + grammarBuilder.append("KW1473 : 'KW' '1473';\n"); + grammarBuilder.append("KW1474 : 'KW' '1474';\n"); + grammarBuilder.append("KW1475 : 'KW' '1475';\n"); + grammarBuilder.append("KW1476 : 'KW' '1476';\n"); + grammarBuilder.append("KW1477 : 'KW' '1477';\n"); + grammarBuilder.append("KW1478 : 'KW' '1478';\n"); + grammarBuilder.append("KW1479 : 'KW' '1479';\n"); + grammarBuilder.append("KW1480 : 'KW' '1480';\n"); + grammarBuilder.append("KW1481 : 'KW' '1481';\n"); + grammarBuilder.append("KW1482 : 'KW' '1482';\n"); + grammarBuilder.append("KW1483 : 'KW' '1483';\n"); + grammarBuilder.append("KW1484 : 'KW' '1484';\n"); + grammarBuilder.append("KW1485 : 'KW' '1485';\n"); + grammarBuilder.append("KW1486 : 'KW' '1486';\n"); + grammarBuilder.append("KW1487 : 'KW' '1487';\n"); + grammarBuilder.append("KW1488 : 'KW' '1488';\n"); + grammarBuilder.append("KW1489 : 'KW' '1489';\n"); + grammarBuilder.append("KW1490 : 'KW' '1490';\n"); + grammarBuilder.append("KW1491 : 'KW' '1491';\n"); + grammarBuilder.append("KW1492 : 'KW' '1492';\n"); + grammarBuilder.append("KW1493 : 'KW' '1493';\n"); + grammarBuilder.append("KW1494 : 'KW' '1494';\n"); + grammarBuilder.append("KW1495 : 'KW' '1495';\n"); + grammarBuilder.append("KW1496 : 'KW' '1496';\n"); + grammarBuilder.append("KW1497 : 'KW' '1497';\n"); + grammarBuilder.append("KW1498 : 'KW' '1498';\n"); + grammarBuilder.append("KW1499 : 'KW' '1499';\n"); + grammarBuilder.append("KW1500 : 'KW' '1500';\n"); + grammarBuilder.append("KW1501 : 'KW' '1501';\n"); + grammarBuilder.append("KW1502 : 'KW' '1502';\n"); + grammarBuilder.append("KW1503 : 'KW' '1503';\n"); + grammarBuilder.append("KW1504 : 'KW' '1504';\n"); + grammarBuilder.append("KW1505 : 'KW' '1505';\n"); + grammarBuilder.append("KW1506 : 'KW' '1506';\n"); + grammarBuilder.append("KW1507 : 'KW' '1507';\n"); + grammarBuilder.append("KW1508 : 'KW' '1508';\n"); + grammarBuilder.append("KW1509 : 'KW' '1509';\n"); + grammarBuilder.append("KW1510 : 'KW' '1510';\n"); + grammarBuilder.append("KW1511 : 'KW' '1511';\n"); + grammarBuilder.append("KW1512 : 'KW' '1512';\n"); + grammarBuilder.append("KW1513 : 'KW' '1513';\n"); + grammarBuilder.append("KW1514 : 'KW' '1514';\n"); + grammarBuilder.append("KW1515 : 'KW' '1515';\n"); + grammarBuilder.append("KW1516 : 'KW' '1516';\n"); + grammarBuilder.append("KW1517 : 'KW' '1517';\n"); + grammarBuilder.append("KW1518 : 'KW' '1518';\n"); + grammarBuilder.append("KW1519 : 'KW' '1519';\n"); + grammarBuilder.append("KW1520 : 'KW' '1520';\n"); + grammarBuilder.append("KW1521 : 'KW' '1521';\n"); + grammarBuilder.append("KW1522 : 'KW' '1522';\n"); + grammarBuilder.append("KW1523 : 'KW' '1523';\n"); + grammarBuilder.append("KW1524 : 'KW' '1524';\n"); + grammarBuilder.append("KW1525 : 'KW' '1525';\n"); + grammarBuilder.append("KW1526 : 'KW' '1526';\n"); + grammarBuilder.append("KW1527 : 'KW' '1527';\n"); + grammarBuilder.append("KW1528 : 'KW' '1528';\n"); + grammarBuilder.append("KW1529 : 'KW' '1529';\n"); + grammarBuilder.append("KW1530 : 'KW' '1530';\n"); + grammarBuilder.append("KW1531 : 'KW' '1531';\n"); + grammarBuilder.append("KW1532 : 'KW' '1532';\n"); + grammarBuilder.append("KW1533 : 'KW' '1533';\n"); + grammarBuilder.append("KW1534 : 'KW' '1534';\n"); + grammarBuilder.append("KW1535 : 'KW' '1535';\n"); + grammarBuilder.append("KW1536 : 'KW' '1536';\n"); + grammarBuilder.append("KW1537 : 'KW' '1537';\n"); + grammarBuilder.append("KW1538 : 'KW' '1538';\n"); + grammarBuilder.append("KW1539 : 'KW' '1539';\n"); + grammarBuilder.append("KW1540 : 'KW' '1540';\n"); + grammarBuilder.append("KW1541 : 'KW' '1541';\n"); + grammarBuilder.append("KW1542 : 'KW' '1542';\n"); + grammarBuilder.append("KW1543 : 'KW' '1543';\n"); + grammarBuilder.append("KW1544 : 'KW' '1544';\n"); + grammarBuilder.append("KW1545 : 'KW' '1545';\n"); + grammarBuilder.append("KW1546 : 'KW' '1546';\n"); + grammarBuilder.append("KW1547 : 'KW' '1547';\n"); + grammarBuilder.append("KW1548 : 'KW' '1548';\n"); + grammarBuilder.append("KW1549 : 'KW' '1549';\n"); + grammarBuilder.append("KW1550 : 'KW' '1550';\n"); + grammarBuilder.append("KW1551 : 'KW' '1551';\n"); + grammarBuilder.append("KW1552 : 'KW' '1552';\n"); + grammarBuilder.append("KW1553 : 'KW' '1553';\n"); + grammarBuilder.append("KW1554 : 'KW' '1554';\n"); + grammarBuilder.append("KW1555 : 'KW' '1555';\n"); + grammarBuilder.append("KW1556 : 'KW' '1556';\n"); + grammarBuilder.append("KW1557 : 'KW' '1557';\n"); + grammarBuilder.append("KW1558 : 'KW' '1558';\n"); + grammarBuilder.append("KW1559 : 'KW' '1559';\n"); + grammarBuilder.append("KW1560 : 'KW' '1560';\n"); + grammarBuilder.append("KW1561 : 'KW' '1561';\n"); + grammarBuilder.append("KW1562 : 'KW' '1562';\n"); + grammarBuilder.append("KW1563 : 'KW' '1563';\n"); + grammarBuilder.append("KW1564 : 'KW' '1564';\n"); + grammarBuilder.append("KW1565 : 'KW' '1565';\n"); + grammarBuilder.append("KW1566 : 'KW' '1566';\n"); + grammarBuilder.append("KW1567 : 'KW' '1567';\n"); + grammarBuilder.append("KW1568 : 'KW' '1568';\n"); + grammarBuilder.append("KW1569 : 'KW' '1569';\n"); + grammarBuilder.append("KW1570 : 'KW' '1570';\n"); + grammarBuilder.append("KW1571 : 'KW' '1571';\n"); + grammarBuilder.append("KW1572 : 'KW' '1572';\n"); + grammarBuilder.append("KW1573 : 'KW' '1573';\n"); + grammarBuilder.append("KW1574 : 'KW' '1574';\n"); + grammarBuilder.append("KW1575 : 'KW' '1575';\n"); + grammarBuilder.append("KW1576 : 'KW' '1576';\n"); + grammarBuilder.append("KW1577 : 'KW' '1577';\n"); + grammarBuilder.append("KW1578 : 'KW' '1578';\n"); + grammarBuilder.append("KW1579 : 'KW' '1579';\n"); + grammarBuilder.append("KW1580 : 'KW' '1580';\n"); + grammarBuilder.append("KW1581 : 'KW' '1581';\n"); + grammarBuilder.append("KW1582 : 'KW' '1582';\n"); + grammarBuilder.append("KW1583 : 'KW' '1583';\n"); + grammarBuilder.append("KW1584 : 'KW' '1584';\n"); + grammarBuilder.append("KW1585 : 'KW' '1585';\n"); + grammarBuilder.append("KW1586 : 'KW' '1586';\n"); + grammarBuilder.append("KW1587 : 'KW' '1587';\n"); + grammarBuilder.append("KW1588 : 'KW' '1588';\n"); + grammarBuilder.append("KW1589 : 'KW' '1589';\n"); + grammarBuilder.append("KW1590 : 'KW' '1590';\n"); + grammarBuilder.append("KW1591 : 'KW' '1591';\n"); + grammarBuilder.append("KW1592 : 'KW' '1592';\n"); + grammarBuilder.append("KW1593 : 'KW' '1593';\n"); + grammarBuilder.append("KW1594 : 'KW' '1594';\n"); + grammarBuilder.append("KW1595 : 'KW' '1595';\n"); + grammarBuilder.append("KW1596 : 'KW' '1596';\n"); + grammarBuilder.append("KW1597 : 'KW' '1597';\n"); + grammarBuilder.append("KW1598 : 'KW' '1598';\n"); + grammarBuilder.append("KW1599 : 'KW' '1599';\n"); + grammarBuilder.append("KW1600 : 'KW' '1600';\n"); + grammarBuilder.append("KW1601 : 'KW' '1601';\n"); + grammarBuilder.append("KW1602 : 'KW' '1602';\n"); + grammarBuilder.append("KW1603 : 'KW' '1603';\n"); + grammarBuilder.append("KW1604 : 'KW' '1604';\n"); + grammarBuilder.append("KW1605 : 'KW' '1605';\n"); + grammarBuilder.append("KW1606 : 'KW' '1606';\n"); + grammarBuilder.append("KW1607 : 'KW' '1607';\n"); + grammarBuilder.append("KW1608 : 'KW' '1608';\n"); + grammarBuilder.append("KW1609 : 'KW' '1609';\n"); + grammarBuilder.append("KW1610 : 'KW' '1610';\n"); + grammarBuilder.append("KW1611 : 'KW' '1611';\n"); + grammarBuilder.append("KW1612 : 'KW' '1612';\n"); + grammarBuilder.append("KW1613 : 'KW' '1613';\n"); + grammarBuilder.append("KW1614 : 'KW' '1614';\n"); + grammarBuilder.append("KW1615 : 'KW' '1615';\n"); + grammarBuilder.append("KW1616 : 'KW' '1616';\n"); + grammarBuilder.append("KW1617 : 'KW' '1617';\n"); + grammarBuilder.append("KW1618 : 'KW' '1618';\n"); + grammarBuilder.append("KW1619 : 'KW' '1619';\n"); + grammarBuilder.append("KW1620 : 'KW' '1620';\n"); + grammarBuilder.append("KW1621 : 'KW' '1621';\n"); + grammarBuilder.append("KW1622 : 'KW' '1622';\n"); + grammarBuilder.append("KW1623 : 'KW' '1623';\n"); + grammarBuilder.append("KW1624 : 'KW' '1624';\n"); + grammarBuilder.append("KW1625 : 'KW' '1625';\n"); + grammarBuilder.append("KW1626 : 'KW' '1626';\n"); + grammarBuilder.append("KW1627 : 'KW' '1627';\n"); + grammarBuilder.append("KW1628 : 'KW' '1628';\n"); + grammarBuilder.append("KW1629 : 'KW' '1629';\n"); + grammarBuilder.append("KW1630 : 'KW' '1630';\n"); + grammarBuilder.append("KW1631 : 'KW' '1631';\n"); + grammarBuilder.append("KW1632 : 'KW' '1632';\n"); + grammarBuilder.append("KW1633 : 'KW' '1633';\n"); + grammarBuilder.append("KW1634 : 'KW' '1634';\n"); + grammarBuilder.append("KW1635 : 'KW' '1635';\n"); + grammarBuilder.append("KW1636 : 'KW' '1636';\n"); + grammarBuilder.append("KW1637 : 'KW' '1637';\n"); + grammarBuilder.append("KW1638 : 'KW' '1638';\n"); + grammarBuilder.append("KW1639 : 'KW' '1639';\n"); + grammarBuilder.append("KW1640 : 'KW' '1640';\n"); + grammarBuilder.append("KW1641 : 'KW' '1641';\n"); + grammarBuilder.append("KW1642 : 'KW' '1642';\n"); + grammarBuilder.append("KW1643 : 'KW' '1643';\n"); + grammarBuilder.append("KW1644 : 'KW' '1644';\n"); + grammarBuilder.append("KW1645 : 'KW' '1645';\n"); + grammarBuilder.append("KW1646 : 'KW' '1646';\n"); + grammarBuilder.append("KW1647 : 'KW' '1647';\n"); + grammarBuilder.append("KW1648 : 'KW' '1648';\n"); + grammarBuilder.append("KW1649 : 'KW' '1649';\n"); + grammarBuilder.append("KW1650 : 'KW' '1650';\n"); + grammarBuilder.append("KW1651 : 'KW' '1651';\n"); + grammarBuilder.append("KW1652 : 'KW' '1652';\n"); + grammarBuilder.append("KW1653 : 'KW' '1653';\n"); + grammarBuilder.append("KW1654 : 'KW' '1654';\n"); + grammarBuilder.append("KW1655 : 'KW' '1655';\n"); + grammarBuilder.append("KW1656 : 'KW' '1656';\n"); + grammarBuilder.append("KW1657 : 'KW' '1657';\n"); + grammarBuilder.append("KW1658 : 'KW' '1658';\n"); + grammarBuilder.append("KW1659 : 'KW' '1659';\n"); + grammarBuilder.append("KW1660 : 'KW' '1660';\n"); + grammarBuilder.append("KW1661 : 'KW' '1661';\n"); + grammarBuilder.append("KW1662 : 'KW' '1662';\n"); + grammarBuilder.append("KW1663 : 'KW' '1663';\n"); + grammarBuilder.append("KW1664 : 'KW' '1664';\n"); + grammarBuilder.append("KW1665 : 'KW' '1665';\n"); + grammarBuilder.append("KW1666 : 'KW' '1666';\n"); + grammarBuilder.append("KW1667 : 'KW' '1667';\n"); + grammarBuilder.append("KW1668 : 'KW' '1668';\n"); + grammarBuilder.append("KW1669 : 'KW' '1669';\n"); + grammarBuilder.append("KW1670 : 'KW' '1670';\n"); + grammarBuilder.append("KW1671 : 'KW' '1671';\n"); + grammarBuilder.append("KW1672 : 'KW' '1672';\n"); + grammarBuilder.append("KW1673 : 'KW' '1673';\n"); + grammarBuilder.append("KW1674 : 'KW' '1674';\n"); + grammarBuilder.append("KW1675 : 'KW' '1675';\n"); + grammarBuilder.append("KW1676 : 'KW' '1676';\n"); + grammarBuilder.append("KW1677 : 'KW' '1677';\n"); + grammarBuilder.append("KW1678 : 'KW' '1678';\n"); + grammarBuilder.append("KW1679 : 'KW' '1679';\n"); + grammarBuilder.append("KW1680 : 'KW' '1680';\n"); + grammarBuilder.append("KW1681 : 'KW' '1681';\n"); + grammarBuilder.append("KW1682 : 'KW' '1682';\n"); + grammarBuilder.append("KW1683 : 'KW' '1683';\n"); + grammarBuilder.append("KW1684 : 'KW' '1684';\n"); + grammarBuilder.append("KW1685 : 'KW' '1685';\n"); + grammarBuilder.append("KW1686 : 'KW' '1686';\n"); + grammarBuilder.append("KW1687 : 'KW' '1687';\n"); + grammarBuilder.append("KW1688 : 'KW' '1688';\n"); + grammarBuilder.append("KW1689 : 'KW' '1689';\n"); + grammarBuilder.append("KW1690 : 'KW' '1690';\n"); + grammarBuilder.append("KW1691 : 'KW' '1691';\n"); + grammarBuilder.append("KW1692 : 'KW' '1692';\n"); + grammarBuilder.append("KW1693 : 'KW' '1693';\n"); + grammarBuilder.append("KW1694 : 'KW' '1694';\n"); + grammarBuilder.append("KW1695 : 'KW' '1695';\n"); + grammarBuilder.append("KW1696 : 'KW' '1696';\n"); + grammarBuilder.append("KW1697 : 'KW' '1697';\n"); + grammarBuilder.append("KW1698 : 'KW' '1698';\n"); + grammarBuilder.append("KW1699 : 'KW' '1699';\n"); + grammarBuilder.append("KW1700 : 'KW' '1700';\n"); + grammarBuilder.append("KW1701 : 'KW' '1701';\n"); + grammarBuilder.append("KW1702 : 'KW' '1702';\n"); + grammarBuilder.append("KW1703 : 'KW' '1703';\n"); + grammarBuilder.append("KW1704 : 'KW' '1704';\n"); + grammarBuilder.append("KW1705 : 'KW' '1705';\n"); + grammarBuilder.append("KW1706 : 'KW' '1706';\n"); + grammarBuilder.append("KW1707 : 'KW' '1707';\n"); + grammarBuilder.append("KW1708 : 'KW' '1708';\n"); + grammarBuilder.append("KW1709 : 'KW' '1709';\n"); + grammarBuilder.append("KW1710 : 'KW' '1710';\n"); + grammarBuilder.append("KW1711 : 'KW' '1711';\n"); + grammarBuilder.append("KW1712 : 'KW' '1712';\n"); + grammarBuilder.append("KW1713 : 'KW' '1713';\n"); + grammarBuilder.append("KW1714 : 'KW' '1714';\n"); + grammarBuilder.append("KW1715 : 'KW' '1715';\n"); + grammarBuilder.append("KW1716 : 'KW' '1716';\n"); + grammarBuilder.append("KW1717 : 'KW' '1717';\n"); + grammarBuilder.append("KW1718 : 'KW' '1718';\n"); + grammarBuilder.append("KW1719 : 'KW' '1719';\n"); + grammarBuilder.append("KW1720 : 'KW' '1720';\n"); + grammarBuilder.append("KW1721 : 'KW' '1721';\n"); + grammarBuilder.append("KW1722 : 'KW' '1722';\n"); + grammarBuilder.append("KW1723 : 'KW' '1723';\n"); + grammarBuilder.append("KW1724 : 'KW' '1724';\n"); + grammarBuilder.append("KW1725 : 'KW' '1725';\n"); + grammarBuilder.append("KW1726 : 'KW' '1726';\n"); + grammarBuilder.append("KW1727 : 'KW' '1727';\n"); + grammarBuilder.append("KW1728 : 'KW' '1728';\n"); + grammarBuilder.append("KW1729 : 'KW' '1729';\n"); + grammarBuilder.append("KW1730 : 'KW' '1730';\n"); + grammarBuilder.append("KW1731 : 'KW' '1731';\n"); + grammarBuilder.append("KW1732 : 'KW' '1732';\n"); + grammarBuilder.append("KW1733 : 'KW' '1733';\n"); + grammarBuilder.append("KW1734 : 'KW' '1734';\n"); + grammarBuilder.append("KW1735 : 'KW' '1735';\n"); + grammarBuilder.append("KW1736 : 'KW' '1736';\n"); + grammarBuilder.append("KW1737 : 'KW' '1737';\n"); + grammarBuilder.append("KW1738 : 'KW' '1738';\n"); + grammarBuilder.append("KW1739 : 'KW' '1739';\n"); + grammarBuilder.append("KW1740 : 'KW' '1740';\n"); + grammarBuilder.append("KW1741 : 'KW' '1741';\n"); + grammarBuilder.append("KW1742 : 'KW' '1742';\n"); + grammarBuilder.append("KW1743 : 'KW' '1743';\n"); + grammarBuilder.append("KW1744 : 'KW' '1744';\n"); + grammarBuilder.append("KW1745 : 'KW' '1745';\n"); + grammarBuilder.append("KW1746 : 'KW' '1746';\n"); + grammarBuilder.append("KW1747 : 'KW' '1747';\n"); + grammarBuilder.append("KW1748 : 'KW' '1748';\n"); + grammarBuilder.append("KW1749 : 'KW' '1749';\n"); + grammarBuilder.append("KW1750 : 'KW' '1750';\n"); + grammarBuilder.append("KW1751 : 'KW' '1751';\n"); + grammarBuilder.append("KW1752 : 'KW' '1752';\n"); + grammarBuilder.append("KW1753 : 'KW' '1753';\n"); + grammarBuilder.append("KW1754 : 'KW' '1754';\n"); + grammarBuilder.append("KW1755 : 'KW' '1755';\n"); + grammarBuilder.append("KW1756 : 'KW' '1756';\n"); + grammarBuilder.append("KW1757 : 'KW' '1757';\n"); + grammarBuilder.append("KW1758 : 'KW' '1758';\n"); + grammarBuilder.append("KW1759 : 'KW' '1759';\n"); + grammarBuilder.append("KW1760 : 'KW' '1760';\n"); + grammarBuilder.append("KW1761 : 'KW' '1761';\n"); + grammarBuilder.append("KW1762 : 'KW' '1762';\n"); + grammarBuilder.append("KW1763 : 'KW' '1763';\n"); + grammarBuilder.append("KW1764 : 'KW' '1764';\n"); + grammarBuilder.append("KW1765 : 'KW' '1765';\n"); + grammarBuilder.append("KW1766 : 'KW' '1766';\n"); + grammarBuilder.append("KW1767 : 'KW' '1767';\n"); + grammarBuilder.append("KW1768 : 'KW' '1768';\n"); + grammarBuilder.append("KW1769 : 'KW' '1769';\n"); + grammarBuilder.append("KW1770 : 'KW' '1770';\n"); + grammarBuilder.append("KW1771 : 'KW' '1771';\n"); + grammarBuilder.append("KW1772 : 'KW' '1772';\n"); + grammarBuilder.append("KW1773 : 'KW' '1773';\n"); + grammarBuilder.append("KW1774 : 'KW' '1774';\n"); + grammarBuilder.append("KW1775 : 'KW' '1775';\n"); + grammarBuilder.append("KW1776 : 'KW' '1776';\n"); + grammarBuilder.append("KW1777 : 'KW' '1777';\n"); + grammarBuilder.append("KW1778 : 'KW' '1778';\n"); + grammarBuilder.append("KW1779 : 'KW' '1779';\n"); + grammarBuilder.append("KW1780 : 'KW' '1780';\n"); + grammarBuilder.append("KW1781 : 'KW' '1781';\n"); + grammarBuilder.append("KW1782 : 'KW' '1782';\n"); + grammarBuilder.append("KW1783 : 'KW' '1783';\n"); + grammarBuilder.append("KW1784 : 'KW' '1784';\n"); + grammarBuilder.append("KW1785 : 'KW' '1785';\n"); + grammarBuilder.append("KW1786 : 'KW' '1786';\n"); + grammarBuilder.append("KW1787 : 'KW' '1787';\n"); + grammarBuilder.append("KW1788 : 'KW' '1788';\n"); + grammarBuilder.append("KW1789 : 'KW' '1789';\n"); + grammarBuilder.append("KW1790 : 'KW' '1790';\n"); + grammarBuilder.append("KW1791 : 'KW' '1791';\n"); + grammarBuilder.append("KW1792 : 'KW' '1792';\n"); + grammarBuilder.append("KW1793 : 'KW' '1793';\n"); + grammarBuilder.append("KW1794 : 'KW' '1794';\n"); + grammarBuilder.append("KW1795 : 'KW' '1795';\n"); + grammarBuilder.append("KW1796 : 'KW' '1796';\n"); + grammarBuilder.append("KW1797 : 'KW' '1797';\n"); + grammarBuilder.append("KW1798 : 'KW' '1798';\n"); + grammarBuilder.append("KW1799 : 'KW' '1799';\n"); + grammarBuilder.append("KW1800 : 'KW' '1800';\n"); + grammarBuilder.append("KW1801 : 'KW' '1801';\n"); + grammarBuilder.append("KW1802 : 'KW' '1802';\n"); + grammarBuilder.append("KW1803 : 'KW' '1803';\n"); + grammarBuilder.append("KW1804 : 'KW' '1804';\n"); + grammarBuilder.append("KW1805 : 'KW' '1805';\n"); + grammarBuilder.append("KW1806 : 'KW' '1806';\n"); + grammarBuilder.append("KW1807 : 'KW' '1807';\n"); + grammarBuilder.append("KW1808 : 'KW' '1808';\n"); + grammarBuilder.append("KW1809 : 'KW' '1809';\n"); + grammarBuilder.append("KW1810 : 'KW' '1810';\n"); + grammarBuilder.append("KW1811 : 'KW' '1811';\n"); + grammarBuilder.append("KW1812 : 'KW' '1812';\n"); + grammarBuilder.append("KW1813 : 'KW' '1813';\n"); + grammarBuilder.append("KW1814 : 'KW' '1814';\n"); + grammarBuilder.append("KW1815 : 'KW' '1815';\n"); + grammarBuilder.append("KW1816 : 'KW' '1816';\n"); + grammarBuilder.append("KW1817 : 'KW' '1817';\n"); + grammarBuilder.append("KW1818 : 'KW' '1818';\n"); + grammarBuilder.append("KW1819 : 'KW' '1819';\n"); + grammarBuilder.append("KW1820 : 'KW' '1820';\n"); + grammarBuilder.append("KW1821 : 'KW' '1821';\n"); + grammarBuilder.append("KW1822 : 'KW' '1822';\n"); + grammarBuilder.append("KW1823 : 'KW' '1823';\n"); + grammarBuilder.append("KW1824 : 'KW' '1824';\n"); + grammarBuilder.append("KW1825 : 'KW' '1825';\n"); + grammarBuilder.append("KW1826 : 'KW' '1826';\n"); + grammarBuilder.append("KW1827 : 'KW' '1827';\n"); + grammarBuilder.append("KW1828 : 'KW' '1828';\n"); + grammarBuilder.append("KW1829 : 'KW' '1829';\n"); + grammarBuilder.append("KW1830 : 'KW' '1830';\n"); + grammarBuilder.append("KW1831 : 'KW' '1831';\n"); + grammarBuilder.append("KW1832 : 'KW' '1832';\n"); + grammarBuilder.append("KW1833 : 'KW' '1833';\n"); + grammarBuilder.append("KW1834 : 'KW' '1834';\n"); + grammarBuilder.append("KW1835 : 'KW' '1835';\n"); + grammarBuilder.append("KW1836 : 'KW' '1836';\n"); + grammarBuilder.append("KW1837 : 'KW' '1837';\n"); + grammarBuilder.append("KW1838 : 'KW' '1838';\n"); + grammarBuilder.append("KW1839 : 'KW' '1839';\n"); + grammarBuilder.append("KW1840 : 'KW' '1840';\n"); + grammarBuilder.append("KW1841 : 'KW' '1841';\n"); + grammarBuilder.append("KW1842 : 'KW' '1842';\n"); + grammarBuilder.append("KW1843 : 'KW' '1843';\n"); + grammarBuilder.append("KW1844 : 'KW' '1844';\n"); + grammarBuilder.append("KW1845 : 'KW' '1845';\n"); + grammarBuilder.append("KW1846 : 'KW' '1846';\n"); + grammarBuilder.append("KW1847 : 'KW' '1847';\n"); + grammarBuilder.append("KW1848 : 'KW' '1848';\n"); + grammarBuilder.append("KW1849 : 'KW' '1849';\n"); + grammarBuilder.append("KW1850 : 'KW' '1850';\n"); + grammarBuilder.append("KW1851 : 'KW' '1851';\n"); + grammarBuilder.append("KW1852 : 'KW' '1852';\n"); + grammarBuilder.append("KW1853 : 'KW' '1853';\n"); + grammarBuilder.append("KW1854 : 'KW' '1854';\n"); + grammarBuilder.append("KW1855 : 'KW' '1855';\n"); + grammarBuilder.append("KW1856 : 'KW' '1856';\n"); + grammarBuilder.append("KW1857 : 'KW' '1857';\n"); + grammarBuilder.append("KW1858 : 'KW' '1858';\n"); + grammarBuilder.append("KW1859 : 'KW' '1859';\n"); + grammarBuilder.append("KW1860 : 'KW' '1860';\n"); + grammarBuilder.append("KW1861 : 'KW' '1861';\n"); + grammarBuilder.append("KW1862 : 'KW' '1862';\n"); + grammarBuilder.append("KW1863 : 'KW' '1863';\n"); + grammarBuilder.append("KW1864 : 'KW' '1864';\n"); + grammarBuilder.append("KW1865 : 'KW' '1865';\n"); + grammarBuilder.append("KW1866 : 'KW' '1866';\n"); + grammarBuilder.append("KW1867 : 'KW' '1867';\n"); + grammarBuilder.append("KW1868 : 'KW' '1868';\n"); + grammarBuilder.append("KW1869 : 'KW' '1869';\n"); + grammarBuilder.append("KW1870 : 'KW' '1870';\n"); + grammarBuilder.append("KW1871 : 'KW' '1871';\n"); + grammarBuilder.append("KW1872 : 'KW' '1872';\n"); + grammarBuilder.append("KW1873 : 'KW' '1873';\n"); + grammarBuilder.append("KW1874 : 'KW' '1874';\n"); + grammarBuilder.append("KW1875 : 'KW' '1875';\n"); + grammarBuilder.append("KW1876 : 'KW' '1876';\n"); + grammarBuilder.append("KW1877 : 'KW' '1877';\n"); + grammarBuilder.append("KW1878 : 'KW' '1878';\n"); + grammarBuilder.append("KW1879 : 'KW' '1879';\n"); + grammarBuilder.append("KW1880 : 'KW' '1880';\n"); + grammarBuilder.append("KW1881 : 'KW' '1881';\n"); + grammarBuilder.append("KW1882 : 'KW' '1882';\n"); + grammarBuilder.append("KW1883 : 'KW' '1883';\n"); + grammarBuilder.append("KW1884 : 'KW' '1884';\n"); + grammarBuilder.append("KW1885 : 'KW' '1885';\n"); + grammarBuilder.append("KW1886 : 'KW' '1886';\n"); + grammarBuilder.append("KW1887 : 'KW' '1887';\n"); + grammarBuilder.append("KW1888 : 'KW' '1888';\n"); + grammarBuilder.append("KW1889 : 'KW' '1889';\n"); + grammarBuilder.append("KW1890 : 'KW' '1890';\n"); + grammarBuilder.append("KW1891 : 'KW' '1891';\n"); + grammarBuilder.append("KW1892 : 'KW' '1892';\n"); + grammarBuilder.append("KW1893 : 'KW' '1893';\n"); + grammarBuilder.append("KW1894 : 'KW' '1894';\n"); + grammarBuilder.append("KW1895 : 'KW' '1895';\n"); + grammarBuilder.append("KW1896 : 'KW' '1896';\n"); + grammarBuilder.append("KW1897 : 'KW' '1897';\n"); + grammarBuilder.append("KW1898 : 'KW' '1898';\n"); + grammarBuilder.append("KW1899 : 'KW' '1899';\n"); + grammarBuilder.append("KW1900 : 'KW' '1900';\n"); + grammarBuilder.append("KW1901 : 'KW' '1901';\n"); + grammarBuilder.append("KW1902 : 'KW' '1902';\n"); + grammarBuilder.append("KW1903 : 'KW' '1903';\n"); + grammarBuilder.append("KW1904 : 'KW' '1904';\n"); + grammarBuilder.append("KW1905 : 'KW' '1905';\n"); + grammarBuilder.append("KW1906 : 'KW' '1906';\n"); + grammarBuilder.append("KW1907 : 'KW' '1907';\n"); + grammarBuilder.append("KW1908 : 'KW' '1908';\n"); + grammarBuilder.append("KW1909 : 'KW' '1909';\n"); + grammarBuilder.append("KW1910 : 'KW' '1910';\n"); + grammarBuilder.append("KW1911 : 'KW' '1911';\n"); + grammarBuilder.append("KW1912 : 'KW' '1912';\n"); + grammarBuilder.append("KW1913 : 'KW' '1913';\n"); + grammarBuilder.append("KW1914 : 'KW' '1914';\n"); + grammarBuilder.append("KW1915 : 'KW' '1915';\n"); + grammarBuilder.append("KW1916 : 'KW' '1916';\n"); + grammarBuilder.append("KW1917 : 'KW' '1917';\n"); + grammarBuilder.append("KW1918 : 'KW' '1918';\n"); + grammarBuilder.append("KW1919 : 'KW' '1919';\n"); + grammarBuilder.append("KW1920 : 'KW' '1920';\n"); + grammarBuilder.append("KW1921 : 'KW' '1921';\n"); + grammarBuilder.append("KW1922 : 'KW' '1922';\n"); + grammarBuilder.append("KW1923 : 'KW' '1923';\n"); + grammarBuilder.append("KW1924 : 'KW' '1924';\n"); + grammarBuilder.append("KW1925 : 'KW' '1925';\n"); + grammarBuilder.append("KW1926 : 'KW' '1926';\n"); + grammarBuilder.append("KW1927 : 'KW' '1927';\n"); + grammarBuilder.append("KW1928 : 'KW' '1928';\n"); + grammarBuilder.append("KW1929 : 'KW' '1929';\n"); + grammarBuilder.append("KW1930 : 'KW' '1930';\n"); + grammarBuilder.append("KW1931 : 'KW' '1931';\n"); + grammarBuilder.append("KW1932 : 'KW' '1932';\n"); + grammarBuilder.append("KW1933 : 'KW' '1933';\n"); + grammarBuilder.append("KW1934 : 'KW' '1934';\n"); + grammarBuilder.append("KW1935 : 'KW' '1935';\n"); + grammarBuilder.append("KW1936 : 'KW' '1936';\n"); + grammarBuilder.append("KW1937 : 'KW' '1937';\n"); + grammarBuilder.append("KW1938 : 'KW' '1938';\n"); + grammarBuilder.append("KW1939 : 'KW' '1939';\n"); + grammarBuilder.append("KW1940 : 'KW' '1940';\n"); + grammarBuilder.append("KW1941 : 'KW' '1941';\n"); + grammarBuilder.append("KW1942 : 'KW' '1942';\n"); + grammarBuilder.append("KW1943 : 'KW' '1943';\n"); + grammarBuilder.append("KW1944 : 'KW' '1944';\n"); + grammarBuilder.append("KW1945 : 'KW' '1945';\n"); + grammarBuilder.append("KW1946 : 'KW' '1946';\n"); + grammarBuilder.append("KW1947 : 'KW' '1947';\n"); + grammarBuilder.append("KW1948 : 'KW' '1948';\n"); + grammarBuilder.append("KW1949 : 'KW' '1949';\n"); + grammarBuilder.append("KW1950 : 'KW' '1950';\n"); + grammarBuilder.append("KW1951 : 'KW' '1951';\n"); + grammarBuilder.append("KW1952 : 'KW' '1952';\n"); + grammarBuilder.append("KW1953 : 'KW' '1953';\n"); + grammarBuilder.append("KW1954 : 'KW' '1954';\n"); + grammarBuilder.append("KW1955 : 'KW' '1955';\n"); + grammarBuilder.append("KW1956 : 'KW' '1956';\n"); + grammarBuilder.append("KW1957 : 'KW' '1957';\n"); + grammarBuilder.append("KW1958 : 'KW' '1958';\n"); + grammarBuilder.append("KW1959 : 'KW' '1959';\n"); + grammarBuilder.append("KW1960 : 'KW' '1960';\n"); + grammarBuilder.append("KW1961 : 'KW' '1961';\n"); + grammarBuilder.append("KW1962 : 'KW' '1962';\n"); + grammarBuilder.append("KW1963 : 'KW' '1963';\n"); + grammarBuilder.append("KW1964 : 'KW' '1964';\n"); + grammarBuilder.append("KW1965 : 'KW' '1965';\n"); + grammarBuilder.append("KW1966 : 'KW' '1966';\n"); + grammarBuilder.append("KW1967 : 'KW' '1967';\n"); + grammarBuilder.append("KW1968 : 'KW' '1968';\n"); + grammarBuilder.append("KW1969 : 'KW' '1969';\n"); + grammarBuilder.append("KW1970 : 'KW' '1970';\n"); + grammarBuilder.append("KW1971 : 'KW' '1971';\n"); + grammarBuilder.append("KW1972 : 'KW' '1972';\n"); + grammarBuilder.append("KW1973 : 'KW' '1973';\n"); + grammarBuilder.append("KW1974 : 'KW' '1974';\n"); + grammarBuilder.append("KW1975 : 'KW' '1975';\n"); + grammarBuilder.append("KW1976 : 'KW' '1976';\n"); + grammarBuilder.append("KW1977 : 'KW' '1977';\n"); + grammarBuilder.append("KW1978 : 'KW' '1978';\n"); + grammarBuilder.append("KW1979 : 'KW' '1979';\n"); + grammarBuilder.append("KW1980 : 'KW' '1980';\n"); + grammarBuilder.append("KW1981 : 'KW' '1981';\n"); + grammarBuilder.append("KW1982 : 'KW' '1982';\n"); + grammarBuilder.append("KW1983 : 'KW' '1983';\n"); + grammarBuilder.append("KW1984 : 'KW' '1984';\n"); + grammarBuilder.append("KW1985 : 'KW' '1985';\n"); + grammarBuilder.append("KW1986 : 'KW' '1986';\n"); + grammarBuilder.append("KW1987 : 'KW' '1987';\n"); + grammarBuilder.append("KW1988 : 'KW' '1988';\n"); + grammarBuilder.append("KW1989 : 'KW' '1989';\n"); + grammarBuilder.append("KW1990 : 'KW' '1990';\n"); + grammarBuilder.append("KW1991 : 'KW' '1991';\n"); + grammarBuilder.append("KW1992 : 'KW' '1992';\n"); + grammarBuilder.append("KW1993 : 'KW' '1993';\n"); + grammarBuilder.append("KW1994 : 'KW' '1994';\n"); + grammarBuilder.append("KW1995 : 'KW' '1995';\n"); + grammarBuilder.append("KW1996 : 'KW' '1996';\n"); + grammarBuilder.append("KW1997 : 'KW' '1997';\n"); + grammarBuilder.append("KW1998 : 'KW' '1998';\n"); + grammarBuilder.append("KW1999 : 'KW' '1999';\n"); + grammarBuilder.append("KW2000 : 'KW' '2000';\n"); + grammarBuilder.append("KW2001 : 'KW' '2001';\n"); + grammarBuilder.append("KW2002 : 'KW' '2002';\n"); + grammarBuilder.append("KW2003 : 'KW' '2003';\n"); + grammarBuilder.append("KW2004 : 'KW' '2004';\n"); + grammarBuilder.append("KW2005 : 'KW' '2005';\n"); + grammarBuilder.append("KW2006 : 'KW' '2006';\n"); + grammarBuilder.append("KW2007 : 'KW' '2007';\n"); + grammarBuilder.append("KW2008 : 'KW' '2008';\n"); + grammarBuilder.append("KW2009 : 'KW' '2009';\n"); + grammarBuilder.append("KW2010 : 'KW' '2010';\n"); + grammarBuilder.append("KW2011 : 'KW' '2011';\n"); + grammarBuilder.append("KW2012 : 'KW' '2012';\n"); + grammarBuilder.append("KW2013 : 'KW' '2013';\n"); + grammarBuilder.append("KW2014 : 'KW' '2014';\n"); + grammarBuilder.append("KW2015 : 'KW' '2015';\n"); + grammarBuilder.append("KW2016 : 'KW' '2016';\n"); + grammarBuilder.append("KW2017 : 'KW' '2017';\n"); + grammarBuilder.append("KW2018 : 'KW' '2018';\n"); + grammarBuilder.append("KW2019 : 'KW' '2019';\n"); + grammarBuilder.append("KW2020 : 'KW' '2020';\n"); + grammarBuilder.append("KW2021 : 'KW' '2021';\n"); + grammarBuilder.append("KW2022 : 'KW' '2022';\n"); + grammarBuilder.append("KW2023 : 'KW' '2023';\n"); + grammarBuilder.append("KW2024 : 'KW' '2024';\n"); + grammarBuilder.append("KW2025 : 'KW' '2025';\n"); + grammarBuilder.append("KW2026 : 'KW' '2026';\n"); + grammarBuilder.append("KW2027 : 'KW' '2027';\n"); + grammarBuilder.append("KW2028 : 'KW' '2028';\n"); + grammarBuilder.append("KW2029 : 'KW' '2029';\n"); + grammarBuilder.append("KW2030 : 'KW' '2030';\n"); + grammarBuilder.append("KW2031 : 'KW' '2031';\n"); + grammarBuilder.append("KW2032 : 'KW' '2032';\n"); + grammarBuilder.append("KW2033 : 'KW' '2033';\n"); + grammarBuilder.append("KW2034 : 'KW' '2034';\n"); + grammarBuilder.append("KW2035 : 'KW' '2035';\n"); + grammarBuilder.append("KW2036 : 'KW' '2036';\n"); + grammarBuilder.append("KW2037 : 'KW' '2037';\n"); + grammarBuilder.append("KW2038 : 'KW' '2038';\n"); + grammarBuilder.append("KW2039 : 'KW' '2039';\n"); + grammarBuilder.append("KW2040 : 'KW' '2040';\n"); + grammarBuilder.append("KW2041 : 'KW' '2041';\n"); + grammarBuilder.append("KW2042 : 'KW' '2042';\n"); + grammarBuilder.append("KW2043 : 'KW' '2043';\n"); + grammarBuilder.append("KW2044 : 'KW' '2044';\n"); + grammarBuilder.append("KW2045 : 'KW' '2045';\n"); + grammarBuilder.append("KW2046 : 'KW' '2046';\n"); + grammarBuilder.append("KW2047 : 'KW' '2047';\n"); + grammarBuilder.append("KW2048 : 'KW' '2048';\n"); + grammarBuilder.append("KW2049 : 'KW' '2049';\n"); + grammarBuilder.append("KW2050 : 'KW' '2050';\n"); + grammarBuilder.append("KW2051 : 'KW' '2051';\n"); + grammarBuilder.append("KW2052 : 'KW' '2052';\n"); + grammarBuilder.append("KW2053 : 'KW' '2053';\n"); + grammarBuilder.append("KW2054 : 'KW' '2054';\n"); + grammarBuilder.append("KW2055 : 'KW' '2055';\n"); + grammarBuilder.append("KW2056 : 'KW' '2056';\n"); + grammarBuilder.append("KW2057 : 'KW' '2057';\n"); + grammarBuilder.append("KW2058 : 'KW' '2058';\n"); + grammarBuilder.append("KW2059 : 'KW' '2059';\n"); + grammarBuilder.append("KW2060 : 'KW' '2060';\n"); + grammarBuilder.append("KW2061 : 'KW' '2061';\n"); + grammarBuilder.append("KW2062 : 'KW' '2062';\n"); + grammarBuilder.append("KW2063 : 'KW' '2063';\n"); + grammarBuilder.append("KW2064 : 'KW' '2064';\n"); + grammarBuilder.append("KW2065 : 'KW' '2065';\n"); + grammarBuilder.append("KW2066 : 'KW' '2066';\n"); + grammarBuilder.append("KW2067 : 'KW' '2067';\n"); + grammarBuilder.append("KW2068 : 'KW' '2068';\n"); + grammarBuilder.append("KW2069 : 'KW' '2069';\n"); + grammarBuilder.append("KW2070 : 'KW' '2070';\n"); + grammarBuilder.append("KW2071 : 'KW' '2071';\n"); + grammarBuilder.append("KW2072 : 'KW' '2072';\n"); + grammarBuilder.append("KW2073 : 'KW' '2073';\n"); + grammarBuilder.append("KW2074 : 'KW' '2074';\n"); + grammarBuilder.append("KW2075 : 'KW' '2075';\n"); + grammarBuilder.append("KW2076 : 'KW' '2076';\n"); + grammarBuilder.append("KW2077 : 'KW' '2077';\n"); + grammarBuilder.append("KW2078 : 'KW' '2078';\n"); + grammarBuilder.append("KW2079 : 'KW' '2079';\n"); + grammarBuilder.append("KW2080 : 'KW' '2080';\n"); + grammarBuilder.append("KW2081 : 'KW' '2081';\n"); + grammarBuilder.append("KW2082 : 'KW' '2082';\n"); + grammarBuilder.append("KW2083 : 'KW' '2083';\n"); + grammarBuilder.append("KW2084 : 'KW' '2084';\n"); + grammarBuilder.append("KW2085 : 'KW' '2085';\n"); + grammarBuilder.append("KW2086 : 'KW' '2086';\n"); + grammarBuilder.append("KW2087 : 'KW' '2087';\n"); + grammarBuilder.append("KW2088 : 'KW' '2088';\n"); + grammarBuilder.append("KW2089 : 'KW' '2089';\n"); + grammarBuilder.append("KW2090 : 'KW' '2090';\n"); + grammarBuilder.append("KW2091 : 'KW' '2091';\n"); + grammarBuilder.append("KW2092 : 'KW' '2092';\n"); + grammarBuilder.append("KW2093 : 'KW' '2093';\n"); + grammarBuilder.append("KW2094 : 'KW' '2094';\n"); + grammarBuilder.append("KW2095 : 'KW' '2095';\n"); + grammarBuilder.append("KW2096 : 'KW' '2096';\n"); + grammarBuilder.append("KW2097 : 'KW' '2097';\n"); + grammarBuilder.append("KW2098 : 'KW' '2098';\n"); + grammarBuilder.append("KW2099 : 'KW' '2099';\n"); + grammarBuilder.append("KW2100 : 'KW' '2100';\n"); + grammarBuilder.append("KW2101 : 'KW' '2101';\n"); + grammarBuilder.append("KW2102 : 'KW' '2102';\n"); + grammarBuilder.append("KW2103 : 'KW' '2103';\n"); + grammarBuilder.append("KW2104 : 'KW' '2104';\n"); + grammarBuilder.append("KW2105 : 'KW' '2105';\n"); + grammarBuilder.append("KW2106 : 'KW' '2106';\n"); + grammarBuilder.append("KW2107 : 'KW' '2107';\n"); + grammarBuilder.append("KW2108 : 'KW' '2108';\n"); + grammarBuilder.append("KW2109 : 'KW' '2109';\n"); + grammarBuilder.append("KW2110 : 'KW' '2110';\n"); + grammarBuilder.append("KW2111 : 'KW' '2111';\n"); + grammarBuilder.append("KW2112 : 'KW' '2112';\n"); + grammarBuilder.append("KW2113 : 'KW' '2113';\n"); + grammarBuilder.append("KW2114 : 'KW' '2114';\n"); + grammarBuilder.append("KW2115 : 'KW' '2115';\n"); + grammarBuilder.append("KW2116 : 'KW' '2116';\n"); + grammarBuilder.append("KW2117 : 'KW' '2117';\n"); + grammarBuilder.append("KW2118 : 'KW' '2118';\n"); + grammarBuilder.append("KW2119 : 'KW' '2119';\n"); + grammarBuilder.append("KW2120 : 'KW' '2120';\n"); + grammarBuilder.append("KW2121 : 'KW' '2121';\n"); + grammarBuilder.append("KW2122 : 'KW' '2122';\n"); + grammarBuilder.append("KW2123 : 'KW' '2123';\n"); + grammarBuilder.append("KW2124 : 'KW' '2124';\n"); + grammarBuilder.append("KW2125 : 'KW' '2125';\n"); + grammarBuilder.append("KW2126 : 'KW' '2126';\n"); + grammarBuilder.append("KW2127 : 'KW' '2127';\n"); + grammarBuilder.append("KW2128 : 'KW' '2128';\n"); + grammarBuilder.append("KW2129 : 'KW' '2129';\n"); + grammarBuilder.append("KW2130 : 'KW' '2130';\n"); + grammarBuilder.append("KW2131 : 'KW' '2131';\n"); + grammarBuilder.append("KW2132 : 'KW' '2132';\n"); + grammarBuilder.append("KW2133 : 'KW' '2133';\n"); + grammarBuilder.append("KW2134 : 'KW' '2134';\n"); + grammarBuilder.append("KW2135 : 'KW' '2135';\n"); + grammarBuilder.append("KW2136 : 'KW' '2136';\n"); + grammarBuilder.append("KW2137 : 'KW' '2137';\n"); + grammarBuilder.append("KW2138 : 'KW' '2138';\n"); + grammarBuilder.append("KW2139 : 'KW' '2139';\n"); + grammarBuilder.append("KW2140 : 'KW' '2140';\n"); + grammarBuilder.append("KW2141 : 'KW' '2141';\n"); + grammarBuilder.append("KW2142 : 'KW' '2142';\n"); + grammarBuilder.append("KW2143 : 'KW' '2143';\n"); + grammarBuilder.append("KW2144 : 'KW' '2144';\n"); + grammarBuilder.append("KW2145 : 'KW' '2145';\n"); + grammarBuilder.append("KW2146 : 'KW' '2146';\n"); + grammarBuilder.append("KW2147 : 'KW' '2147';\n"); + grammarBuilder.append("KW2148 : 'KW' '2148';\n"); + grammarBuilder.append("KW2149 : 'KW' '2149';\n"); + grammarBuilder.append("KW2150 : 'KW' '2150';\n"); + grammarBuilder.append("KW2151 : 'KW' '2151';\n"); + grammarBuilder.append("KW2152 : 'KW' '2152';\n"); + grammarBuilder.append("KW2153 : 'KW' '2153';\n"); + grammarBuilder.append("KW2154 : 'KW' '2154';\n"); + grammarBuilder.append("KW2155 : 'KW' '2155';\n"); + grammarBuilder.append("KW2156 : 'KW' '2156';\n"); + grammarBuilder.append("KW2157 : 'KW' '2157';\n"); + grammarBuilder.append("KW2158 : 'KW' '2158';\n"); + grammarBuilder.append("KW2159 : 'KW' '2159';\n"); + grammarBuilder.append("KW2160 : 'KW' '2160';\n"); + grammarBuilder.append("KW2161 : 'KW' '2161';\n"); + grammarBuilder.append("KW2162 : 'KW' '2162';\n"); + grammarBuilder.append("KW2163 : 'KW' '2163';\n"); + grammarBuilder.append("KW2164 : 'KW' '2164';\n"); + grammarBuilder.append("KW2165 : 'KW' '2165';\n"); + grammarBuilder.append("KW2166 : 'KW' '2166';\n"); + grammarBuilder.append("KW2167 : 'KW' '2167';\n"); + grammarBuilder.append("KW2168 : 'KW' '2168';\n"); + grammarBuilder.append("KW2169 : 'KW' '2169';\n"); + grammarBuilder.append("KW2170 : 'KW' '2170';\n"); + grammarBuilder.append("KW2171 : 'KW' '2171';\n"); + grammarBuilder.append("KW2172 : 'KW' '2172';\n"); + grammarBuilder.append("KW2173 : 'KW' '2173';\n"); + grammarBuilder.append("KW2174 : 'KW' '2174';\n"); + grammarBuilder.append("KW2175 : 'KW' '2175';\n"); + grammarBuilder.append("KW2176 : 'KW' '2176';\n"); + grammarBuilder.append("KW2177 : 'KW' '2177';\n"); + grammarBuilder.append("KW2178 : 'KW' '2178';\n"); + grammarBuilder.append("KW2179 : 'KW' '2179';\n"); + grammarBuilder.append("KW2180 : 'KW' '2180';\n"); + grammarBuilder.append("KW2181 : 'KW' '2181';\n"); + grammarBuilder.append("KW2182 : 'KW' '2182';\n"); + grammarBuilder.append("KW2183 : 'KW' '2183';\n"); + grammarBuilder.append("KW2184 : 'KW' '2184';\n"); + grammarBuilder.append("KW2185 : 'KW' '2185';\n"); + grammarBuilder.append("KW2186 : 'KW' '2186';\n"); + grammarBuilder.append("KW2187 : 'KW' '2187';\n"); + grammarBuilder.append("KW2188 : 'KW' '2188';\n"); + grammarBuilder.append("KW2189 : 'KW' '2189';\n"); + grammarBuilder.append("KW2190 : 'KW' '2190';\n"); + grammarBuilder.append("KW2191 : 'KW' '2191';\n"); + grammarBuilder.append("KW2192 : 'KW' '2192';\n"); + grammarBuilder.append("KW2193 : 'KW' '2193';\n"); + grammarBuilder.append("KW2194 : 'KW' '2194';\n"); + grammarBuilder.append("KW2195 : 'KW' '2195';\n"); + grammarBuilder.append("KW2196 : 'KW' '2196';\n"); + grammarBuilder.append("KW2197 : 'KW' '2197';\n"); + grammarBuilder.append("KW2198 : 'KW' '2198';\n"); + grammarBuilder.append("KW2199 : 'KW' '2199';\n"); + grammarBuilder.append("KW2200 : 'KW' '2200';\n"); + grammarBuilder.append("KW2201 : 'KW' '2201';\n"); + grammarBuilder.append("KW2202 : 'KW' '2202';\n"); + grammarBuilder.append("KW2203 : 'KW' '2203';\n"); + grammarBuilder.append("KW2204 : 'KW' '2204';\n"); + grammarBuilder.append("KW2205 : 'KW' '2205';\n"); + grammarBuilder.append("KW2206 : 'KW' '2206';\n"); + grammarBuilder.append("KW2207 : 'KW' '2207';\n"); + grammarBuilder.append("KW2208 : 'KW' '2208';\n"); + grammarBuilder.append("KW2209 : 'KW' '2209';\n"); + grammarBuilder.append("KW2210 : 'KW' '2210';\n"); + grammarBuilder.append("KW2211 : 'KW' '2211';\n"); + grammarBuilder.append("KW2212 : 'KW' '2212';\n"); + grammarBuilder.append("KW2213 : 'KW' '2213';\n"); + grammarBuilder.append("KW2214 : 'KW' '2214';\n"); + grammarBuilder.append("KW2215 : 'KW' '2215';\n"); + grammarBuilder.append("KW2216 : 'KW' '2216';\n"); + grammarBuilder.append("KW2217 : 'KW' '2217';\n"); + grammarBuilder.append("KW2218 : 'KW' '2218';\n"); + grammarBuilder.append("KW2219 : 'KW' '2219';\n"); + grammarBuilder.append("KW2220 : 'KW' '2220';\n"); + grammarBuilder.append("KW2221 : 'KW' '2221';\n"); + grammarBuilder.append("KW2222 : 'KW' '2222';\n"); + grammarBuilder.append("KW2223 : 'KW' '2223';\n"); + grammarBuilder.append("KW2224 : 'KW' '2224';\n"); + grammarBuilder.append("KW2225 : 'KW' '2225';\n"); + grammarBuilder.append("KW2226 : 'KW' '2226';\n"); + grammarBuilder.append("KW2227 : 'KW' '2227';\n"); + grammarBuilder.append("KW2228 : 'KW' '2228';\n"); + grammarBuilder.append("KW2229 : 'KW' '2229';\n"); + grammarBuilder.append("KW2230 : 'KW' '2230';\n"); + grammarBuilder.append("KW2231 : 'KW' '2231';\n"); + grammarBuilder.append("KW2232 : 'KW' '2232';\n"); + grammarBuilder.append("KW2233 : 'KW' '2233';\n"); + grammarBuilder.append("KW2234 : 'KW' '2234';\n"); + grammarBuilder.append("KW2235 : 'KW' '2235';\n"); + grammarBuilder.append("KW2236 : 'KW' '2236';\n"); + grammarBuilder.append("KW2237 : 'KW' '2237';\n"); + grammarBuilder.append("KW2238 : 'KW' '2238';\n"); + grammarBuilder.append("KW2239 : 'KW' '2239';\n"); + grammarBuilder.append("KW2240 : 'KW' '2240';\n"); + grammarBuilder.append("KW2241 : 'KW' '2241';\n"); + grammarBuilder.append("KW2242 : 'KW' '2242';\n"); + grammarBuilder.append("KW2243 : 'KW' '2243';\n"); + grammarBuilder.append("KW2244 : 'KW' '2244';\n"); + grammarBuilder.append("KW2245 : 'KW' '2245';\n"); + grammarBuilder.append("KW2246 : 'KW' '2246';\n"); + grammarBuilder.append("KW2247 : 'KW' '2247';\n"); + grammarBuilder.append("KW2248 : 'KW' '2248';\n"); + grammarBuilder.append("KW2249 : 'KW' '2249';\n"); + grammarBuilder.append("KW2250 : 'KW' '2250';\n"); + grammarBuilder.append("KW2251 : 'KW' '2251';\n"); + grammarBuilder.append("KW2252 : 'KW' '2252';\n"); + grammarBuilder.append("KW2253 : 'KW' '2253';\n"); + grammarBuilder.append("KW2254 : 'KW' '2254';\n"); + grammarBuilder.append("KW2255 : 'KW' '2255';\n"); + grammarBuilder.append("KW2256 : 'KW' '2256';\n"); + grammarBuilder.append("KW2257 : 'KW' '2257';\n"); + grammarBuilder.append("KW2258 : 'KW' '2258';\n"); + grammarBuilder.append("KW2259 : 'KW' '2259';\n"); + grammarBuilder.append("KW2260 : 'KW' '2260';\n"); + grammarBuilder.append("KW2261 : 'KW' '2261';\n"); + grammarBuilder.append("KW2262 : 'KW' '2262';\n"); + grammarBuilder.append("KW2263 : 'KW' '2263';\n"); + grammarBuilder.append("KW2264 : 'KW' '2264';\n"); + grammarBuilder.append("KW2265 : 'KW' '2265';\n"); + grammarBuilder.append("KW2266 : 'KW' '2266';\n"); + grammarBuilder.append("KW2267 : 'KW' '2267';\n"); + grammarBuilder.append("KW2268 : 'KW' '2268';\n"); + grammarBuilder.append("KW2269 : 'KW' '2269';\n"); + grammarBuilder.append("KW2270 : 'KW' '2270';\n"); + grammarBuilder.append("KW2271 : 'KW' '2271';\n"); + grammarBuilder.append("KW2272 : 'KW' '2272';\n"); + grammarBuilder.append("KW2273 : 'KW' '2273';\n"); + grammarBuilder.append("KW2274 : 'KW' '2274';\n"); + grammarBuilder.append("KW2275 : 'KW' '2275';\n"); + grammarBuilder.append("KW2276 : 'KW' '2276';\n"); + grammarBuilder.append("KW2277 : 'KW' '2277';\n"); + grammarBuilder.append("KW2278 : 'KW' '2278';\n"); + grammarBuilder.append("KW2279 : 'KW' '2279';\n"); + grammarBuilder.append("KW2280 : 'KW' '2280';\n"); + grammarBuilder.append("KW2281 : 'KW' '2281';\n"); + grammarBuilder.append("KW2282 : 'KW' '2282';\n"); + grammarBuilder.append("KW2283 : 'KW' '2283';\n"); + grammarBuilder.append("KW2284 : 'KW' '2284';\n"); + grammarBuilder.append("KW2285 : 'KW' '2285';\n"); + grammarBuilder.append("KW2286 : 'KW' '2286';\n"); + grammarBuilder.append("KW2287 : 'KW' '2287';\n"); + grammarBuilder.append("KW2288 : 'KW' '2288';\n"); + grammarBuilder.append("KW2289 : 'KW' '2289';\n"); + grammarBuilder.append("KW2290 : 'KW' '2290';\n"); + grammarBuilder.append("KW2291 : 'KW' '2291';\n"); + grammarBuilder.append("KW2292 : 'KW' '2292';\n"); + grammarBuilder.append("KW2293 : 'KW' '2293';\n"); + grammarBuilder.append("KW2294 : 'KW' '2294';\n"); + grammarBuilder.append("KW2295 : 'KW' '2295';\n"); + grammarBuilder.append("KW2296 : 'KW' '2296';\n"); + grammarBuilder.append("KW2297 : 'KW' '2297';\n"); + grammarBuilder.append("KW2298 : 'KW' '2298';\n"); + grammarBuilder.append("KW2299 : 'KW' '2299';\n"); + grammarBuilder.append("KW2300 : 'KW' '2300';\n"); + grammarBuilder.append("KW2301 : 'KW' '2301';\n"); + grammarBuilder.append("KW2302 : 'KW' '2302';\n"); + grammarBuilder.append("KW2303 : 'KW' '2303';\n"); + grammarBuilder.append("KW2304 : 'KW' '2304';\n"); + grammarBuilder.append("KW2305 : 'KW' '2305';\n"); + grammarBuilder.append("KW2306 : 'KW' '2306';\n"); + grammarBuilder.append("KW2307 : 'KW' '2307';\n"); + grammarBuilder.append("KW2308 : 'KW' '2308';\n"); + grammarBuilder.append("KW2309 : 'KW' '2309';\n"); + grammarBuilder.append("KW2310 : 'KW' '2310';\n"); + grammarBuilder.append("KW2311 : 'KW' '2311';\n"); + grammarBuilder.append("KW2312 : 'KW' '2312';\n"); + grammarBuilder.append("KW2313 : 'KW' '2313';\n"); + grammarBuilder.append("KW2314 : 'KW' '2314';\n"); + grammarBuilder.append("KW2315 : 'KW' '2315';\n"); + grammarBuilder.append("KW2316 : 'KW' '2316';\n"); + grammarBuilder.append("KW2317 : 'KW' '2317';\n"); + grammarBuilder.append("KW2318 : 'KW' '2318';\n"); + grammarBuilder.append("KW2319 : 'KW' '2319';\n"); + grammarBuilder.append("KW2320 : 'KW' '2320';\n"); + grammarBuilder.append("KW2321 : 'KW' '2321';\n"); + grammarBuilder.append("KW2322 : 'KW' '2322';\n"); + grammarBuilder.append("KW2323 : 'KW' '2323';\n"); + grammarBuilder.append("KW2324 : 'KW' '2324';\n"); + grammarBuilder.append("KW2325 : 'KW' '2325';\n"); + grammarBuilder.append("KW2326 : 'KW' '2326';\n"); + grammarBuilder.append("KW2327 : 'KW' '2327';\n"); + grammarBuilder.append("KW2328 : 'KW' '2328';\n"); + grammarBuilder.append("KW2329 : 'KW' '2329';\n"); + grammarBuilder.append("KW2330 : 'KW' '2330';\n"); + grammarBuilder.append("KW2331 : 'KW' '2331';\n"); + grammarBuilder.append("KW2332 : 'KW' '2332';\n"); + grammarBuilder.append("KW2333 : 'KW' '2333';\n"); + grammarBuilder.append("KW2334 : 'KW' '2334';\n"); + grammarBuilder.append("KW2335 : 'KW' '2335';\n"); + grammarBuilder.append("KW2336 : 'KW' '2336';\n"); + grammarBuilder.append("KW2337 : 'KW' '2337';\n"); + grammarBuilder.append("KW2338 : 'KW' '2338';\n"); + grammarBuilder.append("KW2339 : 'KW' '2339';\n"); + grammarBuilder.append("KW2340 : 'KW' '2340';\n"); + grammarBuilder.append("KW2341 : 'KW' '2341';\n"); + grammarBuilder.append("KW2342 : 'KW' '2342';\n"); + grammarBuilder.append("KW2343 : 'KW' '2343';\n"); + grammarBuilder.append("KW2344 : 'KW' '2344';\n"); + grammarBuilder.append("KW2345 : 'KW' '2345';\n"); + grammarBuilder.append("KW2346 : 'KW' '2346';\n"); + grammarBuilder.append("KW2347 : 'KW' '2347';\n"); + grammarBuilder.append("KW2348 : 'KW' '2348';\n"); + grammarBuilder.append("KW2349 : 'KW' '2349';\n"); + grammarBuilder.append("KW2350 : 'KW' '2350';\n"); + grammarBuilder.append("KW2351 : 'KW' '2351';\n"); + grammarBuilder.append("KW2352 : 'KW' '2352';\n"); + grammarBuilder.append("KW2353 : 'KW' '2353';\n"); + grammarBuilder.append("KW2354 : 'KW' '2354';\n"); + grammarBuilder.append("KW2355 : 'KW' '2355';\n"); + grammarBuilder.append("KW2356 : 'KW' '2356';\n"); + grammarBuilder.append("KW2357 : 'KW' '2357';\n"); + grammarBuilder.append("KW2358 : 'KW' '2358';\n"); + grammarBuilder.append("KW2359 : 'KW' '2359';\n"); + grammarBuilder.append("KW2360 : 'KW' '2360';\n"); + grammarBuilder.append("KW2361 : 'KW' '2361';\n"); + grammarBuilder.append("KW2362 : 'KW' '2362';\n"); + grammarBuilder.append("KW2363 : 'KW' '2363';\n"); + grammarBuilder.append("KW2364 : 'KW' '2364';\n"); + grammarBuilder.append("KW2365 : 'KW' '2365';\n"); + grammarBuilder.append("KW2366 : 'KW' '2366';\n"); + grammarBuilder.append("KW2367 : 'KW' '2367';\n"); + grammarBuilder.append("KW2368 : 'KW' '2368';\n"); + grammarBuilder.append("KW2369 : 'KW' '2369';\n"); + grammarBuilder.append("KW2370 : 'KW' '2370';\n"); + grammarBuilder.append("KW2371 : 'KW' '2371';\n"); + grammarBuilder.append("KW2372 : 'KW' '2372';\n"); + grammarBuilder.append("KW2373 : 'KW' '2373';\n"); + grammarBuilder.append("KW2374 : 'KW' '2374';\n"); + grammarBuilder.append("KW2375 : 'KW' '2375';\n"); + grammarBuilder.append("KW2376 : 'KW' '2376';\n"); + grammarBuilder.append("KW2377 : 'KW' '2377';\n"); + grammarBuilder.append("KW2378 : 'KW' '2378';\n"); + grammarBuilder.append("KW2379 : 'KW' '2379';\n"); + grammarBuilder.append("KW2380 : 'KW' '2380';\n"); + grammarBuilder.append("KW2381 : 'KW' '2381';\n"); + grammarBuilder.append("KW2382 : 'KW' '2382';\n"); + grammarBuilder.append("KW2383 : 'KW' '2383';\n"); + grammarBuilder.append("KW2384 : 'KW' '2384';\n"); + grammarBuilder.append("KW2385 : 'KW' '2385';\n"); + grammarBuilder.append("KW2386 : 'KW' '2386';\n"); + grammarBuilder.append("KW2387 : 'KW' '2387';\n"); + grammarBuilder.append("KW2388 : 'KW' '2388';\n"); + grammarBuilder.append("KW2389 : 'KW' '2389';\n"); + grammarBuilder.append("KW2390 : 'KW' '2390';\n"); + grammarBuilder.append("KW2391 : 'KW' '2391';\n"); + grammarBuilder.append("KW2392 : 'KW' '2392';\n"); + grammarBuilder.append("KW2393 : 'KW' '2393';\n"); + grammarBuilder.append("KW2394 : 'KW' '2394';\n"); + grammarBuilder.append("KW2395 : 'KW' '2395';\n"); + grammarBuilder.append("KW2396 : 'KW' '2396';\n"); + grammarBuilder.append("KW2397 : 'KW' '2397';\n"); + grammarBuilder.append("KW2398 : 'KW' '2398';\n"); + grammarBuilder.append("KW2399 : 'KW' '2399';\n"); + grammarBuilder.append("KW2400 : 'KW' '2400';\n"); + grammarBuilder.append("KW2401 : 'KW' '2401';\n"); + grammarBuilder.append("KW2402 : 'KW' '2402';\n"); + grammarBuilder.append("KW2403 : 'KW' '2403';\n"); + grammarBuilder.append("KW2404 : 'KW' '2404';\n"); + grammarBuilder.append("KW2405 : 'KW' '2405';\n"); + grammarBuilder.append("KW2406 : 'KW' '2406';\n"); + grammarBuilder.append("KW2407 : 'KW' '2407';\n"); + grammarBuilder.append("KW2408 : 'KW' '2408';\n"); + grammarBuilder.append("KW2409 : 'KW' '2409';\n"); + grammarBuilder.append("KW2410 : 'KW' '2410';\n"); + grammarBuilder.append("KW2411 : 'KW' '2411';\n"); + grammarBuilder.append("KW2412 : 'KW' '2412';\n"); + grammarBuilder.append("KW2413 : 'KW' '2413';\n"); + grammarBuilder.append("KW2414 : 'KW' '2414';\n"); + grammarBuilder.append("KW2415 : 'KW' '2415';\n"); + grammarBuilder.append("KW2416 : 'KW' '2416';\n"); + grammarBuilder.append("KW2417 : 'KW' '2417';\n"); + grammarBuilder.append("KW2418 : 'KW' '2418';\n"); + grammarBuilder.append("KW2419 : 'KW' '2419';\n"); + grammarBuilder.append("KW2420 : 'KW' '2420';\n"); + grammarBuilder.append("KW2421 : 'KW' '2421';\n"); + grammarBuilder.append("KW2422 : 'KW' '2422';\n"); + grammarBuilder.append("KW2423 : 'KW' '2423';\n"); + grammarBuilder.append("KW2424 : 'KW' '2424';\n"); + grammarBuilder.append("KW2425 : 'KW' '2425';\n"); + grammarBuilder.append("KW2426 : 'KW' '2426';\n"); + grammarBuilder.append("KW2427 : 'KW' '2427';\n"); + grammarBuilder.append("KW2428 : 'KW' '2428';\n"); + grammarBuilder.append("KW2429 : 'KW' '2429';\n"); + grammarBuilder.append("KW2430 : 'KW' '2430';\n"); + grammarBuilder.append("KW2431 : 'KW' '2431';\n"); + grammarBuilder.append("KW2432 : 'KW' '2432';\n"); + grammarBuilder.append("KW2433 : 'KW' '2433';\n"); + grammarBuilder.append("KW2434 : 'KW' '2434';\n"); + grammarBuilder.append("KW2435 : 'KW' '2435';\n"); + grammarBuilder.append("KW2436 : 'KW' '2436';\n"); + grammarBuilder.append("KW2437 : 'KW' '2437';\n"); + grammarBuilder.append("KW2438 : 'KW' '2438';\n"); + grammarBuilder.append("KW2439 : 'KW' '2439';\n"); + grammarBuilder.append("KW2440 : 'KW' '2440';\n"); + grammarBuilder.append("KW2441 : 'KW' '2441';\n"); + grammarBuilder.append("KW2442 : 'KW' '2442';\n"); + grammarBuilder.append("KW2443 : 'KW' '2443';\n"); + grammarBuilder.append("KW2444 : 'KW' '2444';\n"); + grammarBuilder.append("KW2445 : 'KW' '2445';\n"); + grammarBuilder.append("KW2446 : 'KW' '2446';\n"); + grammarBuilder.append("KW2447 : 'KW' '2447';\n"); + grammarBuilder.append("KW2448 : 'KW' '2448';\n"); + grammarBuilder.append("KW2449 : 'KW' '2449';\n"); + grammarBuilder.append("KW2450 : 'KW' '2450';\n"); + grammarBuilder.append("KW2451 : 'KW' '2451';\n"); + grammarBuilder.append("KW2452 : 'KW' '2452';\n"); + grammarBuilder.append("KW2453 : 'KW' '2453';\n"); + grammarBuilder.append("KW2454 : 'KW' '2454';\n"); + grammarBuilder.append("KW2455 : 'KW' '2455';\n"); + grammarBuilder.append("KW2456 : 'KW' '2456';\n"); + grammarBuilder.append("KW2457 : 'KW' '2457';\n"); + grammarBuilder.append("KW2458 : 'KW' '2458';\n"); + grammarBuilder.append("KW2459 : 'KW' '2459';\n"); + grammarBuilder.append("KW2460 : 'KW' '2460';\n"); + grammarBuilder.append("KW2461 : 'KW' '2461';\n"); + grammarBuilder.append("KW2462 : 'KW' '2462';\n"); + grammarBuilder.append("KW2463 : 'KW' '2463';\n"); + grammarBuilder.append("KW2464 : 'KW' '2464';\n"); + grammarBuilder.append("KW2465 : 'KW' '2465';\n"); + grammarBuilder.append("KW2466 : 'KW' '2466';\n"); + grammarBuilder.append("KW2467 : 'KW' '2467';\n"); + grammarBuilder.append("KW2468 : 'KW' '2468';\n"); + grammarBuilder.append("KW2469 : 'KW' '2469';\n"); + grammarBuilder.append("KW2470 : 'KW' '2470';\n"); + grammarBuilder.append("KW2471 : 'KW' '2471';\n"); + grammarBuilder.append("KW2472 : 'KW' '2472';\n"); + grammarBuilder.append("KW2473 : 'KW' '2473';\n"); + grammarBuilder.append("KW2474 : 'KW' '2474';\n"); + grammarBuilder.append("KW2475 : 'KW' '2475';\n"); + grammarBuilder.append("KW2476 : 'KW' '2476';\n"); + grammarBuilder.append("KW2477 : 'KW' '2477';\n"); + grammarBuilder.append("KW2478 : 'KW' '2478';\n"); + grammarBuilder.append("KW2479 : 'KW' '2479';\n"); + grammarBuilder.append("KW2480 : 'KW' '2480';\n"); + grammarBuilder.append("KW2481 : 'KW' '2481';\n"); + grammarBuilder.append("KW2482 : 'KW' '2482';\n"); + grammarBuilder.append("KW2483 : 'KW' '2483';\n"); + grammarBuilder.append("KW2484 : 'KW' '2484';\n"); + grammarBuilder.append("KW2485 : 'KW' '2485';\n"); + grammarBuilder.append("KW2486 : 'KW' '2486';\n"); + grammarBuilder.append("KW2487 : 'KW' '2487';\n"); + grammarBuilder.append("KW2488 : 'KW' '2488';\n"); + grammarBuilder.append("KW2489 : 'KW' '2489';\n"); + grammarBuilder.append("KW2490 : 'KW' '2490';\n"); + grammarBuilder.append("KW2491 : 'KW' '2491';\n"); + grammarBuilder.append("KW2492 : 'KW' '2492';\n"); + grammarBuilder.append("KW2493 : 'KW' '2493';\n"); + grammarBuilder.append("KW2494 : 'KW' '2494';\n"); + grammarBuilder.append("KW2495 : 'KW' '2495';\n"); + grammarBuilder.append("KW2496 : 'KW' '2496';\n"); + grammarBuilder.append("KW2497 : 'KW' '2497';\n"); + grammarBuilder.append("KW2498 : 'KW' '2498';\n"); + grammarBuilder.append("KW2499 : 'KW' '2499';\n"); + grammarBuilder.append("KW2500 : 'KW' '2500';\n"); + grammarBuilder.append("KW2501 : 'KW' '2501';\n"); + grammarBuilder.append("KW2502 : 'KW' '2502';\n"); + grammarBuilder.append("KW2503 : 'KW' '2503';\n"); + grammarBuilder.append("KW2504 : 'KW' '2504';\n"); + grammarBuilder.append("KW2505 : 'KW' '2505';\n"); + grammarBuilder.append("KW2506 : 'KW' '2506';\n"); + grammarBuilder.append("KW2507 : 'KW' '2507';\n"); + grammarBuilder.append("KW2508 : 'KW' '2508';\n"); + grammarBuilder.append("KW2509 : 'KW' '2509';\n"); + grammarBuilder.append("KW2510 : 'KW' '2510';\n"); + grammarBuilder.append("KW2511 : 'KW' '2511';\n"); + grammarBuilder.append("KW2512 : 'KW' '2512';\n"); + grammarBuilder.append("KW2513 : 'KW' '2513';\n"); + grammarBuilder.append("KW2514 : 'KW' '2514';\n"); + grammarBuilder.append("KW2515 : 'KW' '2515';\n"); + grammarBuilder.append("KW2516 : 'KW' '2516';\n"); + grammarBuilder.append("KW2517 : 'KW' '2517';\n"); + grammarBuilder.append("KW2518 : 'KW' '2518';\n"); + grammarBuilder.append("KW2519 : 'KW' '2519';\n"); + grammarBuilder.append("KW2520 : 'KW' '2520';\n"); + grammarBuilder.append("KW2521 : 'KW' '2521';\n"); + grammarBuilder.append("KW2522 : 'KW' '2522';\n"); + grammarBuilder.append("KW2523 : 'KW' '2523';\n"); + grammarBuilder.append("KW2524 : 'KW' '2524';\n"); + grammarBuilder.append("KW2525 : 'KW' '2525';\n"); + grammarBuilder.append("KW2526 : 'KW' '2526';\n"); + grammarBuilder.append("KW2527 : 'KW' '2527';\n"); + grammarBuilder.append("KW2528 : 'KW' '2528';\n"); + grammarBuilder.append("KW2529 : 'KW' '2529';\n"); + grammarBuilder.append("KW2530 : 'KW' '2530';\n"); + grammarBuilder.append("KW2531 : 'KW' '2531';\n"); + grammarBuilder.append("KW2532 : 'KW' '2532';\n"); + grammarBuilder.append("KW2533 : 'KW' '2533';\n"); + grammarBuilder.append("KW2534 : 'KW' '2534';\n"); + grammarBuilder.append("KW2535 : 'KW' '2535';\n"); + grammarBuilder.append("KW2536 : 'KW' '2536';\n"); + grammarBuilder.append("KW2537 : 'KW' '2537';\n"); + grammarBuilder.append("KW2538 : 'KW' '2538';\n"); + grammarBuilder.append("KW2539 : 'KW' '2539';\n"); + grammarBuilder.append("KW2540 : 'KW' '2540';\n"); + grammarBuilder.append("KW2541 : 'KW' '2541';\n"); + grammarBuilder.append("KW2542 : 'KW' '2542';\n"); + grammarBuilder.append("KW2543 : 'KW' '2543';\n"); + grammarBuilder.append("KW2544 : 'KW' '2544';\n"); + grammarBuilder.append("KW2545 : 'KW' '2545';\n"); + grammarBuilder.append("KW2546 : 'KW' '2546';\n"); + grammarBuilder.append("KW2547 : 'KW' '2547';\n"); + grammarBuilder.append("KW2548 : 'KW' '2548';\n"); + grammarBuilder.append("KW2549 : 'KW' '2549';\n"); + grammarBuilder.append("KW2550 : 'KW' '2550';\n"); + grammarBuilder.append("KW2551 : 'KW' '2551';\n"); + grammarBuilder.append("KW2552 : 'KW' '2552';\n"); + grammarBuilder.append("KW2553 : 'KW' '2553';\n"); + grammarBuilder.append("KW2554 : 'KW' '2554';\n"); + grammarBuilder.append("KW2555 : 'KW' '2555';\n"); + grammarBuilder.append("KW2556 : 'KW' '2556';\n"); + grammarBuilder.append("KW2557 : 'KW' '2557';\n"); + grammarBuilder.append("KW2558 : 'KW' '2558';\n"); + grammarBuilder.append("KW2559 : 'KW' '2559';\n"); + grammarBuilder.append("KW2560 : 'KW' '2560';\n"); + grammarBuilder.append("KW2561 : 'KW' '2561';\n"); + grammarBuilder.append("KW2562 : 'KW' '2562';\n"); + grammarBuilder.append("KW2563 : 'KW' '2563';\n"); + grammarBuilder.append("KW2564 : 'KW' '2564';\n"); + grammarBuilder.append("KW2565 : 'KW' '2565';\n"); + grammarBuilder.append("KW2566 : 'KW' '2566';\n"); + grammarBuilder.append("KW2567 : 'KW' '2567';\n"); + grammarBuilder.append("KW2568 : 'KW' '2568';\n"); + grammarBuilder.append("KW2569 : 'KW' '2569';\n"); + grammarBuilder.append("KW2570 : 'KW' '2570';\n"); + grammarBuilder.append("KW2571 : 'KW' '2571';\n"); + grammarBuilder.append("KW2572 : 'KW' '2572';\n"); + grammarBuilder.append("KW2573 : 'KW' '2573';\n"); + grammarBuilder.append("KW2574 : 'KW' '2574';\n"); + grammarBuilder.append("KW2575 : 'KW' '2575';\n"); + grammarBuilder.append("KW2576 : 'KW' '2576';\n"); + grammarBuilder.append("KW2577 : 'KW' '2577';\n"); + grammarBuilder.append("KW2578 : 'KW' '2578';\n"); + grammarBuilder.append("KW2579 : 'KW' '2579';\n"); + grammarBuilder.append("KW2580 : 'KW' '2580';\n"); + grammarBuilder.append("KW2581 : 'KW' '2581';\n"); + grammarBuilder.append("KW2582 : 'KW' '2582';\n"); + grammarBuilder.append("KW2583 : 'KW' '2583';\n"); + grammarBuilder.append("KW2584 : 'KW' '2584';\n"); + grammarBuilder.append("KW2585 : 'KW' '2585';\n"); + grammarBuilder.append("KW2586 : 'KW' '2586';\n"); + grammarBuilder.append("KW2587 : 'KW' '2587';\n"); + grammarBuilder.append("KW2588 : 'KW' '2588';\n"); + grammarBuilder.append("KW2589 : 'KW' '2589';\n"); + grammarBuilder.append("KW2590 : 'KW' '2590';\n"); + grammarBuilder.append("KW2591 : 'KW' '2591';\n"); + grammarBuilder.append("KW2592 : 'KW' '2592';\n"); + grammarBuilder.append("KW2593 : 'KW' '2593';\n"); + grammarBuilder.append("KW2594 : 'KW' '2594';\n"); + grammarBuilder.append("KW2595 : 'KW' '2595';\n"); + grammarBuilder.append("KW2596 : 'KW' '2596';\n"); + grammarBuilder.append("KW2597 : 'KW' '2597';\n"); + grammarBuilder.append("KW2598 : 'KW' '2598';\n"); + grammarBuilder.append("KW2599 : 'KW' '2599';\n"); + grammarBuilder.append("KW2600 : 'KW' '2600';\n"); + grammarBuilder.append("KW2601 : 'KW' '2601';\n"); + grammarBuilder.append("KW2602 : 'KW' '2602';\n"); + grammarBuilder.append("KW2603 : 'KW' '2603';\n"); + grammarBuilder.append("KW2604 : 'KW' '2604';\n"); + grammarBuilder.append("KW2605 : 'KW' '2605';\n"); + grammarBuilder.append("KW2606 : 'KW' '2606';\n"); + grammarBuilder.append("KW2607 : 'KW' '2607';\n"); + grammarBuilder.append("KW2608 : 'KW' '2608';\n"); + grammarBuilder.append("KW2609 : 'KW' '2609';\n"); + grammarBuilder.append("KW2610 : 'KW' '2610';\n"); + grammarBuilder.append("KW2611 : 'KW' '2611';\n"); + grammarBuilder.append("KW2612 : 'KW' '2612';\n"); + grammarBuilder.append("KW2613 : 'KW' '2613';\n"); + grammarBuilder.append("KW2614 : 'KW' '2614';\n"); + grammarBuilder.append("KW2615 : 'KW' '2615';\n"); + grammarBuilder.append("KW2616 : 'KW' '2616';\n"); + grammarBuilder.append("KW2617 : 'KW' '2617';\n"); + grammarBuilder.append("KW2618 : 'KW' '2618';\n"); + grammarBuilder.append("KW2619 : 'KW' '2619';\n"); + grammarBuilder.append("KW2620 : 'KW' '2620';\n"); + grammarBuilder.append("KW2621 : 'KW' '2621';\n"); + grammarBuilder.append("KW2622 : 'KW' '2622';\n"); + grammarBuilder.append("KW2623 : 'KW' '2623';\n"); + grammarBuilder.append("KW2624 : 'KW' '2624';\n"); + grammarBuilder.append("KW2625 : 'KW' '2625';\n"); + grammarBuilder.append("KW2626 : 'KW' '2626';\n"); + grammarBuilder.append("KW2627 : 'KW' '2627';\n"); + grammarBuilder.append("KW2628 : 'KW' '2628';\n"); + grammarBuilder.append("KW2629 : 'KW' '2629';\n"); + grammarBuilder.append("KW2630 : 'KW' '2630';\n"); + grammarBuilder.append("KW2631 : 'KW' '2631';\n"); + grammarBuilder.append("KW2632 : 'KW' '2632';\n"); + grammarBuilder.append("KW2633 : 'KW' '2633';\n"); + grammarBuilder.append("KW2634 : 'KW' '2634';\n"); + grammarBuilder.append("KW2635 : 'KW' '2635';\n"); + grammarBuilder.append("KW2636 : 'KW' '2636';\n"); + grammarBuilder.append("KW2637 : 'KW' '2637';\n"); + grammarBuilder.append("KW2638 : 'KW' '2638';\n"); + grammarBuilder.append("KW2639 : 'KW' '2639';\n"); + grammarBuilder.append("KW2640 : 'KW' '2640';\n"); + grammarBuilder.append("KW2641 : 'KW' '2641';\n"); + grammarBuilder.append("KW2642 : 'KW' '2642';\n"); + grammarBuilder.append("KW2643 : 'KW' '2643';\n"); + grammarBuilder.append("KW2644 : 'KW' '2644';\n"); + grammarBuilder.append("KW2645 : 'KW' '2645';\n"); + grammarBuilder.append("KW2646 : 'KW' '2646';\n"); + grammarBuilder.append("KW2647 : 'KW' '2647';\n"); + grammarBuilder.append("KW2648 : 'KW' '2648';\n"); + grammarBuilder.append("KW2649 : 'KW' '2649';\n"); + grammarBuilder.append("KW2650 : 'KW' '2650';\n"); + grammarBuilder.append("KW2651 : 'KW' '2651';\n"); + grammarBuilder.append("KW2652 : 'KW' '2652';\n"); + grammarBuilder.append("KW2653 : 'KW' '2653';\n"); + grammarBuilder.append("KW2654 : 'KW' '2654';\n"); + grammarBuilder.append("KW2655 : 'KW' '2655';\n"); + grammarBuilder.append("KW2656 : 'KW' '2656';\n"); + grammarBuilder.append("KW2657 : 'KW' '2657';\n"); + grammarBuilder.append("KW2658 : 'KW' '2658';\n"); + grammarBuilder.append("KW2659 : 'KW' '2659';\n"); + grammarBuilder.append("KW2660 : 'KW' '2660';\n"); + grammarBuilder.append("KW2661 : 'KW' '2661';\n"); + grammarBuilder.append("KW2662 : 'KW' '2662';\n"); + grammarBuilder.append("KW2663 : 'KW' '2663';\n"); + grammarBuilder.append("KW2664 : 'KW' '2664';\n"); + grammarBuilder.append("KW2665 : 'KW' '2665';\n"); + grammarBuilder.append("KW2666 : 'KW' '2666';\n"); + grammarBuilder.append("KW2667 : 'KW' '2667';\n"); + grammarBuilder.append("KW2668 : 'KW' '2668';\n"); + grammarBuilder.append("KW2669 : 'KW' '2669';\n"); + grammarBuilder.append("KW2670 : 'KW' '2670';\n"); + grammarBuilder.append("KW2671 : 'KW' '2671';\n"); + grammarBuilder.append("KW2672 : 'KW' '2672';\n"); + grammarBuilder.append("KW2673 : 'KW' '2673';\n"); + grammarBuilder.append("KW2674 : 'KW' '2674';\n"); + grammarBuilder.append("KW2675 : 'KW' '2675';\n"); + grammarBuilder.append("KW2676 : 'KW' '2676';\n"); + grammarBuilder.append("KW2677 : 'KW' '2677';\n"); + grammarBuilder.append("KW2678 : 'KW' '2678';\n"); + grammarBuilder.append("KW2679 : 'KW' '2679';\n"); + grammarBuilder.append("KW2680 : 'KW' '2680';\n"); + grammarBuilder.append("KW2681 : 'KW' '2681';\n"); + grammarBuilder.append("KW2682 : 'KW' '2682';\n"); + grammarBuilder.append("KW2683 : 'KW' '2683';\n"); + grammarBuilder.append("KW2684 : 'KW' '2684';\n"); + grammarBuilder.append("KW2685 : 'KW' '2685';\n"); + grammarBuilder.append("KW2686 : 'KW' '2686';\n"); + grammarBuilder.append("KW2687 : 'KW' '2687';\n"); + grammarBuilder.append("KW2688 : 'KW' '2688';\n"); + grammarBuilder.append("KW2689 : 'KW' '2689';\n"); + grammarBuilder.append("KW2690 : 'KW' '2690';\n"); + grammarBuilder.append("KW2691 : 'KW' '2691';\n"); + grammarBuilder.append("KW2692 : 'KW' '2692';\n"); + grammarBuilder.append("KW2693 : 'KW' '2693';\n"); + grammarBuilder.append("KW2694 : 'KW' '2694';\n"); + grammarBuilder.append("KW2695 : 'KW' '2695';\n"); + grammarBuilder.append("KW2696 : 'KW' '2696';\n"); + grammarBuilder.append("KW2697 : 'KW' '2697';\n"); + grammarBuilder.append("KW2698 : 'KW' '2698';\n"); + grammarBuilder.append("KW2699 : 'KW' '2699';\n"); + grammarBuilder.append("KW2700 : 'KW' '2700';\n"); + grammarBuilder.append("KW2701 : 'KW' '2701';\n"); + grammarBuilder.append("KW2702 : 'KW' '2702';\n"); + grammarBuilder.append("KW2703 : 'KW' '2703';\n"); + grammarBuilder.append("KW2704 : 'KW' '2704';\n"); + grammarBuilder.append("KW2705 : 'KW' '2705';\n"); + grammarBuilder.append("KW2706 : 'KW' '2706';\n"); + grammarBuilder.append("KW2707 : 'KW' '2707';\n"); + grammarBuilder.append("KW2708 : 'KW' '2708';\n"); + grammarBuilder.append("KW2709 : 'KW' '2709';\n"); + grammarBuilder.append("KW2710 : 'KW' '2710';\n"); + grammarBuilder.append("KW2711 : 'KW' '2711';\n"); + grammarBuilder.append("KW2712 : 'KW' '2712';\n"); + grammarBuilder.append("KW2713 : 'KW' '2713';\n"); + grammarBuilder.append("KW2714 : 'KW' '2714';\n"); + grammarBuilder.append("KW2715 : 'KW' '2715';\n"); + grammarBuilder.append("KW2716 : 'KW' '2716';\n"); + grammarBuilder.append("KW2717 : 'KW' '2717';\n"); + grammarBuilder.append("KW2718 : 'KW' '2718';\n"); + grammarBuilder.append("KW2719 : 'KW' '2719';\n"); + grammarBuilder.append("KW2720 : 'KW' '2720';\n"); + grammarBuilder.append("KW2721 : 'KW' '2721';\n"); + grammarBuilder.append("KW2722 : 'KW' '2722';\n"); + grammarBuilder.append("KW2723 : 'KW' '2723';\n"); + grammarBuilder.append("KW2724 : 'KW' '2724';\n"); + grammarBuilder.append("KW2725 : 'KW' '2725';\n"); + grammarBuilder.append("KW2726 : 'KW' '2726';\n"); + grammarBuilder.append("KW2727 : 'KW' '2727';\n"); + grammarBuilder.append("KW2728 : 'KW' '2728';\n"); + grammarBuilder.append("KW2729 : 'KW' '2729';\n"); + grammarBuilder.append("KW2730 : 'KW' '2730';\n"); + grammarBuilder.append("KW2731 : 'KW' '2731';\n"); + grammarBuilder.append("KW2732 : 'KW' '2732';\n"); + grammarBuilder.append("KW2733 : 'KW' '2733';\n"); + grammarBuilder.append("KW2734 : 'KW' '2734';\n"); + grammarBuilder.append("KW2735 : 'KW' '2735';\n"); + grammarBuilder.append("KW2736 : 'KW' '2736';\n"); + grammarBuilder.append("KW2737 : 'KW' '2737';\n"); + grammarBuilder.append("KW2738 : 'KW' '2738';\n"); + grammarBuilder.append("KW2739 : 'KW' '2739';\n"); + grammarBuilder.append("KW2740 : 'KW' '2740';\n"); + grammarBuilder.append("KW2741 : 'KW' '2741';\n"); + grammarBuilder.append("KW2742 : 'KW' '2742';\n"); + grammarBuilder.append("KW2743 : 'KW' '2743';\n"); + grammarBuilder.append("KW2744 : 'KW' '2744';\n"); + grammarBuilder.append("KW2745 : 'KW' '2745';\n"); + grammarBuilder.append("KW2746 : 'KW' '2746';\n"); + grammarBuilder.append("KW2747 : 'KW' '2747';\n"); + grammarBuilder.append("KW2748 : 'KW' '2748';\n"); + grammarBuilder.append("KW2749 : 'KW' '2749';\n"); + grammarBuilder.append("KW2750 : 'KW' '2750';\n"); + grammarBuilder.append("KW2751 : 'KW' '2751';\n"); + grammarBuilder.append("KW2752 : 'KW' '2752';\n"); + grammarBuilder.append("KW2753 : 'KW' '2753';\n"); + grammarBuilder.append("KW2754 : 'KW' '2754';\n"); + grammarBuilder.append("KW2755 : 'KW' '2755';\n"); + grammarBuilder.append("KW2756 : 'KW' '2756';\n"); + grammarBuilder.append("KW2757 : 'KW' '2757';\n"); + grammarBuilder.append("KW2758 : 'KW' '2758';\n"); + grammarBuilder.append("KW2759 : 'KW' '2759';\n"); + grammarBuilder.append("KW2760 : 'KW' '2760';\n"); + grammarBuilder.append("KW2761 : 'KW' '2761';\n"); + grammarBuilder.append("KW2762 : 'KW' '2762';\n"); + grammarBuilder.append("KW2763 : 'KW' '2763';\n"); + grammarBuilder.append("KW2764 : 'KW' '2764';\n"); + grammarBuilder.append("KW2765 : 'KW' '2765';\n"); + grammarBuilder.append("KW2766 : 'KW' '2766';\n"); + grammarBuilder.append("KW2767 : 'KW' '2767';\n"); + grammarBuilder.append("KW2768 : 'KW' '2768';\n"); + grammarBuilder.append("KW2769 : 'KW' '2769';\n"); + grammarBuilder.append("KW2770 : 'KW' '2770';\n"); + grammarBuilder.append("KW2771 : 'KW' '2771';\n"); + grammarBuilder.append("KW2772 : 'KW' '2772';\n"); + grammarBuilder.append("KW2773 : 'KW' '2773';\n"); + grammarBuilder.append("KW2774 : 'KW' '2774';\n"); + grammarBuilder.append("KW2775 : 'KW' '2775';\n"); + grammarBuilder.append("KW2776 : 'KW' '2776';\n"); + grammarBuilder.append("KW2777 : 'KW' '2777';\n"); + grammarBuilder.append("KW2778 : 'KW' '2778';\n"); + grammarBuilder.append("KW2779 : 'KW' '2779';\n"); + grammarBuilder.append("KW2780 : 'KW' '2780';\n"); + grammarBuilder.append("KW2781 : 'KW' '2781';\n"); + grammarBuilder.append("KW2782 : 'KW' '2782';\n"); + grammarBuilder.append("KW2783 : 'KW' '2783';\n"); + grammarBuilder.append("KW2784 : 'KW' '2784';\n"); + grammarBuilder.append("KW2785 : 'KW' '2785';\n"); + grammarBuilder.append("KW2786 : 'KW' '2786';\n"); + grammarBuilder.append("KW2787 : 'KW' '2787';\n"); + grammarBuilder.append("KW2788 : 'KW' '2788';\n"); + grammarBuilder.append("KW2789 : 'KW' '2789';\n"); + grammarBuilder.append("KW2790 : 'KW' '2790';\n"); + grammarBuilder.append("KW2791 : 'KW' '2791';\n"); + grammarBuilder.append("KW2792 : 'KW' '2792';\n"); + grammarBuilder.append("KW2793 : 'KW' '2793';\n"); + grammarBuilder.append("KW2794 : 'KW' '2794';\n"); + grammarBuilder.append("KW2795 : 'KW' '2795';\n"); + grammarBuilder.append("KW2796 : 'KW' '2796';\n"); + grammarBuilder.append("KW2797 : 'KW' '2797';\n"); + grammarBuilder.append("KW2798 : 'KW' '2798';\n"); + grammarBuilder.append("KW2799 : 'KW' '2799';\n"); + grammarBuilder.append("KW2800 : 'KW' '2800';\n"); + grammarBuilder.append("KW2801 : 'KW' '2801';\n"); + grammarBuilder.append("KW2802 : 'KW' '2802';\n"); + grammarBuilder.append("KW2803 : 'KW' '2803';\n"); + grammarBuilder.append("KW2804 : 'KW' '2804';\n"); + grammarBuilder.append("KW2805 : 'KW' '2805';\n"); + grammarBuilder.append("KW2806 : 'KW' '2806';\n"); + grammarBuilder.append("KW2807 : 'KW' '2807';\n"); + grammarBuilder.append("KW2808 : 'KW' '2808';\n"); + grammarBuilder.append("KW2809 : 'KW' '2809';\n"); + grammarBuilder.append("KW2810 : 'KW' '2810';\n"); + grammarBuilder.append("KW2811 : 'KW' '2811';\n"); + grammarBuilder.append("KW2812 : 'KW' '2812';\n"); + grammarBuilder.append("KW2813 : 'KW' '2813';\n"); + grammarBuilder.append("KW2814 : 'KW' '2814';\n"); + grammarBuilder.append("KW2815 : 'KW' '2815';\n"); + grammarBuilder.append("KW2816 : 'KW' '2816';\n"); + grammarBuilder.append("KW2817 : 'KW' '2817';\n"); + grammarBuilder.append("KW2818 : 'KW' '2818';\n"); + grammarBuilder.append("KW2819 : 'KW' '2819';\n"); + grammarBuilder.append("KW2820 : 'KW' '2820';\n"); + grammarBuilder.append("KW2821 : 'KW' '2821';\n"); + grammarBuilder.append("KW2822 : 'KW' '2822';\n"); + grammarBuilder.append("KW2823 : 'KW' '2823';\n"); + grammarBuilder.append("KW2824 : 'KW' '2824';\n"); + grammarBuilder.append("KW2825 : 'KW' '2825';\n"); + grammarBuilder.append("KW2826 : 'KW' '2826';\n"); + grammarBuilder.append("KW2827 : 'KW' '2827';\n"); + grammarBuilder.append("KW2828 : 'KW' '2828';\n"); + grammarBuilder.append("KW2829 : 'KW' '2829';\n"); + grammarBuilder.append("KW2830 : 'KW' '2830';\n"); + grammarBuilder.append("KW2831 : 'KW' '2831';\n"); + grammarBuilder.append("KW2832 : 'KW' '2832';\n"); + grammarBuilder.append("KW2833 : 'KW' '2833';\n"); + grammarBuilder.append("KW2834 : 'KW' '2834';\n"); + grammarBuilder.append("KW2835 : 'KW' '2835';\n"); + grammarBuilder.append("KW2836 : 'KW' '2836';\n"); + grammarBuilder.append("KW2837 : 'KW' '2837';\n"); + grammarBuilder.append("KW2838 : 'KW' '2838';\n"); + grammarBuilder.append("KW2839 : 'KW' '2839';\n"); + grammarBuilder.append("KW2840 : 'KW' '2840';\n"); + grammarBuilder.append("KW2841 : 'KW' '2841';\n"); + grammarBuilder.append("KW2842 : 'KW' '2842';\n"); + grammarBuilder.append("KW2843 : 'KW' '2843';\n"); + grammarBuilder.append("KW2844 : 'KW' '2844';\n"); + grammarBuilder.append("KW2845 : 'KW' '2845';\n"); + grammarBuilder.append("KW2846 : 'KW' '2846';\n"); + grammarBuilder.append("KW2847 : 'KW' '2847';\n"); + grammarBuilder.append("KW2848 : 'KW' '2848';\n"); + grammarBuilder.append("KW2849 : 'KW' '2849';\n"); + grammarBuilder.append("KW2850 : 'KW' '2850';\n"); + grammarBuilder.append("KW2851 : 'KW' '2851';\n"); + grammarBuilder.append("KW2852 : 'KW' '2852';\n"); + grammarBuilder.append("KW2853 : 'KW' '2853';\n"); + grammarBuilder.append("KW2854 : 'KW' '2854';\n"); + grammarBuilder.append("KW2855 : 'KW' '2855';\n"); + grammarBuilder.append("KW2856 : 'KW' '2856';\n"); + grammarBuilder.append("KW2857 : 'KW' '2857';\n"); + grammarBuilder.append("KW2858 : 'KW' '2858';\n"); + grammarBuilder.append("KW2859 : 'KW' '2859';\n"); + grammarBuilder.append("KW2860 : 'KW' '2860';\n"); + grammarBuilder.append("KW2861 : 'KW' '2861';\n"); + grammarBuilder.append("KW2862 : 'KW' '2862';\n"); + grammarBuilder.append("KW2863 : 'KW' '2863';\n"); + grammarBuilder.append("KW2864 : 'KW' '2864';\n"); + grammarBuilder.append("KW2865 : 'KW' '2865';\n"); + grammarBuilder.append("KW2866 : 'KW' '2866';\n"); + grammarBuilder.append("KW2867 : 'KW' '2867';\n"); + grammarBuilder.append("KW2868 : 'KW' '2868';\n"); + grammarBuilder.append("KW2869 : 'KW' '2869';\n"); + grammarBuilder.append("KW2870 : 'KW' '2870';\n"); + grammarBuilder.append("KW2871 : 'KW' '2871';\n"); + grammarBuilder.append("KW2872 : 'KW' '2872';\n"); + grammarBuilder.append("KW2873 : 'KW' '2873';\n"); + grammarBuilder.append("KW2874 : 'KW' '2874';\n"); + grammarBuilder.append("KW2875 : 'KW' '2875';\n"); + grammarBuilder.append("KW2876 : 'KW' '2876';\n"); + grammarBuilder.append("KW2877 : 'KW' '2877';\n"); + grammarBuilder.append("KW2878 : 'KW' '2878';\n"); + grammarBuilder.append("KW2879 : 'KW' '2879';\n"); + grammarBuilder.append("KW2880 : 'KW' '2880';\n"); + grammarBuilder.append("KW2881 : 'KW' '2881';\n"); + grammarBuilder.append("KW2882 : 'KW' '2882';\n"); + grammarBuilder.append("KW2883 : 'KW' '2883';\n"); + grammarBuilder.append("KW2884 : 'KW' '2884';\n"); + grammarBuilder.append("KW2885 : 'KW' '2885';\n"); + grammarBuilder.append("KW2886 : 'KW' '2886';\n"); + grammarBuilder.append("KW2887 : 'KW' '2887';\n"); + grammarBuilder.append("KW2888 : 'KW' '2888';\n"); + grammarBuilder.append("KW2889 : 'KW' '2889';\n"); + grammarBuilder.append("KW2890 : 'KW' '2890';\n"); + grammarBuilder.append("KW2891 : 'KW' '2891';\n"); + grammarBuilder.append("KW2892 : 'KW' '2892';\n"); + grammarBuilder.append("KW2893 : 'KW' '2893';\n"); + grammarBuilder.append("KW2894 : 'KW' '2894';\n"); + grammarBuilder.append("KW2895 : 'KW' '2895';\n"); + grammarBuilder.append("KW2896 : 'KW' '2896';\n"); + grammarBuilder.append("KW2897 : 'KW' '2897';\n"); + grammarBuilder.append("KW2898 : 'KW' '2898';\n"); + grammarBuilder.append("KW2899 : 'KW' '2899';\n"); + grammarBuilder.append("KW2900 : 'KW' '2900';\n"); + grammarBuilder.append("KW2901 : 'KW' '2901';\n"); + grammarBuilder.append("KW2902 : 'KW' '2902';\n"); + grammarBuilder.append("KW2903 : 'KW' '2903';\n"); + grammarBuilder.append("KW2904 : 'KW' '2904';\n"); + grammarBuilder.append("KW2905 : 'KW' '2905';\n"); + grammarBuilder.append("KW2906 : 'KW' '2906';\n"); + grammarBuilder.append("KW2907 : 'KW' '2907';\n"); + grammarBuilder.append("KW2908 : 'KW' '2908';\n"); + grammarBuilder.append("KW2909 : 'KW' '2909';\n"); + grammarBuilder.append("KW2910 : 'KW' '2910';\n"); + grammarBuilder.append("KW2911 : 'KW' '2911';\n"); + grammarBuilder.append("KW2912 : 'KW' '2912';\n"); + grammarBuilder.append("KW2913 : 'KW' '2913';\n"); + grammarBuilder.append("KW2914 : 'KW' '2914';\n"); + grammarBuilder.append("KW2915 : 'KW' '2915';\n"); + grammarBuilder.append("KW2916 : 'KW' '2916';\n"); + grammarBuilder.append("KW2917 : 'KW' '2917';\n"); + grammarBuilder.append("KW2918 : 'KW' '2918';\n"); + grammarBuilder.append("KW2919 : 'KW' '2919';\n"); + grammarBuilder.append("KW2920 : 'KW' '2920';\n"); + grammarBuilder.append("KW2921 : 'KW' '2921';\n"); + grammarBuilder.append("KW2922 : 'KW' '2922';\n"); + grammarBuilder.append("KW2923 : 'KW' '2923';\n"); + grammarBuilder.append("KW2924 : 'KW' '2924';\n"); + grammarBuilder.append("KW2925 : 'KW' '2925';\n"); + grammarBuilder.append("KW2926 : 'KW' '2926';\n"); + grammarBuilder.append("KW2927 : 'KW' '2927';\n"); + grammarBuilder.append("KW2928 : 'KW' '2928';\n"); + grammarBuilder.append("KW2929 : 'KW' '2929';\n"); + grammarBuilder.append("KW2930 : 'KW' '2930';\n"); + grammarBuilder.append("KW2931 : 'KW' '2931';\n"); + grammarBuilder.append("KW2932 : 'KW' '2932';\n"); + grammarBuilder.append("KW2933 : 'KW' '2933';\n"); + grammarBuilder.append("KW2934 : 'KW' '2934';\n"); + grammarBuilder.append("KW2935 : 'KW' '2935';\n"); + grammarBuilder.append("KW2936 : 'KW' '2936';\n"); + grammarBuilder.append("KW2937 : 'KW' '2937';\n"); + grammarBuilder.append("KW2938 : 'KW' '2938';\n"); + grammarBuilder.append("KW2939 : 'KW' '2939';\n"); + grammarBuilder.append("KW2940 : 'KW' '2940';\n"); + grammarBuilder.append("KW2941 : 'KW' '2941';\n"); + grammarBuilder.append("KW2942 : 'KW' '2942';\n"); + grammarBuilder.append("KW2943 : 'KW' '2943';\n"); + grammarBuilder.append("KW2944 : 'KW' '2944';\n"); + grammarBuilder.append("KW2945 : 'KW' '2945';\n"); + grammarBuilder.append("KW2946 : 'KW' '2946';\n"); + grammarBuilder.append("KW2947 : 'KW' '2947';\n"); + grammarBuilder.append("KW2948 : 'KW' '2948';\n"); + grammarBuilder.append("KW2949 : 'KW' '2949';\n"); + grammarBuilder.append("KW2950 : 'KW' '2950';\n"); + grammarBuilder.append("KW2951 : 'KW' '2951';\n"); + grammarBuilder.append("KW2952 : 'KW' '2952';\n"); + grammarBuilder.append("KW2953 : 'KW' '2953';\n"); + grammarBuilder.append("KW2954 : 'KW' '2954';\n"); + grammarBuilder.append("KW2955 : 'KW' '2955';\n"); + grammarBuilder.append("KW2956 : 'KW' '2956';\n"); + grammarBuilder.append("KW2957 : 'KW' '2957';\n"); + grammarBuilder.append("KW2958 : 'KW' '2958';\n"); + grammarBuilder.append("KW2959 : 'KW' '2959';\n"); + grammarBuilder.append("KW2960 : 'KW' '2960';\n"); + grammarBuilder.append("KW2961 : 'KW' '2961';\n"); + grammarBuilder.append("KW2962 : 'KW' '2962';\n"); + grammarBuilder.append("KW2963 : 'KW' '2963';\n"); + grammarBuilder.append("KW2964 : 'KW' '2964';\n"); + grammarBuilder.append("KW2965 : 'KW' '2965';\n"); + grammarBuilder.append("KW2966 : 'KW' '2966';\n"); + grammarBuilder.append("KW2967 : 'KW' '2967';\n"); + grammarBuilder.append("KW2968 : 'KW' '2968';\n"); + grammarBuilder.append("KW2969 : 'KW' '2969';\n"); + grammarBuilder.append("KW2970 : 'KW' '2970';\n"); + grammarBuilder.append("KW2971 : 'KW' '2971';\n"); + grammarBuilder.append("KW2972 : 'KW' '2972';\n"); + grammarBuilder.append("KW2973 : 'KW' '2973';\n"); + grammarBuilder.append("KW2974 : 'KW' '2974';\n"); + grammarBuilder.append("KW2975 : 'KW' '2975';\n"); + grammarBuilder.append("KW2976 : 'KW' '2976';\n"); + grammarBuilder.append("KW2977 : 'KW' '2977';\n"); + grammarBuilder.append("KW2978 : 'KW' '2978';\n"); + grammarBuilder.append("KW2979 : 'KW' '2979';\n"); + grammarBuilder.append("KW2980 : 'KW' '2980';\n"); + grammarBuilder.append("KW2981 : 'KW' '2981';\n"); + grammarBuilder.append("KW2982 : 'KW' '2982';\n"); + grammarBuilder.append("KW2983 : 'KW' '2983';\n"); + grammarBuilder.append("KW2984 : 'KW' '2984';\n"); + grammarBuilder.append("KW2985 : 'KW' '2985';\n"); + grammarBuilder.append("KW2986 : 'KW' '2986';\n"); + grammarBuilder.append("KW2987 : 'KW' '2987';\n"); + grammarBuilder.append("KW2988 : 'KW' '2988';\n"); + grammarBuilder.append("KW2989 : 'KW' '2989';\n"); + grammarBuilder.append("KW2990 : 'KW' '2990';\n"); + grammarBuilder.append("KW2991 : 'KW' '2991';\n"); + grammarBuilder.append("KW2992 : 'KW' '2992';\n"); + grammarBuilder.append("KW2993 : 'KW' '2993';\n"); + grammarBuilder.append("KW2994 : 'KW' '2994';\n"); + grammarBuilder.append("KW2995 : 'KW' '2995';\n"); + grammarBuilder.append("KW2996 : 'KW' '2996';\n"); + grammarBuilder.append("KW2997 : 'KW' '2997';\n"); + grammarBuilder.append("KW2998 : 'KW' '2998';\n"); + grammarBuilder.append("KW2999 : 'KW' '2999';\n"); + grammarBuilder.append("KW3000 : 'KW' '3000';\n"); + grammarBuilder.append("KW3001 : 'KW' '3001';\n"); + grammarBuilder.append("KW3002 : 'KW' '3002';\n"); + grammarBuilder.append("KW3003 : 'KW' '3003';\n"); + grammarBuilder.append("KW3004 : 'KW' '3004';\n"); + grammarBuilder.append("KW3005 : 'KW' '3005';\n"); + grammarBuilder.append("KW3006 : 'KW' '3006';\n"); + grammarBuilder.append("KW3007 : 'KW' '3007';\n"); + grammarBuilder.append("KW3008 : 'KW' '3008';\n"); + grammarBuilder.append("KW3009 : 'KW' '3009';\n"); + grammarBuilder.append("KW3010 : 'KW' '3010';\n"); + grammarBuilder.append("KW3011 : 'KW' '3011';\n"); + grammarBuilder.append("KW3012 : 'KW' '3012';\n"); + grammarBuilder.append("KW3013 : 'KW' '3013';\n"); + grammarBuilder.append("KW3014 : 'KW' '3014';\n"); + grammarBuilder.append("KW3015 : 'KW' '3015';\n"); + grammarBuilder.append("KW3016 : 'KW' '3016';\n"); + grammarBuilder.append("KW3017 : 'KW' '3017';\n"); + grammarBuilder.append("KW3018 : 'KW' '3018';\n"); + grammarBuilder.append("KW3019 : 'KW' '3019';\n"); + grammarBuilder.append("KW3020 : 'KW' '3020';\n"); + grammarBuilder.append("KW3021 : 'KW' '3021';\n"); + grammarBuilder.append("KW3022 : 'KW' '3022';\n"); + grammarBuilder.append("KW3023 : 'KW' '3023';\n"); + grammarBuilder.append("KW3024 : 'KW' '3024';\n"); + grammarBuilder.append("KW3025 : 'KW' '3025';\n"); + grammarBuilder.append("KW3026 : 'KW' '3026';\n"); + grammarBuilder.append("KW3027 : 'KW' '3027';\n"); + grammarBuilder.append("KW3028 : 'KW' '3028';\n"); + grammarBuilder.append("KW3029 : 'KW' '3029';\n"); + grammarBuilder.append("KW3030 : 'KW' '3030';\n"); + grammarBuilder.append("KW3031 : 'KW' '3031';\n"); + grammarBuilder.append("KW3032 : 'KW' '3032';\n"); + grammarBuilder.append("KW3033 : 'KW' '3033';\n"); + grammarBuilder.append("KW3034 : 'KW' '3034';\n"); + grammarBuilder.append("KW3035 : 'KW' '3035';\n"); + grammarBuilder.append("KW3036 : 'KW' '3036';\n"); + grammarBuilder.append("KW3037 : 'KW' '3037';\n"); + grammarBuilder.append("KW3038 : 'KW' '3038';\n"); + grammarBuilder.append("KW3039 : 'KW' '3039';\n"); + grammarBuilder.append("KW3040 : 'KW' '3040';\n"); + grammarBuilder.append("KW3041 : 'KW' '3041';\n"); + grammarBuilder.append("KW3042 : 'KW' '3042';\n"); + grammarBuilder.append("KW3043 : 'KW' '3043';\n"); + grammarBuilder.append("KW3044 : 'KW' '3044';\n"); + grammarBuilder.append("KW3045 : 'KW' '3045';\n"); + grammarBuilder.append("KW3046 : 'KW' '3046';\n"); + grammarBuilder.append("KW3047 : 'KW' '3047';\n"); + grammarBuilder.append("KW3048 : 'KW' '3048';\n"); + grammarBuilder.append("KW3049 : 'KW' '3049';\n"); + grammarBuilder.append("KW3050 : 'KW' '3050';\n"); + grammarBuilder.append("KW3051 : 'KW' '3051';\n"); + grammarBuilder.append("KW3052 : 'KW' '3052';\n"); + grammarBuilder.append("KW3053 : 'KW' '3053';\n"); + grammarBuilder.append("KW3054 : 'KW' '3054';\n"); + grammarBuilder.append("KW3055 : 'KW' '3055';\n"); + grammarBuilder.append("KW3056 : 'KW' '3056';\n"); + grammarBuilder.append("KW3057 : 'KW' '3057';\n"); + grammarBuilder.append("KW3058 : 'KW' '3058';\n"); + grammarBuilder.append("KW3059 : 'KW' '3059';\n"); + grammarBuilder.append("KW3060 : 'KW' '3060';\n"); + grammarBuilder.append("KW3061 : 'KW' '3061';\n"); + grammarBuilder.append("KW3062 : 'KW' '3062';\n"); + grammarBuilder.append("KW3063 : 'KW' '3063';\n"); + grammarBuilder.append("KW3064 : 'KW' '3064';\n"); + grammarBuilder.append("KW3065 : 'KW' '3065';\n"); + grammarBuilder.append("KW3066 : 'KW' '3066';\n"); + grammarBuilder.append("KW3067 : 'KW' '3067';\n"); + grammarBuilder.append("KW3068 : 'KW' '3068';\n"); + grammarBuilder.append("KW3069 : 'KW' '3069';\n"); + grammarBuilder.append("KW3070 : 'KW' '3070';\n"); + grammarBuilder.append("KW3071 : 'KW' '3071';\n"); + grammarBuilder.append("KW3072 : 'KW' '3072';\n"); + grammarBuilder.append("KW3073 : 'KW' '3073';\n"); + grammarBuilder.append("KW3074 : 'KW' '3074';\n"); + grammarBuilder.append("KW3075 : 'KW' '3075';\n"); + grammarBuilder.append("KW3076 : 'KW' '3076';\n"); + grammarBuilder.append("KW3077 : 'KW' '3077';\n"); + grammarBuilder.append("KW3078 : 'KW' '3078';\n"); + grammarBuilder.append("KW3079 : 'KW' '3079';\n"); + grammarBuilder.append("KW3080 : 'KW' '3080';\n"); + grammarBuilder.append("KW3081 : 'KW' '3081';\n"); + grammarBuilder.append("KW3082 : 'KW' '3082';\n"); + grammarBuilder.append("KW3083 : 'KW' '3083';\n"); + grammarBuilder.append("KW3084 : 'KW' '3084';\n"); + grammarBuilder.append("KW3085 : 'KW' '3085';\n"); + grammarBuilder.append("KW3086 : 'KW' '3086';\n"); + grammarBuilder.append("KW3087 : 'KW' '3087';\n"); + grammarBuilder.append("KW3088 : 'KW' '3088';\n"); + grammarBuilder.append("KW3089 : 'KW' '3089';\n"); + grammarBuilder.append("KW3090 : 'KW' '3090';\n"); + grammarBuilder.append("KW3091 : 'KW' '3091';\n"); + grammarBuilder.append("KW3092 : 'KW' '3092';\n"); + grammarBuilder.append("KW3093 : 'KW' '3093';\n"); + grammarBuilder.append("KW3094 : 'KW' '3094';\n"); + grammarBuilder.append("KW3095 : 'KW' '3095';\n"); + grammarBuilder.append("KW3096 : 'KW' '3096';\n"); + grammarBuilder.append("KW3097 : 'KW' '3097';\n"); + grammarBuilder.append("KW3098 : 'KW' '3098';\n"); + grammarBuilder.append("KW3099 : 'KW' '3099';\n"); + grammarBuilder.append("KW3100 : 'KW' '3100';\n"); + grammarBuilder.append("KW3101 : 'KW' '3101';\n"); + grammarBuilder.append("KW3102 : 'KW' '3102';\n"); + grammarBuilder.append("KW3103 : 'KW' '3103';\n"); + grammarBuilder.append("KW3104 : 'KW' '3104';\n"); + grammarBuilder.append("KW3105 : 'KW' '3105';\n"); + grammarBuilder.append("KW3106 : 'KW' '3106';\n"); + grammarBuilder.append("KW3107 : 'KW' '3107';\n"); + grammarBuilder.append("KW3108 : 'KW' '3108';\n"); + grammarBuilder.append("KW3109 : 'KW' '3109';\n"); + grammarBuilder.append("KW3110 : 'KW' '3110';\n"); + grammarBuilder.append("KW3111 : 'KW' '3111';\n"); + grammarBuilder.append("KW3112 : 'KW' '3112';\n"); + grammarBuilder.append("KW3113 : 'KW' '3113';\n"); + grammarBuilder.append("KW3114 : 'KW' '3114';\n"); + grammarBuilder.append("KW3115 : 'KW' '3115';\n"); + grammarBuilder.append("KW3116 : 'KW' '3116';\n"); + grammarBuilder.append("KW3117 : 'KW' '3117';\n"); + grammarBuilder.append("KW3118 : 'KW' '3118';\n"); + grammarBuilder.append("KW3119 : 'KW' '3119';\n"); + grammarBuilder.append("KW3120 : 'KW' '3120';\n"); + grammarBuilder.append("KW3121 : 'KW' '3121';\n"); + grammarBuilder.append("KW3122 : 'KW' '3122';\n"); + grammarBuilder.append("KW3123 : 'KW' '3123';\n"); + grammarBuilder.append("KW3124 : 'KW' '3124';\n"); + grammarBuilder.append("KW3125 : 'KW' '3125';\n"); + grammarBuilder.append("KW3126 : 'KW' '3126';\n"); + grammarBuilder.append("KW3127 : 'KW' '3127';\n"); + grammarBuilder.append("KW3128 : 'KW' '3128';\n"); + grammarBuilder.append("KW3129 : 'KW' '3129';\n"); + grammarBuilder.append("KW3130 : 'KW' '3130';\n"); + grammarBuilder.append("KW3131 : 'KW' '3131';\n"); + grammarBuilder.append("KW3132 : 'KW' '3132';\n"); + grammarBuilder.append("KW3133 : 'KW' '3133';\n"); + grammarBuilder.append("KW3134 : 'KW' '3134';\n"); + grammarBuilder.append("KW3135 : 'KW' '3135';\n"); + grammarBuilder.append("KW3136 : 'KW' '3136';\n"); + grammarBuilder.append("KW3137 : 'KW' '3137';\n"); + grammarBuilder.append("KW3138 : 'KW' '3138';\n"); + grammarBuilder.append("KW3139 : 'KW' '3139';\n"); + grammarBuilder.append("KW3140 : 'KW' '3140';\n"); + grammarBuilder.append("KW3141 : 'KW' '3141';\n"); + grammarBuilder.append("KW3142 : 'KW' '3142';\n"); + grammarBuilder.append("KW3143 : 'KW' '3143';\n"); + grammarBuilder.append("KW3144 : 'KW' '3144';\n"); + grammarBuilder.append("KW3145 : 'KW' '3145';\n"); + grammarBuilder.append("KW3146 : 'KW' '3146';\n"); + grammarBuilder.append("KW3147 : 'KW' '3147';\n"); + grammarBuilder.append("KW3148 : 'KW' '3148';\n"); + grammarBuilder.append("KW3149 : 'KW' '3149';\n"); + grammarBuilder.append("KW3150 : 'KW' '3150';\n"); + grammarBuilder.append("KW3151 : 'KW' '3151';\n"); + grammarBuilder.append("KW3152 : 'KW' '3152';\n"); + grammarBuilder.append("KW3153 : 'KW' '3153';\n"); + grammarBuilder.append("KW3154 : 'KW' '3154';\n"); + grammarBuilder.append("KW3155 : 'KW' '3155';\n"); + grammarBuilder.append("KW3156 : 'KW' '3156';\n"); + grammarBuilder.append("KW3157 : 'KW' '3157';\n"); + grammarBuilder.append("KW3158 : 'KW' '3158';\n"); + grammarBuilder.append("KW3159 : 'KW' '3159';\n"); + grammarBuilder.append("KW3160 : 'KW' '3160';\n"); + grammarBuilder.append("KW3161 : 'KW' '3161';\n"); + grammarBuilder.append("KW3162 : 'KW' '3162';\n"); + grammarBuilder.append("KW3163 : 'KW' '3163';\n"); + grammarBuilder.append("KW3164 : 'KW' '3164';\n"); + grammarBuilder.append("KW3165 : 'KW' '3165';\n"); + grammarBuilder.append("KW3166 : 'KW' '3166';\n"); + grammarBuilder.append("KW3167 : 'KW' '3167';\n"); + grammarBuilder.append("KW3168 : 'KW' '3168';\n"); + grammarBuilder.append("KW3169 : 'KW' '3169';\n"); + grammarBuilder.append("KW3170 : 'KW' '3170';\n"); + grammarBuilder.append("KW3171 : 'KW' '3171';\n"); + grammarBuilder.append("KW3172 : 'KW' '3172';\n"); + grammarBuilder.append("KW3173 : 'KW' '3173';\n"); + grammarBuilder.append("KW3174 : 'KW' '3174';\n"); + grammarBuilder.append("KW3175 : 'KW' '3175';\n"); + grammarBuilder.append("KW3176 : 'KW' '3176';\n"); + grammarBuilder.append("KW3177 : 'KW' '3177';\n"); + grammarBuilder.append("KW3178 : 'KW' '3178';\n"); + grammarBuilder.append("KW3179 : 'KW' '3179';\n"); + grammarBuilder.append("KW3180 : 'KW' '3180';\n"); + grammarBuilder.append("KW3181 : 'KW' '3181';\n"); + grammarBuilder.append("KW3182 : 'KW' '3182';\n"); + grammarBuilder.append("KW3183 : 'KW' '3183';\n"); + grammarBuilder.append("KW3184 : 'KW' '3184';\n"); + grammarBuilder.append("KW3185 : 'KW' '3185';\n"); + grammarBuilder.append("KW3186 : 'KW' '3186';\n"); + grammarBuilder.append("KW3187 : 'KW' '3187';\n"); + grammarBuilder.append("KW3188 : 'KW' '3188';\n"); + grammarBuilder.append("KW3189 : 'KW' '3189';\n"); + grammarBuilder.append("KW3190 : 'KW' '3190';\n"); + grammarBuilder.append("KW3191 : 'KW' '3191';\n"); + grammarBuilder.append("KW3192 : 'KW' '3192';\n"); + grammarBuilder.append("KW3193 : 'KW' '3193';\n"); + grammarBuilder.append("KW3194 : 'KW' '3194';\n"); + grammarBuilder.append("KW3195 : 'KW' '3195';\n"); + grammarBuilder.append("KW3196 : 'KW' '3196';\n"); + grammarBuilder.append("KW3197 : 'KW' '3197';\n"); + grammarBuilder.append("KW3198 : 'KW' '3198';\n"); + grammarBuilder.append("KW3199 : 'KW' '3199';\n"); + grammarBuilder.append("KW3200 : 'KW' '3200';\n"); + grammarBuilder.append("KW3201 : 'KW' '3201';\n"); + grammarBuilder.append("KW3202 : 'KW' '3202';\n"); + grammarBuilder.append("KW3203 : 'KW' '3203';\n"); + grammarBuilder.append("KW3204 : 'KW' '3204';\n"); + grammarBuilder.append("KW3205 : 'KW' '3205';\n"); + grammarBuilder.append("KW3206 : 'KW' '3206';\n"); + grammarBuilder.append("KW3207 : 'KW' '3207';\n"); + grammarBuilder.append("KW3208 : 'KW' '3208';\n"); + grammarBuilder.append("KW3209 : 'KW' '3209';\n"); + grammarBuilder.append("KW3210 : 'KW' '3210';\n"); + grammarBuilder.append("KW3211 : 'KW' '3211';\n"); + grammarBuilder.append("KW3212 : 'KW' '3212';\n"); + grammarBuilder.append("KW3213 : 'KW' '3213';\n"); + grammarBuilder.append("KW3214 : 'KW' '3214';\n"); + grammarBuilder.append("KW3215 : 'KW' '3215';\n"); + grammarBuilder.append("KW3216 : 'KW' '3216';\n"); + grammarBuilder.append("KW3217 : 'KW' '3217';\n"); + grammarBuilder.append("KW3218 : 'KW' '3218';\n"); + grammarBuilder.append("KW3219 : 'KW' '3219';\n"); + grammarBuilder.append("KW3220 : 'KW' '3220';\n"); + grammarBuilder.append("KW3221 : 'KW' '3221';\n"); + grammarBuilder.append("KW3222 : 'KW' '3222';\n"); + grammarBuilder.append("KW3223 : 'KW' '3223';\n"); + grammarBuilder.append("KW3224 : 'KW' '3224';\n"); + grammarBuilder.append("KW3225 : 'KW' '3225';\n"); + grammarBuilder.append("KW3226 : 'KW' '3226';\n"); + grammarBuilder.append("KW3227 : 'KW' '3227';\n"); + grammarBuilder.append("KW3228 : 'KW' '3228';\n"); + grammarBuilder.append("KW3229 : 'KW' '3229';\n"); + grammarBuilder.append("KW3230 : 'KW' '3230';\n"); + grammarBuilder.append("KW3231 : 'KW' '3231';\n"); + grammarBuilder.append("KW3232 : 'KW' '3232';\n"); + grammarBuilder.append("KW3233 : 'KW' '3233';\n"); + grammarBuilder.append("KW3234 : 'KW' '3234';\n"); + grammarBuilder.append("KW3235 : 'KW' '3235';\n"); + grammarBuilder.append("KW3236 : 'KW' '3236';\n"); + grammarBuilder.append("KW3237 : 'KW' '3237';\n"); + grammarBuilder.append("KW3238 : 'KW' '3238';\n"); + grammarBuilder.append("KW3239 : 'KW' '3239';\n"); + grammarBuilder.append("KW3240 : 'KW' '3240';\n"); + grammarBuilder.append("KW3241 : 'KW' '3241';\n"); + grammarBuilder.append("KW3242 : 'KW' '3242';\n"); + grammarBuilder.append("KW3243 : 'KW' '3243';\n"); + grammarBuilder.append("KW3244 : 'KW' '3244';\n"); + grammarBuilder.append("KW3245 : 'KW' '3245';\n"); + grammarBuilder.append("KW3246 : 'KW' '3246';\n"); + grammarBuilder.append("KW3247 : 'KW' '3247';\n"); + grammarBuilder.append("KW3248 : 'KW' '3248';\n"); + grammarBuilder.append("KW3249 : 'KW' '3249';\n"); + grammarBuilder.append("KW3250 : 'KW' '3250';\n"); + grammarBuilder.append("KW3251 : 'KW' '3251';\n"); + grammarBuilder.append("KW3252 : 'KW' '3252';\n"); + grammarBuilder.append("KW3253 : 'KW' '3253';\n"); + grammarBuilder.append("KW3254 : 'KW' '3254';\n"); + grammarBuilder.append("KW3255 : 'KW' '3255';\n"); + grammarBuilder.append("KW3256 : 'KW' '3256';\n"); + grammarBuilder.append("KW3257 : 'KW' '3257';\n"); + grammarBuilder.append("KW3258 : 'KW' '3258';\n"); + grammarBuilder.append("KW3259 : 'KW' '3259';\n"); + grammarBuilder.append("KW3260 : 'KW' '3260';\n"); + grammarBuilder.append("KW3261 : 'KW' '3261';\n"); + grammarBuilder.append("KW3262 : 'KW' '3262';\n"); + grammarBuilder.append("KW3263 : 'KW' '3263';\n"); + grammarBuilder.append("KW3264 : 'KW' '3264';\n"); + grammarBuilder.append("KW3265 : 'KW' '3265';\n"); + grammarBuilder.append("KW3266 : 'KW' '3266';\n"); + grammarBuilder.append("KW3267 : 'KW' '3267';\n"); + grammarBuilder.append("KW3268 : 'KW' '3268';\n"); + grammarBuilder.append("KW3269 : 'KW' '3269';\n"); + grammarBuilder.append("KW3270 : 'KW' '3270';\n"); + grammarBuilder.append("KW3271 : 'KW' '3271';\n"); + grammarBuilder.append("KW3272 : 'KW' '3272';\n"); + grammarBuilder.append("KW3273 : 'KW' '3273';\n"); + grammarBuilder.append("KW3274 : 'KW' '3274';\n"); + grammarBuilder.append("KW3275 : 'KW' '3275';\n"); + grammarBuilder.append("KW3276 : 'KW' '3276';\n"); + grammarBuilder.append("KW3277 : 'KW' '3277';\n"); + grammarBuilder.append("KW3278 : 'KW' '3278';\n"); + grammarBuilder.append("KW3279 : 'KW' '3279';\n"); + grammarBuilder.append("KW3280 : 'KW' '3280';\n"); + grammarBuilder.append("KW3281 : 'KW' '3281';\n"); + grammarBuilder.append("KW3282 : 'KW' '3282';\n"); + grammarBuilder.append("KW3283 : 'KW' '3283';\n"); + grammarBuilder.append("KW3284 : 'KW' '3284';\n"); + grammarBuilder.append("KW3285 : 'KW' '3285';\n"); + grammarBuilder.append("KW3286 : 'KW' '3286';\n"); + grammarBuilder.append("KW3287 : 'KW' '3287';\n"); + grammarBuilder.append("KW3288 : 'KW' '3288';\n"); + grammarBuilder.append("KW3289 : 'KW' '3289';\n"); + grammarBuilder.append("KW3290 : 'KW' '3290';\n"); + grammarBuilder.append("KW3291 : 'KW' '3291';\n"); + grammarBuilder.append("KW3292 : 'KW' '3292';\n"); + grammarBuilder.append("KW3293 : 'KW' '3293';\n"); + grammarBuilder.append("KW3294 : 'KW' '3294';\n"); + grammarBuilder.append("KW3295 : 'KW' '3295';\n"); + grammarBuilder.append("KW3296 : 'KW' '3296';\n"); + grammarBuilder.append("KW3297 : 'KW' '3297';\n"); + grammarBuilder.append("KW3298 : 'KW' '3298';\n"); + grammarBuilder.append("KW3299 : 'KW' '3299';\n"); + grammarBuilder.append("KW3300 : 'KW' '3300';\n"); + grammarBuilder.append("KW3301 : 'KW' '3301';\n"); + grammarBuilder.append("KW3302 : 'KW' '3302';\n"); + grammarBuilder.append("KW3303 : 'KW' '3303';\n"); + grammarBuilder.append("KW3304 : 'KW' '3304';\n"); + grammarBuilder.append("KW3305 : 'KW' '3305';\n"); + grammarBuilder.append("KW3306 : 'KW' '3306';\n"); + grammarBuilder.append("KW3307 : 'KW' '3307';\n"); + grammarBuilder.append("KW3308 : 'KW' '3308';\n"); + grammarBuilder.append("KW3309 : 'KW' '3309';\n"); + grammarBuilder.append("KW3310 : 'KW' '3310';\n"); + grammarBuilder.append("KW3311 : 'KW' '3311';\n"); + grammarBuilder.append("KW3312 : 'KW' '3312';\n"); + grammarBuilder.append("KW3313 : 'KW' '3313';\n"); + grammarBuilder.append("KW3314 : 'KW' '3314';\n"); + grammarBuilder.append("KW3315 : 'KW' '3315';\n"); + grammarBuilder.append("KW3316 : 'KW' '3316';\n"); + grammarBuilder.append("KW3317 : 'KW' '3317';\n"); + grammarBuilder.append("KW3318 : 'KW' '3318';\n"); + grammarBuilder.append("KW3319 : 'KW' '3319';\n"); + grammarBuilder.append("KW3320 : 'KW' '3320';\n"); + grammarBuilder.append("KW3321 : 'KW' '3321';\n"); + grammarBuilder.append("KW3322 : 'KW' '3322';\n"); + grammarBuilder.append("KW3323 : 'KW' '3323';\n"); + grammarBuilder.append("KW3324 : 'KW' '3324';\n"); + grammarBuilder.append("KW3325 : 'KW' '3325';\n"); + grammarBuilder.append("KW3326 : 'KW' '3326';\n"); + grammarBuilder.append("KW3327 : 'KW' '3327';\n"); + grammarBuilder.append("KW3328 : 'KW' '3328';\n"); + grammarBuilder.append("KW3329 : 'KW' '3329';\n"); + grammarBuilder.append("KW3330 : 'KW' '3330';\n"); + grammarBuilder.append("KW3331 : 'KW' '3331';\n"); + grammarBuilder.append("KW3332 : 'KW' '3332';\n"); + grammarBuilder.append("KW3333 : 'KW' '3333';\n"); + grammarBuilder.append("KW3334 : 'KW' '3334';\n"); + grammarBuilder.append("KW3335 : 'KW' '3335';\n"); + grammarBuilder.append("KW3336 : 'KW' '3336';\n"); + grammarBuilder.append("KW3337 : 'KW' '3337';\n"); + grammarBuilder.append("KW3338 : 'KW' '3338';\n"); + grammarBuilder.append("KW3339 : 'KW' '3339';\n"); + grammarBuilder.append("KW3340 : 'KW' '3340';\n"); + grammarBuilder.append("KW3341 : 'KW' '3341';\n"); + grammarBuilder.append("KW3342 : 'KW' '3342';\n"); + grammarBuilder.append("KW3343 : 'KW' '3343';\n"); + grammarBuilder.append("KW3344 : 'KW' '3344';\n"); + grammarBuilder.append("KW3345 : 'KW' '3345';\n"); + grammarBuilder.append("KW3346 : 'KW' '3346';\n"); + grammarBuilder.append("KW3347 : 'KW' '3347';\n"); + grammarBuilder.append("KW3348 : 'KW' '3348';\n"); + grammarBuilder.append("KW3349 : 'KW' '3349';\n"); + grammarBuilder.append("KW3350 : 'KW' '3350';\n"); + grammarBuilder.append("KW3351 : 'KW' '3351';\n"); + grammarBuilder.append("KW3352 : 'KW' '3352';\n"); + grammarBuilder.append("KW3353 : 'KW' '3353';\n"); + grammarBuilder.append("KW3354 : 'KW' '3354';\n"); + grammarBuilder.append("KW3355 : 'KW' '3355';\n"); + grammarBuilder.append("KW3356 : 'KW' '3356';\n"); + grammarBuilder.append("KW3357 : 'KW' '3357';\n"); + grammarBuilder.append("KW3358 : 'KW' '3358';\n"); + grammarBuilder.append("KW3359 : 'KW' '3359';\n"); + grammarBuilder.append("KW3360 : 'KW' '3360';\n"); + grammarBuilder.append("KW3361 : 'KW' '3361';\n"); + grammarBuilder.append("KW3362 : 'KW' '3362';\n"); + grammarBuilder.append("KW3363 : 'KW' '3363';\n"); + grammarBuilder.append("KW3364 : 'KW' '3364';\n"); + grammarBuilder.append("KW3365 : 'KW' '3365';\n"); + grammarBuilder.append("KW3366 : 'KW' '3366';\n"); + grammarBuilder.append("KW3367 : 'KW' '3367';\n"); + grammarBuilder.append("KW3368 : 'KW' '3368';\n"); + grammarBuilder.append("KW3369 : 'KW' '3369';\n"); + grammarBuilder.append("KW3370 : 'KW' '3370';\n"); + grammarBuilder.append("KW3371 : 'KW' '3371';\n"); + grammarBuilder.append("KW3372 : 'KW' '3372';\n"); + grammarBuilder.append("KW3373 : 'KW' '3373';\n"); + grammarBuilder.append("KW3374 : 'KW' '3374';\n"); + grammarBuilder.append("KW3375 : 'KW' '3375';\n"); + grammarBuilder.append("KW3376 : 'KW' '3376';\n"); + grammarBuilder.append("KW3377 : 'KW' '3377';\n"); + grammarBuilder.append("KW3378 : 'KW' '3378';\n"); + grammarBuilder.append("KW3379 : 'KW' '3379';\n"); + grammarBuilder.append("KW3380 : 'KW' '3380';\n"); + grammarBuilder.append("KW3381 : 'KW' '3381';\n"); + grammarBuilder.append("KW3382 : 'KW' '3382';\n"); + grammarBuilder.append("KW3383 : 'KW' '3383';\n"); + grammarBuilder.append("KW3384 : 'KW' '3384';\n"); + grammarBuilder.append("KW3385 : 'KW' '3385';\n"); + grammarBuilder.append("KW3386 : 'KW' '3386';\n"); + grammarBuilder.append("KW3387 : 'KW' '3387';\n"); + grammarBuilder.append("KW3388 : 'KW' '3388';\n"); + grammarBuilder.append("KW3389 : 'KW' '3389';\n"); + grammarBuilder.append("KW3390 : 'KW' '3390';\n"); + grammarBuilder.append("KW3391 : 'KW' '3391';\n"); + grammarBuilder.append("KW3392 : 'KW' '3392';\n"); + grammarBuilder.append("KW3393 : 'KW' '3393';\n"); + grammarBuilder.append("KW3394 : 'KW' '3394';\n"); + grammarBuilder.append("KW3395 : 'KW' '3395';\n"); + grammarBuilder.append("KW3396 : 'KW' '3396';\n"); + grammarBuilder.append("KW3397 : 'KW' '3397';\n"); + grammarBuilder.append("KW3398 : 'KW' '3398';\n"); + grammarBuilder.append("KW3399 : 'KW' '3399';\n"); + grammarBuilder.append("KW3400 : 'KW' '3400';\n"); + grammarBuilder.append("KW3401 : 'KW' '3401';\n"); + grammarBuilder.append("KW3402 : 'KW' '3402';\n"); + grammarBuilder.append("KW3403 : 'KW' '3403';\n"); + grammarBuilder.append("KW3404 : 'KW' '3404';\n"); + grammarBuilder.append("KW3405 : 'KW' '3405';\n"); + grammarBuilder.append("KW3406 : 'KW' '3406';\n"); + grammarBuilder.append("KW3407 : 'KW' '3407';\n"); + grammarBuilder.append("KW3408 : 'KW' '3408';\n"); + grammarBuilder.append("KW3409 : 'KW' '3409';\n"); + grammarBuilder.append("KW3410 : 'KW' '3410';\n"); + grammarBuilder.append("KW3411 : 'KW' '3411';\n"); + grammarBuilder.append("KW3412 : 'KW' '3412';\n"); + grammarBuilder.append("KW3413 : 'KW' '3413';\n"); + grammarBuilder.append("KW3414 : 'KW' '3414';\n"); + grammarBuilder.append("KW3415 : 'KW' '3415';\n"); + grammarBuilder.append("KW3416 : 'KW' '3416';\n"); + grammarBuilder.append("KW3417 : 'KW' '3417';\n"); + grammarBuilder.append("KW3418 : 'KW' '3418';\n"); + grammarBuilder.append("KW3419 : 'KW' '3419';\n"); + grammarBuilder.append("KW3420 : 'KW' '3420';\n"); + grammarBuilder.append("KW3421 : 'KW' '3421';\n"); + grammarBuilder.append("KW3422 : 'KW' '3422';\n"); + grammarBuilder.append("KW3423 : 'KW' '3423';\n"); + grammarBuilder.append("KW3424 : 'KW' '3424';\n"); + grammarBuilder.append("KW3425 : 'KW' '3425';\n"); + grammarBuilder.append("KW3426 : 'KW' '3426';\n"); + grammarBuilder.append("KW3427 : 'KW' '3427';\n"); + grammarBuilder.append("KW3428 : 'KW' '3428';\n"); + grammarBuilder.append("KW3429 : 'KW' '3429';\n"); + grammarBuilder.append("KW3430 : 'KW' '3430';\n"); + grammarBuilder.append("KW3431 : 'KW' '3431';\n"); + grammarBuilder.append("KW3432 : 'KW' '3432';\n"); + grammarBuilder.append("KW3433 : 'KW' '3433';\n"); + grammarBuilder.append("KW3434 : 'KW' '3434';\n"); + grammarBuilder.append("KW3435 : 'KW' '3435';\n"); + grammarBuilder.append("KW3436 : 'KW' '3436';\n"); + grammarBuilder.append("KW3437 : 'KW' '3437';\n"); + grammarBuilder.append("KW3438 : 'KW' '3438';\n"); + grammarBuilder.append("KW3439 : 'KW' '3439';\n"); + grammarBuilder.append("KW3440 : 'KW' '3440';\n"); + grammarBuilder.append("KW3441 : 'KW' '3441';\n"); + grammarBuilder.append("KW3442 : 'KW' '3442';\n"); + grammarBuilder.append("KW3443 : 'KW' '3443';\n"); + grammarBuilder.append("KW3444 : 'KW' '3444';\n"); + grammarBuilder.append("KW3445 : 'KW' '3445';\n"); + grammarBuilder.append("KW3446 : 'KW' '3446';\n"); + grammarBuilder.append("KW3447 : 'KW' '3447';\n"); + grammarBuilder.append("KW3448 : 'KW' '3448';\n"); + grammarBuilder.append("KW3449 : 'KW' '3449';\n"); + grammarBuilder.append("KW3450 : 'KW' '3450';\n"); + grammarBuilder.append("KW3451 : 'KW' '3451';\n"); + grammarBuilder.append("KW3452 : 'KW' '3452';\n"); + grammarBuilder.append("KW3453 : 'KW' '3453';\n"); + grammarBuilder.append("KW3454 : 'KW' '3454';\n"); + grammarBuilder.append("KW3455 : 'KW' '3455';\n"); + grammarBuilder.append("KW3456 : 'KW' '3456';\n"); + grammarBuilder.append("KW3457 : 'KW' '3457';\n"); + grammarBuilder.append("KW3458 : 'KW' '3458';\n"); + grammarBuilder.append("KW3459 : 'KW' '3459';\n"); + grammarBuilder.append("KW3460 : 'KW' '3460';\n"); + grammarBuilder.append("KW3461 : 'KW' '3461';\n"); + grammarBuilder.append("KW3462 : 'KW' '3462';\n"); + grammarBuilder.append("KW3463 : 'KW' '3463';\n"); + grammarBuilder.append("KW3464 : 'KW' '3464';\n"); + grammarBuilder.append("KW3465 : 'KW' '3465';\n"); + grammarBuilder.append("KW3466 : 'KW' '3466';\n"); + grammarBuilder.append("KW3467 : 'KW' '3467';\n"); + grammarBuilder.append("KW3468 : 'KW' '3468';\n"); + grammarBuilder.append("KW3469 : 'KW' '3469';\n"); + grammarBuilder.append("KW3470 : 'KW' '3470';\n"); + grammarBuilder.append("KW3471 : 'KW' '3471';\n"); + grammarBuilder.append("KW3472 : 'KW' '3472';\n"); + grammarBuilder.append("KW3473 : 'KW' '3473';\n"); + grammarBuilder.append("KW3474 : 'KW' '3474';\n"); + grammarBuilder.append("KW3475 : 'KW' '3475';\n"); + grammarBuilder.append("KW3476 : 'KW' '3476';\n"); + grammarBuilder.append("KW3477 : 'KW' '3477';\n"); + grammarBuilder.append("KW3478 : 'KW' '3478';\n"); + grammarBuilder.append("KW3479 : 'KW' '3479';\n"); + grammarBuilder.append("KW3480 : 'KW' '3480';\n"); + grammarBuilder.append("KW3481 : 'KW' '3481';\n"); + grammarBuilder.append("KW3482 : 'KW' '3482';\n"); + grammarBuilder.append("KW3483 : 'KW' '3483';\n"); + grammarBuilder.append("KW3484 : 'KW' '3484';\n"); + grammarBuilder.append("KW3485 : 'KW' '3485';\n"); + grammarBuilder.append("KW3486 : 'KW' '3486';\n"); + grammarBuilder.append("KW3487 : 'KW' '3487';\n"); + grammarBuilder.append("KW3488 : 'KW' '3488';\n"); + grammarBuilder.append("KW3489 : 'KW' '3489';\n"); + grammarBuilder.append("KW3490 : 'KW' '3490';\n"); + grammarBuilder.append("KW3491 : 'KW' '3491';\n"); + grammarBuilder.append("KW3492 : 'KW' '3492';\n"); + grammarBuilder.append("KW3493 : 'KW' '3493';\n"); + grammarBuilder.append("KW3494 : 'KW' '3494';\n"); + grammarBuilder.append("KW3495 : 'KW' '3495';\n"); + grammarBuilder.append("KW3496 : 'KW' '3496';\n"); + grammarBuilder.append("KW3497 : 'KW' '3497';\n"); + grammarBuilder.append("KW3498 : 'KW' '3498';\n"); + grammarBuilder.append("KW3499 : 'KW' '3499';\n"); + grammarBuilder.append("KW3500 : 'KW' '3500';\n"); + grammarBuilder.append("KW3501 : 'KW' '3501';\n"); + grammarBuilder.append("KW3502 : 'KW' '3502';\n"); + grammarBuilder.append("KW3503 : 'KW' '3503';\n"); + grammarBuilder.append("KW3504 : 'KW' '3504';\n"); + grammarBuilder.append("KW3505 : 'KW' '3505';\n"); + grammarBuilder.append("KW3506 : 'KW' '3506';\n"); + grammarBuilder.append("KW3507 : 'KW' '3507';\n"); + grammarBuilder.append("KW3508 : 'KW' '3508';\n"); + grammarBuilder.append("KW3509 : 'KW' '3509';\n"); + grammarBuilder.append("KW3510 : 'KW' '3510';\n"); + grammarBuilder.append("KW3511 : 'KW' '3511';\n"); + grammarBuilder.append("KW3512 : 'KW' '3512';\n"); + grammarBuilder.append("KW3513 : 'KW' '3513';\n"); + grammarBuilder.append("KW3514 : 'KW' '3514';\n"); + grammarBuilder.append("KW3515 : 'KW' '3515';\n"); + grammarBuilder.append("KW3516 : 'KW' '3516';\n"); + grammarBuilder.append("KW3517 : 'KW' '3517';\n"); + grammarBuilder.append("KW3518 : 'KW' '3518';\n"); + grammarBuilder.append("KW3519 : 'KW' '3519';\n"); + grammarBuilder.append("KW3520 : 'KW' '3520';\n"); + grammarBuilder.append("KW3521 : 'KW' '3521';\n"); + grammarBuilder.append("KW3522 : 'KW' '3522';\n"); + grammarBuilder.append("KW3523 : 'KW' '3523';\n"); + grammarBuilder.append("KW3524 : 'KW' '3524';\n"); + grammarBuilder.append("KW3525 : 'KW' '3525';\n"); + grammarBuilder.append("KW3526 : 'KW' '3526';\n"); + grammarBuilder.append("KW3527 : 'KW' '3527';\n"); + grammarBuilder.append("KW3528 : 'KW' '3528';\n"); + grammarBuilder.append("KW3529 : 'KW' '3529';\n"); + grammarBuilder.append("KW3530 : 'KW' '3530';\n"); + grammarBuilder.append("KW3531 : 'KW' '3531';\n"); + grammarBuilder.append("KW3532 : 'KW' '3532';\n"); + grammarBuilder.append("KW3533 : 'KW' '3533';\n"); + grammarBuilder.append("KW3534 : 'KW' '3534';\n"); + grammarBuilder.append("KW3535 : 'KW' '3535';\n"); + grammarBuilder.append("KW3536 : 'KW' '3536';\n"); + grammarBuilder.append("KW3537 : 'KW' '3537';\n"); + grammarBuilder.append("KW3538 : 'KW' '3538';\n"); + grammarBuilder.append("KW3539 : 'KW' '3539';\n"); + grammarBuilder.append("KW3540 : 'KW' '3540';\n"); + grammarBuilder.append("KW3541 : 'KW' '3541';\n"); + grammarBuilder.append("KW3542 : 'KW' '3542';\n"); + grammarBuilder.append("KW3543 : 'KW' '3543';\n"); + grammarBuilder.append("KW3544 : 'KW' '3544';\n"); + grammarBuilder.append("KW3545 : 'KW' '3545';\n"); + grammarBuilder.append("KW3546 : 'KW' '3546';\n"); + grammarBuilder.append("KW3547 : 'KW' '3547';\n"); + grammarBuilder.append("KW3548 : 'KW' '3548';\n"); + grammarBuilder.append("KW3549 : 'KW' '3549';\n"); + grammarBuilder.append("KW3550 : 'KW' '3550';\n"); + grammarBuilder.append("KW3551 : 'KW' '3551';\n"); + grammarBuilder.append("KW3552 : 'KW' '3552';\n"); + grammarBuilder.append("KW3553 : 'KW' '3553';\n"); + grammarBuilder.append("KW3554 : 'KW' '3554';\n"); + grammarBuilder.append("KW3555 : 'KW' '3555';\n"); + grammarBuilder.append("KW3556 : 'KW' '3556';\n"); + grammarBuilder.append("KW3557 : 'KW' '3557';\n"); + grammarBuilder.append("KW3558 : 'KW' '3558';\n"); + grammarBuilder.append("KW3559 : 'KW' '3559';\n"); + grammarBuilder.append("KW3560 : 'KW' '3560';\n"); + grammarBuilder.append("KW3561 : 'KW' '3561';\n"); + grammarBuilder.append("KW3562 : 'KW' '3562';\n"); + grammarBuilder.append("KW3563 : 'KW' '3563';\n"); + grammarBuilder.append("KW3564 : 'KW' '3564';\n"); + grammarBuilder.append("KW3565 : 'KW' '3565';\n"); + grammarBuilder.append("KW3566 : 'KW' '3566';\n"); + grammarBuilder.append("KW3567 : 'KW' '3567';\n"); + grammarBuilder.append("KW3568 : 'KW' '3568';\n"); + grammarBuilder.append("KW3569 : 'KW' '3569';\n"); + grammarBuilder.append("KW3570 : 'KW' '3570';\n"); + grammarBuilder.append("KW3571 : 'KW' '3571';\n"); + grammarBuilder.append("KW3572 : 'KW' '3572';\n"); + grammarBuilder.append("KW3573 : 'KW' '3573';\n"); + grammarBuilder.append("KW3574 : 'KW' '3574';\n"); + grammarBuilder.append("KW3575 : 'KW' '3575';\n"); + grammarBuilder.append("KW3576 : 'KW' '3576';\n"); + grammarBuilder.append("KW3577 : 'KW' '3577';\n"); + grammarBuilder.append("KW3578 : 'KW' '3578';\n"); + grammarBuilder.append("KW3579 : 'KW' '3579';\n"); + grammarBuilder.append("KW3580 : 'KW' '3580';\n"); + grammarBuilder.append("KW3581 : 'KW' '3581';\n"); + grammarBuilder.append("KW3582 : 'KW' '3582';\n"); + grammarBuilder.append("KW3583 : 'KW' '3583';\n"); + grammarBuilder.append("KW3584 : 'KW' '3584';\n"); + grammarBuilder.append("KW3585 : 'KW' '3585';\n"); + grammarBuilder.append("KW3586 : 'KW' '3586';\n"); + grammarBuilder.append("KW3587 : 'KW' '3587';\n"); + grammarBuilder.append("KW3588 : 'KW' '3588';\n"); + grammarBuilder.append("KW3589 : 'KW' '3589';\n"); + grammarBuilder.append("KW3590 : 'KW' '3590';\n"); + grammarBuilder.append("KW3591 : 'KW' '3591';\n"); + grammarBuilder.append("KW3592 : 'KW' '3592';\n"); + grammarBuilder.append("KW3593 : 'KW' '3593';\n"); + grammarBuilder.append("KW3594 : 'KW' '3594';\n"); + grammarBuilder.append("KW3595 : 'KW' '3595';\n"); + grammarBuilder.append("KW3596 : 'KW' '3596';\n"); + grammarBuilder.append("KW3597 : 'KW' '3597';\n"); + grammarBuilder.append("KW3598 : 'KW' '3598';\n"); + grammarBuilder.append("KW3599 : 'KW' '3599';\n"); + grammarBuilder.append("KW3600 : 'KW' '3600';\n"); + grammarBuilder.append("KW3601 : 'KW' '3601';\n"); + grammarBuilder.append("KW3602 : 'KW' '3602';\n"); + grammarBuilder.append("KW3603 : 'KW' '3603';\n"); + grammarBuilder.append("KW3604 : 'KW' '3604';\n"); + grammarBuilder.append("KW3605 : 'KW' '3605';\n"); + grammarBuilder.append("KW3606 : 'KW' '3606';\n"); + grammarBuilder.append("KW3607 : 'KW' '3607';\n"); + grammarBuilder.append("KW3608 : 'KW' '3608';\n"); + grammarBuilder.append("KW3609 : 'KW' '3609';\n"); + grammarBuilder.append("KW3610 : 'KW' '3610';\n"); + grammarBuilder.append("KW3611 : 'KW' '3611';\n"); + grammarBuilder.append("KW3612 : 'KW' '3612';\n"); + grammarBuilder.append("KW3613 : 'KW' '3613';\n"); + grammarBuilder.append("KW3614 : 'KW' '3614';\n"); + grammarBuilder.append("KW3615 : 'KW' '3615';\n"); + grammarBuilder.append("KW3616 : 'KW' '3616';\n"); + grammarBuilder.append("KW3617 : 'KW' '3617';\n"); + grammarBuilder.append("KW3618 : 'KW' '3618';\n"); + grammarBuilder.append("KW3619 : 'KW' '3619';\n"); + grammarBuilder.append("KW3620 : 'KW' '3620';\n"); + grammarBuilder.append("KW3621 : 'KW' '3621';\n"); + grammarBuilder.append("KW3622 : 'KW' '3622';\n"); + grammarBuilder.append("KW3623 : 'KW' '3623';\n"); + grammarBuilder.append("KW3624 : 'KW' '3624';\n"); + grammarBuilder.append("KW3625 : 'KW' '3625';\n"); + grammarBuilder.append("KW3626 : 'KW' '3626';\n"); + grammarBuilder.append("KW3627 : 'KW' '3627';\n"); + grammarBuilder.append("KW3628 : 'KW' '3628';\n"); + grammarBuilder.append("KW3629 : 'KW' '3629';\n"); + grammarBuilder.append("KW3630 : 'KW' '3630';\n"); + grammarBuilder.append("KW3631 : 'KW' '3631';\n"); + grammarBuilder.append("KW3632 : 'KW' '3632';\n"); + grammarBuilder.append("KW3633 : 'KW' '3633';\n"); + grammarBuilder.append("KW3634 : 'KW' '3634';\n"); + grammarBuilder.append("KW3635 : 'KW' '3635';\n"); + grammarBuilder.append("KW3636 : 'KW' '3636';\n"); + grammarBuilder.append("KW3637 : 'KW' '3637';\n"); + grammarBuilder.append("KW3638 : 'KW' '3638';\n"); + grammarBuilder.append("KW3639 : 'KW' '3639';\n"); + grammarBuilder.append("KW3640 : 'KW' '3640';\n"); + grammarBuilder.append("KW3641 : 'KW' '3641';\n"); + grammarBuilder.append("KW3642 : 'KW' '3642';\n"); + grammarBuilder.append("KW3643 : 'KW' '3643';\n"); + grammarBuilder.append("KW3644 : 'KW' '3644';\n"); + grammarBuilder.append("KW3645 : 'KW' '3645';\n"); + grammarBuilder.append("KW3646 : 'KW' '3646';\n"); + grammarBuilder.append("KW3647 : 'KW' '3647';\n"); + grammarBuilder.append("KW3648 : 'KW' '3648';\n"); + grammarBuilder.append("KW3649 : 'KW' '3649';\n"); + grammarBuilder.append("KW3650 : 'KW' '3650';\n"); + grammarBuilder.append("KW3651 : 'KW' '3651';\n"); + grammarBuilder.append("KW3652 : 'KW' '3652';\n"); + grammarBuilder.append("KW3653 : 'KW' '3653';\n"); + grammarBuilder.append("KW3654 : 'KW' '3654';\n"); + grammarBuilder.append("KW3655 : 'KW' '3655';\n"); + grammarBuilder.append("KW3656 : 'KW' '3656';\n"); + grammarBuilder.append("KW3657 : 'KW' '3657';\n"); + grammarBuilder.append("KW3658 : 'KW' '3658';\n"); + grammarBuilder.append("KW3659 : 'KW' '3659';\n"); + grammarBuilder.append("KW3660 : 'KW' '3660';\n"); + grammarBuilder.append("KW3661 : 'KW' '3661';\n"); + grammarBuilder.append("KW3662 : 'KW' '3662';\n"); + grammarBuilder.append("KW3663 : 'KW' '3663';\n"); + grammarBuilder.append("KW3664 : 'KW' '3664';\n"); + grammarBuilder.append("KW3665 : 'KW' '3665';\n"); + grammarBuilder.append("KW3666 : 'KW' '3666';\n"); + grammarBuilder.append("KW3667 : 'KW' '3667';\n"); + grammarBuilder.append("KW3668 : 'KW' '3668';\n"); + grammarBuilder.append("KW3669 : 'KW' '3669';\n"); + grammarBuilder.append("KW3670 : 'KW' '3670';\n"); + grammarBuilder.append("KW3671 : 'KW' '3671';\n"); + grammarBuilder.append("KW3672 : 'KW' '3672';\n"); + grammarBuilder.append("KW3673 : 'KW' '3673';\n"); + grammarBuilder.append("KW3674 : 'KW' '3674';\n"); + grammarBuilder.append("KW3675 : 'KW' '3675';\n"); + grammarBuilder.append("KW3676 : 'KW' '3676';\n"); + grammarBuilder.append("KW3677 : 'KW' '3677';\n"); + grammarBuilder.append("KW3678 : 'KW' '3678';\n"); + grammarBuilder.append("KW3679 : 'KW' '3679';\n"); + grammarBuilder.append("KW3680 : 'KW' '3680';\n"); + grammarBuilder.append("KW3681 : 'KW' '3681';\n"); + grammarBuilder.append("KW3682 : 'KW' '3682';\n"); + grammarBuilder.append("KW3683 : 'KW' '3683';\n"); + grammarBuilder.append("KW3684 : 'KW' '3684';\n"); + grammarBuilder.append("KW3685 : 'KW' '3685';\n"); + grammarBuilder.append("KW3686 : 'KW' '3686';\n"); + grammarBuilder.append("KW3687 : 'KW' '3687';\n"); + grammarBuilder.append("KW3688 : 'KW' '3688';\n"); + grammarBuilder.append("KW3689 : 'KW' '3689';\n"); + grammarBuilder.append("KW3690 : 'KW' '3690';\n"); + grammarBuilder.append("KW3691 : 'KW' '3691';\n"); + grammarBuilder.append("KW3692 : 'KW' '3692';\n"); + grammarBuilder.append("KW3693 : 'KW' '3693';\n"); + grammarBuilder.append("KW3694 : 'KW' '3694';\n"); + grammarBuilder.append("KW3695 : 'KW' '3695';\n"); + grammarBuilder.append("KW3696 : 'KW' '3696';\n"); + grammarBuilder.append("KW3697 : 'KW' '3697';\n"); + grammarBuilder.append("KW3698 : 'KW' '3698';\n"); + grammarBuilder.append("KW3699 : 'KW' '3699';\n"); + grammarBuilder.append("KW3700 : 'KW' '3700';\n"); + grammarBuilder.append("KW3701 : 'KW' '3701';\n"); + grammarBuilder.append("KW3702 : 'KW' '3702';\n"); + grammarBuilder.append("KW3703 : 'KW' '3703';\n"); + grammarBuilder.append("KW3704 : 'KW' '3704';\n"); + grammarBuilder.append("KW3705 : 'KW' '3705';\n"); + grammarBuilder.append("KW3706 : 'KW' '3706';\n"); + grammarBuilder.append("KW3707 : 'KW' '3707';\n"); + grammarBuilder.append("KW3708 : 'KW' '3708';\n"); + grammarBuilder.append("KW3709 : 'KW' '3709';\n"); + grammarBuilder.append("KW3710 : 'KW' '3710';\n"); + grammarBuilder.append("KW3711 : 'KW' '3711';\n"); + grammarBuilder.append("KW3712 : 'KW' '3712';\n"); + grammarBuilder.append("KW3713 : 'KW' '3713';\n"); + grammarBuilder.append("KW3714 : 'KW' '3714';\n"); + grammarBuilder.append("KW3715 : 'KW' '3715';\n"); + grammarBuilder.append("KW3716 : 'KW' '3716';\n"); + grammarBuilder.append("KW3717 : 'KW' '3717';\n"); + grammarBuilder.append("KW3718 : 'KW' '3718';\n"); + grammarBuilder.append("KW3719 : 'KW' '3719';\n"); + grammarBuilder.append("KW3720 : 'KW' '3720';\n"); + grammarBuilder.append("KW3721 : 'KW' '3721';\n"); + grammarBuilder.append("KW3722 : 'KW' '3722';\n"); + grammarBuilder.append("KW3723 : 'KW' '3723';\n"); + grammarBuilder.append("KW3724 : 'KW' '3724';\n"); + grammarBuilder.append("KW3725 : 'KW' '3725';\n"); + grammarBuilder.append("KW3726 : 'KW' '3726';\n"); + grammarBuilder.append("KW3727 : 'KW' '3727';\n"); + grammarBuilder.append("KW3728 : 'KW' '3728';\n"); + grammarBuilder.append("KW3729 : 'KW' '3729';\n"); + grammarBuilder.append("KW3730 : 'KW' '3730';\n"); + grammarBuilder.append("KW3731 : 'KW' '3731';\n"); + grammarBuilder.append("KW3732 : 'KW' '3732';\n"); + grammarBuilder.append("KW3733 : 'KW' '3733';\n"); + grammarBuilder.append("KW3734 : 'KW' '3734';\n"); + grammarBuilder.append("KW3735 : 'KW' '3735';\n"); + grammarBuilder.append("KW3736 : 'KW' '3736';\n"); + grammarBuilder.append("KW3737 : 'KW' '3737';\n"); + grammarBuilder.append("KW3738 : 'KW' '3738';\n"); + grammarBuilder.append("KW3739 : 'KW' '3739';\n"); + grammarBuilder.append("KW3740 : 'KW' '3740';\n"); + grammarBuilder.append("KW3741 : 'KW' '3741';\n"); + grammarBuilder.append("KW3742 : 'KW' '3742';\n"); + grammarBuilder.append("KW3743 : 'KW' '3743';\n"); + grammarBuilder.append("KW3744 : 'KW' '3744';\n"); + grammarBuilder.append("KW3745 : 'KW' '3745';\n"); + grammarBuilder.append("KW3746 : 'KW' '3746';\n"); + grammarBuilder.append("KW3747 : 'KW' '3747';\n"); + grammarBuilder.append("KW3748 : 'KW' '3748';\n"); + grammarBuilder.append("KW3749 : 'KW' '3749';\n"); + grammarBuilder.append("KW3750 : 'KW' '3750';\n"); + grammarBuilder.append("KW3751 : 'KW' '3751';\n"); + grammarBuilder.append("KW3752 : 'KW' '3752';\n"); + grammarBuilder.append("KW3753 : 'KW' '3753';\n"); + grammarBuilder.append("KW3754 : 'KW' '3754';\n"); + grammarBuilder.append("KW3755 : 'KW' '3755';\n"); + grammarBuilder.append("KW3756 : 'KW' '3756';\n"); + grammarBuilder.append("KW3757 : 'KW' '3757';\n"); + grammarBuilder.append("KW3758 : 'KW' '3758';\n"); + grammarBuilder.append("KW3759 : 'KW' '3759';\n"); + grammarBuilder.append("KW3760 : 'KW' '3760';\n"); + grammarBuilder.append("KW3761 : 'KW' '3761';\n"); + grammarBuilder.append("KW3762 : 'KW' '3762';\n"); + grammarBuilder.append("KW3763 : 'KW' '3763';\n"); + grammarBuilder.append("KW3764 : 'KW' '3764';\n"); + grammarBuilder.append("KW3765 : 'KW' '3765';\n"); + grammarBuilder.append("KW3766 : 'KW' '3766';\n"); + grammarBuilder.append("KW3767 : 'KW' '3767';\n"); + grammarBuilder.append("KW3768 : 'KW' '3768';\n"); + grammarBuilder.append("KW3769 : 'KW' '3769';\n"); + grammarBuilder.append("KW3770 : 'KW' '3770';\n"); + grammarBuilder.append("KW3771 : 'KW' '3771';\n"); + grammarBuilder.append("KW3772 : 'KW' '3772';\n"); + grammarBuilder.append("KW3773 : 'KW' '3773';\n"); + grammarBuilder.append("KW3774 : 'KW' '3774';\n"); + grammarBuilder.append("KW3775 : 'KW' '3775';\n"); + grammarBuilder.append("KW3776 : 'KW' '3776';\n"); + grammarBuilder.append("KW3777 : 'KW' '3777';\n"); + grammarBuilder.append("KW3778 : 'KW' '3778';\n"); + grammarBuilder.append("KW3779 : 'KW' '3779';\n"); + grammarBuilder.append("KW3780 : 'KW' '3780';\n"); + grammarBuilder.append("KW3781 : 'KW' '3781';\n"); + grammarBuilder.append("KW3782 : 'KW' '3782';\n"); + grammarBuilder.append("KW3783 : 'KW' '3783';\n"); + grammarBuilder.append("KW3784 : 'KW' '3784';\n"); + grammarBuilder.append("KW3785 : 'KW' '3785';\n"); + grammarBuilder.append("KW3786 : 'KW' '3786';\n"); + grammarBuilder.append("KW3787 : 'KW' '3787';\n"); + grammarBuilder.append("KW3788 : 'KW' '3788';\n"); + grammarBuilder.append("KW3789 : 'KW' '3789';\n"); + grammarBuilder.append("KW3790 : 'KW' '3790';\n"); + grammarBuilder.append("KW3791 : 'KW' '3791';\n"); + grammarBuilder.append("KW3792 : 'KW' '3792';\n"); + grammarBuilder.append("KW3793 : 'KW' '3793';\n"); + grammarBuilder.append("KW3794 : 'KW' '3794';\n"); + grammarBuilder.append("KW3795 : 'KW' '3795';\n"); + grammarBuilder.append("KW3796 : 'KW' '3796';\n"); + grammarBuilder.append("KW3797 : 'KW' '3797';\n"); + grammarBuilder.append("KW3798 : 'KW' '3798';\n"); + grammarBuilder.append("KW3799 : 'KW' '3799';\n"); + grammarBuilder.append("KW3800 : 'KW' '3800';\n"); + grammarBuilder.append("KW3801 : 'KW' '3801';\n"); + grammarBuilder.append("KW3802 : 'KW' '3802';\n"); + grammarBuilder.append("KW3803 : 'KW' '3803';\n"); + grammarBuilder.append("KW3804 : 'KW' '3804';\n"); + grammarBuilder.append("KW3805 : 'KW' '3805';\n"); + grammarBuilder.append("KW3806 : 'KW' '3806';\n"); + grammarBuilder.append("KW3807 : 'KW' '3807';\n"); + grammarBuilder.append("KW3808 : 'KW' '3808';\n"); + grammarBuilder.append("KW3809 : 'KW' '3809';\n"); + grammarBuilder.append("KW3810 : 'KW' '3810';\n"); + grammarBuilder.append("KW3811 : 'KW' '3811';\n"); + grammarBuilder.append("KW3812 : 'KW' '3812';\n"); + grammarBuilder.append("KW3813 : 'KW' '3813';\n"); + grammarBuilder.append("KW3814 : 'KW' '3814';\n"); + grammarBuilder.append("KW3815 : 'KW' '3815';\n"); + grammarBuilder.append("KW3816 : 'KW' '3816';\n"); + grammarBuilder.append("KW3817 : 'KW' '3817';\n"); + grammarBuilder.append("KW3818 : 'KW' '3818';\n"); + grammarBuilder.append("KW3819 : 'KW' '3819';\n"); + grammarBuilder.append("KW3820 : 'KW' '3820';\n"); + grammarBuilder.append("KW3821 : 'KW' '3821';\n"); + grammarBuilder.append("KW3822 : 'KW' '3822';\n"); + grammarBuilder.append("KW3823 : 'KW' '3823';\n"); + grammarBuilder.append("KW3824 : 'KW' '3824';\n"); + grammarBuilder.append("KW3825 : 'KW' '3825';\n"); + grammarBuilder.append("KW3826 : 'KW' '3826';\n"); + grammarBuilder.append("KW3827 : 'KW' '3827';\n"); + grammarBuilder.append("KW3828 : 'KW' '3828';\n"); + grammarBuilder.append("KW3829 : 'KW' '3829';\n"); + grammarBuilder.append("KW3830 : 'KW' '3830';\n"); + grammarBuilder.append("KW3831 : 'KW' '3831';\n"); + grammarBuilder.append("KW3832 : 'KW' '3832';\n"); + grammarBuilder.append("KW3833 : 'KW' '3833';\n"); + grammarBuilder.append("KW3834 : 'KW' '3834';\n"); + grammarBuilder.append("KW3835 : 'KW' '3835';\n"); + grammarBuilder.append("KW3836 : 'KW' '3836';\n"); + grammarBuilder.append("KW3837 : 'KW' '3837';\n"); + grammarBuilder.append("KW3838 : 'KW' '3838';\n"); + grammarBuilder.append("KW3839 : 'KW' '3839';\n"); + grammarBuilder.append("KW3840 : 'KW' '3840';\n"); + grammarBuilder.append("KW3841 : 'KW' '3841';\n"); + grammarBuilder.append("KW3842 : 'KW' '3842';\n"); + grammarBuilder.append("KW3843 : 'KW' '3843';\n"); + grammarBuilder.append("KW3844 : 'KW' '3844';\n"); + grammarBuilder.append("KW3845 : 'KW' '3845';\n"); + grammarBuilder.append("KW3846 : 'KW' '3846';\n"); + grammarBuilder.append("KW3847 : 'KW' '3847';\n"); + grammarBuilder.append("KW3848 : 'KW' '3848';\n"); + grammarBuilder.append("KW3849 : 'KW' '3849';\n"); + grammarBuilder.append("KW3850 : 'KW' '3850';\n"); + grammarBuilder.append("KW3851 : 'KW' '3851';\n"); + grammarBuilder.append("KW3852 : 'KW' '3852';\n"); + grammarBuilder.append("KW3853 : 'KW' '3853';\n"); + grammarBuilder.append("KW3854 : 'KW' '3854';\n"); + grammarBuilder.append("KW3855 : 'KW' '3855';\n"); + grammarBuilder.append("KW3856 : 'KW' '3856';\n"); + grammarBuilder.append("KW3857 : 'KW' '3857';\n"); + grammarBuilder.append("KW3858 : 'KW' '3858';\n"); + grammarBuilder.append("KW3859 : 'KW' '3859';\n"); + grammarBuilder.append("KW3860 : 'KW' '3860';\n"); + grammarBuilder.append("KW3861 : 'KW' '3861';\n"); + grammarBuilder.append("KW3862 : 'KW' '3862';\n"); + grammarBuilder.append("KW3863 : 'KW' '3863';\n"); + grammarBuilder.append("KW3864 : 'KW' '3864';\n"); + grammarBuilder.append("KW3865 : 'KW' '3865';\n"); + grammarBuilder.append("KW3866 : 'KW' '3866';\n"); + grammarBuilder.append("KW3867 : 'KW' '3867';\n"); + grammarBuilder.append("KW3868 : 'KW' '3868';\n"); + grammarBuilder.append("KW3869 : 'KW' '3869';\n"); + grammarBuilder.append("KW3870 : 'KW' '3870';\n"); + grammarBuilder.append("KW3871 : 'KW' '3871';\n"); + grammarBuilder.append("KW3872 : 'KW' '3872';\n"); + grammarBuilder.append("KW3873 : 'KW' '3873';\n"); + grammarBuilder.append("KW3874 : 'KW' '3874';\n"); + grammarBuilder.append("KW3875 : 'KW' '3875';\n"); + grammarBuilder.append("KW3876 : 'KW' '3876';\n"); + grammarBuilder.append("KW3877 : 'KW' '3877';\n"); + grammarBuilder.append("KW3878 : 'KW' '3878';\n"); + grammarBuilder.append("KW3879 : 'KW' '3879';\n"); + grammarBuilder.append("KW3880 : 'KW' '3880';\n"); + grammarBuilder.append("KW3881 : 'KW' '3881';\n"); + grammarBuilder.append("KW3882 : 'KW' '3882';\n"); + grammarBuilder.append("KW3883 : 'KW' '3883';\n"); + grammarBuilder.append("KW3884 : 'KW' '3884';\n"); + grammarBuilder.append("KW3885 : 'KW' '3885';\n"); + grammarBuilder.append("KW3886 : 'KW' '3886';\n"); + grammarBuilder.append("KW3887 : 'KW' '3887';\n"); + grammarBuilder.append("KW3888 : 'KW' '3888';\n"); + grammarBuilder.append("KW3889 : 'KW' '3889';\n"); + grammarBuilder.append("KW3890 : 'KW' '3890';\n"); + grammarBuilder.append("KW3891 : 'KW' '3891';\n"); + grammarBuilder.append("KW3892 : 'KW' '3892';\n"); + grammarBuilder.append("KW3893 : 'KW' '3893';\n"); + grammarBuilder.append("KW3894 : 'KW' '3894';\n"); + grammarBuilder.append("KW3895 : 'KW' '3895';\n"); + grammarBuilder.append("KW3896 : 'KW' '3896';\n"); + grammarBuilder.append("KW3897 : 'KW' '3897';\n"); + grammarBuilder.append("KW3898 : 'KW' '3898';\n"); + grammarBuilder.append("KW3899 : 'KW' '3899';\n"); + grammarBuilder.append("KW3900 : 'KW' '3900';\n"); + grammarBuilder.append("KW3901 : 'KW' '3901';\n"); + grammarBuilder.append("KW3902 : 'KW' '3902';\n"); + grammarBuilder.append("KW3903 : 'KW' '3903';\n"); + grammarBuilder.append("KW3904 : 'KW' '3904';\n"); + grammarBuilder.append("KW3905 : 'KW' '3905';\n"); + grammarBuilder.append("KW3906 : 'KW' '3906';\n"); + grammarBuilder.append("KW3907 : 'KW' '3907';\n"); + grammarBuilder.append("KW3908 : 'KW' '3908';\n"); + grammarBuilder.append("KW3909 : 'KW' '3909';\n"); + grammarBuilder.append("KW3910 : 'KW' '3910';\n"); + grammarBuilder.append("KW3911 : 'KW' '3911';\n"); + grammarBuilder.append("KW3912 : 'KW' '3912';\n"); + grammarBuilder.append("KW3913 : 'KW' '3913';\n"); + grammarBuilder.append("KW3914 : 'KW' '3914';\n"); + grammarBuilder.append("KW3915 : 'KW' '3915';\n"); + grammarBuilder.append("KW3916 : 'KW' '3916';\n"); + grammarBuilder.append("KW3917 : 'KW' '3917';\n"); + grammarBuilder.append("KW3918 : 'KW' '3918';\n"); + grammarBuilder.append("KW3919 : 'KW' '3919';\n"); + grammarBuilder.append("KW3920 : 'KW' '3920';\n"); + grammarBuilder.append("KW3921 : 'KW' '3921';\n"); + grammarBuilder.append("KW3922 : 'KW' '3922';\n"); + grammarBuilder.append("KW3923 : 'KW' '3923';\n"); + grammarBuilder.append("KW3924 : 'KW' '3924';\n"); + grammarBuilder.append("KW3925 : 'KW' '3925';\n"); + grammarBuilder.append("KW3926 : 'KW' '3926';\n"); + grammarBuilder.append("KW3927 : 'KW' '3927';\n"); + grammarBuilder.append("KW3928 : 'KW' '3928';\n"); + grammarBuilder.append("KW3929 : 'KW' '3929';\n"); + grammarBuilder.append("KW3930 : 'KW' '3930';\n"); + grammarBuilder.append("KW3931 : 'KW' '3931';\n"); + grammarBuilder.append("KW3932 : 'KW' '3932';\n"); + grammarBuilder.append("KW3933 : 'KW' '3933';\n"); + grammarBuilder.append("KW3934 : 'KW' '3934';\n"); + grammarBuilder.append("KW3935 : 'KW' '3935';\n"); + grammarBuilder.append("KW3936 : 'KW' '3936';\n"); + grammarBuilder.append("KW3937 : 'KW' '3937';\n"); + grammarBuilder.append("KW3938 : 'KW' '3938';\n"); + grammarBuilder.append("KW3939 : 'KW' '3939';\n"); + grammarBuilder.append("KW3940 : 'KW' '3940';\n"); + grammarBuilder.append("KW3941 : 'KW' '3941';\n"); + grammarBuilder.append("KW3942 : 'KW' '3942';\n"); + grammarBuilder.append("KW3943 : 'KW' '3943';\n"); + grammarBuilder.append("KW3944 : 'KW' '3944';\n"); + grammarBuilder.append("KW3945 : 'KW' '3945';\n"); + grammarBuilder.append("KW3946 : 'KW' '3946';\n"); + grammarBuilder.append("KW3947 : 'KW' '3947';\n"); + grammarBuilder.append("KW3948 : 'KW' '3948';\n"); + grammarBuilder.append("KW3949 : 'KW' '3949';\n"); + grammarBuilder.append("KW3950 : 'KW' '3950';\n"); + grammarBuilder.append("KW3951 : 'KW' '3951';\n"); + grammarBuilder.append("KW3952 : 'KW' '3952';\n"); + grammarBuilder.append("KW3953 : 'KW' '3953';\n"); + grammarBuilder.append("KW3954 : 'KW' '3954';\n"); + grammarBuilder.append("KW3955 : 'KW' '3955';\n"); + grammarBuilder.append("KW3956 : 'KW' '3956';\n"); + grammarBuilder.append("KW3957 : 'KW' '3957';\n"); + grammarBuilder.append("KW3958 : 'KW' '3958';\n"); + grammarBuilder.append("KW3959 : 'KW' '3959';\n"); + grammarBuilder.append("KW3960 : 'KW' '3960';\n"); + grammarBuilder.append("KW3961 : 'KW' '3961';\n"); + grammarBuilder.append("KW3962 : 'KW' '3962';\n"); + grammarBuilder.append("KW3963 : 'KW' '3963';\n"); + grammarBuilder.append("KW3964 : 'KW' '3964';\n"); + grammarBuilder.append("KW3965 : 'KW' '3965';\n"); + grammarBuilder.append("KW3966 : 'KW' '3966';\n"); + grammarBuilder.append("KW3967 : 'KW' '3967';\n"); + grammarBuilder.append("KW3968 : 'KW' '3968';\n"); + grammarBuilder.append("KW3969 : 'KW' '3969';\n"); + grammarBuilder.append("KW3970 : 'KW' '3970';\n"); + grammarBuilder.append("KW3971 : 'KW' '3971';\n"); + grammarBuilder.append("KW3972 : 'KW' '3972';\n"); + grammarBuilder.append("KW3973 : 'KW' '3973';\n"); + grammarBuilder.append("KW3974 : 'KW' '3974';\n"); + grammarBuilder.append("KW3975 : 'KW' '3975';\n"); + grammarBuilder.append("KW3976 : 'KW' '3976';\n"); + grammarBuilder.append("KW3977 : 'KW' '3977';\n"); + grammarBuilder.append("KW3978 : 'KW' '3978';\n"); + grammarBuilder.append("KW3979 : 'KW' '3979';\n"); + grammarBuilder.append("KW3980 : 'KW' '3980';\n"); + grammarBuilder.append("KW3981 : 'KW' '3981';\n"); + grammarBuilder.append("KW3982 : 'KW' '3982';\n"); + grammarBuilder.append("KW3983 : 'KW' '3983';\n"); + grammarBuilder.append("KW3984 : 'KW' '3984';\n"); + grammarBuilder.append("KW3985 : 'KW' '3985';\n"); + grammarBuilder.append("KW3986 : 'KW' '3986';\n"); + grammarBuilder.append("KW3987 : 'KW' '3987';\n"); + grammarBuilder.append("KW3988 : 'KW' '3988';\n"); + grammarBuilder.append("KW3989 : 'KW' '3989';\n"); + grammarBuilder.append("KW3990 : 'KW' '3990';\n"); + grammarBuilder.append("KW3991 : 'KW' '3991';\n"); + grammarBuilder.append("KW3992 : 'KW' '3992';\n"); + grammarBuilder.append("KW3993 : 'KW' '3993';\n"); + grammarBuilder.append("KW3994 : 'KW' '3994';\n"); + grammarBuilder.append("KW3995 : 'KW' '3995';\n"); + grammarBuilder.append("KW3996 : 'KW' '3996';\n"); + grammarBuilder.append("KW3997 : 'KW' '3997';\n"); + grammarBuilder.append("KW3998 : 'KW' '3998';\n"); + grammarBuilder.append("KW3999 : 'KW' '3999';"); + String grammar = grammarBuilder.toString(); + + String input ="KW400"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='KW400',<402>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(124); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : .*? ('a' | 'ab') {console.log(this.text);} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : . {console.log(this.text);};"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "a\n" + + "b\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:1='b',<3>,1:1]\n" + + "[@2,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"hi\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:3='\"hi\"',<1>,1:0]\n" + + "[@1,4:8='\"mom\"',<1>,1:4]\n" + + "[@2,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParentheses() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("START_BLOCK: '-.-.-';\n"); + grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); + grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); + grammarBuilder.append("fragment L_A: '.-';\n"); + grammarBuilder.append("fragment L_K: '-.-';\n"); + grammarBuilder.append("SEPARATOR: '!';"); + String grammar = grammarBuilder.toString(); + + String input ="-.-.-!"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='-.-.-',<1>,1:0]\n" + + "[@1,5:5='!',<3>,1:5]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPositionAdjustingLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(2231); + grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("PositionAdjustingLexer.prototype.resetAcceptPosition = function(index, line, column) {\n"); + grammarBuilder.append(" this._input.seek(index);\n"); + grammarBuilder.append(" this.line = line;\n"); + grammarBuilder.append(" this.column = column;\n"); + grammarBuilder.append(" this._interp.consume(this._input);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("PositionAdjustingLexer.prototype.nextToken = function() {\n"); + grammarBuilder.append(" if (!(\"resetAcceptPosition\" in this._interp)) {\n"); + grammarBuilder.append(" var lexer = this;\n"); + grammarBuilder.append(" this._interp.resetAcceptPosition = function(index, line, column) { lexer.resetAcceptPosition(index, line, column); };\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" return antlr4.Lexer.prototype.nextToken.call(this);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("PositionAdjustingLexer.prototype.emit = function() {\n"); + grammarBuilder.append(" switch(this._type) {\n"); + grammarBuilder.append(" case PositionAdjustingLexer.TOKENS:\n"); + grammarBuilder.append(" this.handleAcceptPositionForKeyword(\"tokens\");\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append(" case PositionAdjustingLexer.LABEL:\n"); + grammarBuilder.append(" this.handleAcceptPositionForIdentifier();\n"); + grammarBuilder.append(" break;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" return antlr4.Lexer.prototype.emit.call(this);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("PositionAdjustingLexer.prototype.handleAcceptPositionForIdentifier = function() {\n"); + grammarBuilder.append(" var tokenText = this.text;\n"); + grammarBuilder.append(" var identifierLength = 0;\n"); + grammarBuilder.append(" while (identifierLength < tokenText.length &&\n"); + grammarBuilder.append(" PositionAdjustingLexer.isIdentifierChar(tokenText[identifierLength])\n"); + grammarBuilder.append(" ) {\n"); + grammarBuilder.append(" identifierLength += 1;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" if (this._input.index > this._tokenStartCharIndex + identifierLength) {\n"); + grammarBuilder.append(" var offset = identifierLength - 1;\n"); + grammarBuilder.append(" this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset,\n"); + grammarBuilder.append(" this._tokenStartLine, this._tokenStartColumn + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("PositionAdjustingLexer.prototype.handleAcceptPositionForKeyword = function(keyword) {\n"); + grammarBuilder.append(" if (this._input.index > this._tokenStartCharIndex + keyword.length) {\n"); + grammarBuilder.append(" var offset = keyword.length - 1;\n"); + grammarBuilder.append(" this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset,\n"); + grammarBuilder.append(" this._tokenStartLine, this._tokenStartColumn + offset);\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" return false;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("PositionAdjustingLexer.isIdentifierChar = function(c) {\n"); + grammarBuilder.append(" return c.match(/^[0-9a-zA-Z_]+$/);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ASSIGN : '=' ;\n"); + grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); + grammarBuilder.append("LCURLY: '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// 'tokens' followed by '{'\n"); + grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); + grammarBuilder.append("LABEL\n"); + grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("IDENTIFIER\n"); + grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("IGNORED\n"); + grammarBuilder.append(" : [ \\t\\r\\n]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("NEWLINE\n"); + grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS\n"); + grammarBuilder.append(" : [ \\t]+ -> skip\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + String input = + "tokens\n" + + "tokens {\n" + + "notLabel\n" + + "label1 =\n" + + "label2 +=\n" + + "notLabel\n"; + String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); + assertEquals( + "[@0,0:5='tokens',<6>,1:0]\n" + + "[@1,7:12='tokens',<4>,2:0]\n" + + "[@2,14:14='{',<3>,2:7]\n" + + "[@3,16:23='notLabel',<6>,3:0]\n" + + "[@4,25:30='label1',<5>,4:0]\n" + + "[@5,32:32='=',<1>,4:7]\n" + + "[@6,34:39='label2',<5>,5:0]\n" + + "[@7,41:42='+=',<2>,5:7]\n" + + "[@8,44:51='notLabel',<6>,6:0]\n" + + "[@9,53:52='',<-1>,7:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testQuoteTranslation() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); + String grammar = grammarBuilder.toString(); + + String input ="\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\"',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : '-' I ;\n"); + grammarBuilder.append("I : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 -21 3"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='34',<2>,1:0]\n" + + "[@1,3:5='-21',<1>,1:3]\n" + + "[@2,7:7='3',<2>,1:7]\n" + + "[@3,8:7='',<-1>,1:8]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSlashes() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("Backslash : '\\\\';\n"); + grammarBuilder.append("Slash : '/';\n"); + grammarBuilder.append("Vee : '\\\\/';\n"); + grammarBuilder.append("Wedge : '/\\\\';\n"); + grammarBuilder.append("WS : [ \\t] -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="\\ / \\/ /\\"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\\',<1>,1:0]\n" + + "[@1,2:2='/',<2>,1:2]\n" + + "[@2,4:5='\\/',<3>,1:4]\n" + + "[@3,7:8='/\\',<4>,1:7]\n" + + "[@4,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testZeroLengthToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("BeginString\n"); + grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("mode StringMode;\n"); + grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); + grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); + grammarBuilder.append("mode EndStringMode; \n"); + grammarBuilder.append(" EndString : '\\'' -> popMode;"); + String grammar = grammarBuilder.toString(); + + String input ="'xxx'"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4=''xxx'',<1>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestListeners.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestListeners.java new file mode 100644 index 000000000..9429f6ff8 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestListeners.java @@ -0,0 +1,417 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestListeners extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(632); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.LeafListener = function() {\n"); + grammarBuilder.append(" this.visitTerminal = function(node) {\n"); + grammarBuilder.append(" console.log(node.symbol.text);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); + grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); + grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1\n" + + "2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLR() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(842); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.LeafListener = function() {\n"); + grammarBuilder.append(" this.exitE = function(ctx) {\n"); + grammarBuilder.append(" var str;\n"); + grammarBuilder.append(" if(ctx.getChildCount()===3) {\n"); + grammarBuilder.append(" str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" str = ctx.INT().symbol.text;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" console.log(str);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); + grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); + grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e op='*' e\n"); + grammarBuilder.append(" | e op='+' e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) + (e (e 2) * (e 3)))\n" + + "1\n" + + "2\n" + + "3\n" + + "2 3 2\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLRWithLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(832); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.LeafListener = function() {\n"); + grammarBuilder.append(" this.exitCall = function(ctx) {\n"); + grammarBuilder.append(" var str = ctx.e().start.text + ' ' + ctx.eList();\n"); + grammarBuilder.append(" console.log(str);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" this.exitInt = function(ctx) {\n"); + grammarBuilder.append(" var str = ctx.INT().symbol.text;\n"); + grammarBuilder.append(" console.log(str);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); + grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); + grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e '(' eList ')' # Call\n"); + grammarBuilder.append(" | INT # Int\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("eList : e (',' e)* ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1(2,3)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + + "1\n" + + "2\n" + + "3\n" + + "1 [13 6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(867); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.LeafListener = function() {\n"); + grammarBuilder.append(" this.exitA = function(ctx) {\n"); + grammarBuilder.append(" var str;\n"); + grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); + grammarBuilder.append(" str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" str = ctx.b(0).start.text;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" console.log(str);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); + grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); + grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b 1) (b 2))\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(867); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.LeafListener = function() {\n"); + grammarBuilder.append(" this.exitA = function(ctx) {\n"); + grammarBuilder.append(" var str;\n"); + grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); + grammarBuilder.append(" str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text;\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" str = ctx.b(0).start.text;\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" console.log(str);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); + grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); + grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b abc))\n" + + "abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(854); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.LeafListener = function() {\n"); + grammarBuilder.append(" this.exitA = function(ctx) {\n"); + grammarBuilder.append(" var str;\n"); + grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); + grammarBuilder.append(" str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT());\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" str = ctx.ID().symbol.toString();\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" console.log(str);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); + grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); + grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1 2 [1, 2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(854); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.LeafListener = function() {\n"); + grammarBuilder.append(" this.exitA = function(ctx) {\n"); + grammarBuilder.append(" var str;\n"); + grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); + grammarBuilder.append(" str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT());\n"); + grammarBuilder.append(" } else {\n"); + grammarBuilder.append(" str = ctx.ID().symbol.toString();\n"); + grammarBuilder.append(" }\n"); + grammarBuilder.append(" console.log(str);\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); + grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); + grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); + grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a abc)\n" + + "[@0,0:2='abc',<4>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParseTrees.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParseTrees.java new file mode 100644 index 000000000..276b69ece --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParseTrees.java @@ -0,0 +1,314 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParseTrees extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2AltLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(143); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyyxyxz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y y x y x z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2Alts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(136); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAltNum() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(663); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("MyRuleNode = function(parent, invokingState) {\n"); + grammarBuilder.append(" antlr4.ParserRuleContext.call(this, parent, invokingState);\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" this.altNum = 0;\n"); + grammarBuilder.append(" return this;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MyRuleNode.prototype = Object.create(antlr4.ParserRuleContext.prototype);\n"); + grammarBuilder.append("MyRuleNode.prototype.constructor = MyRuleNode;\n"); + grammarBuilder.append("MyRuleNode.prototype.getAltNumber = function() { return this.altNum; }\n"); + grammarBuilder.append("MyRuleNode.prototype.setAltNumber = function(altNumber) { this.altNum = altNumber; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("a : 'f'\n"); + grammarBuilder.append(" | 'g'\n"); + grammarBuilder.append(" | 'x' b 'z'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'e' {} | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a:3 x (b:2 y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExtraToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(149); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="xzy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(151); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a z)\n", found); + + assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleRef() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(145); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b 'x'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'y' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="yx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a (b y) x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSync() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(152); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'* '!'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xzyy!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y y !)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToken2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(134); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenAndRuleContextString() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(205); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("this.buildParseTrees = true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' { \n"); + grammarBuilder.append("console.log(antlr4.Utils.arrayToString(this.getRuleInvocationStack()));\n"); + grammarBuilder.append("} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "[a, s]\n" + + "(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserErrors.java new file mode 100644 index 000000000..ede9c8c83 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserErrors.java @@ -0,0 +1,752 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserErrors extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x='b' {console.log(\"conjured=\" + $x);} 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpTokenFromSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x=('b'|'c') {console.log(\"conjured=\" + $x);} 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testContextListGetters() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(211); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members{\n"); + grammarBuilder.append(" function foo() {\n"); + grammarBuilder.append(" var s = new SContext();\n"); + grammarBuilder.append(" var a = s.a();\n"); + grammarBuilder.append(" var b = s.b();\n"); + grammarBuilder.append(" };\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : (a | b)+;\n"); + grammarBuilder.append("a : 'a' {process.stdout.write(\"a\");};\n"); + grammarBuilder.append("b : 'b' {process.stdout.write(\"b\");};"); + String grammar = grammarBuilder.toString(); + + + String input ="abab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("abab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidATNStateRemoval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input ="x:x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidEmptyInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID+;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + + assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1ErrorInfo() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(301); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); + grammarBuilder.append("animal : (DOG | CAT );\n"); + grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); + grammarBuilder.append("AND : 'and';\n"); + grammarBuilder.append("DOG : 'dog';\n"); + grammarBuilder.append("CAT : 'cat';\n"); + grammarBuilder.append("HARDWARE: 'hardware';\n"); + grammarBuilder.append("SOFTWARE: 'software';\n"); + grammarBuilder.append("WS : ' ' -> skip ;\n"); + grammarBuilder.append("acClass\n"); + grammarBuilder.append("@init\n"); + grammarBuilder.append("{console.log(this.getExpectedTokens().toString(this.literalNames));}\n"); + grammarBuilder.append(" : ;"); + String grammar = grammarBuilder.toString(); + + + String input ="dog and software"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("{'hardware', 'software'}\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'\n"); + grammarBuilder.append(" | 'a' 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(55); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c'\n"); + grammarBuilder.append(" | 'a' 'b' 'd'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abe"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLLStar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aaae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAltAvoidance() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e '!' ;\n"); + grammarBuilder.append("e : 'a' 'b'\n"); + grammarBuilder.append(" | 'a'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a."; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(34); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {console.log(\"\" + $myset.stop);} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@0,0:0='a',<3>,1:0]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('b' | 'c')\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'a'\n"); + grammarBuilder.append(";"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(25); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(32); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforePredict() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="caaab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {console.log(\"\" + $myset.stop);} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="aabd"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@2,2:2='b',<1>,1:2]\n", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(37); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionExpectingSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); + grammarBuilder.append("expr: ID '=' STR ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="( ~FORCE_ERROR~ "; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserExec.java new file mode 100644 index 000000000..4d07c7ecb --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestParserExec.java @@ -0,0 +1,823 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserExec extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID+ {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(89); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)+ {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(89); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(89); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorB() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(136); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID {\n"); + grammarBuilder.append("console.log(\"alt 1\");\n"); + grammarBuilder.append("} | INT {\n"); + grammarBuilder.append("console.log(\"alt 2\");\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(112); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})+ {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(112); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(112); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(105); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID INT {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFInClosure() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : stat EOF;\n"); + grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(193); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(193); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(194); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(193); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(110); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(110); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("console.log($text);\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(171); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : a* EOF;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : label=subrule {console.log($label.text);} #One\n"); + grammarBuilder.append(" | label='y' {console.log($label.text);} #Two\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("subrule : 'x';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "x\n" + + "y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); + grammarBuilder.append("b : id_=ID val+=INT*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelForClosureContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(482); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("ifStatement\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("if ( !(v instanceof Array) ) {throw \"value is not an array\";}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : 'if' expression\n"); + grammarBuilder.append(" ( ( 'then'\n"); + grammarBuilder.append(" executableStatement*\n"); + grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); + grammarBuilder.append(" elseStatement?\n"); + grammarBuilder.append(" 'end' 'if'\n"); + grammarBuilder.append(" ) | executableStatement )\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("elseIfStatement\n"); + grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expression : 'a' ;\n"); + grammarBuilder.append("executableStatement : 'a' ;\n"); + grammarBuilder.append("elseStatement : 'a' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelsOnSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b b* ';' ;\n"); + grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleEOFHandling() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(42); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserProperty() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(171); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("this.Property = function() {\n"); + grammarBuilder.append(" return true;\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("a : {$parser.Property()}? ID {console.log(\"valid\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("valid\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedIfIfElse() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(175); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : stmt EOF ;\n"); + grammarBuilder.append("stmt : ifStmt | ID;\n"); + grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { this._input.LA(1)!=TParser.ELSE }?);\n"); + grammarBuilder.append("ELSE : 'else';\n"); + grammarBuilder.append("ID : [a-zA-Z]+;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x if x a else b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredictionIssue334() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(269); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_ @init{\n"); + grammarBuilder.append("this._errHandler = new antlr4.error.BailErrorStrategy();\n"); + grammarBuilder.append("} \n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("console.log($ctx.toStringTree(null, this));\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); + grammarBuilder.append("item : A B?;\n"); + grammarBuilder.append("SEMICOLON: ';';\n"); + grammarBuilder.append("A : 'a'|'A';\n"); + grammarBuilder.append("B : 'b'|'B';\n"); + grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); + + assertEquals("(file_ (item a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(113); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {console.log($text);} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(113); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {console.log($text);} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestPerformance.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestPerformance.java new file mode 100644 index 000000000..7c6cc88bc --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestPerformance.java @@ -0,0 +1,220 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestPerformance extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalLexer.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalLexer.java new file mode 100644 index 000000000..fae90f0d2 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalLexer.java @@ -0,0 +1,218 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalLexer extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisableRule() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("E1 : 'enum' { false }? ;\n"); + grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<3>,1:5]\n" + + "[@2,8:7='',<-1>,1:8]\n" + + "s0-' '->:s5=>4\n" + + "s0-'a'->:s6=>3\n" + + "s0-'e'->:s1=>3\n" + + ":s1=>3-'n'->:s2=>3\n" + + ":s2=>3-'u'->:s3=>3\n" + + ":s6=>3-'b'->:s6=>3\n" + + ":s6=>3-'c'->:s6=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnumNotID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(97); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { this.text===\"enum\" }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<1>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s3=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDnotEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s2=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDvsEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s5=>3\n" + + "s0-'a'->:s4=>2\n" + + "s0-'e'->:s1=>2\n" + + ":s1=>2-'n'->:s2=>2\n" + + ":s2=>2-'u'->:s3=>2\n" + + ":s4=>2-'b'->:s4=>2\n" + + ":s4=>2-'c'->:s4=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndent() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(143); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("INDENT : [ \\t]+ { this._tokenStartColumn===0 }?\n"); + grammarBuilder.append(" { console.log(\"INDENT\"); } ;\n"); + grammarBuilder.append("NL : '\\n';\n"); + grammarBuilder.append("WS : [ \\t]+ ;"); + String grammar = grammarBuilder.toString(); + + String input = + "abc\n" + + " def \n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "INDENT\n" + + "[@0,0:2='abc',<1>,1:0]\n" + + "[@1,3:3='\\n',<3>,1:3]\n" + + "[@2,4:5=' ',<2>,2:0]\n" + + "[@3,6:8='def',<1>,2:2]\n" + + "[@4,9:10=' ',<4>,2:5]\n" + + "[@5,11:11='\\n',<3>,2:7]\n" + + "[@6,12:11='',<-1>,3:0]\n" + + "s0-'\n" + + "'->:s2=>3\n" + + "s0-'a'->:s1=>1\n" + + "s0-'d'->:s1=>1\n" + + ":s1=>1-'b'->:s1=>1\n" + + ":s1=>1-'c'->:s1=>1\n" + + ":s1=>1-'e'->:s1=>1\n" + + ":s1=>1-'f'->:s1=>1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerInputPositionSensitivePredicates() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(220); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WORD1 : ID1+ { console.log(this.text); } ;\n"); + grammarBuilder.append("WORD2 : ID2+ { console.log(this.text); } ;\n"); + grammarBuilder.append("fragment ID1 : { this.column < 2 }? [a-zA-Z];\n"); + grammarBuilder.append("fragment ID2 : { this.column >= 2 }? [a-zA-Z];\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input = + "a cde\n" + + "abcde\n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "a\n" + + "cde\n" + + "ab\n" + + "cde\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:4='cde',<2>,1:2]\n" + + "[@2,6:7='ab',<1>,2:0]\n" + + "[@3,8:10='cde',<2>,2:2]\n" + + "[@4,12:11='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedKeywords() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { this.text===\"enum\" }? { console.log(\"enum!\"); } ;\n"); + grammarBuilder.append("ID : [a-z]+ { console.log(\"ID \" + this.text); } ;\n"); + grammarBuilder.append("WS : [ \\n] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="enum enu a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "enum!\n" + + "ID enu\n" + + "ID a\n" + + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='enu',<2>,1:5]\n" + + "[@2,9:9='a',<2>,1:9]\n" + + "[@3,10:9='',<-1>,1:10]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalParser.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalParser.java new file mode 100644 index 000000000..7e91dcd14 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSemPredEvalParser.java @@ -0,0 +1,789 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalParser extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAlts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(308); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;} a ';' a; // do 2x: once in ATN, next in DFA\n"); + grammarBuilder.append("a : ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" | {false}? ID {console.log(\"alt 3\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + + assertEquals( + "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + + "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(360); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;} a ';' a ';' a;\n"); + grammarBuilder.append("a : INT {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | ID {console.log(\"alt 2\");} // must pick this one for ID since pred is false\n"); + grammarBuilder.append(" | ID {console.log(\"alt 3\");}\n"); + grammarBuilder.append(" | {false}? ID {console.log(\"alt 4\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34; x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 2\n" + + "alt 2\n", found); + + assertEquals( + "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + + "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionHidesPreds() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(236); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {this.i = 0;}\n"); + grammarBuilder.append("s : a+ ;\n"); + grammarBuilder.append("a : {this.i = 1;} ID {this.i === 1}? {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {this.i = 2;} ID {this.i === 2}? {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionsHidePredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(299); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.pred = function(v) {\n"); + grammarBuilder.append(" console.log(\"eval=\" + v.toString());\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {} {this.pred(true)}? {console.log(\"parse\");} '!' ;\n"); + grammarBuilder.append("t : e {} {this.pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAtomWithClosureInTranslatedLRRule() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : e[0] EOF;\n"); + grammarBuilder.append("e[int _p]\n"); + grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); + grammarBuilder.append(" ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b+a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDepedentPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(324); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.pred = function(v) {\n"); + grammarBuilder.append(" console.log(\"eval=\" + v.toString());\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : a[99] ;\n"); + grammarBuilder.append("a[int i] : e {this.pred($i===99)}? {console.log(\"parse\");} '!' ;\n"); + grammarBuilder.append("b[int i] : e {this.pred($i===99)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(272); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); + grammarBuilder.append("b[int i] : a[i] ;\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i===1}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {$i===2}? ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisabledAlternative() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); + grammarBuilder.append("content: anything | {false}? .;\n"); + grammarBuilder.append("anything: ANY_CHAR;\n"); + grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); + String grammar = grammarBuilder.toString(); + + + String input ="hello"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(183); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b ';' | b '.' ;\n"); + grammarBuilder.append("b : a ;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : {false}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoTruePredsThrowsNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(171); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {false}? ID INT {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {false}? ID INT {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOrder() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(297); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); + grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); + grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); + grammarBuilder.append("a : ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(210); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {console.log($ctx.toStringTree(null, this));}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); + + assertEquals( + "line 5:0 mismatched input '' expecting '\n" + + "'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(210); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {console.log($ctx.toStringTree(null, this));}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n" + + "\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(209); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {this.enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {console.log(\"ID \"+$ID.text);}\n"); + grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {console.log(\"enum\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("ID abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(209); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {this.enumKeyword = true;}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {console.log(\"ID \"+$ID.text);}\n"); + grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {console.log(\"enum\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="enum"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(211); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {this.i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i===1}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {$i===2}? ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {this.i = 0;}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i===1}? ID \n"); + grammarBuilder.append(" | {$i===2}? ID \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(293); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("this.pred = function(v) {\n"); + grammarBuilder.append(" console.log(\"eval=\" + v.toString());\n"); + grammarBuilder.append(" return v;\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {this.pred(true)}? {console.log(\"parse\");} '!' ;\n"); + grammarBuilder.append("t : e {this.pred(false)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRewindBeforePredEval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(217); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {this._input.LT(1).text===\"x\"}? ID INT {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {this._input.LT(1).text===\"y\"}? ID INT {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(256); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); + grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" | INT {console.log(\"alt 3\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y 3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(167); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a;\n"); + grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="3 4 x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n", found); + + assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeft() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append(" s : a+ ;\n"); + grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeftWithVaryingPredicate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(281); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {this.i = 0;}\n"); + grammarBuilder.append("s : ({this.i += 1;\n"); + grammarBuilder.append("process.stdout.write(\"i=\");\n"); + grammarBuilder.append("console.log(this.i);} a)+ ;\n"); + grammarBuilder.append("a : {this.i % 2 === 0}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {this.i % 2 != 0}? ID {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "i=1\n" + + "alt 2\n" + + "i=2\n" + + "alt 1\n" + + "i=3\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testUnpredicatedPathsInAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(183); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | b {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("a : {false}? ID INT\n"); + grammarBuilder.append(" | ID INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testValidateInDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(332); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ';' a;\n"); + grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); + grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); + grammarBuilder.append("// throws an exception if the validating predicate fails\n"); + grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); + grammarBuilder.append(" | {true}? INT {console.log(\"alt 2\");}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x ; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 no viable alternative at input 'x'\n" + + "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSets.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSets.java new file mode 100644 index 000000000..6f5624ae3 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestSets.java @@ -0,0 +1,500 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSets extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetLiteral() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (A {console.log($A.text);})+ ;\n"); + grammarBuilder.append("A : [AaBb] ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="A a B b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals( + "A\n" + + "a\n" + + "B\n" + + "b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testComplementSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("parse : ~NEW_LINE;\n"); + grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 token recognition error at: 'a'\n" + + "line 1:1 missing {} at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : ('a'|'b')* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotChar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log($A.text);} ;\n"); + grammarBuilder.append("A : ~'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log($A.text);} ;\n"); + grammarBuilder.append("A : ~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log($A.text);} ;\n"); + grammarBuilder.append("A : h=~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithRuleRef3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(125); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log($A.text);} ;\n"); + grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("B : ~('a'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(71); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')? 'c' {console.log(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(71); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A? 'c' {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~('x'|'y') 'z' {console.log($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ~'x' 'z' {console.log(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("zz\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotTokenWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~'x' 'z' {console.log($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=('x'|'y') {console.log($t.text);} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(71); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {console.log(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleAsSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(76); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {console.log(this._input.getText());} : 'a' | 'b' |'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSeqDoesNotBecomeSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(113); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : C {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("fragment A : '1' | '2';\n"); + grammarBuilder.append("fragment B : '3' '4';\n"); + grammarBuilder.append("C : A | B;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(71); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(71); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')* 'c' {console.log(this._input.getText());} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestVisitors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestVisitors.java new file mode 100644 index 000000000..8d64c041e --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/node/TestVisitors.java @@ -0,0 +1,53 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.javascript.node; + +import org.junit.Ignore; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestVisitors extends BaseNodeTest { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testBasic() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLR() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLRWithLabels() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_2() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_2() throws Exception { + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/BaseSafariTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/BaseSafariTest.java new file mode 100644 index 000000000..e0be40d5b --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/BaseSafariTest.java @@ -0,0 +1,49 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.javascript.safari; + +import org.antlr.v4.test.runtime.legacy.javascript.browser.BaseBrowserTest; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +/* see https://code.google.com/p/selenium/wiki/SafariDriver for instructions */ +public abstract class BaseSafariTest extends BaseBrowserTest { + + @BeforeClass + public static void initWebDriver() { + driver = SharedWebDriver.init(); + } + + @AfterClass + public static void closeWebDriver() { + SharedWebDriver.close(); + } + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/SharedWebDriver.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/SharedWebDriver.java new file mode 100644 index 000000000..04cb4f972 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/javascript/safari/SharedWebDriver.java @@ -0,0 +1,42 @@ +package org.antlr.v4.test.runtime.legacy.javascript.safari; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.safari.SafariDriver; + +import java.util.Timer; +import java.util.TimerTask; + +public class SharedWebDriver { + + static WebDriver driver; + static Timer timer; + + public static WebDriver init() { + if(driver==null) { + System.setProperty("webdriver.safari.noinstall", "true"); + driver = new SafariDriver(); + } else if(timer!=null) { + timer.cancel(); + timer = null; + } + + return driver; + } + + public static void close() { + if(driver!=null) { + if(timer!=null) { + timer.cancel(); + timer = null; + } + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override public void run() { + driver.quit(); + driver = null; + } + }, 2000); // close with delay to allow next Test to start + } + } + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python/BasePythonTest.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python/BasePythonTest.java new file mode 100644 index 000000000..108f4f215 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python/BasePythonTest.java @@ -0,0 +1,1079 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.python; + +import org.antlr.v4.Tool; +import org.antlr.v4.automata.ATNFactory; +import org.antlr.v4.automata.ATNPrinter; +import org.antlr.v4.automata.LexerATNFactory; +import org.antlr.v4.automata.ParserATNFactory; +import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.IntStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.RuleContext; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.WritableToken; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ATNSerializer; +import org.antlr.v4.runtime.atn.ATNState; +import org.antlr.v4.runtime.atn.DecisionState; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.IntegerList; +import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.semantics.SemanticPipeline; +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.DOTGenerator; +import org.antlr.v4.tool.DefaultToolListener; +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.antlr.v4.tool.LexerGrammar; +import org.antlr.v4.tool.Rule; +import org.junit.Before; +import org.junit.rules.TestRule; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupString; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public abstract class BasePythonTest { + // -J-Dorg.antlr.v4.test.BaseTest.level=FINE + // private static final Logger LOGGER = Logger.getLogger(BaseTest.class.getName()); + public static final String newline = System.getProperty("line.separator"); + public static final String pathSep = System.getProperty("path.separator"); + + public String tmpdir = null; + + /** If error during parser execution, store stderr here; can't return + * stdout and stderr. This doesn't trap errors from running antlr. + */ + protected String stderrDuringParse; + + @org.junit.Rule + public final TestRule testWatcher = new TestWatcher() { + + @Override + protected void succeeded(Description description) { + // remove tmpdir if no error. + eraseTempPyCache(); + eraseTempDir(); + } + + }; + + private String getPropertyPrefix() { + return "antlr-" + getLanguage().toLowerCase(); + } + + @Before + public void setUp() throws Exception { + // new output dir for each test + String propName = getPropertyPrefix() + "-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + tmpdir = prop; + else + tmpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { + Tool tool = new Tool(args); + return tool; + } + + protected Tool newTool() { + org.antlr.v4.Tool tool = new Tool(new String[] {"-o", tmpdir}); + return tool; + } + + protected ATN createATN(Grammar g, boolean useSerializer) { + if ( g.atn==null ) { + semanticProcess(g); + assertEquals(0, g.tool.getNumErrors()); + + ParserATNFactory f; + if ( g.isLexer() ) { + f = new LexerATNFactory((LexerGrammar)g); + } + else { + f = new ParserATNFactory(g); + } + + g.atn = f.createATN(); + assertEquals(0, g.tool.getNumErrors()); + } + + ATN atn = g.atn; + if (useSerializer) { + char[] serialized = ATNSerializer.getSerializedAsChars(atn); + return new ATNDeserializer().deserialize(serialized); + } + + return atn; + } + + protected void semanticProcess(Grammar g) { + if ( g.ast!=null && !g.ast.hasErrors ) { + System.out.println(g.ast.toStringTree()); + Tool antlr = new Tool(); + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + if ( g.getImportedGrammars()!=null ) { // process imported grammars (if any) + for (Grammar imp : g.getImportedGrammars()) { + antlr.processNonCombinedGrammar(imp, false); + } + } + } + } + + public DFA createDFA(Grammar g, DecisionState s) { +// PredictionDFAFactory conv = new PredictionDFAFactory(g, s); +// DFA dfa = conv.createDFA(); +// conv.issueAmbiguityWarnings(); +// System.out.print("DFA="+dfa); +// return dfa; + return null; + } + +// public void minimizeDFA(DFA dfa) { +// DFAMinimizer dmin = new DFAMinimizer(dfa); +// dfa.minimized = dmin.minimize(); +// } + + IntegerList getTypesFromString(Grammar g, String expecting) { + IntegerList expectingTokenTypes = new IntegerList(); + if ( expecting!=null && !expecting.trim().isEmpty() ) { + for (String tname : expecting.replace(" ", "").split(",")) { + int ttype = g.getTokenType(tname); + expectingTokenTypes.add(ttype); + } + } + return expectingTokenTypes; + } + + public IntegerList getTokenTypesViaATN(String input, LexerATNSimulator lexerATN) { + ANTLRInputStream in = new ANTLRInputStream(input); + IntegerList tokenTypes = new IntegerList(); + int ttype; + do { + ttype = lexerATN.match(in, Lexer.DEFAULT_MODE); + tokenTypes.add(ttype); + } while ( ttype!= Token.EOF ); + return tokenTypes; + } + + public List getTokenTypes(LexerGrammar lg, + ATN atn, + CharStream input) + { + LexerATNSimulator interp = new LexerATNSimulator(atn,new DFA[] { new DFA(atn.modeToStartState.get(Lexer.DEFAULT_MODE)) },null); + List tokenTypes = new ArrayList(); + int ttype; + boolean hitEOF = false; + do { + if ( hitEOF ) { + tokenTypes.add("EOF"); + break; + } + int t = input.LA(1); + ttype = interp.match(input, Lexer.DEFAULT_MODE); + if ( ttype == Token.EOF ) { + tokenTypes.add("EOF"); + } + else { + tokenTypes.add(lg.typeToTokenList.get(ttype)); + } + + if ( t== IntStream.EOF ) { + hitEOF = true; + } + } while ( ttype!=Token.EOF ); + return tokenTypes; + } + + List checkRuleDFA(String gtext, String ruleName, String expecting) + throws Exception + { + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(gtext, equeue); + ATN atn = createATN(g, false); + ATNState s = atn.ruleToStartState[g.getRule(ruleName).index]; + if ( s==null ) { + System.err.println("no such rule: "+ruleName); + return null; + } + ATNState t = s.transition(0).target; + if ( !(t instanceof DecisionState) ) { + System.out.println(ruleName+" has no decision"); + return null; + } + DecisionState blk = (DecisionState)t; + checkRuleDFA(g, blk, expecting); + return equeue.all; + } + + List checkRuleDFA(String gtext, int decision, String expecting) + throws Exception + { + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(gtext, equeue); + ATN atn = createATN(g, false); + DecisionState blk = atn.decisionToState.get(decision); + checkRuleDFA(g, blk, expecting); + return equeue.all; + } + + void checkRuleDFA(Grammar g, DecisionState blk, String expecting) + throws Exception + { + DFA dfa = createDFA(g, blk); + String result = null; + if ( dfa!=null ) result = dfa.toString(); + assertEquals(expecting, result); + } + + List checkLexerDFA(String gtext, String expecting) + throws Exception + { + return checkLexerDFA(gtext, LexerGrammar.DEFAULT_MODE_NAME, expecting); + } + + List checkLexerDFA(String gtext, String modeName, String expecting) + throws Exception + { + ErrorQueue equeue = new ErrorQueue(); + LexerGrammar g = new LexerGrammar(gtext, equeue); + g.atn = createATN(g, false); +// LexerATNToDFAConverter conv = new LexerATNToDFAConverter(g); +// DFA dfa = conv.createDFA(modeName); +// g.setLookaheadDFA(0, dfa); // only one decision to worry about +// +// String result = null; +// if ( dfa!=null ) result = dfa.toString(); +// assertEquals(expecting, result); +// +// return equeue.all; + return null; + } + + protected abstract String getLanguage(); + + /** Return true if all is ok, no errors */ + protected ErrorQueue antlr(String fileName, String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { + System.out.println("dir "+tmpdir); + mkdir(tmpdir); + writeFile(tmpdir, fileName, grammarStr); + final List options = new ArrayList(); + Collections.addAll(options, extraOptions); + options.add("-Dlanguage=" + getLanguage()); + options.add("-o"); + options.add(tmpdir); + options.add("-lib"); + options.add(tmpdir); + options.add(new File(tmpdir,grammarFileName).toString()); + + final String[] optionsA = new String[options.size()]; + options.toArray(optionsA); + Tool antlr = newTool(optionsA); + ErrorQueue equeue = new ErrorQueue(antlr); + antlr.addListener(equeue); + if (defaultListener) { + antlr.addListener(new DefaultToolListener(antlr)); + } + antlr.processGrammarsOnCommandLine(); + + if ( !defaultListener && !equeue.errors.isEmpty() ) { + System.err.println("antlr reports errors from "+options); + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage msg = equeue.errors.get(i); + System.err.println(msg); + } + System.out.println("!!!\ngrammar:"); + System.out.println(grammarStr); + System.out.println("###"); + } + if ( !defaultListener && !equeue.warnings.isEmpty() ) { + System.err.println("antlr reports warnings from "+options); + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage msg = equeue.warnings.get(i); + System.err.println(msg); + } + } + + return equeue; + } + + protected String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input) + { + return execLexer(grammarFileName, grammarStr, lexerName, input, false); + } + + protected String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, + boolean showDFA) + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, + null, + lexerName,"-no-listener"); + assertTrue(success); + writeFile(tmpdir, "input", input); + writeLexerTestFile(lexerName, showDFA); + String output = execModule("Test.py"); + if ( stderrDuringParse!=null && stderrDuringParse.length()>0 ) { + System.err.println(stderrDuringParse); + } + return output; + } + + public ParseTree execStartRule(String startRuleName, Parser parser) + throws IllegalAccessException, InvocationTargetException, + NoSuchMethodException + { + Method startRule = null; + Object[] args = null; + try { + startRule = parser.getClass().getMethod(startRuleName); + } + catch (NoSuchMethodException nsme) { + // try with int _p arg for recursive func + startRule = parser.getClass().getMethod(startRuleName, int.class); + args = new Integer[] {0}; + } + ParseTree result = (ParseTree)startRule.invoke(parser, args); +// System.out.println("parse tree = "+result.toStringTree(parser)); + return result; + } + + protected String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean debug) { + return execParser(grammarFileName, grammarStr, parserName, lexerName, + listenerName, visitorName, startRuleName, input, debug, false); + } + + protected String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean debug, + boolean trace) + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, + parserName, + lexerName, + "-visitor"); + assertTrue(success); + writeFile(tmpdir, "input", input); + rawBuildRecognizerTestFile(parserName, + lexerName, + listenerName, + visitorName, + startRuleName, + debug, + trace); + return execRecognizer(); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) + { + return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) + { + ErrorQueue equeue = + antlr(grammarFileName, grammarFileName, grammarStr, defaultListener, extraOptions); + if (!equeue.errors.isEmpty()) { + return false; + } + + List files = new ArrayList(); + if ( lexerName!=null ) { + files.add(lexerName+".py"); + } + if ( parserName!=null ) { + files.add(parserName+".py"); + Set optionsSet = new HashSet(Arrays.asList(extraOptions)); + if (!optionsSet.contains("-no-listener")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Listener.py"); + } + if (optionsSet.contains("-visitor")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"Visitor.py"); + } + } + return true; // allIsWell: no compile + } + + protected void rawBuildRecognizerTestFile(String parserName, + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, + boolean debug, + boolean trace) + { + this.stderrDuringParse = null; + if ( parserName==null ) { + writeLexerTestFile(lexerName, false); + } + else { + writeParserTestFile(parserName, + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, trace); + } + } + + public String execRecognizer() { + return execModule("Test.py"); + } + + public String execModule(String fileName) { + String pythonPath = locatePython(); + String runtimePath = locateRuntime(); + String modulePath = new File(new File(tmpdir), fileName).getAbsolutePath(); + String inputPath = new File(new File(tmpdir), "input").getAbsolutePath(); + try { + ProcessBuilder builder = new ProcessBuilder( pythonPath, modulePath, inputPath ); + builder.environment().put("PYTHONPATH",runtimePath); + builder.directory(new File(tmpdir)); + Process process = builder.start(); + StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + String output = stdoutVacuum.toString(); + if ( stderrVacuum.toString().length()>0 ) { + this.stderrDuringParse = stderrVacuum.toString(); + System.err.println("exec stderrVacuum: "+ stderrVacuum); + } + return output; + } + catch (Exception e) { + System.err.println("can't exec recognizer"); + e.printStackTrace(System.err); + } + return null; + } + + private String locateTool(String tool) { + String[] roots = { "/usr/bin/", "/usr/local/bin/" }; + for(String root : roots) { + if(new File(root + tool).exists()) + return root + tool; + } + throw new RuntimeException("Could not locate " + tool); + } + + protected String locatePython() { + String propName = getPropertyPrefix() + "-python"; + String prop = System.getProperty(propName); + if(prop==null || prop.length()==0) + prop = locateTool(getPythonExecutable()); + File file = new File(prop); + if(!file.exists()) + throw new RuntimeException("Missing system property:" + propName); + return file.getAbsolutePath(); + } + + protected abstract String getPythonExecutable(); + + protected String locateRuntime() { return locateRuntime(getLanguage()); } + + protected String locateRuntime(String targetName) { + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL runtimeSrc = loader.getResource(targetName+"/src"); + if ( runtimeSrc==null ) { + throw new RuntimeException("Cannot find "+targetName+" runtime"); + } + if(isWindows()){ + return runtimeSrc.getPath().replaceFirst("/", ""); + } + return runtimeSrc.getPath(); + } + + private boolean isWindows() { + return System.getProperty("os.name").toLowerCase().contains("windows"); + } + + public void testErrors(String[] pairs, boolean printTree) { + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; + + String[] lines = input.split("\n"); + String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); + ErrorQueue equeue = antlr(fileName, fileName, input, false); + + String actual = equeue.toString(true); + actual = actual.replace(tmpdir + File.separator, ""); + System.err.println(actual); + String msg = input; + msg = msg.replace("\n","\\n"); + msg = msg.replace("\r","\\r"); + msg = msg.replace("\t","\\t"); + + assertEquals("error in: "+msg,expect,actual); + } + } + + public String getFilenameFromFirstLineOfGrammar(String line) { + String fileName = "A" + Tool.GRAMMAR_EXTENSION; + int grIndex = line.lastIndexOf("grammar"); + int semi = line.lastIndexOf(';'); + if ( grIndex>=0 && semi>=0 ) { + int space = line.indexOf(' ', grIndex); + fileName = line.substring(space+1, semi)+Tool.GRAMMAR_EXTENSION; + } + if ( fileName.length()==Tool.GRAMMAR_EXTENSION.length() ) fileName = "A" + Tool.GRAMMAR_EXTENSION; + return fileName; + } + +// void ambig(List msgs, int[] expectedAmbigAlts, String expectedAmbigInput) +// throws Exception +// { +// ambig(msgs, 0, expectedAmbigAlts, expectedAmbigInput); +// } + +// void ambig(List msgs, int i, int[] expectedAmbigAlts, String expectedAmbigInput) +// throws Exception +// { +// List amsgs = getMessagesOfType(msgs, AmbiguityMessage.class); +// AmbiguityMessage a = (AmbiguityMessage)amsgs.get(i); +// if ( a==null ) assertNull(expectedAmbigAlts); +// else { +// assertEquals(a.conflictingAlts.toString(), Arrays.toString(expectedAmbigAlts)); +// } +// assertEquals(expectedAmbigInput, a.input); +// } + +// void unreachable(List msgs, int[] expectedUnreachableAlts) +// throws Exception +// { +// unreachable(msgs, 0, expectedUnreachableAlts); +// } + +// void unreachable(List msgs, int i, int[] expectedUnreachableAlts) +// throws Exception +// { +// List amsgs = getMessagesOfType(msgs, UnreachableAltsMessage.class); +// UnreachableAltsMessage u = (UnreachableAltsMessage)amsgs.get(i); +// if ( u==null ) assertNull(expectedUnreachableAlts); +// else { +// assertEquals(u.conflictingAlts.toString(), Arrays.toString(expectedUnreachableAlts)); +// } +// } + + List getMessagesOfType(List msgs, Class c) { + List filtered = new ArrayList(); + for (ANTLRMessage m : msgs) { + if ( m.getClass() == c ) filtered.add(m); + } + return filtered; + } + + void checkRuleATN(Grammar g, String ruleName, String expecting) { + ParserATNFactory f = new ParserATNFactory(g); + ATN atn = f.createATN(); + + DOTGenerator dot = new DOTGenerator(g); + System.out.println(dot.getDOT(atn.ruleToStartState[g.getRule(ruleName).index])); + + Rule r = g.getRule(ruleName); + ATNState startState = atn.ruleToStartState[r.index]; + ATNPrinter serializer = new ATNPrinter(g, startState); + String result = serializer.asString(); + + //System.out.print(result); + assertEquals(expecting, result); + } + + public void testActions(String templates, String actionName, String action, String expected) throws org.antlr.runtime.RecognitionException { + int lp = templates.indexOf('('); + String name = templates.substring(0, lp); + STGroup group = new STGroupString(templates); + ST st = group.getInstanceOf(name); + st.add(actionName, action); + String grammar = st.render(); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(grammar, equeue); + if ( g.ast!=null && !g.ast.hasErrors ) { + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + + ATNFactory factory = new ParserATNFactory(g); + if ( g.isLexer() ) factory = new LexerATNFactory((LexerGrammar)g); + g.atn = factory.createATN(); + + CodeGenerator gen = new CodeGenerator(g); + ST outputFileST = gen.generateParser(); + String output = outputFileST.render(); + //System.out.println(output); + String b = "#" + actionName + "#"; + int start = output.indexOf(b); + String e = "#end-" + actionName + "#"; + int end = output.indexOf(e); + String snippet = output.substring(start+b.length(),end); + assertEquals(expected, snippet); + } + if ( equeue.size()>0 ) { + System.err.println(equeue.toString()); + } + } + + public static class StreamVacuum implements Runnable { + StringBuilder buf = new StringBuilder(); + BufferedReader in; + Thread sucker; + public StreamVacuum(InputStream in) { + this.in = new BufferedReader( new InputStreamReader(in) ); + } + public void start() { + sucker = new Thread(this); + sucker.start(); + } + @Override + public void run() { + try { + String line = in.readLine(); + while (line!=null) { + buf.append(line); + buf.append('\n'); + line = in.readLine(); + } + } + catch (IOException ioe) { + System.err.println("can't read output from process"); + } + } + /** wait for the thread to finish */ + public void join() throws InterruptedException { + sucker.join(); + } + @Override + public String toString() { + return buf.toString(); + } + } + + protected void checkGrammarSemanticsError(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkGrammarSemanticsWarning(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage m = equeue.warnings.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkError(ErrorQueue equeue, + ANTLRMessage expectedMessage) + throws Exception + { + //System.out.println("errors="+equeue); + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertTrue("no error; "+expectedMessage.getErrorType()+" expected", !equeue.errors.isEmpty()); + assertTrue("too many errors; "+equeue.errors, equeue.errors.size()<=1); + assertNotNull("couldn't find expected error: "+expectedMessage.getErrorType(), foundMsg); + /* + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + */ + assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); + } + + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { + return false; + } + + Token t = get(i); + if ( hide.contains(t.getType()) ) { + ((WritableToken)t).setChannel(Token.HIDDEN_CHANNEL); + } + + return true; + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } + + public static void writeFile(String dir, String fileName, String content) { + try { + File f = new File(dir, fileName); + FileWriter w = new FileWriter(f); + BufferedWriter bw = new BufferedWriter(w); + bw.write(content); + bw.close(); + w.close(); + } + catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + protected void mkdir(String dir) { + File f = new File(dir); + f.mkdirs(); + } + + protected abstract void writeParserTestFile(String parserName, + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, + boolean debug, + boolean setTrace); + + + + protected abstract void writeLexerTestFile(String lexerName, boolean showDFA); + + public void writeRecognizer(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { + if ( parserName==null ) { + writeLexerTestFile(lexerName, debug); + } + else { + writeParserTestFile(parserName, + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, + trace); + } + } + + + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(tmpdir+"/"+files[i]).delete(); + } + } + } + + protected void eraseFiles(File dir) { + String[] files = dir.list(); + for(int i = 0; files!=null && i < files.length; i++) { + new File(dir,files[i]).delete(); + } + } + + protected void eraseTempDir() { + boolean doErase = true; + String propName = getPropertyPrefix() + "-erase-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + doErase = Boolean.getBoolean(prop); + if(doErase) { + File tmpdirF = new File(tmpdir); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + } + + protected void eraseTempPyCache() { + File tmpdirF = new File(tmpdir+"/__pycache__"); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + + public String getFirstLineOfException() { + if ( this.stderrDuringParse ==null ) { + return null; + } + String[] lines = this.stderrDuringParse.split("\n"); + String prefix="Exception in thread \"main\" "; + return lines[0].substring(prefix.length(),lines[0].length()); + } + + /** + * When looking at a result set that consists of a Map/HashTable + * we cannot rely on the output order, as the hashing algorithm or other aspects + * of the implementation may be different on differnt JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a + * bit of a hack, but guarantees that we get the same order on all systems. We assume that + * the keys are strings. + * + * @param m The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } + + System.out.println("Map toString looks like: " + m.toString()); + + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); + + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } + + public List realElements(List elements) { + return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); + } + + public void assertNotNullOrEmpty(String message, String text) { + assertNotNull(message, text); + assertFalse(message, text.isEmpty()); + } + + public void assertNotNullOrEmpty(String text) { + assertNotNull(text); + assertFalse(text.isEmpty()); + } + + public static class IntTokenStream implements TokenStream { + IntegerList types; + int p=0; + public IntTokenStream(IntegerList types) { this.types = types; } + + @Override + public void consume() { p++; } + + @Override + public int LA(int i) { return LT(i).getType(); } + + @Override + public int mark() { + return index(); + } + + @Override + public int index() { return p; } + + @Override + public void release(int marker) { + seek(marker); + } + + @Override + public void seek(int index) { + p = index; + } + + @Override + public int size() { + return types.size(); + } + + @Override + public String getSourceName() { + return null; + } + + @Override + public Token LT(int i) { + CommonToken t; + int rawIndex = p + i - 1; + if ( rawIndex>=types.size() ) t = new CommonToken(Token.EOF); + else t = new CommonToken(types.get(rawIndex)); + t.setTokenIndex(rawIndex); + return t; + } + + @Override + public Token get(int i) { + return new org.antlr.v4.runtime.CommonToken(types.get(i)); + } + + @Override + public TokenSource getTokenSource() { + return null; + } + + @Override + public String getText() { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Interval interval) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(RuleContext ctx) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Token start, Token stop) { + throw new UnsupportedOperationException("can't give strings"); + } + } + + /** Sort a list */ + public > List sort(List data) { + List dup = new ArrayList(); + dup.addAll(data); + Collections.sort(dup); + return dup; + } + + /** Return map sorted by key */ + public ,V> LinkedHashMap sort(Map data) { + LinkedHashMap dup = new LinkedHashMap(); + List keys = new ArrayList(); + keys.addAll(data.keySet()); + Collections.sort(keys); + for (K k : keys) { + dup.put(k, data.get(k)); + } + return dup; + } +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/BasePython2Test.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/BasePython2Test.java new file mode 100644 index 000000000..d096451b4 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/BasePython2Test.java @@ -0,0 +1,94 @@ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.antlr.v4.test.runtime.legacy.python.BasePythonTest; +import org.stringtemplate.v4.ST; + +public abstract class BasePython2Test extends BasePythonTest { + + @Override + protected String getLanguage() { + return "Python2"; + } + + @Override + protected String getPythonExecutable() { + return "python2.7"; + } + + @Override + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + ST outputFileST = new ST( + "from __future__ import print_function\n" + + "import sys\n" + + "from antlr4 import *\n" + + "from import \n" + + "\n" + + "def main(argv):\n" + + " input = FileStream(argv[1])\n" + + " lexer = (input)\n" + + " stream = CommonTokenStream(lexer)\n" + + " stream.fill()\n" + + " [ print(str(t)) for t in stream.tokens ]\n" + + (showDFA ? " print(lexer._interp.decisionToDFA[Lexer.DEFAULT_MODE].toLexerString(), end='')\n" + : "") + "\n" + "if __name__ == '__main__':\n" + + " main(sys.argv)\n" + "\n"); + outputFileST.add("lexerName", lexerName); + writeFile(tmpdir, "Test.py", outputFileST.render()); + } + + @Override + protected void writeParserTestFile(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { + if(!parserStartRuleName.endsWith(")")) + parserStartRuleName += "()"; + ST outputFileST = new ST( + "import sys\n" + + "from antlr4 import *\n" + + "from import \n" + + "from import \n" + + "from import \n" + + "from import \n" + + "\n" + + "class TreeShapeListener(ParseTreeListener):\n" + + "\n" + + " def visitTerminal(self, node):\n" + + " pass\n" + + "\n" + + " def visitErrorNode(self, node):\n" + + " pass\n" + + "\n" + + " def exitEveryRule(self, ctx):\n" + + " pass\n" + + "\n" + + " def enterEveryRule(self, ctx):\n" + + " for child in ctx.getChildren():\n" + + " parent = child.parentCtx\n" + + " if not isinstance(parent, RuleNode) or parent.getRuleContext() != ctx:\n" + + " raise IllegalStateException(\"Invalid parse tree shape detected.\")\n" + + "\n" + + "def main(argv):\n" + + " input = FileStream(argv[1])\n" + + " lexer = (input)\n" + + " stream = CommonTokenStream(lexer)\n" + + "" + + " parser.buildParseTrees = True\n" + + " tree = parser.\n" + + " ParseTreeWalker.DEFAULT.walk(TreeShapeListener(), tree)\n" + + "\n" + "if __name__ == '__main__':\n" + + " main(sys.argv)\n" + "\n"); + String stSource = " parser = (stream)\n"; + if(debug) + stSource += " parser.addErrorListener(DiagnosticErrorListener())\n"; + if(trace) + stSource += " parser.setTrace(True)\n"; + ST createParserST = new ST(stSource); + outputFileST.add("createParser", createParserST); + outputFileST.add("parserName", parserName); + outputFileST.add("lexerName", lexerName); + outputFileST.add("listenerName", listenerName); + outputFileST.add("visitorName", visitorName); + outputFileST.add("parserStartRuleName", parserStartRuleName); + writeFile(tmpdir, "Test.py", outputFileST.render()); + } +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeLexers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeLexers.java new file mode 100644 index 000000000..5e970c728 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeLexers.java @@ -0,0 +1,71 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeLexers extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {print(\"S.A\")};\n" + + "C : 'c' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="abc"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "S.A\n" + + "[@0,0:0='a',<3>,1:0]\n" + + "[@1,1:1='b',<1>,1:1]\n" + + "[@2,2:2='c',<4>,1:2]\n" + + "[@3,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {print(\"S.A\")} ;\n" + + "B : 'b' {print(\"S.B\")} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(79); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("A : 'a' B {print(\"M.A\")} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "M.A\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeParsers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeParsers.java new file mode 100644 index 000000000..e538a9604 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestCompositeParsers.java @@ -0,0 +1,503 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.Grammar; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeParsers extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBringInLiteralsFromDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : '=' 'a' {print(\"S.a\",end='')};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="=a"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCombinedImportsCombined() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : 'x' INT {print(\"S.x\")};\n" + + "INT : '0'..'9'+ ;\n" + + "WS : (' '|'\\n') -> skip ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(31); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : x INT;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + + + String input ="x 34 9"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatesSeeSameTokenType() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { C, B, A } // reverse order\n" + + "y : A {print(\"T.y\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : A {print(\"S.x\")};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(598); + grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); + grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); + grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); + grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); + grammarBuilder.append("// mapping in each parser:\n"); + grammarBuilder.append("// public static final int C=6;\n"); + grammarBuilder.append("// public static final int EOF=-1;\n"); + grammarBuilder.append("// public static final int B=5;\n"); + grammarBuilder.append("// public static final int WS=7;\n"); + grammarBuilder.append("// public static final int A=4;\n"); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); + grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); + grammarBuilder.append("A : 'a' ; \n"); + grammarBuilder.append("C : 'c' ; \n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + + + String input ="aa"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals( + "S.x\n" + + "T.y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorAccessesDelegateMembers() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "@parser::members {\n" + + "def foo(self):\n" + + " print('foo')\n" + + "}\n" + + "a : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar M; // uses no rules from the import\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : 'b' {self.foo()} ; // gS is import pointer\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("foo\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {print(\"S.a\")};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a[int x] returns [int y] : B {print(\"S.a\",end='')} {$y=1000;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : label=a[3] {print($label.y)} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a1000\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {print(\"S.a\",end='')} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(128); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a {print($a.text,end='')} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.ab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "a : B {print(\"T.a\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {print(\"S.a\")};\n" + + "b : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : b {print(\"S.a\",end='')};\n" + + "b : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("b : 'b'|'c';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegates() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { A }\n" + + "b : 'b' {print(\"T.b\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {print(\"S.a\")};\n" + + "b : 'b' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(81); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S, T;\n"); + grammarBuilder.append("b : 'b'|'c' {print(\"M.b\")}|B|A;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.b\n" + + "S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "type_ : 'int' ;\n" + + "decl : type_ ID ';'\n" + + " | type_ ID init ';' {print(\"JavaDecl: \" + $text,end='')};\n" + + "init : '=' INT;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("prog : decl ;\n"); + grammarBuilder.append("type_ : 'int' | 'float' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="float x = 3;"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); + + assertEquals("JavaDecl: floatx=3;\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportLexerWithOnlyFragmentRules() throws Exception { + mkdir(tmpdir); + + String slave_Unicode = + "lexer grammar Unicode;\n" + + "\n" + + "fragment\n" + + "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + + " | '\\u2000'..'\\u200A'\n" + + " | '\\u202F' | '\\u205F' | '\\u3000'\n" + + " ;\n"; + writeFile(tmpdir, "Unicode.g4", slave_Unicode); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar Test;\n"); + grammarBuilder.append("import Unicode;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program : 'test' 'test';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="test test"; + String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedGrammarWithEmptyOptions() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "options {}\n" + + "a : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedRuleWithAction() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a @after {x = 0} : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordVSIDOrder() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "ID : 'a'..'z'+;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("a : A {print(\"M.a: \" + str($A))};\n"); + grammarBuilder.append("A : 'abc' {print(\"M.A\")};\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.A\n" + + "M.a: [@0,0:2='abc',<1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestFullContextParsing.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestFullContextParsing.java new file mode 100644 index 000000000..fc6aaa887 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestFullContextParsing.java @@ -0,0 +1,522 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestFullContextParsing extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigYieldsCtxSensitiveDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(100); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : ID | ID {} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-ID->:s1^=>1\n", found); + + assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbiguityNoLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(206); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(" : expr expr {print(\"alt 1\")}\n"); + grammarBuilder.append(" | expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: '@'\n"); + grammarBuilder.append(" | ID '@'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a@"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("alt 1\n", found); + + assertEquals( + "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + + "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + + "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFATwoDiffInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc @ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 2:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + + "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(161); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(161); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="@ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(286); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(286); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b * (expr c)))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + + "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + + "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s1=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo else bar }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + + "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLoopsSimulateTailRecursion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(299); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(" : expr_or_assign*;\n"); + grammarBuilder.append("expr_or_assign\n"); + grammarBuilder.append(" : expr '++' {print(\"fail.\")}\n"); + grammarBuilder.append(" | expr {print(\"pass: \"+$expr.text)}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); + grammarBuilder.append("expr_primary\n"); + grammarBuilder.append(" : '(' ID ')'\n"); + grammarBuilder.append(" | ID '(' ID ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a(i)<-x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("pass: a(i)<-x\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + + "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSLLSeesEOFInLLGrammar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(148); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : a;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + + "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLeftRecursion.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLeftRecursion.java new file mode 100644 index 000000000..ce62784b6 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLeftRecursion.java @@ -0,0 +1,3502 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLeftRecursion extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="1\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a = 5\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="b = 6\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*2\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(*a)[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="**a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[3]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator b) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator ( (declarator a) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[]()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[][]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a x) y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a (a x) y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 1) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) - (e 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.this"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . this) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e - (e a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a|b&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f(x)==T.c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_11() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f().g(x,1)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_12() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new T[((n-1) * x) + 1]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a|b)&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a > b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) > (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a >> b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) >> (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a^b^c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new A().b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)t.f()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(170); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(170); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(170); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrecedenceFilterConsidersContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog \n"); + grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); + grammarBuilder.append(": statement* EOF {};\n"); + grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); + grammarBuilder.append("letterA: 'a';"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(216); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (literal - 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(216); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1 + -1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(329); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(329); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a+b)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(329); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b+c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("((a=b)+c)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("9\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPred() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a {True}? ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPredFailOption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(159); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID {False}?\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y z))\n", found); + + assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a x))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1,3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1, 3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerErrors.java new file mode 100644 index 000000000..33c1593a4 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerErrors.java @@ -0,0 +1,259 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerErrors extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatFailsBackToDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(39); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:3='ab',<1>,1:2]\n" + + "[@2,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;\n"); + grammarBuilder.append("C : 'abcd' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababcx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:4='abc',<2>,1:2]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { } }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='{ { } }',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testErrorInMiddle() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStart() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,1:0='',<-1>,1:1]\n", found); + + assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStartAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,2:1='',<-1>,1:2]\n", found); + + assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInTokenAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + + assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerExecDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar L;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + String input ="x : x"; + String found = execLexer("L.g4", grammar, "LLexer", input, false); + assertEquals( + "[@0,0:0='x',<3>,1:0]\n" + + "[@1,2:2=':',<1>,1:2]\n" + + "[@2,4:4='x',<3>,1:4]\n" + + "[@3,5:4='',<-1>,1:5]\n", found); + + assertEquals( + "line 1:1 token recognition error at: ' '\n" + + "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo\"]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerExec.java new file mode 100644 index 000000000..80d59e1f9 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestLexerExec.java @@ -0,0 +1,4997 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerExec extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionPlacement() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(228); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ({print(\"stuff fail: \" + self.text)} 'a'\n"); + grammarBuilder.append("| {print(\"stuff0: \" + self.text)}\n"); + grammarBuilder.append(" 'a' {print(\"stuff1: \" + self.text)}\n"); + grammarBuilder.append(" 'b' {print(\"stuff2: \" + self.text)})\n"); + grammarBuilder.append(" {print(self.text)} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "stuff0: \n" + + "stuff1: a\n" + + "stuff2: ab\n" + + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(72); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetInSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(79); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : (~[ab \\n]|'a') {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="a x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:2='x',<1>,1:2]\n" + + "[@2,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetNot() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="xaf"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:2='xaf',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetPlus() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(73); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(115); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); + grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {print(\"ID\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34 a2 abc \n" + + " "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "ID\n" + + "ID\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,7:8='a2',<2>,2:4]\n" + + "[@3,10:12='abc',<2>,2:7]\n" + + "[@4,18:17='',<-1>,3:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithEscapedChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(81); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DASHBRACK : [\\-\\]]+ {print(\"DASHBRACK\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="- ] "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "DASHBRACK\n" + + "DASHBRACK\n" + + "[@0,0:0='-',<1>,1:0]\n" + + "[@1,2:2=']',<1>,1:2]\n" + + "[@2,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEndRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-]+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="00\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='00',<1>,1:0]\n" + + "[@1,3:2='',<-1>,2:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEscapeChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(67); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"a-z]+ {print(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:2='b\"a',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(68); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"\\\\ab]+ {print(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"\\a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:3='b\"\\a',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithReversedRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(65); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [z-a9]+ {print(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="9"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:0='9',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFByItself() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DONE : EOF ;\n"); + grammarBuilder.append("A : 'a';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:-1='',<1>,1:0]\n" + + "[@1,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input ="a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(87); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ('a' | 'ab') {print(self.text)} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testHexVsID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); + grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); + grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="x 0 1 a.b a.l"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='x',<5>,1:0]\n" + + "[@1,1:1=' ',<6>,1:1]\n" + + "[@2,2:2='0',<2>,1:2]\n" + + "[@3,3:3=' ',<6>,1:3]\n" + + "[@4,4:4='1',<2>,1:4]\n" + + "[@5,5:5=' ',<6>,1:5]\n" + + "[@6,6:6='a',<5>,1:6]\n" + + "[@7,7:7='.',<4>,1:7]\n" + + "[@8,8:8='b',<5>,1:8]\n" + + "[@9,9:9=' ',<6>,1:9]\n" + + "[@10,10:10='a',<5>,1:10]\n" + + "[@11,11:11='.',<4>,1:11]\n" + + "[@12,12:12='l',<5>,1:12]\n" + + "[@13,13:12='',<-1>,1:13]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("KEND : 'end' ; // has priority\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="end eend ending a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:2='end',<1>,1:0]\n" + + "[@1,3:3=' ',<3>,1:3]\n" + + "[@2,4:7='eend',<2>,1:4]\n" + + "[@3,8:8=' ',<3>,1:8]\n" + + "[@4,9:14='ending',<2>,1:9]\n" + + "[@5,15:15=' ',<3>,1:15]\n" + + "[@6,16:16='a',<2>,1:16]\n" + + "[@7,17:16='',<-1>,1:17]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLargeLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85821); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); + grammarBuilder.append("KW0 : 'KW' '0';\n"); + grammarBuilder.append("KW1 : 'KW' '1';\n"); + grammarBuilder.append("KW2 : 'KW' '2';\n"); + grammarBuilder.append("KW3 : 'KW' '3';\n"); + grammarBuilder.append("KW4 : 'KW' '4';\n"); + grammarBuilder.append("KW5 : 'KW' '5';\n"); + grammarBuilder.append("KW6 : 'KW' '6';\n"); + grammarBuilder.append("KW7 : 'KW' '7';\n"); + grammarBuilder.append("KW8 : 'KW' '8';\n"); + grammarBuilder.append("KW9 : 'KW' '9';\n"); + grammarBuilder.append("KW10 : 'KW' '10';\n"); + grammarBuilder.append("KW11 : 'KW' '11';\n"); + grammarBuilder.append("KW12 : 'KW' '12';\n"); + grammarBuilder.append("KW13 : 'KW' '13';\n"); + grammarBuilder.append("KW14 : 'KW' '14';\n"); + grammarBuilder.append("KW15 : 'KW' '15';\n"); + grammarBuilder.append("KW16 : 'KW' '16';\n"); + grammarBuilder.append("KW17 : 'KW' '17';\n"); + grammarBuilder.append("KW18 : 'KW' '18';\n"); + grammarBuilder.append("KW19 : 'KW' '19';\n"); + grammarBuilder.append("KW20 : 'KW' '20';\n"); + grammarBuilder.append("KW21 : 'KW' '21';\n"); + grammarBuilder.append("KW22 : 'KW' '22';\n"); + grammarBuilder.append("KW23 : 'KW' '23';\n"); + grammarBuilder.append("KW24 : 'KW' '24';\n"); + grammarBuilder.append("KW25 : 'KW' '25';\n"); + grammarBuilder.append("KW26 : 'KW' '26';\n"); + grammarBuilder.append("KW27 : 'KW' '27';\n"); + grammarBuilder.append("KW28 : 'KW' '28';\n"); + grammarBuilder.append("KW29 : 'KW' '29';\n"); + grammarBuilder.append("KW30 : 'KW' '30';\n"); + grammarBuilder.append("KW31 : 'KW' '31';\n"); + grammarBuilder.append("KW32 : 'KW' '32';\n"); + grammarBuilder.append("KW33 : 'KW' '33';\n"); + grammarBuilder.append("KW34 : 'KW' '34';\n"); + grammarBuilder.append("KW35 : 'KW' '35';\n"); + grammarBuilder.append("KW36 : 'KW' '36';\n"); + grammarBuilder.append("KW37 : 'KW' '37';\n"); + grammarBuilder.append("KW38 : 'KW' '38';\n"); + grammarBuilder.append("KW39 : 'KW' '39';\n"); + grammarBuilder.append("KW40 : 'KW' '40';\n"); + grammarBuilder.append("KW41 : 'KW' '41';\n"); + grammarBuilder.append("KW42 : 'KW' '42';\n"); + grammarBuilder.append("KW43 : 'KW' '43';\n"); + grammarBuilder.append("KW44 : 'KW' '44';\n"); + grammarBuilder.append("KW45 : 'KW' '45';\n"); + grammarBuilder.append("KW46 : 'KW' '46';\n"); + grammarBuilder.append("KW47 : 'KW' '47';\n"); + grammarBuilder.append("KW48 : 'KW' '48';\n"); + grammarBuilder.append("KW49 : 'KW' '49';\n"); + grammarBuilder.append("KW50 : 'KW' '50';\n"); + grammarBuilder.append("KW51 : 'KW' '51';\n"); + grammarBuilder.append("KW52 : 'KW' '52';\n"); + grammarBuilder.append("KW53 : 'KW' '53';\n"); + grammarBuilder.append("KW54 : 'KW' '54';\n"); + grammarBuilder.append("KW55 : 'KW' '55';\n"); + grammarBuilder.append("KW56 : 'KW' '56';\n"); + grammarBuilder.append("KW57 : 'KW' '57';\n"); + grammarBuilder.append("KW58 : 'KW' '58';\n"); + grammarBuilder.append("KW59 : 'KW' '59';\n"); + grammarBuilder.append("KW60 : 'KW' '60';\n"); + grammarBuilder.append("KW61 : 'KW' '61';\n"); + grammarBuilder.append("KW62 : 'KW' '62';\n"); + grammarBuilder.append("KW63 : 'KW' '63';\n"); + grammarBuilder.append("KW64 : 'KW' '64';\n"); + grammarBuilder.append("KW65 : 'KW' '65';\n"); + grammarBuilder.append("KW66 : 'KW' '66';\n"); + grammarBuilder.append("KW67 : 'KW' '67';\n"); + grammarBuilder.append("KW68 : 'KW' '68';\n"); + grammarBuilder.append("KW69 : 'KW' '69';\n"); + grammarBuilder.append("KW70 : 'KW' '70';\n"); + grammarBuilder.append("KW71 : 'KW' '71';\n"); + grammarBuilder.append("KW72 : 'KW' '72';\n"); + grammarBuilder.append("KW73 : 'KW' '73';\n"); + grammarBuilder.append("KW74 : 'KW' '74';\n"); + grammarBuilder.append("KW75 : 'KW' '75';\n"); + grammarBuilder.append("KW76 : 'KW' '76';\n"); + grammarBuilder.append("KW77 : 'KW' '77';\n"); + grammarBuilder.append("KW78 : 'KW' '78';\n"); + grammarBuilder.append("KW79 : 'KW' '79';\n"); + grammarBuilder.append("KW80 : 'KW' '80';\n"); + grammarBuilder.append("KW81 : 'KW' '81';\n"); + grammarBuilder.append("KW82 : 'KW' '82';\n"); + grammarBuilder.append("KW83 : 'KW' '83';\n"); + grammarBuilder.append("KW84 : 'KW' '84';\n"); + grammarBuilder.append("KW85 : 'KW' '85';\n"); + grammarBuilder.append("KW86 : 'KW' '86';\n"); + grammarBuilder.append("KW87 : 'KW' '87';\n"); + grammarBuilder.append("KW88 : 'KW' '88';\n"); + grammarBuilder.append("KW89 : 'KW' '89';\n"); + grammarBuilder.append("KW90 : 'KW' '90';\n"); + grammarBuilder.append("KW91 : 'KW' '91';\n"); + grammarBuilder.append("KW92 : 'KW' '92';\n"); + grammarBuilder.append("KW93 : 'KW' '93';\n"); + grammarBuilder.append("KW94 : 'KW' '94';\n"); + grammarBuilder.append("KW95 : 'KW' '95';\n"); + grammarBuilder.append("KW96 : 'KW' '96';\n"); + grammarBuilder.append("KW97 : 'KW' '97';\n"); + grammarBuilder.append("KW98 : 'KW' '98';\n"); + grammarBuilder.append("KW99 : 'KW' '99';\n"); + grammarBuilder.append("KW100 : 'KW' '100';\n"); + grammarBuilder.append("KW101 : 'KW' '101';\n"); + grammarBuilder.append("KW102 : 'KW' '102';\n"); + grammarBuilder.append("KW103 : 'KW' '103';\n"); + grammarBuilder.append("KW104 : 'KW' '104';\n"); + grammarBuilder.append("KW105 : 'KW' '105';\n"); + grammarBuilder.append("KW106 : 'KW' '106';\n"); + grammarBuilder.append("KW107 : 'KW' '107';\n"); + grammarBuilder.append("KW108 : 'KW' '108';\n"); + grammarBuilder.append("KW109 : 'KW' '109';\n"); + grammarBuilder.append("KW110 : 'KW' '110';\n"); + grammarBuilder.append("KW111 : 'KW' '111';\n"); + grammarBuilder.append("KW112 : 'KW' '112';\n"); + grammarBuilder.append("KW113 : 'KW' '113';\n"); + grammarBuilder.append("KW114 : 'KW' '114';\n"); + grammarBuilder.append("KW115 : 'KW' '115';\n"); + grammarBuilder.append("KW116 : 'KW' '116';\n"); + grammarBuilder.append("KW117 : 'KW' '117';\n"); + grammarBuilder.append("KW118 : 'KW' '118';\n"); + grammarBuilder.append("KW119 : 'KW' '119';\n"); + grammarBuilder.append("KW120 : 'KW' '120';\n"); + grammarBuilder.append("KW121 : 'KW' '121';\n"); + grammarBuilder.append("KW122 : 'KW' '122';\n"); + grammarBuilder.append("KW123 : 'KW' '123';\n"); + grammarBuilder.append("KW124 : 'KW' '124';\n"); + grammarBuilder.append("KW125 : 'KW' '125';\n"); + grammarBuilder.append("KW126 : 'KW' '126';\n"); + grammarBuilder.append("KW127 : 'KW' '127';\n"); + grammarBuilder.append("KW128 : 'KW' '128';\n"); + grammarBuilder.append("KW129 : 'KW' '129';\n"); + grammarBuilder.append("KW130 : 'KW' '130';\n"); + grammarBuilder.append("KW131 : 'KW' '131';\n"); + grammarBuilder.append("KW132 : 'KW' '132';\n"); + grammarBuilder.append("KW133 : 'KW' '133';\n"); + grammarBuilder.append("KW134 : 'KW' '134';\n"); + grammarBuilder.append("KW135 : 'KW' '135';\n"); + grammarBuilder.append("KW136 : 'KW' '136';\n"); + grammarBuilder.append("KW137 : 'KW' '137';\n"); + grammarBuilder.append("KW138 : 'KW' '138';\n"); + grammarBuilder.append("KW139 : 'KW' '139';\n"); + grammarBuilder.append("KW140 : 'KW' '140';\n"); + grammarBuilder.append("KW141 : 'KW' '141';\n"); + grammarBuilder.append("KW142 : 'KW' '142';\n"); + grammarBuilder.append("KW143 : 'KW' '143';\n"); + grammarBuilder.append("KW144 : 'KW' '144';\n"); + grammarBuilder.append("KW145 : 'KW' '145';\n"); + grammarBuilder.append("KW146 : 'KW' '146';\n"); + grammarBuilder.append("KW147 : 'KW' '147';\n"); + grammarBuilder.append("KW148 : 'KW' '148';\n"); + grammarBuilder.append("KW149 : 'KW' '149';\n"); + grammarBuilder.append("KW150 : 'KW' '150';\n"); + grammarBuilder.append("KW151 : 'KW' '151';\n"); + grammarBuilder.append("KW152 : 'KW' '152';\n"); + grammarBuilder.append("KW153 : 'KW' '153';\n"); + grammarBuilder.append("KW154 : 'KW' '154';\n"); + grammarBuilder.append("KW155 : 'KW' '155';\n"); + grammarBuilder.append("KW156 : 'KW' '156';\n"); + grammarBuilder.append("KW157 : 'KW' '157';\n"); + grammarBuilder.append("KW158 : 'KW' '158';\n"); + grammarBuilder.append("KW159 : 'KW' '159';\n"); + grammarBuilder.append("KW160 : 'KW' '160';\n"); + grammarBuilder.append("KW161 : 'KW' '161';\n"); + grammarBuilder.append("KW162 : 'KW' '162';\n"); + grammarBuilder.append("KW163 : 'KW' '163';\n"); + grammarBuilder.append("KW164 : 'KW' '164';\n"); + grammarBuilder.append("KW165 : 'KW' '165';\n"); + grammarBuilder.append("KW166 : 'KW' '166';\n"); + grammarBuilder.append("KW167 : 'KW' '167';\n"); + grammarBuilder.append("KW168 : 'KW' '168';\n"); + grammarBuilder.append("KW169 : 'KW' '169';\n"); + grammarBuilder.append("KW170 : 'KW' '170';\n"); + grammarBuilder.append("KW171 : 'KW' '171';\n"); + grammarBuilder.append("KW172 : 'KW' '172';\n"); + grammarBuilder.append("KW173 : 'KW' '173';\n"); + grammarBuilder.append("KW174 : 'KW' '174';\n"); + grammarBuilder.append("KW175 : 'KW' '175';\n"); + grammarBuilder.append("KW176 : 'KW' '176';\n"); + grammarBuilder.append("KW177 : 'KW' '177';\n"); + grammarBuilder.append("KW178 : 'KW' '178';\n"); + grammarBuilder.append("KW179 : 'KW' '179';\n"); + grammarBuilder.append("KW180 : 'KW' '180';\n"); + grammarBuilder.append("KW181 : 'KW' '181';\n"); + grammarBuilder.append("KW182 : 'KW' '182';\n"); + grammarBuilder.append("KW183 : 'KW' '183';\n"); + grammarBuilder.append("KW184 : 'KW' '184';\n"); + grammarBuilder.append("KW185 : 'KW' '185';\n"); + grammarBuilder.append("KW186 : 'KW' '186';\n"); + grammarBuilder.append("KW187 : 'KW' '187';\n"); + grammarBuilder.append("KW188 : 'KW' '188';\n"); + grammarBuilder.append("KW189 : 'KW' '189';\n"); + grammarBuilder.append("KW190 : 'KW' '190';\n"); + grammarBuilder.append("KW191 : 'KW' '191';\n"); + grammarBuilder.append("KW192 : 'KW' '192';\n"); + grammarBuilder.append("KW193 : 'KW' '193';\n"); + grammarBuilder.append("KW194 : 'KW' '194';\n"); + grammarBuilder.append("KW195 : 'KW' '195';\n"); + grammarBuilder.append("KW196 : 'KW' '196';\n"); + grammarBuilder.append("KW197 : 'KW' '197';\n"); + grammarBuilder.append("KW198 : 'KW' '198';\n"); + grammarBuilder.append("KW199 : 'KW' '199';\n"); + grammarBuilder.append("KW200 : 'KW' '200';\n"); + grammarBuilder.append("KW201 : 'KW' '201';\n"); + grammarBuilder.append("KW202 : 'KW' '202';\n"); + grammarBuilder.append("KW203 : 'KW' '203';\n"); + grammarBuilder.append("KW204 : 'KW' '204';\n"); + grammarBuilder.append("KW205 : 'KW' '205';\n"); + grammarBuilder.append("KW206 : 'KW' '206';\n"); + grammarBuilder.append("KW207 : 'KW' '207';\n"); + grammarBuilder.append("KW208 : 'KW' '208';\n"); + grammarBuilder.append("KW209 : 'KW' '209';\n"); + grammarBuilder.append("KW210 : 'KW' '210';\n"); + grammarBuilder.append("KW211 : 'KW' '211';\n"); + grammarBuilder.append("KW212 : 'KW' '212';\n"); + grammarBuilder.append("KW213 : 'KW' '213';\n"); + grammarBuilder.append("KW214 : 'KW' '214';\n"); + grammarBuilder.append("KW215 : 'KW' '215';\n"); + grammarBuilder.append("KW216 : 'KW' '216';\n"); + grammarBuilder.append("KW217 : 'KW' '217';\n"); + grammarBuilder.append("KW218 : 'KW' '218';\n"); + grammarBuilder.append("KW219 : 'KW' '219';\n"); + grammarBuilder.append("KW220 : 'KW' '220';\n"); + grammarBuilder.append("KW221 : 'KW' '221';\n"); + grammarBuilder.append("KW222 : 'KW' '222';\n"); + grammarBuilder.append("KW223 : 'KW' '223';\n"); + grammarBuilder.append("KW224 : 'KW' '224';\n"); + grammarBuilder.append("KW225 : 'KW' '225';\n"); + grammarBuilder.append("KW226 : 'KW' '226';\n"); + grammarBuilder.append("KW227 : 'KW' '227';\n"); + grammarBuilder.append("KW228 : 'KW' '228';\n"); + grammarBuilder.append("KW229 : 'KW' '229';\n"); + grammarBuilder.append("KW230 : 'KW' '230';\n"); + grammarBuilder.append("KW231 : 'KW' '231';\n"); + grammarBuilder.append("KW232 : 'KW' '232';\n"); + grammarBuilder.append("KW233 : 'KW' '233';\n"); + grammarBuilder.append("KW234 : 'KW' '234';\n"); + grammarBuilder.append("KW235 : 'KW' '235';\n"); + grammarBuilder.append("KW236 : 'KW' '236';\n"); + grammarBuilder.append("KW237 : 'KW' '237';\n"); + grammarBuilder.append("KW238 : 'KW' '238';\n"); + grammarBuilder.append("KW239 : 'KW' '239';\n"); + grammarBuilder.append("KW240 : 'KW' '240';\n"); + grammarBuilder.append("KW241 : 'KW' '241';\n"); + grammarBuilder.append("KW242 : 'KW' '242';\n"); + grammarBuilder.append("KW243 : 'KW' '243';\n"); + grammarBuilder.append("KW244 : 'KW' '244';\n"); + grammarBuilder.append("KW245 : 'KW' '245';\n"); + grammarBuilder.append("KW246 : 'KW' '246';\n"); + grammarBuilder.append("KW247 : 'KW' '247';\n"); + grammarBuilder.append("KW248 : 'KW' '248';\n"); + grammarBuilder.append("KW249 : 'KW' '249';\n"); + grammarBuilder.append("KW250 : 'KW' '250';\n"); + grammarBuilder.append("KW251 : 'KW' '251';\n"); + grammarBuilder.append("KW252 : 'KW' '252';\n"); + grammarBuilder.append("KW253 : 'KW' '253';\n"); + grammarBuilder.append("KW254 : 'KW' '254';\n"); + grammarBuilder.append("KW255 : 'KW' '255';\n"); + grammarBuilder.append("KW256 : 'KW' '256';\n"); + grammarBuilder.append("KW257 : 'KW' '257';\n"); + grammarBuilder.append("KW258 : 'KW' '258';\n"); + grammarBuilder.append("KW259 : 'KW' '259';\n"); + grammarBuilder.append("KW260 : 'KW' '260';\n"); + grammarBuilder.append("KW261 : 'KW' '261';\n"); + grammarBuilder.append("KW262 : 'KW' '262';\n"); + grammarBuilder.append("KW263 : 'KW' '263';\n"); + grammarBuilder.append("KW264 : 'KW' '264';\n"); + grammarBuilder.append("KW265 : 'KW' '265';\n"); + grammarBuilder.append("KW266 : 'KW' '266';\n"); + grammarBuilder.append("KW267 : 'KW' '267';\n"); + grammarBuilder.append("KW268 : 'KW' '268';\n"); + grammarBuilder.append("KW269 : 'KW' '269';\n"); + grammarBuilder.append("KW270 : 'KW' '270';\n"); + grammarBuilder.append("KW271 : 'KW' '271';\n"); + grammarBuilder.append("KW272 : 'KW' '272';\n"); + grammarBuilder.append("KW273 : 'KW' '273';\n"); + grammarBuilder.append("KW274 : 'KW' '274';\n"); + grammarBuilder.append("KW275 : 'KW' '275';\n"); + grammarBuilder.append("KW276 : 'KW' '276';\n"); + grammarBuilder.append("KW277 : 'KW' '277';\n"); + grammarBuilder.append("KW278 : 'KW' '278';\n"); + grammarBuilder.append("KW279 : 'KW' '279';\n"); + grammarBuilder.append("KW280 : 'KW' '280';\n"); + grammarBuilder.append("KW281 : 'KW' '281';\n"); + grammarBuilder.append("KW282 : 'KW' '282';\n"); + grammarBuilder.append("KW283 : 'KW' '283';\n"); + grammarBuilder.append("KW284 : 'KW' '284';\n"); + grammarBuilder.append("KW285 : 'KW' '285';\n"); + grammarBuilder.append("KW286 : 'KW' '286';\n"); + grammarBuilder.append("KW287 : 'KW' '287';\n"); + grammarBuilder.append("KW288 : 'KW' '288';\n"); + grammarBuilder.append("KW289 : 'KW' '289';\n"); + grammarBuilder.append("KW290 : 'KW' '290';\n"); + grammarBuilder.append("KW291 : 'KW' '291';\n"); + grammarBuilder.append("KW292 : 'KW' '292';\n"); + grammarBuilder.append("KW293 : 'KW' '293';\n"); + grammarBuilder.append("KW294 : 'KW' '294';\n"); + grammarBuilder.append("KW295 : 'KW' '295';\n"); + grammarBuilder.append("KW296 : 'KW' '296';\n"); + grammarBuilder.append("KW297 : 'KW' '297';\n"); + grammarBuilder.append("KW298 : 'KW' '298';\n"); + grammarBuilder.append("KW299 : 'KW' '299';\n"); + grammarBuilder.append("KW300 : 'KW' '300';\n"); + grammarBuilder.append("KW301 : 'KW' '301';\n"); + grammarBuilder.append("KW302 : 'KW' '302';\n"); + grammarBuilder.append("KW303 : 'KW' '303';\n"); + grammarBuilder.append("KW304 : 'KW' '304';\n"); + grammarBuilder.append("KW305 : 'KW' '305';\n"); + grammarBuilder.append("KW306 : 'KW' '306';\n"); + grammarBuilder.append("KW307 : 'KW' '307';\n"); + grammarBuilder.append("KW308 : 'KW' '308';\n"); + grammarBuilder.append("KW309 : 'KW' '309';\n"); + grammarBuilder.append("KW310 : 'KW' '310';\n"); + grammarBuilder.append("KW311 : 'KW' '311';\n"); + grammarBuilder.append("KW312 : 'KW' '312';\n"); + grammarBuilder.append("KW313 : 'KW' '313';\n"); + grammarBuilder.append("KW314 : 'KW' '314';\n"); + grammarBuilder.append("KW315 : 'KW' '315';\n"); + grammarBuilder.append("KW316 : 'KW' '316';\n"); + grammarBuilder.append("KW317 : 'KW' '317';\n"); + grammarBuilder.append("KW318 : 'KW' '318';\n"); + grammarBuilder.append("KW319 : 'KW' '319';\n"); + grammarBuilder.append("KW320 : 'KW' '320';\n"); + grammarBuilder.append("KW321 : 'KW' '321';\n"); + grammarBuilder.append("KW322 : 'KW' '322';\n"); + grammarBuilder.append("KW323 : 'KW' '323';\n"); + grammarBuilder.append("KW324 : 'KW' '324';\n"); + grammarBuilder.append("KW325 : 'KW' '325';\n"); + grammarBuilder.append("KW326 : 'KW' '326';\n"); + grammarBuilder.append("KW327 : 'KW' '327';\n"); + grammarBuilder.append("KW328 : 'KW' '328';\n"); + grammarBuilder.append("KW329 : 'KW' '329';\n"); + grammarBuilder.append("KW330 : 'KW' '330';\n"); + grammarBuilder.append("KW331 : 'KW' '331';\n"); + grammarBuilder.append("KW332 : 'KW' '332';\n"); + grammarBuilder.append("KW333 : 'KW' '333';\n"); + grammarBuilder.append("KW334 : 'KW' '334';\n"); + grammarBuilder.append("KW335 : 'KW' '335';\n"); + grammarBuilder.append("KW336 : 'KW' '336';\n"); + grammarBuilder.append("KW337 : 'KW' '337';\n"); + grammarBuilder.append("KW338 : 'KW' '338';\n"); + grammarBuilder.append("KW339 : 'KW' '339';\n"); + grammarBuilder.append("KW340 : 'KW' '340';\n"); + grammarBuilder.append("KW341 : 'KW' '341';\n"); + grammarBuilder.append("KW342 : 'KW' '342';\n"); + grammarBuilder.append("KW343 : 'KW' '343';\n"); + grammarBuilder.append("KW344 : 'KW' '344';\n"); + grammarBuilder.append("KW345 : 'KW' '345';\n"); + grammarBuilder.append("KW346 : 'KW' '346';\n"); + grammarBuilder.append("KW347 : 'KW' '347';\n"); + grammarBuilder.append("KW348 : 'KW' '348';\n"); + grammarBuilder.append("KW349 : 'KW' '349';\n"); + grammarBuilder.append("KW350 : 'KW' '350';\n"); + grammarBuilder.append("KW351 : 'KW' '351';\n"); + grammarBuilder.append("KW352 : 'KW' '352';\n"); + grammarBuilder.append("KW353 : 'KW' '353';\n"); + grammarBuilder.append("KW354 : 'KW' '354';\n"); + grammarBuilder.append("KW355 : 'KW' '355';\n"); + grammarBuilder.append("KW356 : 'KW' '356';\n"); + grammarBuilder.append("KW357 : 'KW' '357';\n"); + grammarBuilder.append("KW358 : 'KW' '358';\n"); + grammarBuilder.append("KW359 : 'KW' '359';\n"); + grammarBuilder.append("KW360 : 'KW' '360';\n"); + grammarBuilder.append("KW361 : 'KW' '361';\n"); + grammarBuilder.append("KW362 : 'KW' '362';\n"); + grammarBuilder.append("KW363 : 'KW' '363';\n"); + grammarBuilder.append("KW364 : 'KW' '364';\n"); + grammarBuilder.append("KW365 : 'KW' '365';\n"); + grammarBuilder.append("KW366 : 'KW' '366';\n"); + grammarBuilder.append("KW367 : 'KW' '367';\n"); + grammarBuilder.append("KW368 : 'KW' '368';\n"); + grammarBuilder.append("KW369 : 'KW' '369';\n"); + grammarBuilder.append("KW370 : 'KW' '370';\n"); + grammarBuilder.append("KW371 : 'KW' '371';\n"); + grammarBuilder.append("KW372 : 'KW' '372';\n"); + grammarBuilder.append("KW373 : 'KW' '373';\n"); + grammarBuilder.append("KW374 : 'KW' '374';\n"); + grammarBuilder.append("KW375 : 'KW' '375';\n"); + grammarBuilder.append("KW376 : 'KW' '376';\n"); + grammarBuilder.append("KW377 : 'KW' '377';\n"); + grammarBuilder.append("KW378 : 'KW' '378';\n"); + grammarBuilder.append("KW379 : 'KW' '379';\n"); + grammarBuilder.append("KW380 : 'KW' '380';\n"); + grammarBuilder.append("KW381 : 'KW' '381';\n"); + grammarBuilder.append("KW382 : 'KW' '382';\n"); + grammarBuilder.append("KW383 : 'KW' '383';\n"); + grammarBuilder.append("KW384 : 'KW' '384';\n"); + grammarBuilder.append("KW385 : 'KW' '385';\n"); + grammarBuilder.append("KW386 : 'KW' '386';\n"); + grammarBuilder.append("KW387 : 'KW' '387';\n"); + grammarBuilder.append("KW388 : 'KW' '388';\n"); + grammarBuilder.append("KW389 : 'KW' '389';\n"); + grammarBuilder.append("KW390 : 'KW' '390';\n"); + grammarBuilder.append("KW391 : 'KW' '391';\n"); + grammarBuilder.append("KW392 : 'KW' '392';\n"); + grammarBuilder.append("KW393 : 'KW' '393';\n"); + grammarBuilder.append("KW394 : 'KW' '394';\n"); + grammarBuilder.append("KW395 : 'KW' '395';\n"); + grammarBuilder.append("KW396 : 'KW' '396';\n"); + grammarBuilder.append("KW397 : 'KW' '397';\n"); + grammarBuilder.append("KW398 : 'KW' '398';\n"); + grammarBuilder.append("KW399 : 'KW' '399';\n"); + grammarBuilder.append("KW400 : 'KW' '400';\n"); + grammarBuilder.append("KW401 : 'KW' '401';\n"); + grammarBuilder.append("KW402 : 'KW' '402';\n"); + grammarBuilder.append("KW403 : 'KW' '403';\n"); + grammarBuilder.append("KW404 : 'KW' '404';\n"); + grammarBuilder.append("KW405 : 'KW' '405';\n"); + grammarBuilder.append("KW406 : 'KW' '406';\n"); + grammarBuilder.append("KW407 : 'KW' '407';\n"); + grammarBuilder.append("KW408 : 'KW' '408';\n"); + grammarBuilder.append("KW409 : 'KW' '409';\n"); + grammarBuilder.append("KW410 : 'KW' '410';\n"); + grammarBuilder.append("KW411 : 'KW' '411';\n"); + grammarBuilder.append("KW412 : 'KW' '412';\n"); + grammarBuilder.append("KW413 : 'KW' '413';\n"); + grammarBuilder.append("KW414 : 'KW' '414';\n"); + grammarBuilder.append("KW415 : 'KW' '415';\n"); + grammarBuilder.append("KW416 : 'KW' '416';\n"); + grammarBuilder.append("KW417 : 'KW' '417';\n"); + grammarBuilder.append("KW418 : 'KW' '418';\n"); + grammarBuilder.append("KW419 : 'KW' '419';\n"); + grammarBuilder.append("KW420 : 'KW' '420';\n"); + grammarBuilder.append("KW421 : 'KW' '421';\n"); + grammarBuilder.append("KW422 : 'KW' '422';\n"); + grammarBuilder.append("KW423 : 'KW' '423';\n"); + grammarBuilder.append("KW424 : 'KW' '424';\n"); + grammarBuilder.append("KW425 : 'KW' '425';\n"); + grammarBuilder.append("KW426 : 'KW' '426';\n"); + grammarBuilder.append("KW427 : 'KW' '427';\n"); + grammarBuilder.append("KW428 : 'KW' '428';\n"); + grammarBuilder.append("KW429 : 'KW' '429';\n"); + grammarBuilder.append("KW430 : 'KW' '430';\n"); + grammarBuilder.append("KW431 : 'KW' '431';\n"); + grammarBuilder.append("KW432 : 'KW' '432';\n"); + grammarBuilder.append("KW433 : 'KW' '433';\n"); + grammarBuilder.append("KW434 : 'KW' '434';\n"); + grammarBuilder.append("KW435 : 'KW' '435';\n"); + grammarBuilder.append("KW436 : 'KW' '436';\n"); + grammarBuilder.append("KW437 : 'KW' '437';\n"); + grammarBuilder.append("KW438 : 'KW' '438';\n"); + grammarBuilder.append("KW439 : 'KW' '439';\n"); + grammarBuilder.append("KW440 : 'KW' '440';\n"); + grammarBuilder.append("KW441 : 'KW' '441';\n"); + grammarBuilder.append("KW442 : 'KW' '442';\n"); + grammarBuilder.append("KW443 : 'KW' '443';\n"); + grammarBuilder.append("KW444 : 'KW' '444';\n"); + grammarBuilder.append("KW445 : 'KW' '445';\n"); + grammarBuilder.append("KW446 : 'KW' '446';\n"); + grammarBuilder.append("KW447 : 'KW' '447';\n"); + grammarBuilder.append("KW448 : 'KW' '448';\n"); + grammarBuilder.append("KW449 : 'KW' '449';\n"); + grammarBuilder.append("KW450 : 'KW' '450';\n"); + grammarBuilder.append("KW451 : 'KW' '451';\n"); + grammarBuilder.append("KW452 : 'KW' '452';\n"); + grammarBuilder.append("KW453 : 'KW' '453';\n"); + grammarBuilder.append("KW454 : 'KW' '454';\n"); + grammarBuilder.append("KW455 : 'KW' '455';\n"); + grammarBuilder.append("KW456 : 'KW' '456';\n"); + grammarBuilder.append("KW457 : 'KW' '457';\n"); + grammarBuilder.append("KW458 : 'KW' '458';\n"); + grammarBuilder.append("KW459 : 'KW' '459';\n"); + grammarBuilder.append("KW460 : 'KW' '460';\n"); + grammarBuilder.append("KW461 : 'KW' '461';\n"); + grammarBuilder.append("KW462 : 'KW' '462';\n"); + grammarBuilder.append("KW463 : 'KW' '463';\n"); + grammarBuilder.append("KW464 : 'KW' '464';\n"); + grammarBuilder.append("KW465 : 'KW' '465';\n"); + grammarBuilder.append("KW466 : 'KW' '466';\n"); + grammarBuilder.append("KW467 : 'KW' '467';\n"); + grammarBuilder.append("KW468 : 'KW' '468';\n"); + grammarBuilder.append("KW469 : 'KW' '469';\n"); + grammarBuilder.append("KW470 : 'KW' '470';\n"); + grammarBuilder.append("KW471 : 'KW' '471';\n"); + grammarBuilder.append("KW472 : 'KW' '472';\n"); + grammarBuilder.append("KW473 : 'KW' '473';\n"); + grammarBuilder.append("KW474 : 'KW' '474';\n"); + grammarBuilder.append("KW475 : 'KW' '475';\n"); + grammarBuilder.append("KW476 : 'KW' '476';\n"); + grammarBuilder.append("KW477 : 'KW' '477';\n"); + grammarBuilder.append("KW478 : 'KW' '478';\n"); + grammarBuilder.append("KW479 : 'KW' '479';\n"); + grammarBuilder.append("KW480 : 'KW' '480';\n"); + grammarBuilder.append("KW481 : 'KW' '481';\n"); + grammarBuilder.append("KW482 : 'KW' '482';\n"); + grammarBuilder.append("KW483 : 'KW' '483';\n"); + grammarBuilder.append("KW484 : 'KW' '484';\n"); + grammarBuilder.append("KW485 : 'KW' '485';\n"); + grammarBuilder.append("KW486 : 'KW' '486';\n"); + grammarBuilder.append("KW487 : 'KW' '487';\n"); + grammarBuilder.append("KW488 : 'KW' '488';\n"); + grammarBuilder.append("KW489 : 'KW' '489';\n"); + grammarBuilder.append("KW490 : 'KW' '490';\n"); + grammarBuilder.append("KW491 : 'KW' '491';\n"); + grammarBuilder.append("KW492 : 'KW' '492';\n"); + grammarBuilder.append("KW493 : 'KW' '493';\n"); + grammarBuilder.append("KW494 : 'KW' '494';\n"); + grammarBuilder.append("KW495 : 'KW' '495';\n"); + grammarBuilder.append("KW496 : 'KW' '496';\n"); + grammarBuilder.append("KW497 : 'KW' '497';\n"); + grammarBuilder.append("KW498 : 'KW' '498';\n"); + grammarBuilder.append("KW499 : 'KW' '499';\n"); + grammarBuilder.append("KW500 : 'KW' '500';\n"); + grammarBuilder.append("KW501 : 'KW' '501';\n"); + grammarBuilder.append("KW502 : 'KW' '502';\n"); + grammarBuilder.append("KW503 : 'KW' '503';\n"); + grammarBuilder.append("KW504 : 'KW' '504';\n"); + grammarBuilder.append("KW505 : 'KW' '505';\n"); + grammarBuilder.append("KW506 : 'KW' '506';\n"); + grammarBuilder.append("KW507 : 'KW' '507';\n"); + grammarBuilder.append("KW508 : 'KW' '508';\n"); + grammarBuilder.append("KW509 : 'KW' '509';\n"); + grammarBuilder.append("KW510 : 'KW' '510';\n"); + grammarBuilder.append("KW511 : 'KW' '511';\n"); + grammarBuilder.append("KW512 : 'KW' '512';\n"); + grammarBuilder.append("KW513 : 'KW' '513';\n"); + grammarBuilder.append("KW514 : 'KW' '514';\n"); + grammarBuilder.append("KW515 : 'KW' '515';\n"); + grammarBuilder.append("KW516 : 'KW' '516';\n"); + grammarBuilder.append("KW517 : 'KW' '517';\n"); + grammarBuilder.append("KW518 : 'KW' '518';\n"); + grammarBuilder.append("KW519 : 'KW' '519';\n"); + grammarBuilder.append("KW520 : 'KW' '520';\n"); + grammarBuilder.append("KW521 : 'KW' '521';\n"); + grammarBuilder.append("KW522 : 'KW' '522';\n"); + grammarBuilder.append("KW523 : 'KW' '523';\n"); + grammarBuilder.append("KW524 : 'KW' '524';\n"); + grammarBuilder.append("KW525 : 'KW' '525';\n"); + grammarBuilder.append("KW526 : 'KW' '526';\n"); + grammarBuilder.append("KW527 : 'KW' '527';\n"); + grammarBuilder.append("KW528 : 'KW' '528';\n"); + grammarBuilder.append("KW529 : 'KW' '529';\n"); + grammarBuilder.append("KW530 : 'KW' '530';\n"); + grammarBuilder.append("KW531 : 'KW' '531';\n"); + grammarBuilder.append("KW532 : 'KW' '532';\n"); + grammarBuilder.append("KW533 : 'KW' '533';\n"); + grammarBuilder.append("KW534 : 'KW' '534';\n"); + grammarBuilder.append("KW535 : 'KW' '535';\n"); + grammarBuilder.append("KW536 : 'KW' '536';\n"); + grammarBuilder.append("KW537 : 'KW' '537';\n"); + grammarBuilder.append("KW538 : 'KW' '538';\n"); + grammarBuilder.append("KW539 : 'KW' '539';\n"); + grammarBuilder.append("KW540 : 'KW' '540';\n"); + grammarBuilder.append("KW541 : 'KW' '541';\n"); + grammarBuilder.append("KW542 : 'KW' '542';\n"); + grammarBuilder.append("KW543 : 'KW' '543';\n"); + grammarBuilder.append("KW544 : 'KW' '544';\n"); + grammarBuilder.append("KW545 : 'KW' '545';\n"); + grammarBuilder.append("KW546 : 'KW' '546';\n"); + grammarBuilder.append("KW547 : 'KW' '547';\n"); + grammarBuilder.append("KW548 : 'KW' '548';\n"); + grammarBuilder.append("KW549 : 'KW' '549';\n"); + grammarBuilder.append("KW550 : 'KW' '550';\n"); + grammarBuilder.append("KW551 : 'KW' '551';\n"); + grammarBuilder.append("KW552 : 'KW' '552';\n"); + grammarBuilder.append("KW553 : 'KW' '553';\n"); + grammarBuilder.append("KW554 : 'KW' '554';\n"); + grammarBuilder.append("KW555 : 'KW' '555';\n"); + grammarBuilder.append("KW556 : 'KW' '556';\n"); + grammarBuilder.append("KW557 : 'KW' '557';\n"); + grammarBuilder.append("KW558 : 'KW' '558';\n"); + grammarBuilder.append("KW559 : 'KW' '559';\n"); + grammarBuilder.append("KW560 : 'KW' '560';\n"); + grammarBuilder.append("KW561 : 'KW' '561';\n"); + grammarBuilder.append("KW562 : 'KW' '562';\n"); + grammarBuilder.append("KW563 : 'KW' '563';\n"); + grammarBuilder.append("KW564 : 'KW' '564';\n"); + grammarBuilder.append("KW565 : 'KW' '565';\n"); + grammarBuilder.append("KW566 : 'KW' '566';\n"); + grammarBuilder.append("KW567 : 'KW' '567';\n"); + grammarBuilder.append("KW568 : 'KW' '568';\n"); + grammarBuilder.append("KW569 : 'KW' '569';\n"); + grammarBuilder.append("KW570 : 'KW' '570';\n"); + grammarBuilder.append("KW571 : 'KW' '571';\n"); + grammarBuilder.append("KW572 : 'KW' '572';\n"); + grammarBuilder.append("KW573 : 'KW' '573';\n"); + grammarBuilder.append("KW574 : 'KW' '574';\n"); + grammarBuilder.append("KW575 : 'KW' '575';\n"); + grammarBuilder.append("KW576 : 'KW' '576';\n"); + grammarBuilder.append("KW577 : 'KW' '577';\n"); + grammarBuilder.append("KW578 : 'KW' '578';\n"); + grammarBuilder.append("KW579 : 'KW' '579';\n"); + grammarBuilder.append("KW580 : 'KW' '580';\n"); + grammarBuilder.append("KW581 : 'KW' '581';\n"); + grammarBuilder.append("KW582 : 'KW' '582';\n"); + grammarBuilder.append("KW583 : 'KW' '583';\n"); + grammarBuilder.append("KW584 : 'KW' '584';\n"); + grammarBuilder.append("KW585 : 'KW' '585';\n"); + grammarBuilder.append("KW586 : 'KW' '586';\n"); + grammarBuilder.append("KW587 : 'KW' '587';\n"); + grammarBuilder.append("KW588 : 'KW' '588';\n"); + grammarBuilder.append("KW589 : 'KW' '589';\n"); + grammarBuilder.append("KW590 : 'KW' '590';\n"); + grammarBuilder.append("KW591 : 'KW' '591';\n"); + grammarBuilder.append("KW592 : 'KW' '592';\n"); + grammarBuilder.append("KW593 : 'KW' '593';\n"); + grammarBuilder.append("KW594 : 'KW' '594';\n"); + grammarBuilder.append("KW595 : 'KW' '595';\n"); + grammarBuilder.append("KW596 : 'KW' '596';\n"); + grammarBuilder.append("KW597 : 'KW' '597';\n"); + grammarBuilder.append("KW598 : 'KW' '598';\n"); + grammarBuilder.append("KW599 : 'KW' '599';\n"); + grammarBuilder.append("KW600 : 'KW' '600';\n"); + grammarBuilder.append("KW601 : 'KW' '601';\n"); + grammarBuilder.append("KW602 : 'KW' '602';\n"); + grammarBuilder.append("KW603 : 'KW' '603';\n"); + grammarBuilder.append("KW604 : 'KW' '604';\n"); + grammarBuilder.append("KW605 : 'KW' '605';\n"); + grammarBuilder.append("KW606 : 'KW' '606';\n"); + grammarBuilder.append("KW607 : 'KW' '607';\n"); + grammarBuilder.append("KW608 : 'KW' '608';\n"); + grammarBuilder.append("KW609 : 'KW' '609';\n"); + grammarBuilder.append("KW610 : 'KW' '610';\n"); + grammarBuilder.append("KW611 : 'KW' '611';\n"); + grammarBuilder.append("KW612 : 'KW' '612';\n"); + grammarBuilder.append("KW613 : 'KW' '613';\n"); + grammarBuilder.append("KW614 : 'KW' '614';\n"); + grammarBuilder.append("KW615 : 'KW' '615';\n"); + grammarBuilder.append("KW616 : 'KW' '616';\n"); + grammarBuilder.append("KW617 : 'KW' '617';\n"); + grammarBuilder.append("KW618 : 'KW' '618';\n"); + grammarBuilder.append("KW619 : 'KW' '619';\n"); + grammarBuilder.append("KW620 : 'KW' '620';\n"); + grammarBuilder.append("KW621 : 'KW' '621';\n"); + grammarBuilder.append("KW622 : 'KW' '622';\n"); + grammarBuilder.append("KW623 : 'KW' '623';\n"); + grammarBuilder.append("KW624 : 'KW' '624';\n"); + grammarBuilder.append("KW625 : 'KW' '625';\n"); + grammarBuilder.append("KW626 : 'KW' '626';\n"); + grammarBuilder.append("KW627 : 'KW' '627';\n"); + grammarBuilder.append("KW628 : 'KW' '628';\n"); + grammarBuilder.append("KW629 : 'KW' '629';\n"); + grammarBuilder.append("KW630 : 'KW' '630';\n"); + grammarBuilder.append("KW631 : 'KW' '631';\n"); + grammarBuilder.append("KW632 : 'KW' '632';\n"); + grammarBuilder.append("KW633 : 'KW' '633';\n"); + grammarBuilder.append("KW634 : 'KW' '634';\n"); + grammarBuilder.append("KW635 : 'KW' '635';\n"); + grammarBuilder.append("KW636 : 'KW' '636';\n"); + grammarBuilder.append("KW637 : 'KW' '637';\n"); + grammarBuilder.append("KW638 : 'KW' '638';\n"); + grammarBuilder.append("KW639 : 'KW' '639';\n"); + grammarBuilder.append("KW640 : 'KW' '640';\n"); + grammarBuilder.append("KW641 : 'KW' '641';\n"); + grammarBuilder.append("KW642 : 'KW' '642';\n"); + grammarBuilder.append("KW643 : 'KW' '643';\n"); + grammarBuilder.append("KW644 : 'KW' '644';\n"); + grammarBuilder.append("KW645 : 'KW' '645';\n"); + grammarBuilder.append("KW646 : 'KW' '646';\n"); + grammarBuilder.append("KW647 : 'KW' '647';\n"); + grammarBuilder.append("KW648 : 'KW' '648';\n"); + grammarBuilder.append("KW649 : 'KW' '649';\n"); + grammarBuilder.append("KW650 : 'KW' '650';\n"); + grammarBuilder.append("KW651 : 'KW' '651';\n"); + grammarBuilder.append("KW652 : 'KW' '652';\n"); + grammarBuilder.append("KW653 : 'KW' '653';\n"); + grammarBuilder.append("KW654 : 'KW' '654';\n"); + grammarBuilder.append("KW655 : 'KW' '655';\n"); + grammarBuilder.append("KW656 : 'KW' '656';\n"); + grammarBuilder.append("KW657 : 'KW' '657';\n"); + grammarBuilder.append("KW658 : 'KW' '658';\n"); + grammarBuilder.append("KW659 : 'KW' '659';\n"); + grammarBuilder.append("KW660 : 'KW' '660';\n"); + grammarBuilder.append("KW661 : 'KW' '661';\n"); + grammarBuilder.append("KW662 : 'KW' '662';\n"); + grammarBuilder.append("KW663 : 'KW' '663';\n"); + grammarBuilder.append("KW664 : 'KW' '664';\n"); + grammarBuilder.append("KW665 : 'KW' '665';\n"); + grammarBuilder.append("KW666 : 'KW' '666';\n"); + grammarBuilder.append("KW667 : 'KW' '667';\n"); + grammarBuilder.append("KW668 : 'KW' '668';\n"); + grammarBuilder.append("KW669 : 'KW' '669';\n"); + grammarBuilder.append("KW670 : 'KW' '670';\n"); + grammarBuilder.append("KW671 : 'KW' '671';\n"); + grammarBuilder.append("KW672 : 'KW' '672';\n"); + grammarBuilder.append("KW673 : 'KW' '673';\n"); + grammarBuilder.append("KW674 : 'KW' '674';\n"); + grammarBuilder.append("KW675 : 'KW' '675';\n"); + grammarBuilder.append("KW676 : 'KW' '676';\n"); + grammarBuilder.append("KW677 : 'KW' '677';\n"); + grammarBuilder.append("KW678 : 'KW' '678';\n"); + grammarBuilder.append("KW679 : 'KW' '679';\n"); + grammarBuilder.append("KW680 : 'KW' '680';\n"); + grammarBuilder.append("KW681 : 'KW' '681';\n"); + grammarBuilder.append("KW682 : 'KW' '682';\n"); + grammarBuilder.append("KW683 : 'KW' '683';\n"); + grammarBuilder.append("KW684 : 'KW' '684';\n"); + grammarBuilder.append("KW685 : 'KW' '685';\n"); + grammarBuilder.append("KW686 : 'KW' '686';\n"); + grammarBuilder.append("KW687 : 'KW' '687';\n"); + grammarBuilder.append("KW688 : 'KW' '688';\n"); + grammarBuilder.append("KW689 : 'KW' '689';\n"); + grammarBuilder.append("KW690 : 'KW' '690';\n"); + grammarBuilder.append("KW691 : 'KW' '691';\n"); + grammarBuilder.append("KW692 : 'KW' '692';\n"); + grammarBuilder.append("KW693 : 'KW' '693';\n"); + grammarBuilder.append("KW694 : 'KW' '694';\n"); + grammarBuilder.append("KW695 : 'KW' '695';\n"); + grammarBuilder.append("KW696 : 'KW' '696';\n"); + grammarBuilder.append("KW697 : 'KW' '697';\n"); + grammarBuilder.append("KW698 : 'KW' '698';\n"); + grammarBuilder.append("KW699 : 'KW' '699';\n"); + grammarBuilder.append("KW700 : 'KW' '700';\n"); + grammarBuilder.append("KW701 : 'KW' '701';\n"); + grammarBuilder.append("KW702 : 'KW' '702';\n"); + grammarBuilder.append("KW703 : 'KW' '703';\n"); + grammarBuilder.append("KW704 : 'KW' '704';\n"); + grammarBuilder.append("KW705 : 'KW' '705';\n"); + grammarBuilder.append("KW706 : 'KW' '706';\n"); + grammarBuilder.append("KW707 : 'KW' '707';\n"); + grammarBuilder.append("KW708 : 'KW' '708';\n"); + grammarBuilder.append("KW709 : 'KW' '709';\n"); + grammarBuilder.append("KW710 : 'KW' '710';\n"); + grammarBuilder.append("KW711 : 'KW' '711';\n"); + grammarBuilder.append("KW712 : 'KW' '712';\n"); + grammarBuilder.append("KW713 : 'KW' '713';\n"); + grammarBuilder.append("KW714 : 'KW' '714';\n"); + grammarBuilder.append("KW715 : 'KW' '715';\n"); + grammarBuilder.append("KW716 : 'KW' '716';\n"); + grammarBuilder.append("KW717 : 'KW' '717';\n"); + grammarBuilder.append("KW718 : 'KW' '718';\n"); + grammarBuilder.append("KW719 : 'KW' '719';\n"); + grammarBuilder.append("KW720 : 'KW' '720';\n"); + grammarBuilder.append("KW721 : 'KW' '721';\n"); + grammarBuilder.append("KW722 : 'KW' '722';\n"); + grammarBuilder.append("KW723 : 'KW' '723';\n"); + grammarBuilder.append("KW724 : 'KW' '724';\n"); + grammarBuilder.append("KW725 : 'KW' '725';\n"); + grammarBuilder.append("KW726 : 'KW' '726';\n"); + grammarBuilder.append("KW727 : 'KW' '727';\n"); + grammarBuilder.append("KW728 : 'KW' '728';\n"); + grammarBuilder.append("KW729 : 'KW' '729';\n"); + grammarBuilder.append("KW730 : 'KW' '730';\n"); + grammarBuilder.append("KW731 : 'KW' '731';\n"); + grammarBuilder.append("KW732 : 'KW' '732';\n"); + grammarBuilder.append("KW733 : 'KW' '733';\n"); + grammarBuilder.append("KW734 : 'KW' '734';\n"); + grammarBuilder.append("KW735 : 'KW' '735';\n"); + grammarBuilder.append("KW736 : 'KW' '736';\n"); + grammarBuilder.append("KW737 : 'KW' '737';\n"); + grammarBuilder.append("KW738 : 'KW' '738';\n"); + grammarBuilder.append("KW739 : 'KW' '739';\n"); + grammarBuilder.append("KW740 : 'KW' '740';\n"); + grammarBuilder.append("KW741 : 'KW' '741';\n"); + grammarBuilder.append("KW742 : 'KW' '742';\n"); + grammarBuilder.append("KW743 : 'KW' '743';\n"); + grammarBuilder.append("KW744 : 'KW' '744';\n"); + grammarBuilder.append("KW745 : 'KW' '745';\n"); + grammarBuilder.append("KW746 : 'KW' '746';\n"); + grammarBuilder.append("KW747 : 'KW' '747';\n"); + grammarBuilder.append("KW748 : 'KW' '748';\n"); + grammarBuilder.append("KW749 : 'KW' '749';\n"); + grammarBuilder.append("KW750 : 'KW' '750';\n"); + grammarBuilder.append("KW751 : 'KW' '751';\n"); + grammarBuilder.append("KW752 : 'KW' '752';\n"); + grammarBuilder.append("KW753 : 'KW' '753';\n"); + grammarBuilder.append("KW754 : 'KW' '754';\n"); + grammarBuilder.append("KW755 : 'KW' '755';\n"); + grammarBuilder.append("KW756 : 'KW' '756';\n"); + grammarBuilder.append("KW757 : 'KW' '757';\n"); + grammarBuilder.append("KW758 : 'KW' '758';\n"); + grammarBuilder.append("KW759 : 'KW' '759';\n"); + grammarBuilder.append("KW760 : 'KW' '760';\n"); + grammarBuilder.append("KW761 : 'KW' '761';\n"); + grammarBuilder.append("KW762 : 'KW' '762';\n"); + grammarBuilder.append("KW763 : 'KW' '763';\n"); + grammarBuilder.append("KW764 : 'KW' '764';\n"); + grammarBuilder.append("KW765 : 'KW' '765';\n"); + grammarBuilder.append("KW766 : 'KW' '766';\n"); + grammarBuilder.append("KW767 : 'KW' '767';\n"); + grammarBuilder.append("KW768 : 'KW' '768';\n"); + grammarBuilder.append("KW769 : 'KW' '769';\n"); + grammarBuilder.append("KW770 : 'KW' '770';\n"); + grammarBuilder.append("KW771 : 'KW' '771';\n"); + grammarBuilder.append("KW772 : 'KW' '772';\n"); + grammarBuilder.append("KW773 : 'KW' '773';\n"); + grammarBuilder.append("KW774 : 'KW' '774';\n"); + grammarBuilder.append("KW775 : 'KW' '775';\n"); + grammarBuilder.append("KW776 : 'KW' '776';\n"); + grammarBuilder.append("KW777 : 'KW' '777';\n"); + grammarBuilder.append("KW778 : 'KW' '778';\n"); + grammarBuilder.append("KW779 : 'KW' '779';\n"); + grammarBuilder.append("KW780 : 'KW' '780';\n"); + grammarBuilder.append("KW781 : 'KW' '781';\n"); + grammarBuilder.append("KW782 : 'KW' '782';\n"); + grammarBuilder.append("KW783 : 'KW' '783';\n"); + grammarBuilder.append("KW784 : 'KW' '784';\n"); + grammarBuilder.append("KW785 : 'KW' '785';\n"); + grammarBuilder.append("KW786 : 'KW' '786';\n"); + grammarBuilder.append("KW787 : 'KW' '787';\n"); + grammarBuilder.append("KW788 : 'KW' '788';\n"); + grammarBuilder.append("KW789 : 'KW' '789';\n"); + grammarBuilder.append("KW790 : 'KW' '790';\n"); + grammarBuilder.append("KW791 : 'KW' '791';\n"); + grammarBuilder.append("KW792 : 'KW' '792';\n"); + grammarBuilder.append("KW793 : 'KW' '793';\n"); + grammarBuilder.append("KW794 : 'KW' '794';\n"); + grammarBuilder.append("KW795 : 'KW' '795';\n"); + grammarBuilder.append("KW796 : 'KW' '796';\n"); + grammarBuilder.append("KW797 : 'KW' '797';\n"); + grammarBuilder.append("KW798 : 'KW' '798';\n"); + grammarBuilder.append("KW799 : 'KW' '799';\n"); + grammarBuilder.append("KW800 : 'KW' '800';\n"); + grammarBuilder.append("KW801 : 'KW' '801';\n"); + grammarBuilder.append("KW802 : 'KW' '802';\n"); + grammarBuilder.append("KW803 : 'KW' '803';\n"); + grammarBuilder.append("KW804 : 'KW' '804';\n"); + grammarBuilder.append("KW805 : 'KW' '805';\n"); + grammarBuilder.append("KW806 : 'KW' '806';\n"); + grammarBuilder.append("KW807 : 'KW' '807';\n"); + grammarBuilder.append("KW808 : 'KW' '808';\n"); + grammarBuilder.append("KW809 : 'KW' '809';\n"); + grammarBuilder.append("KW810 : 'KW' '810';\n"); + grammarBuilder.append("KW811 : 'KW' '811';\n"); + grammarBuilder.append("KW812 : 'KW' '812';\n"); + grammarBuilder.append("KW813 : 'KW' '813';\n"); + grammarBuilder.append("KW814 : 'KW' '814';\n"); + grammarBuilder.append("KW815 : 'KW' '815';\n"); + grammarBuilder.append("KW816 : 'KW' '816';\n"); + grammarBuilder.append("KW817 : 'KW' '817';\n"); + grammarBuilder.append("KW818 : 'KW' '818';\n"); + grammarBuilder.append("KW819 : 'KW' '819';\n"); + grammarBuilder.append("KW820 : 'KW' '820';\n"); + grammarBuilder.append("KW821 : 'KW' '821';\n"); + grammarBuilder.append("KW822 : 'KW' '822';\n"); + grammarBuilder.append("KW823 : 'KW' '823';\n"); + grammarBuilder.append("KW824 : 'KW' '824';\n"); + grammarBuilder.append("KW825 : 'KW' '825';\n"); + grammarBuilder.append("KW826 : 'KW' '826';\n"); + grammarBuilder.append("KW827 : 'KW' '827';\n"); + grammarBuilder.append("KW828 : 'KW' '828';\n"); + grammarBuilder.append("KW829 : 'KW' '829';\n"); + grammarBuilder.append("KW830 : 'KW' '830';\n"); + grammarBuilder.append("KW831 : 'KW' '831';\n"); + grammarBuilder.append("KW832 : 'KW' '832';\n"); + grammarBuilder.append("KW833 : 'KW' '833';\n"); + grammarBuilder.append("KW834 : 'KW' '834';\n"); + grammarBuilder.append("KW835 : 'KW' '835';\n"); + grammarBuilder.append("KW836 : 'KW' '836';\n"); + grammarBuilder.append("KW837 : 'KW' '837';\n"); + grammarBuilder.append("KW838 : 'KW' '838';\n"); + grammarBuilder.append("KW839 : 'KW' '839';\n"); + grammarBuilder.append("KW840 : 'KW' '840';\n"); + grammarBuilder.append("KW841 : 'KW' '841';\n"); + grammarBuilder.append("KW842 : 'KW' '842';\n"); + grammarBuilder.append("KW843 : 'KW' '843';\n"); + grammarBuilder.append("KW844 : 'KW' '844';\n"); + grammarBuilder.append("KW845 : 'KW' '845';\n"); + grammarBuilder.append("KW846 : 'KW' '846';\n"); + grammarBuilder.append("KW847 : 'KW' '847';\n"); + grammarBuilder.append("KW848 : 'KW' '848';\n"); + grammarBuilder.append("KW849 : 'KW' '849';\n"); + grammarBuilder.append("KW850 : 'KW' '850';\n"); + grammarBuilder.append("KW851 : 'KW' '851';\n"); + grammarBuilder.append("KW852 : 'KW' '852';\n"); + grammarBuilder.append("KW853 : 'KW' '853';\n"); + grammarBuilder.append("KW854 : 'KW' '854';\n"); + grammarBuilder.append("KW855 : 'KW' '855';\n"); + grammarBuilder.append("KW856 : 'KW' '856';\n"); + grammarBuilder.append("KW857 : 'KW' '857';\n"); + grammarBuilder.append("KW858 : 'KW' '858';\n"); + grammarBuilder.append("KW859 : 'KW' '859';\n"); + grammarBuilder.append("KW860 : 'KW' '860';\n"); + grammarBuilder.append("KW861 : 'KW' '861';\n"); + grammarBuilder.append("KW862 : 'KW' '862';\n"); + grammarBuilder.append("KW863 : 'KW' '863';\n"); + grammarBuilder.append("KW864 : 'KW' '864';\n"); + grammarBuilder.append("KW865 : 'KW' '865';\n"); + grammarBuilder.append("KW866 : 'KW' '866';\n"); + grammarBuilder.append("KW867 : 'KW' '867';\n"); + grammarBuilder.append("KW868 : 'KW' '868';\n"); + grammarBuilder.append("KW869 : 'KW' '869';\n"); + grammarBuilder.append("KW870 : 'KW' '870';\n"); + grammarBuilder.append("KW871 : 'KW' '871';\n"); + grammarBuilder.append("KW872 : 'KW' '872';\n"); + grammarBuilder.append("KW873 : 'KW' '873';\n"); + grammarBuilder.append("KW874 : 'KW' '874';\n"); + grammarBuilder.append("KW875 : 'KW' '875';\n"); + grammarBuilder.append("KW876 : 'KW' '876';\n"); + grammarBuilder.append("KW877 : 'KW' '877';\n"); + grammarBuilder.append("KW878 : 'KW' '878';\n"); + grammarBuilder.append("KW879 : 'KW' '879';\n"); + grammarBuilder.append("KW880 : 'KW' '880';\n"); + grammarBuilder.append("KW881 : 'KW' '881';\n"); + grammarBuilder.append("KW882 : 'KW' '882';\n"); + grammarBuilder.append("KW883 : 'KW' '883';\n"); + grammarBuilder.append("KW884 : 'KW' '884';\n"); + grammarBuilder.append("KW885 : 'KW' '885';\n"); + grammarBuilder.append("KW886 : 'KW' '886';\n"); + grammarBuilder.append("KW887 : 'KW' '887';\n"); + grammarBuilder.append("KW888 : 'KW' '888';\n"); + grammarBuilder.append("KW889 : 'KW' '889';\n"); + grammarBuilder.append("KW890 : 'KW' '890';\n"); + grammarBuilder.append("KW891 : 'KW' '891';\n"); + grammarBuilder.append("KW892 : 'KW' '892';\n"); + grammarBuilder.append("KW893 : 'KW' '893';\n"); + grammarBuilder.append("KW894 : 'KW' '894';\n"); + grammarBuilder.append("KW895 : 'KW' '895';\n"); + grammarBuilder.append("KW896 : 'KW' '896';\n"); + grammarBuilder.append("KW897 : 'KW' '897';\n"); + grammarBuilder.append("KW898 : 'KW' '898';\n"); + grammarBuilder.append("KW899 : 'KW' '899';\n"); + grammarBuilder.append("KW900 : 'KW' '900';\n"); + grammarBuilder.append("KW901 : 'KW' '901';\n"); + grammarBuilder.append("KW902 : 'KW' '902';\n"); + grammarBuilder.append("KW903 : 'KW' '903';\n"); + grammarBuilder.append("KW904 : 'KW' '904';\n"); + grammarBuilder.append("KW905 : 'KW' '905';\n"); + grammarBuilder.append("KW906 : 'KW' '906';\n"); + grammarBuilder.append("KW907 : 'KW' '907';\n"); + grammarBuilder.append("KW908 : 'KW' '908';\n"); + grammarBuilder.append("KW909 : 'KW' '909';\n"); + grammarBuilder.append("KW910 : 'KW' '910';\n"); + grammarBuilder.append("KW911 : 'KW' '911';\n"); + grammarBuilder.append("KW912 : 'KW' '912';\n"); + grammarBuilder.append("KW913 : 'KW' '913';\n"); + grammarBuilder.append("KW914 : 'KW' '914';\n"); + grammarBuilder.append("KW915 : 'KW' '915';\n"); + grammarBuilder.append("KW916 : 'KW' '916';\n"); + grammarBuilder.append("KW917 : 'KW' '917';\n"); + grammarBuilder.append("KW918 : 'KW' '918';\n"); + grammarBuilder.append("KW919 : 'KW' '919';\n"); + grammarBuilder.append("KW920 : 'KW' '920';\n"); + grammarBuilder.append("KW921 : 'KW' '921';\n"); + grammarBuilder.append("KW922 : 'KW' '922';\n"); + grammarBuilder.append("KW923 : 'KW' '923';\n"); + grammarBuilder.append("KW924 : 'KW' '924';\n"); + grammarBuilder.append("KW925 : 'KW' '925';\n"); + grammarBuilder.append("KW926 : 'KW' '926';\n"); + grammarBuilder.append("KW927 : 'KW' '927';\n"); + grammarBuilder.append("KW928 : 'KW' '928';\n"); + grammarBuilder.append("KW929 : 'KW' '929';\n"); + grammarBuilder.append("KW930 : 'KW' '930';\n"); + grammarBuilder.append("KW931 : 'KW' '931';\n"); + grammarBuilder.append("KW932 : 'KW' '932';\n"); + grammarBuilder.append("KW933 : 'KW' '933';\n"); + grammarBuilder.append("KW934 : 'KW' '934';\n"); + grammarBuilder.append("KW935 : 'KW' '935';\n"); + grammarBuilder.append("KW936 : 'KW' '936';\n"); + grammarBuilder.append("KW937 : 'KW' '937';\n"); + grammarBuilder.append("KW938 : 'KW' '938';\n"); + grammarBuilder.append("KW939 : 'KW' '939';\n"); + grammarBuilder.append("KW940 : 'KW' '940';\n"); + grammarBuilder.append("KW941 : 'KW' '941';\n"); + grammarBuilder.append("KW942 : 'KW' '942';\n"); + grammarBuilder.append("KW943 : 'KW' '943';\n"); + grammarBuilder.append("KW944 : 'KW' '944';\n"); + grammarBuilder.append("KW945 : 'KW' '945';\n"); + grammarBuilder.append("KW946 : 'KW' '946';\n"); + grammarBuilder.append("KW947 : 'KW' '947';\n"); + grammarBuilder.append("KW948 : 'KW' '948';\n"); + grammarBuilder.append("KW949 : 'KW' '949';\n"); + grammarBuilder.append("KW950 : 'KW' '950';\n"); + grammarBuilder.append("KW951 : 'KW' '951';\n"); + grammarBuilder.append("KW952 : 'KW' '952';\n"); + grammarBuilder.append("KW953 : 'KW' '953';\n"); + grammarBuilder.append("KW954 : 'KW' '954';\n"); + grammarBuilder.append("KW955 : 'KW' '955';\n"); + grammarBuilder.append("KW956 : 'KW' '956';\n"); + grammarBuilder.append("KW957 : 'KW' '957';\n"); + grammarBuilder.append("KW958 : 'KW' '958';\n"); + grammarBuilder.append("KW959 : 'KW' '959';\n"); + grammarBuilder.append("KW960 : 'KW' '960';\n"); + grammarBuilder.append("KW961 : 'KW' '961';\n"); + grammarBuilder.append("KW962 : 'KW' '962';\n"); + grammarBuilder.append("KW963 : 'KW' '963';\n"); + grammarBuilder.append("KW964 : 'KW' '964';\n"); + grammarBuilder.append("KW965 : 'KW' '965';\n"); + grammarBuilder.append("KW966 : 'KW' '966';\n"); + grammarBuilder.append("KW967 : 'KW' '967';\n"); + grammarBuilder.append("KW968 : 'KW' '968';\n"); + grammarBuilder.append("KW969 : 'KW' '969';\n"); + grammarBuilder.append("KW970 : 'KW' '970';\n"); + grammarBuilder.append("KW971 : 'KW' '971';\n"); + grammarBuilder.append("KW972 : 'KW' '972';\n"); + grammarBuilder.append("KW973 : 'KW' '973';\n"); + grammarBuilder.append("KW974 : 'KW' '974';\n"); + grammarBuilder.append("KW975 : 'KW' '975';\n"); + grammarBuilder.append("KW976 : 'KW' '976';\n"); + grammarBuilder.append("KW977 : 'KW' '977';\n"); + grammarBuilder.append("KW978 : 'KW' '978';\n"); + grammarBuilder.append("KW979 : 'KW' '979';\n"); + grammarBuilder.append("KW980 : 'KW' '980';\n"); + grammarBuilder.append("KW981 : 'KW' '981';\n"); + grammarBuilder.append("KW982 : 'KW' '982';\n"); + grammarBuilder.append("KW983 : 'KW' '983';\n"); + grammarBuilder.append("KW984 : 'KW' '984';\n"); + grammarBuilder.append("KW985 : 'KW' '985';\n"); + grammarBuilder.append("KW986 : 'KW' '986';\n"); + grammarBuilder.append("KW987 : 'KW' '987';\n"); + grammarBuilder.append("KW988 : 'KW' '988';\n"); + grammarBuilder.append("KW989 : 'KW' '989';\n"); + grammarBuilder.append("KW990 : 'KW' '990';\n"); + grammarBuilder.append("KW991 : 'KW' '991';\n"); + grammarBuilder.append("KW992 : 'KW' '992';\n"); + grammarBuilder.append("KW993 : 'KW' '993';\n"); + grammarBuilder.append("KW994 : 'KW' '994';\n"); + grammarBuilder.append("KW995 : 'KW' '995';\n"); + grammarBuilder.append("KW996 : 'KW' '996';\n"); + grammarBuilder.append("KW997 : 'KW' '997';\n"); + grammarBuilder.append("KW998 : 'KW' '998';\n"); + grammarBuilder.append("KW999 : 'KW' '999';\n"); + grammarBuilder.append("KW1000 : 'KW' '1000';\n"); + grammarBuilder.append("KW1001 : 'KW' '1001';\n"); + grammarBuilder.append("KW1002 : 'KW' '1002';\n"); + grammarBuilder.append("KW1003 : 'KW' '1003';\n"); + grammarBuilder.append("KW1004 : 'KW' '1004';\n"); + grammarBuilder.append("KW1005 : 'KW' '1005';\n"); + grammarBuilder.append("KW1006 : 'KW' '1006';\n"); + grammarBuilder.append("KW1007 : 'KW' '1007';\n"); + grammarBuilder.append("KW1008 : 'KW' '1008';\n"); + grammarBuilder.append("KW1009 : 'KW' '1009';\n"); + grammarBuilder.append("KW1010 : 'KW' '1010';\n"); + grammarBuilder.append("KW1011 : 'KW' '1011';\n"); + grammarBuilder.append("KW1012 : 'KW' '1012';\n"); + grammarBuilder.append("KW1013 : 'KW' '1013';\n"); + grammarBuilder.append("KW1014 : 'KW' '1014';\n"); + grammarBuilder.append("KW1015 : 'KW' '1015';\n"); + grammarBuilder.append("KW1016 : 'KW' '1016';\n"); + grammarBuilder.append("KW1017 : 'KW' '1017';\n"); + grammarBuilder.append("KW1018 : 'KW' '1018';\n"); + grammarBuilder.append("KW1019 : 'KW' '1019';\n"); + grammarBuilder.append("KW1020 : 'KW' '1020';\n"); + grammarBuilder.append("KW1021 : 'KW' '1021';\n"); + grammarBuilder.append("KW1022 : 'KW' '1022';\n"); + grammarBuilder.append("KW1023 : 'KW' '1023';\n"); + grammarBuilder.append("KW1024 : 'KW' '1024';\n"); + grammarBuilder.append("KW1025 : 'KW' '1025';\n"); + grammarBuilder.append("KW1026 : 'KW' '1026';\n"); + grammarBuilder.append("KW1027 : 'KW' '1027';\n"); + grammarBuilder.append("KW1028 : 'KW' '1028';\n"); + grammarBuilder.append("KW1029 : 'KW' '1029';\n"); + grammarBuilder.append("KW1030 : 'KW' '1030';\n"); + grammarBuilder.append("KW1031 : 'KW' '1031';\n"); + grammarBuilder.append("KW1032 : 'KW' '1032';\n"); + grammarBuilder.append("KW1033 : 'KW' '1033';\n"); + grammarBuilder.append("KW1034 : 'KW' '1034';\n"); + grammarBuilder.append("KW1035 : 'KW' '1035';\n"); + grammarBuilder.append("KW1036 : 'KW' '1036';\n"); + grammarBuilder.append("KW1037 : 'KW' '1037';\n"); + grammarBuilder.append("KW1038 : 'KW' '1038';\n"); + grammarBuilder.append("KW1039 : 'KW' '1039';\n"); + grammarBuilder.append("KW1040 : 'KW' '1040';\n"); + grammarBuilder.append("KW1041 : 'KW' '1041';\n"); + grammarBuilder.append("KW1042 : 'KW' '1042';\n"); + grammarBuilder.append("KW1043 : 'KW' '1043';\n"); + grammarBuilder.append("KW1044 : 'KW' '1044';\n"); + grammarBuilder.append("KW1045 : 'KW' '1045';\n"); + grammarBuilder.append("KW1046 : 'KW' '1046';\n"); + grammarBuilder.append("KW1047 : 'KW' '1047';\n"); + grammarBuilder.append("KW1048 : 'KW' '1048';\n"); + grammarBuilder.append("KW1049 : 'KW' '1049';\n"); + grammarBuilder.append("KW1050 : 'KW' '1050';\n"); + grammarBuilder.append("KW1051 : 'KW' '1051';\n"); + grammarBuilder.append("KW1052 : 'KW' '1052';\n"); + grammarBuilder.append("KW1053 : 'KW' '1053';\n"); + grammarBuilder.append("KW1054 : 'KW' '1054';\n"); + grammarBuilder.append("KW1055 : 'KW' '1055';\n"); + grammarBuilder.append("KW1056 : 'KW' '1056';\n"); + grammarBuilder.append("KW1057 : 'KW' '1057';\n"); + grammarBuilder.append("KW1058 : 'KW' '1058';\n"); + grammarBuilder.append("KW1059 : 'KW' '1059';\n"); + grammarBuilder.append("KW1060 : 'KW' '1060';\n"); + grammarBuilder.append("KW1061 : 'KW' '1061';\n"); + grammarBuilder.append("KW1062 : 'KW' '1062';\n"); + grammarBuilder.append("KW1063 : 'KW' '1063';\n"); + grammarBuilder.append("KW1064 : 'KW' '1064';\n"); + grammarBuilder.append("KW1065 : 'KW' '1065';\n"); + grammarBuilder.append("KW1066 : 'KW' '1066';\n"); + grammarBuilder.append("KW1067 : 'KW' '1067';\n"); + grammarBuilder.append("KW1068 : 'KW' '1068';\n"); + grammarBuilder.append("KW1069 : 'KW' '1069';\n"); + grammarBuilder.append("KW1070 : 'KW' '1070';\n"); + grammarBuilder.append("KW1071 : 'KW' '1071';\n"); + grammarBuilder.append("KW1072 : 'KW' '1072';\n"); + grammarBuilder.append("KW1073 : 'KW' '1073';\n"); + grammarBuilder.append("KW1074 : 'KW' '1074';\n"); + grammarBuilder.append("KW1075 : 'KW' '1075';\n"); + grammarBuilder.append("KW1076 : 'KW' '1076';\n"); + grammarBuilder.append("KW1077 : 'KW' '1077';\n"); + grammarBuilder.append("KW1078 : 'KW' '1078';\n"); + grammarBuilder.append("KW1079 : 'KW' '1079';\n"); + grammarBuilder.append("KW1080 : 'KW' '1080';\n"); + grammarBuilder.append("KW1081 : 'KW' '1081';\n"); + grammarBuilder.append("KW1082 : 'KW' '1082';\n"); + grammarBuilder.append("KW1083 : 'KW' '1083';\n"); + grammarBuilder.append("KW1084 : 'KW' '1084';\n"); + grammarBuilder.append("KW1085 : 'KW' '1085';\n"); + grammarBuilder.append("KW1086 : 'KW' '1086';\n"); + grammarBuilder.append("KW1087 : 'KW' '1087';\n"); + grammarBuilder.append("KW1088 : 'KW' '1088';\n"); + grammarBuilder.append("KW1089 : 'KW' '1089';\n"); + grammarBuilder.append("KW1090 : 'KW' '1090';\n"); + grammarBuilder.append("KW1091 : 'KW' '1091';\n"); + grammarBuilder.append("KW1092 : 'KW' '1092';\n"); + grammarBuilder.append("KW1093 : 'KW' '1093';\n"); + grammarBuilder.append("KW1094 : 'KW' '1094';\n"); + grammarBuilder.append("KW1095 : 'KW' '1095';\n"); + grammarBuilder.append("KW1096 : 'KW' '1096';\n"); + grammarBuilder.append("KW1097 : 'KW' '1097';\n"); + grammarBuilder.append("KW1098 : 'KW' '1098';\n"); + grammarBuilder.append("KW1099 : 'KW' '1099';\n"); + grammarBuilder.append("KW1100 : 'KW' '1100';\n"); + grammarBuilder.append("KW1101 : 'KW' '1101';\n"); + grammarBuilder.append("KW1102 : 'KW' '1102';\n"); + grammarBuilder.append("KW1103 : 'KW' '1103';\n"); + grammarBuilder.append("KW1104 : 'KW' '1104';\n"); + grammarBuilder.append("KW1105 : 'KW' '1105';\n"); + grammarBuilder.append("KW1106 : 'KW' '1106';\n"); + grammarBuilder.append("KW1107 : 'KW' '1107';\n"); + grammarBuilder.append("KW1108 : 'KW' '1108';\n"); + grammarBuilder.append("KW1109 : 'KW' '1109';\n"); + grammarBuilder.append("KW1110 : 'KW' '1110';\n"); + grammarBuilder.append("KW1111 : 'KW' '1111';\n"); + grammarBuilder.append("KW1112 : 'KW' '1112';\n"); + grammarBuilder.append("KW1113 : 'KW' '1113';\n"); + grammarBuilder.append("KW1114 : 'KW' '1114';\n"); + grammarBuilder.append("KW1115 : 'KW' '1115';\n"); + grammarBuilder.append("KW1116 : 'KW' '1116';\n"); + grammarBuilder.append("KW1117 : 'KW' '1117';\n"); + grammarBuilder.append("KW1118 : 'KW' '1118';\n"); + grammarBuilder.append("KW1119 : 'KW' '1119';\n"); + grammarBuilder.append("KW1120 : 'KW' '1120';\n"); + grammarBuilder.append("KW1121 : 'KW' '1121';\n"); + grammarBuilder.append("KW1122 : 'KW' '1122';\n"); + grammarBuilder.append("KW1123 : 'KW' '1123';\n"); + grammarBuilder.append("KW1124 : 'KW' '1124';\n"); + grammarBuilder.append("KW1125 : 'KW' '1125';\n"); + grammarBuilder.append("KW1126 : 'KW' '1126';\n"); + grammarBuilder.append("KW1127 : 'KW' '1127';\n"); + grammarBuilder.append("KW1128 : 'KW' '1128';\n"); + grammarBuilder.append("KW1129 : 'KW' '1129';\n"); + grammarBuilder.append("KW1130 : 'KW' '1130';\n"); + grammarBuilder.append("KW1131 : 'KW' '1131';\n"); + grammarBuilder.append("KW1132 : 'KW' '1132';\n"); + grammarBuilder.append("KW1133 : 'KW' '1133';\n"); + grammarBuilder.append("KW1134 : 'KW' '1134';\n"); + grammarBuilder.append("KW1135 : 'KW' '1135';\n"); + grammarBuilder.append("KW1136 : 'KW' '1136';\n"); + grammarBuilder.append("KW1137 : 'KW' '1137';\n"); + grammarBuilder.append("KW1138 : 'KW' '1138';\n"); + grammarBuilder.append("KW1139 : 'KW' '1139';\n"); + grammarBuilder.append("KW1140 : 'KW' '1140';\n"); + grammarBuilder.append("KW1141 : 'KW' '1141';\n"); + grammarBuilder.append("KW1142 : 'KW' '1142';\n"); + grammarBuilder.append("KW1143 : 'KW' '1143';\n"); + grammarBuilder.append("KW1144 : 'KW' '1144';\n"); + grammarBuilder.append("KW1145 : 'KW' '1145';\n"); + grammarBuilder.append("KW1146 : 'KW' '1146';\n"); + grammarBuilder.append("KW1147 : 'KW' '1147';\n"); + grammarBuilder.append("KW1148 : 'KW' '1148';\n"); + grammarBuilder.append("KW1149 : 'KW' '1149';\n"); + grammarBuilder.append("KW1150 : 'KW' '1150';\n"); + grammarBuilder.append("KW1151 : 'KW' '1151';\n"); + grammarBuilder.append("KW1152 : 'KW' '1152';\n"); + grammarBuilder.append("KW1153 : 'KW' '1153';\n"); + grammarBuilder.append("KW1154 : 'KW' '1154';\n"); + grammarBuilder.append("KW1155 : 'KW' '1155';\n"); + grammarBuilder.append("KW1156 : 'KW' '1156';\n"); + grammarBuilder.append("KW1157 : 'KW' '1157';\n"); + grammarBuilder.append("KW1158 : 'KW' '1158';\n"); + grammarBuilder.append("KW1159 : 'KW' '1159';\n"); + grammarBuilder.append("KW1160 : 'KW' '1160';\n"); + grammarBuilder.append("KW1161 : 'KW' '1161';\n"); + grammarBuilder.append("KW1162 : 'KW' '1162';\n"); + grammarBuilder.append("KW1163 : 'KW' '1163';\n"); + grammarBuilder.append("KW1164 : 'KW' '1164';\n"); + grammarBuilder.append("KW1165 : 'KW' '1165';\n"); + grammarBuilder.append("KW1166 : 'KW' '1166';\n"); + grammarBuilder.append("KW1167 : 'KW' '1167';\n"); + grammarBuilder.append("KW1168 : 'KW' '1168';\n"); + grammarBuilder.append("KW1169 : 'KW' '1169';\n"); + grammarBuilder.append("KW1170 : 'KW' '1170';\n"); + grammarBuilder.append("KW1171 : 'KW' '1171';\n"); + grammarBuilder.append("KW1172 : 'KW' '1172';\n"); + grammarBuilder.append("KW1173 : 'KW' '1173';\n"); + grammarBuilder.append("KW1174 : 'KW' '1174';\n"); + grammarBuilder.append("KW1175 : 'KW' '1175';\n"); + grammarBuilder.append("KW1176 : 'KW' '1176';\n"); + grammarBuilder.append("KW1177 : 'KW' '1177';\n"); + grammarBuilder.append("KW1178 : 'KW' '1178';\n"); + grammarBuilder.append("KW1179 : 'KW' '1179';\n"); + grammarBuilder.append("KW1180 : 'KW' '1180';\n"); + grammarBuilder.append("KW1181 : 'KW' '1181';\n"); + grammarBuilder.append("KW1182 : 'KW' '1182';\n"); + grammarBuilder.append("KW1183 : 'KW' '1183';\n"); + grammarBuilder.append("KW1184 : 'KW' '1184';\n"); + grammarBuilder.append("KW1185 : 'KW' '1185';\n"); + grammarBuilder.append("KW1186 : 'KW' '1186';\n"); + grammarBuilder.append("KW1187 : 'KW' '1187';\n"); + grammarBuilder.append("KW1188 : 'KW' '1188';\n"); + grammarBuilder.append("KW1189 : 'KW' '1189';\n"); + grammarBuilder.append("KW1190 : 'KW' '1190';\n"); + grammarBuilder.append("KW1191 : 'KW' '1191';\n"); + grammarBuilder.append("KW1192 : 'KW' '1192';\n"); + grammarBuilder.append("KW1193 : 'KW' '1193';\n"); + grammarBuilder.append("KW1194 : 'KW' '1194';\n"); + grammarBuilder.append("KW1195 : 'KW' '1195';\n"); + grammarBuilder.append("KW1196 : 'KW' '1196';\n"); + grammarBuilder.append("KW1197 : 'KW' '1197';\n"); + grammarBuilder.append("KW1198 : 'KW' '1198';\n"); + grammarBuilder.append("KW1199 : 'KW' '1199';\n"); + grammarBuilder.append("KW1200 : 'KW' '1200';\n"); + grammarBuilder.append("KW1201 : 'KW' '1201';\n"); + grammarBuilder.append("KW1202 : 'KW' '1202';\n"); + grammarBuilder.append("KW1203 : 'KW' '1203';\n"); + grammarBuilder.append("KW1204 : 'KW' '1204';\n"); + grammarBuilder.append("KW1205 : 'KW' '1205';\n"); + grammarBuilder.append("KW1206 : 'KW' '1206';\n"); + grammarBuilder.append("KW1207 : 'KW' '1207';\n"); + grammarBuilder.append("KW1208 : 'KW' '1208';\n"); + grammarBuilder.append("KW1209 : 'KW' '1209';\n"); + grammarBuilder.append("KW1210 : 'KW' '1210';\n"); + grammarBuilder.append("KW1211 : 'KW' '1211';\n"); + grammarBuilder.append("KW1212 : 'KW' '1212';\n"); + grammarBuilder.append("KW1213 : 'KW' '1213';\n"); + grammarBuilder.append("KW1214 : 'KW' '1214';\n"); + grammarBuilder.append("KW1215 : 'KW' '1215';\n"); + grammarBuilder.append("KW1216 : 'KW' '1216';\n"); + grammarBuilder.append("KW1217 : 'KW' '1217';\n"); + grammarBuilder.append("KW1218 : 'KW' '1218';\n"); + grammarBuilder.append("KW1219 : 'KW' '1219';\n"); + grammarBuilder.append("KW1220 : 'KW' '1220';\n"); + grammarBuilder.append("KW1221 : 'KW' '1221';\n"); + grammarBuilder.append("KW1222 : 'KW' '1222';\n"); + grammarBuilder.append("KW1223 : 'KW' '1223';\n"); + grammarBuilder.append("KW1224 : 'KW' '1224';\n"); + grammarBuilder.append("KW1225 : 'KW' '1225';\n"); + grammarBuilder.append("KW1226 : 'KW' '1226';\n"); + grammarBuilder.append("KW1227 : 'KW' '1227';\n"); + grammarBuilder.append("KW1228 : 'KW' '1228';\n"); + grammarBuilder.append("KW1229 : 'KW' '1229';\n"); + grammarBuilder.append("KW1230 : 'KW' '1230';\n"); + grammarBuilder.append("KW1231 : 'KW' '1231';\n"); + grammarBuilder.append("KW1232 : 'KW' '1232';\n"); + grammarBuilder.append("KW1233 : 'KW' '1233';\n"); + grammarBuilder.append("KW1234 : 'KW' '1234';\n"); + grammarBuilder.append("KW1235 : 'KW' '1235';\n"); + grammarBuilder.append("KW1236 : 'KW' '1236';\n"); + grammarBuilder.append("KW1237 : 'KW' '1237';\n"); + grammarBuilder.append("KW1238 : 'KW' '1238';\n"); + grammarBuilder.append("KW1239 : 'KW' '1239';\n"); + grammarBuilder.append("KW1240 : 'KW' '1240';\n"); + grammarBuilder.append("KW1241 : 'KW' '1241';\n"); + grammarBuilder.append("KW1242 : 'KW' '1242';\n"); + grammarBuilder.append("KW1243 : 'KW' '1243';\n"); + grammarBuilder.append("KW1244 : 'KW' '1244';\n"); + grammarBuilder.append("KW1245 : 'KW' '1245';\n"); + grammarBuilder.append("KW1246 : 'KW' '1246';\n"); + grammarBuilder.append("KW1247 : 'KW' '1247';\n"); + grammarBuilder.append("KW1248 : 'KW' '1248';\n"); + grammarBuilder.append("KW1249 : 'KW' '1249';\n"); + grammarBuilder.append("KW1250 : 'KW' '1250';\n"); + grammarBuilder.append("KW1251 : 'KW' '1251';\n"); + grammarBuilder.append("KW1252 : 'KW' '1252';\n"); + grammarBuilder.append("KW1253 : 'KW' '1253';\n"); + grammarBuilder.append("KW1254 : 'KW' '1254';\n"); + grammarBuilder.append("KW1255 : 'KW' '1255';\n"); + grammarBuilder.append("KW1256 : 'KW' '1256';\n"); + grammarBuilder.append("KW1257 : 'KW' '1257';\n"); + grammarBuilder.append("KW1258 : 'KW' '1258';\n"); + grammarBuilder.append("KW1259 : 'KW' '1259';\n"); + grammarBuilder.append("KW1260 : 'KW' '1260';\n"); + grammarBuilder.append("KW1261 : 'KW' '1261';\n"); + grammarBuilder.append("KW1262 : 'KW' '1262';\n"); + grammarBuilder.append("KW1263 : 'KW' '1263';\n"); + grammarBuilder.append("KW1264 : 'KW' '1264';\n"); + grammarBuilder.append("KW1265 : 'KW' '1265';\n"); + grammarBuilder.append("KW1266 : 'KW' '1266';\n"); + grammarBuilder.append("KW1267 : 'KW' '1267';\n"); + grammarBuilder.append("KW1268 : 'KW' '1268';\n"); + grammarBuilder.append("KW1269 : 'KW' '1269';\n"); + grammarBuilder.append("KW1270 : 'KW' '1270';\n"); + grammarBuilder.append("KW1271 : 'KW' '1271';\n"); + grammarBuilder.append("KW1272 : 'KW' '1272';\n"); + grammarBuilder.append("KW1273 : 'KW' '1273';\n"); + grammarBuilder.append("KW1274 : 'KW' '1274';\n"); + grammarBuilder.append("KW1275 : 'KW' '1275';\n"); + grammarBuilder.append("KW1276 : 'KW' '1276';\n"); + grammarBuilder.append("KW1277 : 'KW' '1277';\n"); + grammarBuilder.append("KW1278 : 'KW' '1278';\n"); + grammarBuilder.append("KW1279 : 'KW' '1279';\n"); + grammarBuilder.append("KW1280 : 'KW' '1280';\n"); + grammarBuilder.append("KW1281 : 'KW' '1281';\n"); + grammarBuilder.append("KW1282 : 'KW' '1282';\n"); + grammarBuilder.append("KW1283 : 'KW' '1283';\n"); + grammarBuilder.append("KW1284 : 'KW' '1284';\n"); + grammarBuilder.append("KW1285 : 'KW' '1285';\n"); + grammarBuilder.append("KW1286 : 'KW' '1286';\n"); + grammarBuilder.append("KW1287 : 'KW' '1287';\n"); + grammarBuilder.append("KW1288 : 'KW' '1288';\n"); + grammarBuilder.append("KW1289 : 'KW' '1289';\n"); + grammarBuilder.append("KW1290 : 'KW' '1290';\n"); + grammarBuilder.append("KW1291 : 'KW' '1291';\n"); + grammarBuilder.append("KW1292 : 'KW' '1292';\n"); + grammarBuilder.append("KW1293 : 'KW' '1293';\n"); + grammarBuilder.append("KW1294 : 'KW' '1294';\n"); + grammarBuilder.append("KW1295 : 'KW' '1295';\n"); + grammarBuilder.append("KW1296 : 'KW' '1296';\n"); + grammarBuilder.append("KW1297 : 'KW' '1297';\n"); + grammarBuilder.append("KW1298 : 'KW' '1298';\n"); + grammarBuilder.append("KW1299 : 'KW' '1299';\n"); + grammarBuilder.append("KW1300 : 'KW' '1300';\n"); + grammarBuilder.append("KW1301 : 'KW' '1301';\n"); + grammarBuilder.append("KW1302 : 'KW' '1302';\n"); + grammarBuilder.append("KW1303 : 'KW' '1303';\n"); + grammarBuilder.append("KW1304 : 'KW' '1304';\n"); + grammarBuilder.append("KW1305 : 'KW' '1305';\n"); + grammarBuilder.append("KW1306 : 'KW' '1306';\n"); + grammarBuilder.append("KW1307 : 'KW' '1307';\n"); + grammarBuilder.append("KW1308 : 'KW' '1308';\n"); + grammarBuilder.append("KW1309 : 'KW' '1309';\n"); + grammarBuilder.append("KW1310 : 'KW' '1310';\n"); + grammarBuilder.append("KW1311 : 'KW' '1311';\n"); + grammarBuilder.append("KW1312 : 'KW' '1312';\n"); + grammarBuilder.append("KW1313 : 'KW' '1313';\n"); + grammarBuilder.append("KW1314 : 'KW' '1314';\n"); + grammarBuilder.append("KW1315 : 'KW' '1315';\n"); + grammarBuilder.append("KW1316 : 'KW' '1316';\n"); + grammarBuilder.append("KW1317 : 'KW' '1317';\n"); + grammarBuilder.append("KW1318 : 'KW' '1318';\n"); + grammarBuilder.append("KW1319 : 'KW' '1319';\n"); + grammarBuilder.append("KW1320 : 'KW' '1320';\n"); + grammarBuilder.append("KW1321 : 'KW' '1321';\n"); + grammarBuilder.append("KW1322 : 'KW' '1322';\n"); + grammarBuilder.append("KW1323 : 'KW' '1323';\n"); + grammarBuilder.append("KW1324 : 'KW' '1324';\n"); + grammarBuilder.append("KW1325 : 'KW' '1325';\n"); + grammarBuilder.append("KW1326 : 'KW' '1326';\n"); + grammarBuilder.append("KW1327 : 'KW' '1327';\n"); + grammarBuilder.append("KW1328 : 'KW' '1328';\n"); + grammarBuilder.append("KW1329 : 'KW' '1329';\n"); + grammarBuilder.append("KW1330 : 'KW' '1330';\n"); + grammarBuilder.append("KW1331 : 'KW' '1331';\n"); + grammarBuilder.append("KW1332 : 'KW' '1332';\n"); + grammarBuilder.append("KW1333 : 'KW' '1333';\n"); + grammarBuilder.append("KW1334 : 'KW' '1334';\n"); + grammarBuilder.append("KW1335 : 'KW' '1335';\n"); + grammarBuilder.append("KW1336 : 'KW' '1336';\n"); + grammarBuilder.append("KW1337 : 'KW' '1337';\n"); + grammarBuilder.append("KW1338 : 'KW' '1338';\n"); + grammarBuilder.append("KW1339 : 'KW' '1339';\n"); + grammarBuilder.append("KW1340 : 'KW' '1340';\n"); + grammarBuilder.append("KW1341 : 'KW' '1341';\n"); + grammarBuilder.append("KW1342 : 'KW' '1342';\n"); + grammarBuilder.append("KW1343 : 'KW' '1343';\n"); + grammarBuilder.append("KW1344 : 'KW' '1344';\n"); + grammarBuilder.append("KW1345 : 'KW' '1345';\n"); + grammarBuilder.append("KW1346 : 'KW' '1346';\n"); + grammarBuilder.append("KW1347 : 'KW' '1347';\n"); + grammarBuilder.append("KW1348 : 'KW' '1348';\n"); + grammarBuilder.append("KW1349 : 'KW' '1349';\n"); + grammarBuilder.append("KW1350 : 'KW' '1350';\n"); + grammarBuilder.append("KW1351 : 'KW' '1351';\n"); + grammarBuilder.append("KW1352 : 'KW' '1352';\n"); + grammarBuilder.append("KW1353 : 'KW' '1353';\n"); + grammarBuilder.append("KW1354 : 'KW' '1354';\n"); + grammarBuilder.append("KW1355 : 'KW' '1355';\n"); + grammarBuilder.append("KW1356 : 'KW' '1356';\n"); + grammarBuilder.append("KW1357 : 'KW' '1357';\n"); + grammarBuilder.append("KW1358 : 'KW' '1358';\n"); + grammarBuilder.append("KW1359 : 'KW' '1359';\n"); + grammarBuilder.append("KW1360 : 'KW' '1360';\n"); + grammarBuilder.append("KW1361 : 'KW' '1361';\n"); + grammarBuilder.append("KW1362 : 'KW' '1362';\n"); + grammarBuilder.append("KW1363 : 'KW' '1363';\n"); + grammarBuilder.append("KW1364 : 'KW' '1364';\n"); + grammarBuilder.append("KW1365 : 'KW' '1365';\n"); + grammarBuilder.append("KW1366 : 'KW' '1366';\n"); + grammarBuilder.append("KW1367 : 'KW' '1367';\n"); + grammarBuilder.append("KW1368 : 'KW' '1368';\n"); + grammarBuilder.append("KW1369 : 'KW' '1369';\n"); + grammarBuilder.append("KW1370 : 'KW' '1370';\n"); + grammarBuilder.append("KW1371 : 'KW' '1371';\n"); + grammarBuilder.append("KW1372 : 'KW' '1372';\n"); + grammarBuilder.append("KW1373 : 'KW' '1373';\n"); + grammarBuilder.append("KW1374 : 'KW' '1374';\n"); + grammarBuilder.append("KW1375 : 'KW' '1375';\n"); + grammarBuilder.append("KW1376 : 'KW' '1376';\n"); + grammarBuilder.append("KW1377 : 'KW' '1377';\n"); + grammarBuilder.append("KW1378 : 'KW' '1378';\n"); + grammarBuilder.append("KW1379 : 'KW' '1379';\n"); + grammarBuilder.append("KW1380 : 'KW' '1380';\n"); + grammarBuilder.append("KW1381 : 'KW' '1381';\n"); + grammarBuilder.append("KW1382 : 'KW' '1382';\n"); + grammarBuilder.append("KW1383 : 'KW' '1383';\n"); + grammarBuilder.append("KW1384 : 'KW' '1384';\n"); + grammarBuilder.append("KW1385 : 'KW' '1385';\n"); + grammarBuilder.append("KW1386 : 'KW' '1386';\n"); + grammarBuilder.append("KW1387 : 'KW' '1387';\n"); + grammarBuilder.append("KW1388 : 'KW' '1388';\n"); + grammarBuilder.append("KW1389 : 'KW' '1389';\n"); + grammarBuilder.append("KW1390 : 'KW' '1390';\n"); + grammarBuilder.append("KW1391 : 'KW' '1391';\n"); + grammarBuilder.append("KW1392 : 'KW' '1392';\n"); + grammarBuilder.append("KW1393 : 'KW' '1393';\n"); + grammarBuilder.append("KW1394 : 'KW' '1394';\n"); + grammarBuilder.append("KW1395 : 'KW' '1395';\n"); + grammarBuilder.append("KW1396 : 'KW' '1396';\n"); + grammarBuilder.append("KW1397 : 'KW' '1397';\n"); + grammarBuilder.append("KW1398 : 'KW' '1398';\n"); + grammarBuilder.append("KW1399 : 'KW' '1399';\n"); + grammarBuilder.append("KW1400 : 'KW' '1400';\n"); + grammarBuilder.append("KW1401 : 'KW' '1401';\n"); + grammarBuilder.append("KW1402 : 'KW' '1402';\n"); + grammarBuilder.append("KW1403 : 'KW' '1403';\n"); + grammarBuilder.append("KW1404 : 'KW' '1404';\n"); + grammarBuilder.append("KW1405 : 'KW' '1405';\n"); + grammarBuilder.append("KW1406 : 'KW' '1406';\n"); + grammarBuilder.append("KW1407 : 'KW' '1407';\n"); + grammarBuilder.append("KW1408 : 'KW' '1408';\n"); + grammarBuilder.append("KW1409 : 'KW' '1409';\n"); + grammarBuilder.append("KW1410 : 'KW' '1410';\n"); + grammarBuilder.append("KW1411 : 'KW' '1411';\n"); + grammarBuilder.append("KW1412 : 'KW' '1412';\n"); + grammarBuilder.append("KW1413 : 'KW' '1413';\n"); + grammarBuilder.append("KW1414 : 'KW' '1414';\n"); + grammarBuilder.append("KW1415 : 'KW' '1415';\n"); + grammarBuilder.append("KW1416 : 'KW' '1416';\n"); + grammarBuilder.append("KW1417 : 'KW' '1417';\n"); + grammarBuilder.append("KW1418 : 'KW' '1418';\n"); + grammarBuilder.append("KW1419 : 'KW' '1419';\n"); + grammarBuilder.append("KW1420 : 'KW' '1420';\n"); + grammarBuilder.append("KW1421 : 'KW' '1421';\n"); + grammarBuilder.append("KW1422 : 'KW' '1422';\n"); + grammarBuilder.append("KW1423 : 'KW' '1423';\n"); + grammarBuilder.append("KW1424 : 'KW' '1424';\n"); + grammarBuilder.append("KW1425 : 'KW' '1425';\n"); + grammarBuilder.append("KW1426 : 'KW' '1426';\n"); + grammarBuilder.append("KW1427 : 'KW' '1427';\n"); + grammarBuilder.append("KW1428 : 'KW' '1428';\n"); + grammarBuilder.append("KW1429 : 'KW' '1429';\n"); + grammarBuilder.append("KW1430 : 'KW' '1430';\n"); + grammarBuilder.append("KW1431 : 'KW' '1431';\n"); + grammarBuilder.append("KW1432 : 'KW' '1432';\n"); + grammarBuilder.append("KW1433 : 'KW' '1433';\n"); + grammarBuilder.append("KW1434 : 'KW' '1434';\n"); + grammarBuilder.append("KW1435 : 'KW' '1435';\n"); + grammarBuilder.append("KW1436 : 'KW' '1436';\n"); + grammarBuilder.append("KW1437 : 'KW' '1437';\n"); + grammarBuilder.append("KW1438 : 'KW' '1438';\n"); + grammarBuilder.append("KW1439 : 'KW' '1439';\n"); + grammarBuilder.append("KW1440 : 'KW' '1440';\n"); + grammarBuilder.append("KW1441 : 'KW' '1441';\n"); + grammarBuilder.append("KW1442 : 'KW' '1442';\n"); + grammarBuilder.append("KW1443 : 'KW' '1443';\n"); + grammarBuilder.append("KW1444 : 'KW' '1444';\n"); + grammarBuilder.append("KW1445 : 'KW' '1445';\n"); + grammarBuilder.append("KW1446 : 'KW' '1446';\n"); + grammarBuilder.append("KW1447 : 'KW' '1447';\n"); + grammarBuilder.append("KW1448 : 'KW' '1448';\n"); + grammarBuilder.append("KW1449 : 'KW' '1449';\n"); + grammarBuilder.append("KW1450 : 'KW' '1450';\n"); + grammarBuilder.append("KW1451 : 'KW' '1451';\n"); + grammarBuilder.append("KW1452 : 'KW' '1452';\n"); + grammarBuilder.append("KW1453 : 'KW' '1453';\n"); + grammarBuilder.append("KW1454 : 'KW' '1454';\n"); + grammarBuilder.append("KW1455 : 'KW' '1455';\n"); + grammarBuilder.append("KW1456 : 'KW' '1456';\n"); + grammarBuilder.append("KW1457 : 'KW' '1457';\n"); + grammarBuilder.append("KW1458 : 'KW' '1458';\n"); + grammarBuilder.append("KW1459 : 'KW' '1459';\n"); + grammarBuilder.append("KW1460 : 'KW' '1460';\n"); + grammarBuilder.append("KW1461 : 'KW' '1461';\n"); + grammarBuilder.append("KW1462 : 'KW' '1462';\n"); + grammarBuilder.append("KW1463 : 'KW' '1463';\n"); + grammarBuilder.append("KW1464 : 'KW' '1464';\n"); + grammarBuilder.append("KW1465 : 'KW' '1465';\n"); + grammarBuilder.append("KW1466 : 'KW' '1466';\n"); + grammarBuilder.append("KW1467 : 'KW' '1467';\n"); + grammarBuilder.append("KW1468 : 'KW' '1468';\n"); + grammarBuilder.append("KW1469 : 'KW' '1469';\n"); + grammarBuilder.append("KW1470 : 'KW' '1470';\n"); + grammarBuilder.append("KW1471 : 'KW' '1471';\n"); + grammarBuilder.append("KW1472 : 'KW' '1472';\n"); + grammarBuilder.append("KW1473 : 'KW' '1473';\n"); + grammarBuilder.append("KW1474 : 'KW' '1474';\n"); + grammarBuilder.append("KW1475 : 'KW' '1475';\n"); + grammarBuilder.append("KW1476 : 'KW' '1476';\n"); + grammarBuilder.append("KW1477 : 'KW' '1477';\n"); + grammarBuilder.append("KW1478 : 'KW' '1478';\n"); + grammarBuilder.append("KW1479 : 'KW' '1479';\n"); + grammarBuilder.append("KW1480 : 'KW' '1480';\n"); + grammarBuilder.append("KW1481 : 'KW' '1481';\n"); + grammarBuilder.append("KW1482 : 'KW' '1482';\n"); + grammarBuilder.append("KW1483 : 'KW' '1483';\n"); + grammarBuilder.append("KW1484 : 'KW' '1484';\n"); + grammarBuilder.append("KW1485 : 'KW' '1485';\n"); + grammarBuilder.append("KW1486 : 'KW' '1486';\n"); + grammarBuilder.append("KW1487 : 'KW' '1487';\n"); + grammarBuilder.append("KW1488 : 'KW' '1488';\n"); + grammarBuilder.append("KW1489 : 'KW' '1489';\n"); + grammarBuilder.append("KW1490 : 'KW' '1490';\n"); + grammarBuilder.append("KW1491 : 'KW' '1491';\n"); + grammarBuilder.append("KW1492 : 'KW' '1492';\n"); + grammarBuilder.append("KW1493 : 'KW' '1493';\n"); + grammarBuilder.append("KW1494 : 'KW' '1494';\n"); + grammarBuilder.append("KW1495 : 'KW' '1495';\n"); + grammarBuilder.append("KW1496 : 'KW' '1496';\n"); + grammarBuilder.append("KW1497 : 'KW' '1497';\n"); + grammarBuilder.append("KW1498 : 'KW' '1498';\n"); + grammarBuilder.append("KW1499 : 'KW' '1499';\n"); + grammarBuilder.append("KW1500 : 'KW' '1500';\n"); + grammarBuilder.append("KW1501 : 'KW' '1501';\n"); + grammarBuilder.append("KW1502 : 'KW' '1502';\n"); + grammarBuilder.append("KW1503 : 'KW' '1503';\n"); + grammarBuilder.append("KW1504 : 'KW' '1504';\n"); + grammarBuilder.append("KW1505 : 'KW' '1505';\n"); + grammarBuilder.append("KW1506 : 'KW' '1506';\n"); + grammarBuilder.append("KW1507 : 'KW' '1507';\n"); + grammarBuilder.append("KW1508 : 'KW' '1508';\n"); + grammarBuilder.append("KW1509 : 'KW' '1509';\n"); + grammarBuilder.append("KW1510 : 'KW' '1510';\n"); + grammarBuilder.append("KW1511 : 'KW' '1511';\n"); + grammarBuilder.append("KW1512 : 'KW' '1512';\n"); + grammarBuilder.append("KW1513 : 'KW' '1513';\n"); + grammarBuilder.append("KW1514 : 'KW' '1514';\n"); + grammarBuilder.append("KW1515 : 'KW' '1515';\n"); + grammarBuilder.append("KW1516 : 'KW' '1516';\n"); + grammarBuilder.append("KW1517 : 'KW' '1517';\n"); + grammarBuilder.append("KW1518 : 'KW' '1518';\n"); + grammarBuilder.append("KW1519 : 'KW' '1519';\n"); + grammarBuilder.append("KW1520 : 'KW' '1520';\n"); + grammarBuilder.append("KW1521 : 'KW' '1521';\n"); + grammarBuilder.append("KW1522 : 'KW' '1522';\n"); + grammarBuilder.append("KW1523 : 'KW' '1523';\n"); + grammarBuilder.append("KW1524 : 'KW' '1524';\n"); + grammarBuilder.append("KW1525 : 'KW' '1525';\n"); + grammarBuilder.append("KW1526 : 'KW' '1526';\n"); + grammarBuilder.append("KW1527 : 'KW' '1527';\n"); + grammarBuilder.append("KW1528 : 'KW' '1528';\n"); + grammarBuilder.append("KW1529 : 'KW' '1529';\n"); + grammarBuilder.append("KW1530 : 'KW' '1530';\n"); + grammarBuilder.append("KW1531 : 'KW' '1531';\n"); + grammarBuilder.append("KW1532 : 'KW' '1532';\n"); + grammarBuilder.append("KW1533 : 'KW' '1533';\n"); + grammarBuilder.append("KW1534 : 'KW' '1534';\n"); + grammarBuilder.append("KW1535 : 'KW' '1535';\n"); + grammarBuilder.append("KW1536 : 'KW' '1536';\n"); + grammarBuilder.append("KW1537 : 'KW' '1537';\n"); + grammarBuilder.append("KW1538 : 'KW' '1538';\n"); + grammarBuilder.append("KW1539 : 'KW' '1539';\n"); + grammarBuilder.append("KW1540 : 'KW' '1540';\n"); + grammarBuilder.append("KW1541 : 'KW' '1541';\n"); + grammarBuilder.append("KW1542 : 'KW' '1542';\n"); + grammarBuilder.append("KW1543 : 'KW' '1543';\n"); + grammarBuilder.append("KW1544 : 'KW' '1544';\n"); + grammarBuilder.append("KW1545 : 'KW' '1545';\n"); + grammarBuilder.append("KW1546 : 'KW' '1546';\n"); + grammarBuilder.append("KW1547 : 'KW' '1547';\n"); + grammarBuilder.append("KW1548 : 'KW' '1548';\n"); + grammarBuilder.append("KW1549 : 'KW' '1549';\n"); + grammarBuilder.append("KW1550 : 'KW' '1550';\n"); + grammarBuilder.append("KW1551 : 'KW' '1551';\n"); + grammarBuilder.append("KW1552 : 'KW' '1552';\n"); + grammarBuilder.append("KW1553 : 'KW' '1553';\n"); + grammarBuilder.append("KW1554 : 'KW' '1554';\n"); + grammarBuilder.append("KW1555 : 'KW' '1555';\n"); + grammarBuilder.append("KW1556 : 'KW' '1556';\n"); + grammarBuilder.append("KW1557 : 'KW' '1557';\n"); + grammarBuilder.append("KW1558 : 'KW' '1558';\n"); + grammarBuilder.append("KW1559 : 'KW' '1559';\n"); + grammarBuilder.append("KW1560 : 'KW' '1560';\n"); + grammarBuilder.append("KW1561 : 'KW' '1561';\n"); + grammarBuilder.append("KW1562 : 'KW' '1562';\n"); + grammarBuilder.append("KW1563 : 'KW' '1563';\n"); + grammarBuilder.append("KW1564 : 'KW' '1564';\n"); + grammarBuilder.append("KW1565 : 'KW' '1565';\n"); + grammarBuilder.append("KW1566 : 'KW' '1566';\n"); + grammarBuilder.append("KW1567 : 'KW' '1567';\n"); + grammarBuilder.append("KW1568 : 'KW' '1568';\n"); + grammarBuilder.append("KW1569 : 'KW' '1569';\n"); + grammarBuilder.append("KW1570 : 'KW' '1570';\n"); + grammarBuilder.append("KW1571 : 'KW' '1571';\n"); + grammarBuilder.append("KW1572 : 'KW' '1572';\n"); + grammarBuilder.append("KW1573 : 'KW' '1573';\n"); + grammarBuilder.append("KW1574 : 'KW' '1574';\n"); + grammarBuilder.append("KW1575 : 'KW' '1575';\n"); + grammarBuilder.append("KW1576 : 'KW' '1576';\n"); + grammarBuilder.append("KW1577 : 'KW' '1577';\n"); + grammarBuilder.append("KW1578 : 'KW' '1578';\n"); + grammarBuilder.append("KW1579 : 'KW' '1579';\n"); + grammarBuilder.append("KW1580 : 'KW' '1580';\n"); + grammarBuilder.append("KW1581 : 'KW' '1581';\n"); + grammarBuilder.append("KW1582 : 'KW' '1582';\n"); + grammarBuilder.append("KW1583 : 'KW' '1583';\n"); + grammarBuilder.append("KW1584 : 'KW' '1584';\n"); + grammarBuilder.append("KW1585 : 'KW' '1585';\n"); + grammarBuilder.append("KW1586 : 'KW' '1586';\n"); + grammarBuilder.append("KW1587 : 'KW' '1587';\n"); + grammarBuilder.append("KW1588 : 'KW' '1588';\n"); + grammarBuilder.append("KW1589 : 'KW' '1589';\n"); + grammarBuilder.append("KW1590 : 'KW' '1590';\n"); + grammarBuilder.append("KW1591 : 'KW' '1591';\n"); + grammarBuilder.append("KW1592 : 'KW' '1592';\n"); + grammarBuilder.append("KW1593 : 'KW' '1593';\n"); + grammarBuilder.append("KW1594 : 'KW' '1594';\n"); + grammarBuilder.append("KW1595 : 'KW' '1595';\n"); + grammarBuilder.append("KW1596 : 'KW' '1596';\n"); + grammarBuilder.append("KW1597 : 'KW' '1597';\n"); + grammarBuilder.append("KW1598 : 'KW' '1598';\n"); + grammarBuilder.append("KW1599 : 'KW' '1599';\n"); + grammarBuilder.append("KW1600 : 'KW' '1600';\n"); + grammarBuilder.append("KW1601 : 'KW' '1601';\n"); + grammarBuilder.append("KW1602 : 'KW' '1602';\n"); + grammarBuilder.append("KW1603 : 'KW' '1603';\n"); + grammarBuilder.append("KW1604 : 'KW' '1604';\n"); + grammarBuilder.append("KW1605 : 'KW' '1605';\n"); + grammarBuilder.append("KW1606 : 'KW' '1606';\n"); + grammarBuilder.append("KW1607 : 'KW' '1607';\n"); + grammarBuilder.append("KW1608 : 'KW' '1608';\n"); + grammarBuilder.append("KW1609 : 'KW' '1609';\n"); + grammarBuilder.append("KW1610 : 'KW' '1610';\n"); + grammarBuilder.append("KW1611 : 'KW' '1611';\n"); + grammarBuilder.append("KW1612 : 'KW' '1612';\n"); + grammarBuilder.append("KW1613 : 'KW' '1613';\n"); + grammarBuilder.append("KW1614 : 'KW' '1614';\n"); + grammarBuilder.append("KW1615 : 'KW' '1615';\n"); + grammarBuilder.append("KW1616 : 'KW' '1616';\n"); + grammarBuilder.append("KW1617 : 'KW' '1617';\n"); + grammarBuilder.append("KW1618 : 'KW' '1618';\n"); + grammarBuilder.append("KW1619 : 'KW' '1619';\n"); + grammarBuilder.append("KW1620 : 'KW' '1620';\n"); + grammarBuilder.append("KW1621 : 'KW' '1621';\n"); + grammarBuilder.append("KW1622 : 'KW' '1622';\n"); + grammarBuilder.append("KW1623 : 'KW' '1623';\n"); + grammarBuilder.append("KW1624 : 'KW' '1624';\n"); + grammarBuilder.append("KW1625 : 'KW' '1625';\n"); + grammarBuilder.append("KW1626 : 'KW' '1626';\n"); + grammarBuilder.append("KW1627 : 'KW' '1627';\n"); + grammarBuilder.append("KW1628 : 'KW' '1628';\n"); + grammarBuilder.append("KW1629 : 'KW' '1629';\n"); + grammarBuilder.append("KW1630 : 'KW' '1630';\n"); + grammarBuilder.append("KW1631 : 'KW' '1631';\n"); + grammarBuilder.append("KW1632 : 'KW' '1632';\n"); + grammarBuilder.append("KW1633 : 'KW' '1633';\n"); + grammarBuilder.append("KW1634 : 'KW' '1634';\n"); + grammarBuilder.append("KW1635 : 'KW' '1635';\n"); + grammarBuilder.append("KW1636 : 'KW' '1636';\n"); + grammarBuilder.append("KW1637 : 'KW' '1637';\n"); + grammarBuilder.append("KW1638 : 'KW' '1638';\n"); + grammarBuilder.append("KW1639 : 'KW' '1639';\n"); + grammarBuilder.append("KW1640 : 'KW' '1640';\n"); + grammarBuilder.append("KW1641 : 'KW' '1641';\n"); + grammarBuilder.append("KW1642 : 'KW' '1642';\n"); + grammarBuilder.append("KW1643 : 'KW' '1643';\n"); + grammarBuilder.append("KW1644 : 'KW' '1644';\n"); + grammarBuilder.append("KW1645 : 'KW' '1645';\n"); + grammarBuilder.append("KW1646 : 'KW' '1646';\n"); + grammarBuilder.append("KW1647 : 'KW' '1647';\n"); + grammarBuilder.append("KW1648 : 'KW' '1648';\n"); + grammarBuilder.append("KW1649 : 'KW' '1649';\n"); + grammarBuilder.append("KW1650 : 'KW' '1650';\n"); + grammarBuilder.append("KW1651 : 'KW' '1651';\n"); + grammarBuilder.append("KW1652 : 'KW' '1652';\n"); + grammarBuilder.append("KW1653 : 'KW' '1653';\n"); + grammarBuilder.append("KW1654 : 'KW' '1654';\n"); + grammarBuilder.append("KW1655 : 'KW' '1655';\n"); + grammarBuilder.append("KW1656 : 'KW' '1656';\n"); + grammarBuilder.append("KW1657 : 'KW' '1657';\n"); + grammarBuilder.append("KW1658 : 'KW' '1658';\n"); + grammarBuilder.append("KW1659 : 'KW' '1659';\n"); + grammarBuilder.append("KW1660 : 'KW' '1660';\n"); + grammarBuilder.append("KW1661 : 'KW' '1661';\n"); + grammarBuilder.append("KW1662 : 'KW' '1662';\n"); + grammarBuilder.append("KW1663 : 'KW' '1663';\n"); + grammarBuilder.append("KW1664 : 'KW' '1664';\n"); + grammarBuilder.append("KW1665 : 'KW' '1665';\n"); + grammarBuilder.append("KW1666 : 'KW' '1666';\n"); + grammarBuilder.append("KW1667 : 'KW' '1667';\n"); + grammarBuilder.append("KW1668 : 'KW' '1668';\n"); + grammarBuilder.append("KW1669 : 'KW' '1669';\n"); + grammarBuilder.append("KW1670 : 'KW' '1670';\n"); + grammarBuilder.append("KW1671 : 'KW' '1671';\n"); + grammarBuilder.append("KW1672 : 'KW' '1672';\n"); + grammarBuilder.append("KW1673 : 'KW' '1673';\n"); + grammarBuilder.append("KW1674 : 'KW' '1674';\n"); + grammarBuilder.append("KW1675 : 'KW' '1675';\n"); + grammarBuilder.append("KW1676 : 'KW' '1676';\n"); + grammarBuilder.append("KW1677 : 'KW' '1677';\n"); + grammarBuilder.append("KW1678 : 'KW' '1678';\n"); + grammarBuilder.append("KW1679 : 'KW' '1679';\n"); + grammarBuilder.append("KW1680 : 'KW' '1680';\n"); + grammarBuilder.append("KW1681 : 'KW' '1681';\n"); + grammarBuilder.append("KW1682 : 'KW' '1682';\n"); + grammarBuilder.append("KW1683 : 'KW' '1683';\n"); + grammarBuilder.append("KW1684 : 'KW' '1684';\n"); + grammarBuilder.append("KW1685 : 'KW' '1685';\n"); + grammarBuilder.append("KW1686 : 'KW' '1686';\n"); + grammarBuilder.append("KW1687 : 'KW' '1687';\n"); + grammarBuilder.append("KW1688 : 'KW' '1688';\n"); + grammarBuilder.append("KW1689 : 'KW' '1689';\n"); + grammarBuilder.append("KW1690 : 'KW' '1690';\n"); + grammarBuilder.append("KW1691 : 'KW' '1691';\n"); + grammarBuilder.append("KW1692 : 'KW' '1692';\n"); + grammarBuilder.append("KW1693 : 'KW' '1693';\n"); + grammarBuilder.append("KW1694 : 'KW' '1694';\n"); + grammarBuilder.append("KW1695 : 'KW' '1695';\n"); + grammarBuilder.append("KW1696 : 'KW' '1696';\n"); + grammarBuilder.append("KW1697 : 'KW' '1697';\n"); + grammarBuilder.append("KW1698 : 'KW' '1698';\n"); + grammarBuilder.append("KW1699 : 'KW' '1699';\n"); + grammarBuilder.append("KW1700 : 'KW' '1700';\n"); + grammarBuilder.append("KW1701 : 'KW' '1701';\n"); + grammarBuilder.append("KW1702 : 'KW' '1702';\n"); + grammarBuilder.append("KW1703 : 'KW' '1703';\n"); + grammarBuilder.append("KW1704 : 'KW' '1704';\n"); + grammarBuilder.append("KW1705 : 'KW' '1705';\n"); + grammarBuilder.append("KW1706 : 'KW' '1706';\n"); + grammarBuilder.append("KW1707 : 'KW' '1707';\n"); + grammarBuilder.append("KW1708 : 'KW' '1708';\n"); + grammarBuilder.append("KW1709 : 'KW' '1709';\n"); + grammarBuilder.append("KW1710 : 'KW' '1710';\n"); + grammarBuilder.append("KW1711 : 'KW' '1711';\n"); + grammarBuilder.append("KW1712 : 'KW' '1712';\n"); + grammarBuilder.append("KW1713 : 'KW' '1713';\n"); + grammarBuilder.append("KW1714 : 'KW' '1714';\n"); + grammarBuilder.append("KW1715 : 'KW' '1715';\n"); + grammarBuilder.append("KW1716 : 'KW' '1716';\n"); + grammarBuilder.append("KW1717 : 'KW' '1717';\n"); + grammarBuilder.append("KW1718 : 'KW' '1718';\n"); + grammarBuilder.append("KW1719 : 'KW' '1719';\n"); + grammarBuilder.append("KW1720 : 'KW' '1720';\n"); + grammarBuilder.append("KW1721 : 'KW' '1721';\n"); + grammarBuilder.append("KW1722 : 'KW' '1722';\n"); + grammarBuilder.append("KW1723 : 'KW' '1723';\n"); + grammarBuilder.append("KW1724 : 'KW' '1724';\n"); + grammarBuilder.append("KW1725 : 'KW' '1725';\n"); + grammarBuilder.append("KW1726 : 'KW' '1726';\n"); + grammarBuilder.append("KW1727 : 'KW' '1727';\n"); + grammarBuilder.append("KW1728 : 'KW' '1728';\n"); + grammarBuilder.append("KW1729 : 'KW' '1729';\n"); + grammarBuilder.append("KW1730 : 'KW' '1730';\n"); + grammarBuilder.append("KW1731 : 'KW' '1731';\n"); + grammarBuilder.append("KW1732 : 'KW' '1732';\n"); + grammarBuilder.append("KW1733 : 'KW' '1733';\n"); + grammarBuilder.append("KW1734 : 'KW' '1734';\n"); + grammarBuilder.append("KW1735 : 'KW' '1735';\n"); + grammarBuilder.append("KW1736 : 'KW' '1736';\n"); + grammarBuilder.append("KW1737 : 'KW' '1737';\n"); + grammarBuilder.append("KW1738 : 'KW' '1738';\n"); + grammarBuilder.append("KW1739 : 'KW' '1739';\n"); + grammarBuilder.append("KW1740 : 'KW' '1740';\n"); + grammarBuilder.append("KW1741 : 'KW' '1741';\n"); + grammarBuilder.append("KW1742 : 'KW' '1742';\n"); + grammarBuilder.append("KW1743 : 'KW' '1743';\n"); + grammarBuilder.append("KW1744 : 'KW' '1744';\n"); + grammarBuilder.append("KW1745 : 'KW' '1745';\n"); + grammarBuilder.append("KW1746 : 'KW' '1746';\n"); + grammarBuilder.append("KW1747 : 'KW' '1747';\n"); + grammarBuilder.append("KW1748 : 'KW' '1748';\n"); + grammarBuilder.append("KW1749 : 'KW' '1749';\n"); + grammarBuilder.append("KW1750 : 'KW' '1750';\n"); + grammarBuilder.append("KW1751 : 'KW' '1751';\n"); + grammarBuilder.append("KW1752 : 'KW' '1752';\n"); + grammarBuilder.append("KW1753 : 'KW' '1753';\n"); + grammarBuilder.append("KW1754 : 'KW' '1754';\n"); + grammarBuilder.append("KW1755 : 'KW' '1755';\n"); + grammarBuilder.append("KW1756 : 'KW' '1756';\n"); + grammarBuilder.append("KW1757 : 'KW' '1757';\n"); + grammarBuilder.append("KW1758 : 'KW' '1758';\n"); + grammarBuilder.append("KW1759 : 'KW' '1759';\n"); + grammarBuilder.append("KW1760 : 'KW' '1760';\n"); + grammarBuilder.append("KW1761 : 'KW' '1761';\n"); + grammarBuilder.append("KW1762 : 'KW' '1762';\n"); + grammarBuilder.append("KW1763 : 'KW' '1763';\n"); + grammarBuilder.append("KW1764 : 'KW' '1764';\n"); + grammarBuilder.append("KW1765 : 'KW' '1765';\n"); + grammarBuilder.append("KW1766 : 'KW' '1766';\n"); + grammarBuilder.append("KW1767 : 'KW' '1767';\n"); + grammarBuilder.append("KW1768 : 'KW' '1768';\n"); + grammarBuilder.append("KW1769 : 'KW' '1769';\n"); + grammarBuilder.append("KW1770 : 'KW' '1770';\n"); + grammarBuilder.append("KW1771 : 'KW' '1771';\n"); + grammarBuilder.append("KW1772 : 'KW' '1772';\n"); + grammarBuilder.append("KW1773 : 'KW' '1773';\n"); + grammarBuilder.append("KW1774 : 'KW' '1774';\n"); + grammarBuilder.append("KW1775 : 'KW' '1775';\n"); + grammarBuilder.append("KW1776 : 'KW' '1776';\n"); + grammarBuilder.append("KW1777 : 'KW' '1777';\n"); + grammarBuilder.append("KW1778 : 'KW' '1778';\n"); + grammarBuilder.append("KW1779 : 'KW' '1779';\n"); + grammarBuilder.append("KW1780 : 'KW' '1780';\n"); + grammarBuilder.append("KW1781 : 'KW' '1781';\n"); + grammarBuilder.append("KW1782 : 'KW' '1782';\n"); + grammarBuilder.append("KW1783 : 'KW' '1783';\n"); + grammarBuilder.append("KW1784 : 'KW' '1784';\n"); + grammarBuilder.append("KW1785 : 'KW' '1785';\n"); + grammarBuilder.append("KW1786 : 'KW' '1786';\n"); + grammarBuilder.append("KW1787 : 'KW' '1787';\n"); + grammarBuilder.append("KW1788 : 'KW' '1788';\n"); + grammarBuilder.append("KW1789 : 'KW' '1789';\n"); + grammarBuilder.append("KW1790 : 'KW' '1790';\n"); + grammarBuilder.append("KW1791 : 'KW' '1791';\n"); + grammarBuilder.append("KW1792 : 'KW' '1792';\n"); + grammarBuilder.append("KW1793 : 'KW' '1793';\n"); + grammarBuilder.append("KW1794 : 'KW' '1794';\n"); + grammarBuilder.append("KW1795 : 'KW' '1795';\n"); + grammarBuilder.append("KW1796 : 'KW' '1796';\n"); + grammarBuilder.append("KW1797 : 'KW' '1797';\n"); + grammarBuilder.append("KW1798 : 'KW' '1798';\n"); + grammarBuilder.append("KW1799 : 'KW' '1799';\n"); + grammarBuilder.append("KW1800 : 'KW' '1800';\n"); + grammarBuilder.append("KW1801 : 'KW' '1801';\n"); + grammarBuilder.append("KW1802 : 'KW' '1802';\n"); + grammarBuilder.append("KW1803 : 'KW' '1803';\n"); + grammarBuilder.append("KW1804 : 'KW' '1804';\n"); + grammarBuilder.append("KW1805 : 'KW' '1805';\n"); + grammarBuilder.append("KW1806 : 'KW' '1806';\n"); + grammarBuilder.append("KW1807 : 'KW' '1807';\n"); + grammarBuilder.append("KW1808 : 'KW' '1808';\n"); + grammarBuilder.append("KW1809 : 'KW' '1809';\n"); + grammarBuilder.append("KW1810 : 'KW' '1810';\n"); + grammarBuilder.append("KW1811 : 'KW' '1811';\n"); + grammarBuilder.append("KW1812 : 'KW' '1812';\n"); + grammarBuilder.append("KW1813 : 'KW' '1813';\n"); + grammarBuilder.append("KW1814 : 'KW' '1814';\n"); + grammarBuilder.append("KW1815 : 'KW' '1815';\n"); + grammarBuilder.append("KW1816 : 'KW' '1816';\n"); + grammarBuilder.append("KW1817 : 'KW' '1817';\n"); + grammarBuilder.append("KW1818 : 'KW' '1818';\n"); + grammarBuilder.append("KW1819 : 'KW' '1819';\n"); + grammarBuilder.append("KW1820 : 'KW' '1820';\n"); + grammarBuilder.append("KW1821 : 'KW' '1821';\n"); + grammarBuilder.append("KW1822 : 'KW' '1822';\n"); + grammarBuilder.append("KW1823 : 'KW' '1823';\n"); + grammarBuilder.append("KW1824 : 'KW' '1824';\n"); + grammarBuilder.append("KW1825 : 'KW' '1825';\n"); + grammarBuilder.append("KW1826 : 'KW' '1826';\n"); + grammarBuilder.append("KW1827 : 'KW' '1827';\n"); + grammarBuilder.append("KW1828 : 'KW' '1828';\n"); + grammarBuilder.append("KW1829 : 'KW' '1829';\n"); + grammarBuilder.append("KW1830 : 'KW' '1830';\n"); + grammarBuilder.append("KW1831 : 'KW' '1831';\n"); + grammarBuilder.append("KW1832 : 'KW' '1832';\n"); + grammarBuilder.append("KW1833 : 'KW' '1833';\n"); + grammarBuilder.append("KW1834 : 'KW' '1834';\n"); + grammarBuilder.append("KW1835 : 'KW' '1835';\n"); + grammarBuilder.append("KW1836 : 'KW' '1836';\n"); + grammarBuilder.append("KW1837 : 'KW' '1837';\n"); + grammarBuilder.append("KW1838 : 'KW' '1838';\n"); + grammarBuilder.append("KW1839 : 'KW' '1839';\n"); + grammarBuilder.append("KW1840 : 'KW' '1840';\n"); + grammarBuilder.append("KW1841 : 'KW' '1841';\n"); + grammarBuilder.append("KW1842 : 'KW' '1842';\n"); + grammarBuilder.append("KW1843 : 'KW' '1843';\n"); + grammarBuilder.append("KW1844 : 'KW' '1844';\n"); + grammarBuilder.append("KW1845 : 'KW' '1845';\n"); + grammarBuilder.append("KW1846 : 'KW' '1846';\n"); + grammarBuilder.append("KW1847 : 'KW' '1847';\n"); + grammarBuilder.append("KW1848 : 'KW' '1848';\n"); + grammarBuilder.append("KW1849 : 'KW' '1849';\n"); + grammarBuilder.append("KW1850 : 'KW' '1850';\n"); + grammarBuilder.append("KW1851 : 'KW' '1851';\n"); + grammarBuilder.append("KW1852 : 'KW' '1852';\n"); + grammarBuilder.append("KW1853 : 'KW' '1853';\n"); + grammarBuilder.append("KW1854 : 'KW' '1854';\n"); + grammarBuilder.append("KW1855 : 'KW' '1855';\n"); + grammarBuilder.append("KW1856 : 'KW' '1856';\n"); + grammarBuilder.append("KW1857 : 'KW' '1857';\n"); + grammarBuilder.append("KW1858 : 'KW' '1858';\n"); + grammarBuilder.append("KW1859 : 'KW' '1859';\n"); + grammarBuilder.append("KW1860 : 'KW' '1860';\n"); + grammarBuilder.append("KW1861 : 'KW' '1861';\n"); + grammarBuilder.append("KW1862 : 'KW' '1862';\n"); + grammarBuilder.append("KW1863 : 'KW' '1863';\n"); + grammarBuilder.append("KW1864 : 'KW' '1864';\n"); + grammarBuilder.append("KW1865 : 'KW' '1865';\n"); + grammarBuilder.append("KW1866 : 'KW' '1866';\n"); + grammarBuilder.append("KW1867 : 'KW' '1867';\n"); + grammarBuilder.append("KW1868 : 'KW' '1868';\n"); + grammarBuilder.append("KW1869 : 'KW' '1869';\n"); + grammarBuilder.append("KW1870 : 'KW' '1870';\n"); + grammarBuilder.append("KW1871 : 'KW' '1871';\n"); + grammarBuilder.append("KW1872 : 'KW' '1872';\n"); + grammarBuilder.append("KW1873 : 'KW' '1873';\n"); + grammarBuilder.append("KW1874 : 'KW' '1874';\n"); + grammarBuilder.append("KW1875 : 'KW' '1875';\n"); + grammarBuilder.append("KW1876 : 'KW' '1876';\n"); + grammarBuilder.append("KW1877 : 'KW' '1877';\n"); + grammarBuilder.append("KW1878 : 'KW' '1878';\n"); + grammarBuilder.append("KW1879 : 'KW' '1879';\n"); + grammarBuilder.append("KW1880 : 'KW' '1880';\n"); + grammarBuilder.append("KW1881 : 'KW' '1881';\n"); + grammarBuilder.append("KW1882 : 'KW' '1882';\n"); + grammarBuilder.append("KW1883 : 'KW' '1883';\n"); + grammarBuilder.append("KW1884 : 'KW' '1884';\n"); + grammarBuilder.append("KW1885 : 'KW' '1885';\n"); + grammarBuilder.append("KW1886 : 'KW' '1886';\n"); + grammarBuilder.append("KW1887 : 'KW' '1887';\n"); + grammarBuilder.append("KW1888 : 'KW' '1888';\n"); + grammarBuilder.append("KW1889 : 'KW' '1889';\n"); + grammarBuilder.append("KW1890 : 'KW' '1890';\n"); + grammarBuilder.append("KW1891 : 'KW' '1891';\n"); + grammarBuilder.append("KW1892 : 'KW' '1892';\n"); + grammarBuilder.append("KW1893 : 'KW' '1893';\n"); + grammarBuilder.append("KW1894 : 'KW' '1894';\n"); + grammarBuilder.append("KW1895 : 'KW' '1895';\n"); + grammarBuilder.append("KW1896 : 'KW' '1896';\n"); + grammarBuilder.append("KW1897 : 'KW' '1897';\n"); + grammarBuilder.append("KW1898 : 'KW' '1898';\n"); + grammarBuilder.append("KW1899 : 'KW' '1899';\n"); + grammarBuilder.append("KW1900 : 'KW' '1900';\n"); + grammarBuilder.append("KW1901 : 'KW' '1901';\n"); + grammarBuilder.append("KW1902 : 'KW' '1902';\n"); + grammarBuilder.append("KW1903 : 'KW' '1903';\n"); + grammarBuilder.append("KW1904 : 'KW' '1904';\n"); + grammarBuilder.append("KW1905 : 'KW' '1905';\n"); + grammarBuilder.append("KW1906 : 'KW' '1906';\n"); + grammarBuilder.append("KW1907 : 'KW' '1907';\n"); + grammarBuilder.append("KW1908 : 'KW' '1908';\n"); + grammarBuilder.append("KW1909 : 'KW' '1909';\n"); + grammarBuilder.append("KW1910 : 'KW' '1910';\n"); + grammarBuilder.append("KW1911 : 'KW' '1911';\n"); + grammarBuilder.append("KW1912 : 'KW' '1912';\n"); + grammarBuilder.append("KW1913 : 'KW' '1913';\n"); + grammarBuilder.append("KW1914 : 'KW' '1914';\n"); + grammarBuilder.append("KW1915 : 'KW' '1915';\n"); + grammarBuilder.append("KW1916 : 'KW' '1916';\n"); + grammarBuilder.append("KW1917 : 'KW' '1917';\n"); + grammarBuilder.append("KW1918 : 'KW' '1918';\n"); + grammarBuilder.append("KW1919 : 'KW' '1919';\n"); + grammarBuilder.append("KW1920 : 'KW' '1920';\n"); + grammarBuilder.append("KW1921 : 'KW' '1921';\n"); + grammarBuilder.append("KW1922 : 'KW' '1922';\n"); + grammarBuilder.append("KW1923 : 'KW' '1923';\n"); + grammarBuilder.append("KW1924 : 'KW' '1924';\n"); + grammarBuilder.append("KW1925 : 'KW' '1925';\n"); + grammarBuilder.append("KW1926 : 'KW' '1926';\n"); + grammarBuilder.append("KW1927 : 'KW' '1927';\n"); + grammarBuilder.append("KW1928 : 'KW' '1928';\n"); + grammarBuilder.append("KW1929 : 'KW' '1929';\n"); + grammarBuilder.append("KW1930 : 'KW' '1930';\n"); + grammarBuilder.append("KW1931 : 'KW' '1931';\n"); + grammarBuilder.append("KW1932 : 'KW' '1932';\n"); + grammarBuilder.append("KW1933 : 'KW' '1933';\n"); + grammarBuilder.append("KW1934 : 'KW' '1934';\n"); + grammarBuilder.append("KW1935 : 'KW' '1935';\n"); + grammarBuilder.append("KW1936 : 'KW' '1936';\n"); + grammarBuilder.append("KW1937 : 'KW' '1937';\n"); + grammarBuilder.append("KW1938 : 'KW' '1938';\n"); + grammarBuilder.append("KW1939 : 'KW' '1939';\n"); + grammarBuilder.append("KW1940 : 'KW' '1940';\n"); + grammarBuilder.append("KW1941 : 'KW' '1941';\n"); + grammarBuilder.append("KW1942 : 'KW' '1942';\n"); + grammarBuilder.append("KW1943 : 'KW' '1943';\n"); + grammarBuilder.append("KW1944 : 'KW' '1944';\n"); + grammarBuilder.append("KW1945 : 'KW' '1945';\n"); + grammarBuilder.append("KW1946 : 'KW' '1946';\n"); + grammarBuilder.append("KW1947 : 'KW' '1947';\n"); + grammarBuilder.append("KW1948 : 'KW' '1948';\n"); + grammarBuilder.append("KW1949 : 'KW' '1949';\n"); + grammarBuilder.append("KW1950 : 'KW' '1950';\n"); + grammarBuilder.append("KW1951 : 'KW' '1951';\n"); + grammarBuilder.append("KW1952 : 'KW' '1952';\n"); + grammarBuilder.append("KW1953 : 'KW' '1953';\n"); + grammarBuilder.append("KW1954 : 'KW' '1954';\n"); + grammarBuilder.append("KW1955 : 'KW' '1955';\n"); + grammarBuilder.append("KW1956 : 'KW' '1956';\n"); + grammarBuilder.append("KW1957 : 'KW' '1957';\n"); + grammarBuilder.append("KW1958 : 'KW' '1958';\n"); + grammarBuilder.append("KW1959 : 'KW' '1959';\n"); + grammarBuilder.append("KW1960 : 'KW' '1960';\n"); + grammarBuilder.append("KW1961 : 'KW' '1961';\n"); + grammarBuilder.append("KW1962 : 'KW' '1962';\n"); + grammarBuilder.append("KW1963 : 'KW' '1963';\n"); + grammarBuilder.append("KW1964 : 'KW' '1964';\n"); + grammarBuilder.append("KW1965 : 'KW' '1965';\n"); + grammarBuilder.append("KW1966 : 'KW' '1966';\n"); + grammarBuilder.append("KW1967 : 'KW' '1967';\n"); + grammarBuilder.append("KW1968 : 'KW' '1968';\n"); + grammarBuilder.append("KW1969 : 'KW' '1969';\n"); + grammarBuilder.append("KW1970 : 'KW' '1970';\n"); + grammarBuilder.append("KW1971 : 'KW' '1971';\n"); + grammarBuilder.append("KW1972 : 'KW' '1972';\n"); + grammarBuilder.append("KW1973 : 'KW' '1973';\n"); + grammarBuilder.append("KW1974 : 'KW' '1974';\n"); + grammarBuilder.append("KW1975 : 'KW' '1975';\n"); + grammarBuilder.append("KW1976 : 'KW' '1976';\n"); + grammarBuilder.append("KW1977 : 'KW' '1977';\n"); + grammarBuilder.append("KW1978 : 'KW' '1978';\n"); + grammarBuilder.append("KW1979 : 'KW' '1979';\n"); + grammarBuilder.append("KW1980 : 'KW' '1980';\n"); + grammarBuilder.append("KW1981 : 'KW' '1981';\n"); + grammarBuilder.append("KW1982 : 'KW' '1982';\n"); + grammarBuilder.append("KW1983 : 'KW' '1983';\n"); + grammarBuilder.append("KW1984 : 'KW' '1984';\n"); + grammarBuilder.append("KW1985 : 'KW' '1985';\n"); + grammarBuilder.append("KW1986 : 'KW' '1986';\n"); + grammarBuilder.append("KW1987 : 'KW' '1987';\n"); + grammarBuilder.append("KW1988 : 'KW' '1988';\n"); + grammarBuilder.append("KW1989 : 'KW' '1989';\n"); + grammarBuilder.append("KW1990 : 'KW' '1990';\n"); + grammarBuilder.append("KW1991 : 'KW' '1991';\n"); + grammarBuilder.append("KW1992 : 'KW' '1992';\n"); + grammarBuilder.append("KW1993 : 'KW' '1993';\n"); + grammarBuilder.append("KW1994 : 'KW' '1994';\n"); + grammarBuilder.append("KW1995 : 'KW' '1995';\n"); + grammarBuilder.append("KW1996 : 'KW' '1996';\n"); + grammarBuilder.append("KW1997 : 'KW' '1997';\n"); + grammarBuilder.append("KW1998 : 'KW' '1998';\n"); + grammarBuilder.append("KW1999 : 'KW' '1999';\n"); + grammarBuilder.append("KW2000 : 'KW' '2000';\n"); + grammarBuilder.append("KW2001 : 'KW' '2001';\n"); + grammarBuilder.append("KW2002 : 'KW' '2002';\n"); + grammarBuilder.append("KW2003 : 'KW' '2003';\n"); + grammarBuilder.append("KW2004 : 'KW' '2004';\n"); + grammarBuilder.append("KW2005 : 'KW' '2005';\n"); + grammarBuilder.append("KW2006 : 'KW' '2006';\n"); + grammarBuilder.append("KW2007 : 'KW' '2007';\n"); + grammarBuilder.append("KW2008 : 'KW' '2008';\n"); + grammarBuilder.append("KW2009 : 'KW' '2009';\n"); + grammarBuilder.append("KW2010 : 'KW' '2010';\n"); + grammarBuilder.append("KW2011 : 'KW' '2011';\n"); + grammarBuilder.append("KW2012 : 'KW' '2012';\n"); + grammarBuilder.append("KW2013 : 'KW' '2013';\n"); + grammarBuilder.append("KW2014 : 'KW' '2014';\n"); + grammarBuilder.append("KW2015 : 'KW' '2015';\n"); + grammarBuilder.append("KW2016 : 'KW' '2016';\n"); + grammarBuilder.append("KW2017 : 'KW' '2017';\n"); + grammarBuilder.append("KW2018 : 'KW' '2018';\n"); + grammarBuilder.append("KW2019 : 'KW' '2019';\n"); + grammarBuilder.append("KW2020 : 'KW' '2020';\n"); + grammarBuilder.append("KW2021 : 'KW' '2021';\n"); + grammarBuilder.append("KW2022 : 'KW' '2022';\n"); + grammarBuilder.append("KW2023 : 'KW' '2023';\n"); + grammarBuilder.append("KW2024 : 'KW' '2024';\n"); + grammarBuilder.append("KW2025 : 'KW' '2025';\n"); + grammarBuilder.append("KW2026 : 'KW' '2026';\n"); + grammarBuilder.append("KW2027 : 'KW' '2027';\n"); + grammarBuilder.append("KW2028 : 'KW' '2028';\n"); + grammarBuilder.append("KW2029 : 'KW' '2029';\n"); + grammarBuilder.append("KW2030 : 'KW' '2030';\n"); + grammarBuilder.append("KW2031 : 'KW' '2031';\n"); + grammarBuilder.append("KW2032 : 'KW' '2032';\n"); + grammarBuilder.append("KW2033 : 'KW' '2033';\n"); + grammarBuilder.append("KW2034 : 'KW' '2034';\n"); + grammarBuilder.append("KW2035 : 'KW' '2035';\n"); + grammarBuilder.append("KW2036 : 'KW' '2036';\n"); + grammarBuilder.append("KW2037 : 'KW' '2037';\n"); + grammarBuilder.append("KW2038 : 'KW' '2038';\n"); + grammarBuilder.append("KW2039 : 'KW' '2039';\n"); + grammarBuilder.append("KW2040 : 'KW' '2040';\n"); + grammarBuilder.append("KW2041 : 'KW' '2041';\n"); + grammarBuilder.append("KW2042 : 'KW' '2042';\n"); + grammarBuilder.append("KW2043 : 'KW' '2043';\n"); + grammarBuilder.append("KW2044 : 'KW' '2044';\n"); + grammarBuilder.append("KW2045 : 'KW' '2045';\n"); + grammarBuilder.append("KW2046 : 'KW' '2046';\n"); + grammarBuilder.append("KW2047 : 'KW' '2047';\n"); + grammarBuilder.append("KW2048 : 'KW' '2048';\n"); + grammarBuilder.append("KW2049 : 'KW' '2049';\n"); + grammarBuilder.append("KW2050 : 'KW' '2050';\n"); + grammarBuilder.append("KW2051 : 'KW' '2051';\n"); + grammarBuilder.append("KW2052 : 'KW' '2052';\n"); + grammarBuilder.append("KW2053 : 'KW' '2053';\n"); + grammarBuilder.append("KW2054 : 'KW' '2054';\n"); + grammarBuilder.append("KW2055 : 'KW' '2055';\n"); + grammarBuilder.append("KW2056 : 'KW' '2056';\n"); + grammarBuilder.append("KW2057 : 'KW' '2057';\n"); + grammarBuilder.append("KW2058 : 'KW' '2058';\n"); + grammarBuilder.append("KW2059 : 'KW' '2059';\n"); + grammarBuilder.append("KW2060 : 'KW' '2060';\n"); + grammarBuilder.append("KW2061 : 'KW' '2061';\n"); + grammarBuilder.append("KW2062 : 'KW' '2062';\n"); + grammarBuilder.append("KW2063 : 'KW' '2063';\n"); + grammarBuilder.append("KW2064 : 'KW' '2064';\n"); + grammarBuilder.append("KW2065 : 'KW' '2065';\n"); + grammarBuilder.append("KW2066 : 'KW' '2066';\n"); + grammarBuilder.append("KW2067 : 'KW' '2067';\n"); + grammarBuilder.append("KW2068 : 'KW' '2068';\n"); + grammarBuilder.append("KW2069 : 'KW' '2069';\n"); + grammarBuilder.append("KW2070 : 'KW' '2070';\n"); + grammarBuilder.append("KW2071 : 'KW' '2071';\n"); + grammarBuilder.append("KW2072 : 'KW' '2072';\n"); + grammarBuilder.append("KW2073 : 'KW' '2073';\n"); + grammarBuilder.append("KW2074 : 'KW' '2074';\n"); + grammarBuilder.append("KW2075 : 'KW' '2075';\n"); + grammarBuilder.append("KW2076 : 'KW' '2076';\n"); + grammarBuilder.append("KW2077 : 'KW' '2077';\n"); + grammarBuilder.append("KW2078 : 'KW' '2078';\n"); + grammarBuilder.append("KW2079 : 'KW' '2079';\n"); + grammarBuilder.append("KW2080 : 'KW' '2080';\n"); + grammarBuilder.append("KW2081 : 'KW' '2081';\n"); + grammarBuilder.append("KW2082 : 'KW' '2082';\n"); + grammarBuilder.append("KW2083 : 'KW' '2083';\n"); + grammarBuilder.append("KW2084 : 'KW' '2084';\n"); + grammarBuilder.append("KW2085 : 'KW' '2085';\n"); + grammarBuilder.append("KW2086 : 'KW' '2086';\n"); + grammarBuilder.append("KW2087 : 'KW' '2087';\n"); + grammarBuilder.append("KW2088 : 'KW' '2088';\n"); + grammarBuilder.append("KW2089 : 'KW' '2089';\n"); + grammarBuilder.append("KW2090 : 'KW' '2090';\n"); + grammarBuilder.append("KW2091 : 'KW' '2091';\n"); + grammarBuilder.append("KW2092 : 'KW' '2092';\n"); + grammarBuilder.append("KW2093 : 'KW' '2093';\n"); + grammarBuilder.append("KW2094 : 'KW' '2094';\n"); + grammarBuilder.append("KW2095 : 'KW' '2095';\n"); + grammarBuilder.append("KW2096 : 'KW' '2096';\n"); + grammarBuilder.append("KW2097 : 'KW' '2097';\n"); + grammarBuilder.append("KW2098 : 'KW' '2098';\n"); + grammarBuilder.append("KW2099 : 'KW' '2099';\n"); + grammarBuilder.append("KW2100 : 'KW' '2100';\n"); + grammarBuilder.append("KW2101 : 'KW' '2101';\n"); + grammarBuilder.append("KW2102 : 'KW' '2102';\n"); + grammarBuilder.append("KW2103 : 'KW' '2103';\n"); + grammarBuilder.append("KW2104 : 'KW' '2104';\n"); + grammarBuilder.append("KW2105 : 'KW' '2105';\n"); + grammarBuilder.append("KW2106 : 'KW' '2106';\n"); + grammarBuilder.append("KW2107 : 'KW' '2107';\n"); + grammarBuilder.append("KW2108 : 'KW' '2108';\n"); + grammarBuilder.append("KW2109 : 'KW' '2109';\n"); + grammarBuilder.append("KW2110 : 'KW' '2110';\n"); + grammarBuilder.append("KW2111 : 'KW' '2111';\n"); + grammarBuilder.append("KW2112 : 'KW' '2112';\n"); + grammarBuilder.append("KW2113 : 'KW' '2113';\n"); + grammarBuilder.append("KW2114 : 'KW' '2114';\n"); + grammarBuilder.append("KW2115 : 'KW' '2115';\n"); + grammarBuilder.append("KW2116 : 'KW' '2116';\n"); + grammarBuilder.append("KW2117 : 'KW' '2117';\n"); + grammarBuilder.append("KW2118 : 'KW' '2118';\n"); + grammarBuilder.append("KW2119 : 'KW' '2119';\n"); + grammarBuilder.append("KW2120 : 'KW' '2120';\n"); + grammarBuilder.append("KW2121 : 'KW' '2121';\n"); + grammarBuilder.append("KW2122 : 'KW' '2122';\n"); + grammarBuilder.append("KW2123 : 'KW' '2123';\n"); + grammarBuilder.append("KW2124 : 'KW' '2124';\n"); + grammarBuilder.append("KW2125 : 'KW' '2125';\n"); + grammarBuilder.append("KW2126 : 'KW' '2126';\n"); + grammarBuilder.append("KW2127 : 'KW' '2127';\n"); + grammarBuilder.append("KW2128 : 'KW' '2128';\n"); + grammarBuilder.append("KW2129 : 'KW' '2129';\n"); + grammarBuilder.append("KW2130 : 'KW' '2130';\n"); + grammarBuilder.append("KW2131 : 'KW' '2131';\n"); + grammarBuilder.append("KW2132 : 'KW' '2132';\n"); + grammarBuilder.append("KW2133 : 'KW' '2133';\n"); + grammarBuilder.append("KW2134 : 'KW' '2134';\n"); + grammarBuilder.append("KW2135 : 'KW' '2135';\n"); + grammarBuilder.append("KW2136 : 'KW' '2136';\n"); + grammarBuilder.append("KW2137 : 'KW' '2137';\n"); + grammarBuilder.append("KW2138 : 'KW' '2138';\n"); + grammarBuilder.append("KW2139 : 'KW' '2139';\n"); + grammarBuilder.append("KW2140 : 'KW' '2140';\n"); + grammarBuilder.append("KW2141 : 'KW' '2141';\n"); + grammarBuilder.append("KW2142 : 'KW' '2142';\n"); + grammarBuilder.append("KW2143 : 'KW' '2143';\n"); + grammarBuilder.append("KW2144 : 'KW' '2144';\n"); + grammarBuilder.append("KW2145 : 'KW' '2145';\n"); + grammarBuilder.append("KW2146 : 'KW' '2146';\n"); + grammarBuilder.append("KW2147 : 'KW' '2147';\n"); + grammarBuilder.append("KW2148 : 'KW' '2148';\n"); + grammarBuilder.append("KW2149 : 'KW' '2149';\n"); + grammarBuilder.append("KW2150 : 'KW' '2150';\n"); + grammarBuilder.append("KW2151 : 'KW' '2151';\n"); + grammarBuilder.append("KW2152 : 'KW' '2152';\n"); + grammarBuilder.append("KW2153 : 'KW' '2153';\n"); + grammarBuilder.append("KW2154 : 'KW' '2154';\n"); + grammarBuilder.append("KW2155 : 'KW' '2155';\n"); + grammarBuilder.append("KW2156 : 'KW' '2156';\n"); + grammarBuilder.append("KW2157 : 'KW' '2157';\n"); + grammarBuilder.append("KW2158 : 'KW' '2158';\n"); + grammarBuilder.append("KW2159 : 'KW' '2159';\n"); + grammarBuilder.append("KW2160 : 'KW' '2160';\n"); + grammarBuilder.append("KW2161 : 'KW' '2161';\n"); + grammarBuilder.append("KW2162 : 'KW' '2162';\n"); + grammarBuilder.append("KW2163 : 'KW' '2163';\n"); + grammarBuilder.append("KW2164 : 'KW' '2164';\n"); + grammarBuilder.append("KW2165 : 'KW' '2165';\n"); + grammarBuilder.append("KW2166 : 'KW' '2166';\n"); + grammarBuilder.append("KW2167 : 'KW' '2167';\n"); + grammarBuilder.append("KW2168 : 'KW' '2168';\n"); + grammarBuilder.append("KW2169 : 'KW' '2169';\n"); + grammarBuilder.append("KW2170 : 'KW' '2170';\n"); + grammarBuilder.append("KW2171 : 'KW' '2171';\n"); + grammarBuilder.append("KW2172 : 'KW' '2172';\n"); + grammarBuilder.append("KW2173 : 'KW' '2173';\n"); + grammarBuilder.append("KW2174 : 'KW' '2174';\n"); + grammarBuilder.append("KW2175 : 'KW' '2175';\n"); + grammarBuilder.append("KW2176 : 'KW' '2176';\n"); + grammarBuilder.append("KW2177 : 'KW' '2177';\n"); + grammarBuilder.append("KW2178 : 'KW' '2178';\n"); + grammarBuilder.append("KW2179 : 'KW' '2179';\n"); + grammarBuilder.append("KW2180 : 'KW' '2180';\n"); + grammarBuilder.append("KW2181 : 'KW' '2181';\n"); + grammarBuilder.append("KW2182 : 'KW' '2182';\n"); + grammarBuilder.append("KW2183 : 'KW' '2183';\n"); + grammarBuilder.append("KW2184 : 'KW' '2184';\n"); + grammarBuilder.append("KW2185 : 'KW' '2185';\n"); + grammarBuilder.append("KW2186 : 'KW' '2186';\n"); + grammarBuilder.append("KW2187 : 'KW' '2187';\n"); + grammarBuilder.append("KW2188 : 'KW' '2188';\n"); + grammarBuilder.append("KW2189 : 'KW' '2189';\n"); + grammarBuilder.append("KW2190 : 'KW' '2190';\n"); + grammarBuilder.append("KW2191 : 'KW' '2191';\n"); + grammarBuilder.append("KW2192 : 'KW' '2192';\n"); + grammarBuilder.append("KW2193 : 'KW' '2193';\n"); + grammarBuilder.append("KW2194 : 'KW' '2194';\n"); + grammarBuilder.append("KW2195 : 'KW' '2195';\n"); + grammarBuilder.append("KW2196 : 'KW' '2196';\n"); + grammarBuilder.append("KW2197 : 'KW' '2197';\n"); + grammarBuilder.append("KW2198 : 'KW' '2198';\n"); + grammarBuilder.append("KW2199 : 'KW' '2199';\n"); + grammarBuilder.append("KW2200 : 'KW' '2200';\n"); + grammarBuilder.append("KW2201 : 'KW' '2201';\n"); + grammarBuilder.append("KW2202 : 'KW' '2202';\n"); + grammarBuilder.append("KW2203 : 'KW' '2203';\n"); + grammarBuilder.append("KW2204 : 'KW' '2204';\n"); + grammarBuilder.append("KW2205 : 'KW' '2205';\n"); + grammarBuilder.append("KW2206 : 'KW' '2206';\n"); + grammarBuilder.append("KW2207 : 'KW' '2207';\n"); + grammarBuilder.append("KW2208 : 'KW' '2208';\n"); + grammarBuilder.append("KW2209 : 'KW' '2209';\n"); + grammarBuilder.append("KW2210 : 'KW' '2210';\n"); + grammarBuilder.append("KW2211 : 'KW' '2211';\n"); + grammarBuilder.append("KW2212 : 'KW' '2212';\n"); + grammarBuilder.append("KW2213 : 'KW' '2213';\n"); + grammarBuilder.append("KW2214 : 'KW' '2214';\n"); + grammarBuilder.append("KW2215 : 'KW' '2215';\n"); + grammarBuilder.append("KW2216 : 'KW' '2216';\n"); + grammarBuilder.append("KW2217 : 'KW' '2217';\n"); + grammarBuilder.append("KW2218 : 'KW' '2218';\n"); + grammarBuilder.append("KW2219 : 'KW' '2219';\n"); + grammarBuilder.append("KW2220 : 'KW' '2220';\n"); + grammarBuilder.append("KW2221 : 'KW' '2221';\n"); + grammarBuilder.append("KW2222 : 'KW' '2222';\n"); + grammarBuilder.append("KW2223 : 'KW' '2223';\n"); + grammarBuilder.append("KW2224 : 'KW' '2224';\n"); + grammarBuilder.append("KW2225 : 'KW' '2225';\n"); + grammarBuilder.append("KW2226 : 'KW' '2226';\n"); + grammarBuilder.append("KW2227 : 'KW' '2227';\n"); + grammarBuilder.append("KW2228 : 'KW' '2228';\n"); + grammarBuilder.append("KW2229 : 'KW' '2229';\n"); + grammarBuilder.append("KW2230 : 'KW' '2230';\n"); + grammarBuilder.append("KW2231 : 'KW' '2231';\n"); + grammarBuilder.append("KW2232 : 'KW' '2232';\n"); + grammarBuilder.append("KW2233 : 'KW' '2233';\n"); + grammarBuilder.append("KW2234 : 'KW' '2234';\n"); + grammarBuilder.append("KW2235 : 'KW' '2235';\n"); + grammarBuilder.append("KW2236 : 'KW' '2236';\n"); + grammarBuilder.append("KW2237 : 'KW' '2237';\n"); + grammarBuilder.append("KW2238 : 'KW' '2238';\n"); + grammarBuilder.append("KW2239 : 'KW' '2239';\n"); + grammarBuilder.append("KW2240 : 'KW' '2240';\n"); + grammarBuilder.append("KW2241 : 'KW' '2241';\n"); + grammarBuilder.append("KW2242 : 'KW' '2242';\n"); + grammarBuilder.append("KW2243 : 'KW' '2243';\n"); + grammarBuilder.append("KW2244 : 'KW' '2244';\n"); + grammarBuilder.append("KW2245 : 'KW' '2245';\n"); + grammarBuilder.append("KW2246 : 'KW' '2246';\n"); + grammarBuilder.append("KW2247 : 'KW' '2247';\n"); + grammarBuilder.append("KW2248 : 'KW' '2248';\n"); + grammarBuilder.append("KW2249 : 'KW' '2249';\n"); + grammarBuilder.append("KW2250 : 'KW' '2250';\n"); + grammarBuilder.append("KW2251 : 'KW' '2251';\n"); + grammarBuilder.append("KW2252 : 'KW' '2252';\n"); + grammarBuilder.append("KW2253 : 'KW' '2253';\n"); + grammarBuilder.append("KW2254 : 'KW' '2254';\n"); + grammarBuilder.append("KW2255 : 'KW' '2255';\n"); + grammarBuilder.append("KW2256 : 'KW' '2256';\n"); + grammarBuilder.append("KW2257 : 'KW' '2257';\n"); + grammarBuilder.append("KW2258 : 'KW' '2258';\n"); + grammarBuilder.append("KW2259 : 'KW' '2259';\n"); + grammarBuilder.append("KW2260 : 'KW' '2260';\n"); + grammarBuilder.append("KW2261 : 'KW' '2261';\n"); + grammarBuilder.append("KW2262 : 'KW' '2262';\n"); + grammarBuilder.append("KW2263 : 'KW' '2263';\n"); + grammarBuilder.append("KW2264 : 'KW' '2264';\n"); + grammarBuilder.append("KW2265 : 'KW' '2265';\n"); + grammarBuilder.append("KW2266 : 'KW' '2266';\n"); + grammarBuilder.append("KW2267 : 'KW' '2267';\n"); + grammarBuilder.append("KW2268 : 'KW' '2268';\n"); + grammarBuilder.append("KW2269 : 'KW' '2269';\n"); + grammarBuilder.append("KW2270 : 'KW' '2270';\n"); + grammarBuilder.append("KW2271 : 'KW' '2271';\n"); + grammarBuilder.append("KW2272 : 'KW' '2272';\n"); + grammarBuilder.append("KW2273 : 'KW' '2273';\n"); + grammarBuilder.append("KW2274 : 'KW' '2274';\n"); + grammarBuilder.append("KW2275 : 'KW' '2275';\n"); + grammarBuilder.append("KW2276 : 'KW' '2276';\n"); + grammarBuilder.append("KW2277 : 'KW' '2277';\n"); + grammarBuilder.append("KW2278 : 'KW' '2278';\n"); + grammarBuilder.append("KW2279 : 'KW' '2279';\n"); + grammarBuilder.append("KW2280 : 'KW' '2280';\n"); + grammarBuilder.append("KW2281 : 'KW' '2281';\n"); + grammarBuilder.append("KW2282 : 'KW' '2282';\n"); + grammarBuilder.append("KW2283 : 'KW' '2283';\n"); + grammarBuilder.append("KW2284 : 'KW' '2284';\n"); + grammarBuilder.append("KW2285 : 'KW' '2285';\n"); + grammarBuilder.append("KW2286 : 'KW' '2286';\n"); + grammarBuilder.append("KW2287 : 'KW' '2287';\n"); + grammarBuilder.append("KW2288 : 'KW' '2288';\n"); + grammarBuilder.append("KW2289 : 'KW' '2289';\n"); + grammarBuilder.append("KW2290 : 'KW' '2290';\n"); + grammarBuilder.append("KW2291 : 'KW' '2291';\n"); + grammarBuilder.append("KW2292 : 'KW' '2292';\n"); + grammarBuilder.append("KW2293 : 'KW' '2293';\n"); + grammarBuilder.append("KW2294 : 'KW' '2294';\n"); + grammarBuilder.append("KW2295 : 'KW' '2295';\n"); + grammarBuilder.append("KW2296 : 'KW' '2296';\n"); + grammarBuilder.append("KW2297 : 'KW' '2297';\n"); + grammarBuilder.append("KW2298 : 'KW' '2298';\n"); + grammarBuilder.append("KW2299 : 'KW' '2299';\n"); + grammarBuilder.append("KW2300 : 'KW' '2300';\n"); + grammarBuilder.append("KW2301 : 'KW' '2301';\n"); + grammarBuilder.append("KW2302 : 'KW' '2302';\n"); + grammarBuilder.append("KW2303 : 'KW' '2303';\n"); + grammarBuilder.append("KW2304 : 'KW' '2304';\n"); + grammarBuilder.append("KW2305 : 'KW' '2305';\n"); + grammarBuilder.append("KW2306 : 'KW' '2306';\n"); + grammarBuilder.append("KW2307 : 'KW' '2307';\n"); + grammarBuilder.append("KW2308 : 'KW' '2308';\n"); + grammarBuilder.append("KW2309 : 'KW' '2309';\n"); + grammarBuilder.append("KW2310 : 'KW' '2310';\n"); + grammarBuilder.append("KW2311 : 'KW' '2311';\n"); + grammarBuilder.append("KW2312 : 'KW' '2312';\n"); + grammarBuilder.append("KW2313 : 'KW' '2313';\n"); + grammarBuilder.append("KW2314 : 'KW' '2314';\n"); + grammarBuilder.append("KW2315 : 'KW' '2315';\n"); + grammarBuilder.append("KW2316 : 'KW' '2316';\n"); + grammarBuilder.append("KW2317 : 'KW' '2317';\n"); + grammarBuilder.append("KW2318 : 'KW' '2318';\n"); + grammarBuilder.append("KW2319 : 'KW' '2319';\n"); + grammarBuilder.append("KW2320 : 'KW' '2320';\n"); + grammarBuilder.append("KW2321 : 'KW' '2321';\n"); + grammarBuilder.append("KW2322 : 'KW' '2322';\n"); + grammarBuilder.append("KW2323 : 'KW' '2323';\n"); + grammarBuilder.append("KW2324 : 'KW' '2324';\n"); + grammarBuilder.append("KW2325 : 'KW' '2325';\n"); + grammarBuilder.append("KW2326 : 'KW' '2326';\n"); + grammarBuilder.append("KW2327 : 'KW' '2327';\n"); + grammarBuilder.append("KW2328 : 'KW' '2328';\n"); + grammarBuilder.append("KW2329 : 'KW' '2329';\n"); + grammarBuilder.append("KW2330 : 'KW' '2330';\n"); + grammarBuilder.append("KW2331 : 'KW' '2331';\n"); + grammarBuilder.append("KW2332 : 'KW' '2332';\n"); + grammarBuilder.append("KW2333 : 'KW' '2333';\n"); + grammarBuilder.append("KW2334 : 'KW' '2334';\n"); + grammarBuilder.append("KW2335 : 'KW' '2335';\n"); + grammarBuilder.append("KW2336 : 'KW' '2336';\n"); + grammarBuilder.append("KW2337 : 'KW' '2337';\n"); + grammarBuilder.append("KW2338 : 'KW' '2338';\n"); + grammarBuilder.append("KW2339 : 'KW' '2339';\n"); + grammarBuilder.append("KW2340 : 'KW' '2340';\n"); + grammarBuilder.append("KW2341 : 'KW' '2341';\n"); + grammarBuilder.append("KW2342 : 'KW' '2342';\n"); + grammarBuilder.append("KW2343 : 'KW' '2343';\n"); + grammarBuilder.append("KW2344 : 'KW' '2344';\n"); + grammarBuilder.append("KW2345 : 'KW' '2345';\n"); + grammarBuilder.append("KW2346 : 'KW' '2346';\n"); + grammarBuilder.append("KW2347 : 'KW' '2347';\n"); + grammarBuilder.append("KW2348 : 'KW' '2348';\n"); + grammarBuilder.append("KW2349 : 'KW' '2349';\n"); + grammarBuilder.append("KW2350 : 'KW' '2350';\n"); + grammarBuilder.append("KW2351 : 'KW' '2351';\n"); + grammarBuilder.append("KW2352 : 'KW' '2352';\n"); + grammarBuilder.append("KW2353 : 'KW' '2353';\n"); + grammarBuilder.append("KW2354 : 'KW' '2354';\n"); + grammarBuilder.append("KW2355 : 'KW' '2355';\n"); + grammarBuilder.append("KW2356 : 'KW' '2356';\n"); + grammarBuilder.append("KW2357 : 'KW' '2357';\n"); + grammarBuilder.append("KW2358 : 'KW' '2358';\n"); + grammarBuilder.append("KW2359 : 'KW' '2359';\n"); + grammarBuilder.append("KW2360 : 'KW' '2360';\n"); + grammarBuilder.append("KW2361 : 'KW' '2361';\n"); + grammarBuilder.append("KW2362 : 'KW' '2362';\n"); + grammarBuilder.append("KW2363 : 'KW' '2363';\n"); + grammarBuilder.append("KW2364 : 'KW' '2364';\n"); + grammarBuilder.append("KW2365 : 'KW' '2365';\n"); + grammarBuilder.append("KW2366 : 'KW' '2366';\n"); + grammarBuilder.append("KW2367 : 'KW' '2367';\n"); + grammarBuilder.append("KW2368 : 'KW' '2368';\n"); + grammarBuilder.append("KW2369 : 'KW' '2369';\n"); + grammarBuilder.append("KW2370 : 'KW' '2370';\n"); + grammarBuilder.append("KW2371 : 'KW' '2371';\n"); + grammarBuilder.append("KW2372 : 'KW' '2372';\n"); + grammarBuilder.append("KW2373 : 'KW' '2373';\n"); + grammarBuilder.append("KW2374 : 'KW' '2374';\n"); + grammarBuilder.append("KW2375 : 'KW' '2375';\n"); + grammarBuilder.append("KW2376 : 'KW' '2376';\n"); + grammarBuilder.append("KW2377 : 'KW' '2377';\n"); + grammarBuilder.append("KW2378 : 'KW' '2378';\n"); + grammarBuilder.append("KW2379 : 'KW' '2379';\n"); + grammarBuilder.append("KW2380 : 'KW' '2380';\n"); + grammarBuilder.append("KW2381 : 'KW' '2381';\n"); + grammarBuilder.append("KW2382 : 'KW' '2382';\n"); + grammarBuilder.append("KW2383 : 'KW' '2383';\n"); + grammarBuilder.append("KW2384 : 'KW' '2384';\n"); + grammarBuilder.append("KW2385 : 'KW' '2385';\n"); + grammarBuilder.append("KW2386 : 'KW' '2386';\n"); + grammarBuilder.append("KW2387 : 'KW' '2387';\n"); + grammarBuilder.append("KW2388 : 'KW' '2388';\n"); + grammarBuilder.append("KW2389 : 'KW' '2389';\n"); + grammarBuilder.append("KW2390 : 'KW' '2390';\n"); + grammarBuilder.append("KW2391 : 'KW' '2391';\n"); + grammarBuilder.append("KW2392 : 'KW' '2392';\n"); + grammarBuilder.append("KW2393 : 'KW' '2393';\n"); + grammarBuilder.append("KW2394 : 'KW' '2394';\n"); + grammarBuilder.append("KW2395 : 'KW' '2395';\n"); + grammarBuilder.append("KW2396 : 'KW' '2396';\n"); + grammarBuilder.append("KW2397 : 'KW' '2397';\n"); + grammarBuilder.append("KW2398 : 'KW' '2398';\n"); + grammarBuilder.append("KW2399 : 'KW' '2399';\n"); + grammarBuilder.append("KW2400 : 'KW' '2400';\n"); + grammarBuilder.append("KW2401 : 'KW' '2401';\n"); + grammarBuilder.append("KW2402 : 'KW' '2402';\n"); + grammarBuilder.append("KW2403 : 'KW' '2403';\n"); + grammarBuilder.append("KW2404 : 'KW' '2404';\n"); + grammarBuilder.append("KW2405 : 'KW' '2405';\n"); + grammarBuilder.append("KW2406 : 'KW' '2406';\n"); + grammarBuilder.append("KW2407 : 'KW' '2407';\n"); + grammarBuilder.append("KW2408 : 'KW' '2408';\n"); + grammarBuilder.append("KW2409 : 'KW' '2409';\n"); + grammarBuilder.append("KW2410 : 'KW' '2410';\n"); + grammarBuilder.append("KW2411 : 'KW' '2411';\n"); + grammarBuilder.append("KW2412 : 'KW' '2412';\n"); + grammarBuilder.append("KW2413 : 'KW' '2413';\n"); + grammarBuilder.append("KW2414 : 'KW' '2414';\n"); + grammarBuilder.append("KW2415 : 'KW' '2415';\n"); + grammarBuilder.append("KW2416 : 'KW' '2416';\n"); + grammarBuilder.append("KW2417 : 'KW' '2417';\n"); + grammarBuilder.append("KW2418 : 'KW' '2418';\n"); + grammarBuilder.append("KW2419 : 'KW' '2419';\n"); + grammarBuilder.append("KW2420 : 'KW' '2420';\n"); + grammarBuilder.append("KW2421 : 'KW' '2421';\n"); + grammarBuilder.append("KW2422 : 'KW' '2422';\n"); + grammarBuilder.append("KW2423 : 'KW' '2423';\n"); + grammarBuilder.append("KW2424 : 'KW' '2424';\n"); + grammarBuilder.append("KW2425 : 'KW' '2425';\n"); + grammarBuilder.append("KW2426 : 'KW' '2426';\n"); + grammarBuilder.append("KW2427 : 'KW' '2427';\n"); + grammarBuilder.append("KW2428 : 'KW' '2428';\n"); + grammarBuilder.append("KW2429 : 'KW' '2429';\n"); + grammarBuilder.append("KW2430 : 'KW' '2430';\n"); + grammarBuilder.append("KW2431 : 'KW' '2431';\n"); + grammarBuilder.append("KW2432 : 'KW' '2432';\n"); + grammarBuilder.append("KW2433 : 'KW' '2433';\n"); + grammarBuilder.append("KW2434 : 'KW' '2434';\n"); + grammarBuilder.append("KW2435 : 'KW' '2435';\n"); + grammarBuilder.append("KW2436 : 'KW' '2436';\n"); + grammarBuilder.append("KW2437 : 'KW' '2437';\n"); + grammarBuilder.append("KW2438 : 'KW' '2438';\n"); + grammarBuilder.append("KW2439 : 'KW' '2439';\n"); + grammarBuilder.append("KW2440 : 'KW' '2440';\n"); + grammarBuilder.append("KW2441 : 'KW' '2441';\n"); + grammarBuilder.append("KW2442 : 'KW' '2442';\n"); + grammarBuilder.append("KW2443 : 'KW' '2443';\n"); + grammarBuilder.append("KW2444 : 'KW' '2444';\n"); + grammarBuilder.append("KW2445 : 'KW' '2445';\n"); + grammarBuilder.append("KW2446 : 'KW' '2446';\n"); + grammarBuilder.append("KW2447 : 'KW' '2447';\n"); + grammarBuilder.append("KW2448 : 'KW' '2448';\n"); + grammarBuilder.append("KW2449 : 'KW' '2449';\n"); + grammarBuilder.append("KW2450 : 'KW' '2450';\n"); + grammarBuilder.append("KW2451 : 'KW' '2451';\n"); + grammarBuilder.append("KW2452 : 'KW' '2452';\n"); + grammarBuilder.append("KW2453 : 'KW' '2453';\n"); + grammarBuilder.append("KW2454 : 'KW' '2454';\n"); + grammarBuilder.append("KW2455 : 'KW' '2455';\n"); + grammarBuilder.append("KW2456 : 'KW' '2456';\n"); + grammarBuilder.append("KW2457 : 'KW' '2457';\n"); + grammarBuilder.append("KW2458 : 'KW' '2458';\n"); + grammarBuilder.append("KW2459 : 'KW' '2459';\n"); + grammarBuilder.append("KW2460 : 'KW' '2460';\n"); + grammarBuilder.append("KW2461 : 'KW' '2461';\n"); + grammarBuilder.append("KW2462 : 'KW' '2462';\n"); + grammarBuilder.append("KW2463 : 'KW' '2463';\n"); + grammarBuilder.append("KW2464 : 'KW' '2464';\n"); + grammarBuilder.append("KW2465 : 'KW' '2465';\n"); + grammarBuilder.append("KW2466 : 'KW' '2466';\n"); + grammarBuilder.append("KW2467 : 'KW' '2467';\n"); + grammarBuilder.append("KW2468 : 'KW' '2468';\n"); + grammarBuilder.append("KW2469 : 'KW' '2469';\n"); + grammarBuilder.append("KW2470 : 'KW' '2470';\n"); + grammarBuilder.append("KW2471 : 'KW' '2471';\n"); + grammarBuilder.append("KW2472 : 'KW' '2472';\n"); + grammarBuilder.append("KW2473 : 'KW' '2473';\n"); + grammarBuilder.append("KW2474 : 'KW' '2474';\n"); + grammarBuilder.append("KW2475 : 'KW' '2475';\n"); + grammarBuilder.append("KW2476 : 'KW' '2476';\n"); + grammarBuilder.append("KW2477 : 'KW' '2477';\n"); + grammarBuilder.append("KW2478 : 'KW' '2478';\n"); + grammarBuilder.append("KW2479 : 'KW' '2479';\n"); + grammarBuilder.append("KW2480 : 'KW' '2480';\n"); + grammarBuilder.append("KW2481 : 'KW' '2481';\n"); + grammarBuilder.append("KW2482 : 'KW' '2482';\n"); + grammarBuilder.append("KW2483 : 'KW' '2483';\n"); + grammarBuilder.append("KW2484 : 'KW' '2484';\n"); + grammarBuilder.append("KW2485 : 'KW' '2485';\n"); + grammarBuilder.append("KW2486 : 'KW' '2486';\n"); + grammarBuilder.append("KW2487 : 'KW' '2487';\n"); + grammarBuilder.append("KW2488 : 'KW' '2488';\n"); + grammarBuilder.append("KW2489 : 'KW' '2489';\n"); + grammarBuilder.append("KW2490 : 'KW' '2490';\n"); + grammarBuilder.append("KW2491 : 'KW' '2491';\n"); + grammarBuilder.append("KW2492 : 'KW' '2492';\n"); + grammarBuilder.append("KW2493 : 'KW' '2493';\n"); + grammarBuilder.append("KW2494 : 'KW' '2494';\n"); + grammarBuilder.append("KW2495 : 'KW' '2495';\n"); + grammarBuilder.append("KW2496 : 'KW' '2496';\n"); + grammarBuilder.append("KW2497 : 'KW' '2497';\n"); + grammarBuilder.append("KW2498 : 'KW' '2498';\n"); + grammarBuilder.append("KW2499 : 'KW' '2499';\n"); + grammarBuilder.append("KW2500 : 'KW' '2500';\n"); + grammarBuilder.append("KW2501 : 'KW' '2501';\n"); + grammarBuilder.append("KW2502 : 'KW' '2502';\n"); + grammarBuilder.append("KW2503 : 'KW' '2503';\n"); + grammarBuilder.append("KW2504 : 'KW' '2504';\n"); + grammarBuilder.append("KW2505 : 'KW' '2505';\n"); + grammarBuilder.append("KW2506 : 'KW' '2506';\n"); + grammarBuilder.append("KW2507 : 'KW' '2507';\n"); + grammarBuilder.append("KW2508 : 'KW' '2508';\n"); + grammarBuilder.append("KW2509 : 'KW' '2509';\n"); + grammarBuilder.append("KW2510 : 'KW' '2510';\n"); + grammarBuilder.append("KW2511 : 'KW' '2511';\n"); + grammarBuilder.append("KW2512 : 'KW' '2512';\n"); + grammarBuilder.append("KW2513 : 'KW' '2513';\n"); + grammarBuilder.append("KW2514 : 'KW' '2514';\n"); + grammarBuilder.append("KW2515 : 'KW' '2515';\n"); + grammarBuilder.append("KW2516 : 'KW' '2516';\n"); + grammarBuilder.append("KW2517 : 'KW' '2517';\n"); + grammarBuilder.append("KW2518 : 'KW' '2518';\n"); + grammarBuilder.append("KW2519 : 'KW' '2519';\n"); + grammarBuilder.append("KW2520 : 'KW' '2520';\n"); + grammarBuilder.append("KW2521 : 'KW' '2521';\n"); + grammarBuilder.append("KW2522 : 'KW' '2522';\n"); + grammarBuilder.append("KW2523 : 'KW' '2523';\n"); + grammarBuilder.append("KW2524 : 'KW' '2524';\n"); + grammarBuilder.append("KW2525 : 'KW' '2525';\n"); + grammarBuilder.append("KW2526 : 'KW' '2526';\n"); + grammarBuilder.append("KW2527 : 'KW' '2527';\n"); + grammarBuilder.append("KW2528 : 'KW' '2528';\n"); + grammarBuilder.append("KW2529 : 'KW' '2529';\n"); + grammarBuilder.append("KW2530 : 'KW' '2530';\n"); + grammarBuilder.append("KW2531 : 'KW' '2531';\n"); + grammarBuilder.append("KW2532 : 'KW' '2532';\n"); + grammarBuilder.append("KW2533 : 'KW' '2533';\n"); + grammarBuilder.append("KW2534 : 'KW' '2534';\n"); + grammarBuilder.append("KW2535 : 'KW' '2535';\n"); + grammarBuilder.append("KW2536 : 'KW' '2536';\n"); + grammarBuilder.append("KW2537 : 'KW' '2537';\n"); + grammarBuilder.append("KW2538 : 'KW' '2538';\n"); + grammarBuilder.append("KW2539 : 'KW' '2539';\n"); + grammarBuilder.append("KW2540 : 'KW' '2540';\n"); + grammarBuilder.append("KW2541 : 'KW' '2541';\n"); + grammarBuilder.append("KW2542 : 'KW' '2542';\n"); + grammarBuilder.append("KW2543 : 'KW' '2543';\n"); + grammarBuilder.append("KW2544 : 'KW' '2544';\n"); + grammarBuilder.append("KW2545 : 'KW' '2545';\n"); + grammarBuilder.append("KW2546 : 'KW' '2546';\n"); + grammarBuilder.append("KW2547 : 'KW' '2547';\n"); + grammarBuilder.append("KW2548 : 'KW' '2548';\n"); + grammarBuilder.append("KW2549 : 'KW' '2549';\n"); + grammarBuilder.append("KW2550 : 'KW' '2550';\n"); + grammarBuilder.append("KW2551 : 'KW' '2551';\n"); + grammarBuilder.append("KW2552 : 'KW' '2552';\n"); + grammarBuilder.append("KW2553 : 'KW' '2553';\n"); + grammarBuilder.append("KW2554 : 'KW' '2554';\n"); + grammarBuilder.append("KW2555 : 'KW' '2555';\n"); + grammarBuilder.append("KW2556 : 'KW' '2556';\n"); + grammarBuilder.append("KW2557 : 'KW' '2557';\n"); + grammarBuilder.append("KW2558 : 'KW' '2558';\n"); + grammarBuilder.append("KW2559 : 'KW' '2559';\n"); + grammarBuilder.append("KW2560 : 'KW' '2560';\n"); + grammarBuilder.append("KW2561 : 'KW' '2561';\n"); + grammarBuilder.append("KW2562 : 'KW' '2562';\n"); + grammarBuilder.append("KW2563 : 'KW' '2563';\n"); + grammarBuilder.append("KW2564 : 'KW' '2564';\n"); + grammarBuilder.append("KW2565 : 'KW' '2565';\n"); + grammarBuilder.append("KW2566 : 'KW' '2566';\n"); + grammarBuilder.append("KW2567 : 'KW' '2567';\n"); + grammarBuilder.append("KW2568 : 'KW' '2568';\n"); + grammarBuilder.append("KW2569 : 'KW' '2569';\n"); + grammarBuilder.append("KW2570 : 'KW' '2570';\n"); + grammarBuilder.append("KW2571 : 'KW' '2571';\n"); + grammarBuilder.append("KW2572 : 'KW' '2572';\n"); + grammarBuilder.append("KW2573 : 'KW' '2573';\n"); + grammarBuilder.append("KW2574 : 'KW' '2574';\n"); + grammarBuilder.append("KW2575 : 'KW' '2575';\n"); + grammarBuilder.append("KW2576 : 'KW' '2576';\n"); + grammarBuilder.append("KW2577 : 'KW' '2577';\n"); + grammarBuilder.append("KW2578 : 'KW' '2578';\n"); + grammarBuilder.append("KW2579 : 'KW' '2579';\n"); + grammarBuilder.append("KW2580 : 'KW' '2580';\n"); + grammarBuilder.append("KW2581 : 'KW' '2581';\n"); + grammarBuilder.append("KW2582 : 'KW' '2582';\n"); + grammarBuilder.append("KW2583 : 'KW' '2583';\n"); + grammarBuilder.append("KW2584 : 'KW' '2584';\n"); + grammarBuilder.append("KW2585 : 'KW' '2585';\n"); + grammarBuilder.append("KW2586 : 'KW' '2586';\n"); + grammarBuilder.append("KW2587 : 'KW' '2587';\n"); + grammarBuilder.append("KW2588 : 'KW' '2588';\n"); + grammarBuilder.append("KW2589 : 'KW' '2589';\n"); + grammarBuilder.append("KW2590 : 'KW' '2590';\n"); + grammarBuilder.append("KW2591 : 'KW' '2591';\n"); + grammarBuilder.append("KW2592 : 'KW' '2592';\n"); + grammarBuilder.append("KW2593 : 'KW' '2593';\n"); + grammarBuilder.append("KW2594 : 'KW' '2594';\n"); + grammarBuilder.append("KW2595 : 'KW' '2595';\n"); + grammarBuilder.append("KW2596 : 'KW' '2596';\n"); + grammarBuilder.append("KW2597 : 'KW' '2597';\n"); + grammarBuilder.append("KW2598 : 'KW' '2598';\n"); + grammarBuilder.append("KW2599 : 'KW' '2599';\n"); + grammarBuilder.append("KW2600 : 'KW' '2600';\n"); + grammarBuilder.append("KW2601 : 'KW' '2601';\n"); + grammarBuilder.append("KW2602 : 'KW' '2602';\n"); + grammarBuilder.append("KW2603 : 'KW' '2603';\n"); + grammarBuilder.append("KW2604 : 'KW' '2604';\n"); + grammarBuilder.append("KW2605 : 'KW' '2605';\n"); + grammarBuilder.append("KW2606 : 'KW' '2606';\n"); + grammarBuilder.append("KW2607 : 'KW' '2607';\n"); + grammarBuilder.append("KW2608 : 'KW' '2608';\n"); + grammarBuilder.append("KW2609 : 'KW' '2609';\n"); + grammarBuilder.append("KW2610 : 'KW' '2610';\n"); + grammarBuilder.append("KW2611 : 'KW' '2611';\n"); + grammarBuilder.append("KW2612 : 'KW' '2612';\n"); + grammarBuilder.append("KW2613 : 'KW' '2613';\n"); + grammarBuilder.append("KW2614 : 'KW' '2614';\n"); + grammarBuilder.append("KW2615 : 'KW' '2615';\n"); + grammarBuilder.append("KW2616 : 'KW' '2616';\n"); + grammarBuilder.append("KW2617 : 'KW' '2617';\n"); + grammarBuilder.append("KW2618 : 'KW' '2618';\n"); + grammarBuilder.append("KW2619 : 'KW' '2619';\n"); + grammarBuilder.append("KW2620 : 'KW' '2620';\n"); + grammarBuilder.append("KW2621 : 'KW' '2621';\n"); + grammarBuilder.append("KW2622 : 'KW' '2622';\n"); + grammarBuilder.append("KW2623 : 'KW' '2623';\n"); + grammarBuilder.append("KW2624 : 'KW' '2624';\n"); + grammarBuilder.append("KW2625 : 'KW' '2625';\n"); + grammarBuilder.append("KW2626 : 'KW' '2626';\n"); + grammarBuilder.append("KW2627 : 'KW' '2627';\n"); + grammarBuilder.append("KW2628 : 'KW' '2628';\n"); + grammarBuilder.append("KW2629 : 'KW' '2629';\n"); + grammarBuilder.append("KW2630 : 'KW' '2630';\n"); + grammarBuilder.append("KW2631 : 'KW' '2631';\n"); + grammarBuilder.append("KW2632 : 'KW' '2632';\n"); + grammarBuilder.append("KW2633 : 'KW' '2633';\n"); + grammarBuilder.append("KW2634 : 'KW' '2634';\n"); + grammarBuilder.append("KW2635 : 'KW' '2635';\n"); + grammarBuilder.append("KW2636 : 'KW' '2636';\n"); + grammarBuilder.append("KW2637 : 'KW' '2637';\n"); + grammarBuilder.append("KW2638 : 'KW' '2638';\n"); + grammarBuilder.append("KW2639 : 'KW' '2639';\n"); + grammarBuilder.append("KW2640 : 'KW' '2640';\n"); + grammarBuilder.append("KW2641 : 'KW' '2641';\n"); + grammarBuilder.append("KW2642 : 'KW' '2642';\n"); + grammarBuilder.append("KW2643 : 'KW' '2643';\n"); + grammarBuilder.append("KW2644 : 'KW' '2644';\n"); + grammarBuilder.append("KW2645 : 'KW' '2645';\n"); + grammarBuilder.append("KW2646 : 'KW' '2646';\n"); + grammarBuilder.append("KW2647 : 'KW' '2647';\n"); + grammarBuilder.append("KW2648 : 'KW' '2648';\n"); + grammarBuilder.append("KW2649 : 'KW' '2649';\n"); + grammarBuilder.append("KW2650 : 'KW' '2650';\n"); + grammarBuilder.append("KW2651 : 'KW' '2651';\n"); + grammarBuilder.append("KW2652 : 'KW' '2652';\n"); + grammarBuilder.append("KW2653 : 'KW' '2653';\n"); + grammarBuilder.append("KW2654 : 'KW' '2654';\n"); + grammarBuilder.append("KW2655 : 'KW' '2655';\n"); + grammarBuilder.append("KW2656 : 'KW' '2656';\n"); + grammarBuilder.append("KW2657 : 'KW' '2657';\n"); + grammarBuilder.append("KW2658 : 'KW' '2658';\n"); + grammarBuilder.append("KW2659 : 'KW' '2659';\n"); + grammarBuilder.append("KW2660 : 'KW' '2660';\n"); + grammarBuilder.append("KW2661 : 'KW' '2661';\n"); + grammarBuilder.append("KW2662 : 'KW' '2662';\n"); + grammarBuilder.append("KW2663 : 'KW' '2663';\n"); + grammarBuilder.append("KW2664 : 'KW' '2664';\n"); + grammarBuilder.append("KW2665 : 'KW' '2665';\n"); + grammarBuilder.append("KW2666 : 'KW' '2666';\n"); + grammarBuilder.append("KW2667 : 'KW' '2667';\n"); + grammarBuilder.append("KW2668 : 'KW' '2668';\n"); + grammarBuilder.append("KW2669 : 'KW' '2669';\n"); + grammarBuilder.append("KW2670 : 'KW' '2670';\n"); + grammarBuilder.append("KW2671 : 'KW' '2671';\n"); + grammarBuilder.append("KW2672 : 'KW' '2672';\n"); + grammarBuilder.append("KW2673 : 'KW' '2673';\n"); + grammarBuilder.append("KW2674 : 'KW' '2674';\n"); + grammarBuilder.append("KW2675 : 'KW' '2675';\n"); + grammarBuilder.append("KW2676 : 'KW' '2676';\n"); + grammarBuilder.append("KW2677 : 'KW' '2677';\n"); + grammarBuilder.append("KW2678 : 'KW' '2678';\n"); + grammarBuilder.append("KW2679 : 'KW' '2679';\n"); + grammarBuilder.append("KW2680 : 'KW' '2680';\n"); + grammarBuilder.append("KW2681 : 'KW' '2681';\n"); + grammarBuilder.append("KW2682 : 'KW' '2682';\n"); + grammarBuilder.append("KW2683 : 'KW' '2683';\n"); + grammarBuilder.append("KW2684 : 'KW' '2684';\n"); + grammarBuilder.append("KW2685 : 'KW' '2685';\n"); + grammarBuilder.append("KW2686 : 'KW' '2686';\n"); + grammarBuilder.append("KW2687 : 'KW' '2687';\n"); + grammarBuilder.append("KW2688 : 'KW' '2688';\n"); + grammarBuilder.append("KW2689 : 'KW' '2689';\n"); + grammarBuilder.append("KW2690 : 'KW' '2690';\n"); + grammarBuilder.append("KW2691 : 'KW' '2691';\n"); + grammarBuilder.append("KW2692 : 'KW' '2692';\n"); + grammarBuilder.append("KW2693 : 'KW' '2693';\n"); + grammarBuilder.append("KW2694 : 'KW' '2694';\n"); + grammarBuilder.append("KW2695 : 'KW' '2695';\n"); + grammarBuilder.append("KW2696 : 'KW' '2696';\n"); + grammarBuilder.append("KW2697 : 'KW' '2697';\n"); + grammarBuilder.append("KW2698 : 'KW' '2698';\n"); + grammarBuilder.append("KW2699 : 'KW' '2699';\n"); + grammarBuilder.append("KW2700 : 'KW' '2700';\n"); + grammarBuilder.append("KW2701 : 'KW' '2701';\n"); + grammarBuilder.append("KW2702 : 'KW' '2702';\n"); + grammarBuilder.append("KW2703 : 'KW' '2703';\n"); + grammarBuilder.append("KW2704 : 'KW' '2704';\n"); + grammarBuilder.append("KW2705 : 'KW' '2705';\n"); + grammarBuilder.append("KW2706 : 'KW' '2706';\n"); + grammarBuilder.append("KW2707 : 'KW' '2707';\n"); + grammarBuilder.append("KW2708 : 'KW' '2708';\n"); + grammarBuilder.append("KW2709 : 'KW' '2709';\n"); + grammarBuilder.append("KW2710 : 'KW' '2710';\n"); + grammarBuilder.append("KW2711 : 'KW' '2711';\n"); + grammarBuilder.append("KW2712 : 'KW' '2712';\n"); + grammarBuilder.append("KW2713 : 'KW' '2713';\n"); + grammarBuilder.append("KW2714 : 'KW' '2714';\n"); + grammarBuilder.append("KW2715 : 'KW' '2715';\n"); + grammarBuilder.append("KW2716 : 'KW' '2716';\n"); + grammarBuilder.append("KW2717 : 'KW' '2717';\n"); + grammarBuilder.append("KW2718 : 'KW' '2718';\n"); + grammarBuilder.append("KW2719 : 'KW' '2719';\n"); + grammarBuilder.append("KW2720 : 'KW' '2720';\n"); + grammarBuilder.append("KW2721 : 'KW' '2721';\n"); + grammarBuilder.append("KW2722 : 'KW' '2722';\n"); + grammarBuilder.append("KW2723 : 'KW' '2723';\n"); + grammarBuilder.append("KW2724 : 'KW' '2724';\n"); + grammarBuilder.append("KW2725 : 'KW' '2725';\n"); + grammarBuilder.append("KW2726 : 'KW' '2726';\n"); + grammarBuilder.append("KW2727 : 'KW' '2727';\n"); + grammarBuilder.append("KW2728 : 'KW' '2728';\n"); + grammarBuilder.append("KW2729 : 'KW' '2729';\n"); + grammarBuilder.append("KW2730 : 'KW' '2730';\n"); + grammarBuilder.append("KW2731 : 'KW' '2731';\n"); + grammarBuilder.append("KW2732 : 'KW' '2732';\n"); + grammarBuilder.append("KW2733 : 'KW' '2733';\n"); + grammarBuilder.append("KW2734 : 'KW' '2734';\n"); + grammarBuilder.append("KW2735 : 'KW' '2735';\n"); + grammarBuilder.append("KW2736 : 'KW' '2736';\n"); + grammarBuilder.append("KW2737 : 'KW' '2737';\n"); + grammarBuilder.append("KW2738 : 'KW' '2738';\n"); + grammarBuilder.append("KW2739 : 'KW' '2739';\n"); + grammarBuilder.append("KW2740 : 'KW' '2740';\n"); + grammarBuilder.append("KW2741 : 'KW' '2741';\n"); + grammarBuilder.append("KW2742 : 'KW' '2742';\n"); + grammarBuilder.append("KW2743 : 'KW' '2743';\n"); + grammarBuilder.append("KW2744 : 'KW' '2744';\n"); + grammarBuilder.append("KW2745 : 'KW' '2745';\n"); + grammarBuilder.append("KW2746 : 'KW' '2746';\n"); + grammarBuilder.append("KW2747 : 'KW' '2747';\n"); + grammarBuilder.append("KW2748 : 'KW' '2748';\n"); + grammarBuilder.append("KW2749 : 'KW' '2749';\n"); + grammarBuilder.append("KW2750 : 'KW' '2750';\n"); + grammarBuilder.append("KW2751 : 'KW' '2751';\n"); + grammarBuilder.append("KW2752 : 'KW' '2752';\n"); + grammarBuilder.append("KW2753 : 'KW' '2753';\n"); + grammarBuilder.append("KW2754 : 'KW' '2754';\n"); + grammarBuilder.append("KW2755 : 'KW' '2755';\n"); + grammarBuilder.append("KW2756 : 'KW' '2756';\n"); + grammarBuilder.append("KW2757 : 'KW' '2757';\n"); + grammarBuilder.append("KW2758 : 'KW' '2758';\n"); + grammarBuilder.append("KW2759 : 'KW' '2759';\n"); + grammarBuilder.append("KW2760 : 'KW' '2760';\n"); + grammarBuilder.append("KW2761 : 'KW' '2761';\n"); + grammarBuilder.append("KW2762 : 'KW' '2762';\n"); + grammarBuilder.append("KW2763 : 'KW' '2763';\n"); + grammarBuilder.append("KW2764 : 'KW' '2764';\n"); + grammarBuilder.append("KW2765 : 'KW' '2765';\n"); + grammarBuilder.append("KW2766 : 'KW' '2766';\n"); + grammarBuilder.append("KW2767 : 'KW' '2767';\n"); + grammarBuilder.append("KW2768 : 'KW' '2768';\n"); + grammarBuilder.append("KW2769 : 'KW' '2769';\n"); + grammarBuilder.append("KW2770 : 'KW' '2770';\n"); + grammarBuilder.append("KW2771 : 'KW' '2771';\n"); + grammarBuilder.append("KW2772 : 'KW' '2772';\n"); + grammarBuilder.append("KW2773 : 'KW' '2773';\n"); + grammarBuilder.append("KW2774 : 'KW' '2774';\n"); + grammarBuilder.append("KW2775 : 'KW' '2775';\n"); + grammarBuilder.append("KW2776 : 'KW' '2776';\n"); + grammarBuilder.append("KW2777 : 'KW' '2777';\n"); + grammarBuilder.append("KW2778 : 'KW' '2778';\n"); + grammarBuilder.append("KW2779 : 'KW' '2779';\n"); + grammarBuilder.append("KW2780 : 'KW' '2780';\n"); + grammarBuilder.append("KW2781 : 'KW' '2781';\n"); + grammarBuilder.append("KW2782 : 'KW' '2782';\n"); + grammarBuilder.append("KW2783 : 'KW' '2783';\n"); + grammarBuilder.append("KW2784 : 'KW' '2784';\n"); + grammarBuilder.append("KW2785 : 'KW' '2785';\n"); + grammarBuilder.append("KW2786 : 'KW' '2786';\n"); + grammarBuilder.append("KW2787 : 'KW' '2787';\n"); + grammarBuilder.append("KW2788 : 'KW' '2788';\n"); + grammarBuilder.append("KW2789 : 'KW' '2789';\n"); + grammarBuilder.append("KW2790 : 'KW' '2790';\n"); + grammarBuilder.append("KW2791 : 'KW' '2791';\n"); + grammarBuilder.append("KW2792 : 'KW' '2792';\n"); + grammarBuilder.append("KW2793 : 'KW' '2793';\n"); + grammarBuilder.append("KW2794 : 'KW' '2794';\n"); + grammarBuilder.append("KW2795 : 'KW' '2795';\n"); + grammarBuilder.append("KW2796 : 'KW' '2796';\n"); + grammarBuilder.append("KW2797 : 'KW' '2797';\n"); + grammarBuilder.append("KW2798 : 'KW' '2798';\n"); + grammarBuilder.append("KW2799 : 'KW' '2799';\n"); + grammarBuilder.append("KW2800 : 'KW' '2800';\n"); + grammarBuilder.append("KW2801 : 'KW' '2801';\n"); + grammarBuilder.append("KW2802 : 'KW' '2802';\n"); + grammarBuilder.append("KW2803 : 'KW' '2803';\n"); + grammarBuilder.append("KW2804 : 'KW' '2804';\n"); + grammarBuilder.append("KW2805 : 'KW' '2805';\n"); + grammarBuilder.append("KW2806 : 'KW' '2806';\n"); + grammarBuilder.append("KW2807 : 'KW' '2807';\n"); + grammarBuilder.append("KW2808 : 'KW' '2808';\n"); + grammarBuilder.append("KW2809 : 'KW' '2809';\n"); + grammarBuilder.append("KW2810 : 'KW' '2810';\n"); + grammarBuilder.append("KW2811 : 'KW' '2811';\n"); + grammarBuilder.append("KW2812 : 'KW' '2812';\n"); + grammarBuilder.append("KW2813 : 'KW' '2813';\n"); + grammarBuilder.append("KW2814 : 'KW' '2814';\n"); + grammarBuilder.append("KW2815 : 'KW' '2815';\n"); + grammarBuilder.append("KW2816 : 'KW' '2816';\n"); + grammarBuilder.append("KW2817 : 'KW' '2817';\n"); + grammarBuilder.append("KW2818 : 'KW' '2818';\n"); + grammarBuilder.append("KW2819 : 'KW' '2819';\n"); + grammarBuilder.append("KW2820 : 'KW' '2820';\n"); + grammarBuilder.append("KW2821 : 'KW' '2821';\n"); + grammarBuilder.append("KW2822 : 'KW' '2822';\n"); + grammarBuilder.append("KW2823 : 'KW' '2823';\n"); + grammarBuilder.append("KW2824 : 'KW' '2824';\n"); + grammarBuilder.append("KW2825 : 'KW' '2825';\n"); + grammarBuilder.append("KW2826 : 'KW' '2826';\n"); + grammarBuilder.append("KW2827 : 'KW' '2827';\n"); + grammarBuilder.append("KW2828 : 'KW' '2828';\n"); + grammarBuilder.append("KW2829 : 'KW' '2829';\n"); + grammarBuilder.append("KW2830 : 'KW' '2830';\n"); + grammarBuilder.append("KW2831 : 'KW' '2831';\n"); + grammarBuilder.append("KW2832 : 'KW' '2832';\n"); + grammarBuilder.append("KW2833 : 'KW' '2833';\n"); + grammarBuilder.append("KW2834 : 'KW' '2834';\n"); + grammarBuilder.append("KW2835 : 'KW' '2835';\n"); + grammarBuilder.append("KW2836 : 'KW' '2836';\n"); + grammarBuilder.append("KW2837 : 'KW' '2837';\n"); + grammarBuilder.append("KW2838 : 'KW' '2838';\n"); + grammarBuilder.append("KW2839 : 'KW' '2839';\n"); + grammarBuilder.append("KW2840 : 'KW' '2840';\n"); + grammarBuilder.append("KW2841 : 'KW' '2841';\n"); + grammarBuilder.append("KW2842 : 'KW' '2842';\n"); + grammarBuilder.append("KW2843 : 'KW' '2843';\n"); + grammarBuilder.append("KW2844 : 'KW' '2844';\n"); + grammarBuilder.append("KW2845 : 'KW' '2845';\n"); + grammarBuilder.append("KW2846 : 'KW' '2846';\n"); + grammarBuilder.append("KW2847 : 'KW' '2847';\n"); + grammarBuilder.append("KW2848 : 'KW' '2848';\n"); + grammarBuilder.append("KW2849 : 'KW' '2849';\n"); + grammarBuilder.append("KW2850 : 'KW' '2850';\n"); + grammarBuilder.append("KW2851 : 'KW' '2851';\n"); + grammarBuilder.append("KW2852 : 'KW' '2852';\n"); + grammarBuilder.append("KW2853 : 'KW' '2853';\n"); + grammarBuilder.append("KW2854 : 'KW' '2854';\n"); + grammarBuilder.append("KW2855 : 'KW' '2855';\n"); + grammarBuilder.append("KW2856 : 'KW' '2856';\n"); + grammarBuilder.append("KW2857 : 'KW' '2857';\n"); + grammarBuilder.append("KW2858 : 'KW' '2858';\n"); + grammarBuilder.append("KW2859 : 'KW' '2859';\n"); + grammarBuilder.append("KW2860 : 'KW' '2860';\n"); + grammarBuilder.append("KW2861 : 'KW' '2861';\n"); + grammarBuilder.append("KW2862 : 'KW' '2862';\n"); + grammarBuilder.append("KW2863 : 'KW' '2863';\n"); + grammarBuilder.append("KW2864 : 'KW' '2864';\n"); + grammarBuilder.append("KW2865 : 'KW' '2865';\n"); + grammarBuilder.append("KW2866 : 'KW' '2866';\n"); + grammarBuilder.append("KW2867 : 'KW' '2867';\n"); + grammarBuilder.append("KW2868 : 'KW' '2868';\n"); + grammarBuilder.append("KW2869 : 'KW' '2869';\n"); + grammarBuilder.append("KW2870 : 'KW' '2870';\n"); + grammarBuilder.append("KW2871 : 'KW' '2871';\n"); + grammarBuilder.append("KW2872 : 'KW' '2872';\n"); + grammarBuilder.append("KW2873 : 'KW' '2873';\n"); + grammarBuilder.append("KW2874 : 'KW' '2874';\n"); + grammarBuilder.append("KW2875 : 'KW' '2875';\n"); + grammarBuilder.append("KW2876 : 'KW' '2876';\n"); + grammarBuilder.append("KW2877 : 'KW' '2877';\n"); + grammarBuilder.append("KW2878 : 'KW' '2878';\n"); + grammarBuilder.append("KW2879 : 'KW' '2879';\n"); + grammarBuilder.append("KW2880 : 'KW' '2880';\n"); + grammarBuilder.append("KW2881 : 'KW' '2881';\n"); + grammarBuilder.append("KW2882 : 'KW' '2882';\n"); + grammarBuilder.append("KW2883 : 'KW' '2883';\n"); + grammarBuilder.append("KW2884 : 'KW' '2884';\n"); + grammarBuilder.append("KW2885 : 'KW' '2885';\n"); + grammarBuilder.append("KW2886 : 'KW' '2886';\n"); + grammarBuilder.append("KW2887 : 'KW' '2887';\n"); + grammarBuilder.append("KW2888 : 'KW' '2888';\n"); + grammarBuilder.append("KW2889 : 'KW' '2889';\n"); + grammarBuilder.append("KW2890 : 'KW' '2890';\n"); + grammarBuilder.append("KW2891 : 'KW' '2891';\n"); + grammarBuilder.append("KW2892 : 'KW' '2892';\n"); + grammarBuilder.append("KW2893 : 'KW' '2893';\n"); + grammarBuilder.append("KW2894 : 'KW' '2894';\n"); + grammarBuilder.append("KW2895 : 'KW' '2895';\n"); + grammarBuilder.append("KW2896 : 'KW' '2896';\n"); + grammarBuilder.append("KW2897 : 'KW' '2897';\n"); + grammarBuilder.append("KW2898 : 'KW' '2898';\n"); + grammarBuilder.append("KW2899 : 'KW' '2899';\n"); + grammarBuilder.append("KW2900 : 'KW' '2900';\n"); + grammarBuilder.append("KW2901 : 'KW' '2901';\n"); + grammarBuilder.append("KW2902 : 'KW' '2902';\n"); + grammarBuilder.append("KW2903 : 'KW' '2903';\n"); + grammarBuilder.append("KW2904 : 'KW' '2904';\n"); + grammarBuilder.append("KW2905 : 'KW' '2905';\n"); + grammarBuilder.append("KW2906 : 'KW' '2906';\n"); + grammarBuilder.append("KW2907 : 'KW' '2907';\n"); + grammarBuilder.append("KW2908 : 'KW' '2908';\n"); + grammarBuilder.append("KW2909 : 'KW' '2909';\n"); + grammarBuilder.append("KW2910 : 'KW' '2910';\n"); + grammarBuilder.append("KW2911 : 'KW' '2911';\n"); + grammarBuilder.append("KW2912 : 'KW' '2912';\n"); + grammarBuilder.append("KW2913 : 'KW' '2913';\n"); + grammarBuilder.append("KW2914 : 'KW' '2914';\n"); + grammarBuilder.append("KW2915 : 'KW' '2915';\n"); + grammarBuilder.append("KW2916 : 'KW' '2916';\n"); + grammarBuilder.append("KW2917 : 'KW' '2917';\n"); + grammarBuilder.append("KW2918 : 'KW' '2918';\n"); + grammarBuilder.append("KW2919 : 'KW' '2919';\n"); + grammarBuilder.append("KW2920 : 'KW' '2920';\n"); + grammarBuilder.append("KW2921 : 'KW' '2921';\n"); + grammarBuilder.append("KW2922 : 'KW' '2922';\n"); + grammarBuilder.append("KW2923 : 'KW' '2923';\n"); + grammarBuilder.append("KW2924 : 'KW' '2924';\n"); + grammarBuilder.append("KW2925 : 'KW' '2925';\n"); + grammarBuilder.append("KW2926 : 'KW' '2926';\n"); + grammarBuilder.append("KW2927 : 'KW' '2927';\n"); + grammarBuilder.append("KW2928 : 'KW' '2928';\n"); + grammarBuilder.append("KW2929 : 'KW' '2929';\n"); + grammarBuilder.append("KW2930 : 'KW' '2930';\n"); + grammarBuilder.append("KW2931 : 'KW' '2931';\n"); + grammarBuilder.append("KW2932 : 'KW' '2932';\n"); + grammarBuilder.append("KW2933 : 'KW' '2933';\n"); + grammarBuilder.append("KW2934 : 'KW' '2934';\n"); + grammarBuilder.append("KW2935 : 'KW' '2935';\n"); + grammarBuilder.append("KW2936 : 'KW' '2936';\n"); + grammarBuilder.append("KW2937 : 'KW' '2937';\n"); + grammarBuilder.append("KW2938 : 'KW' '2938';\n"); + grammarBuilder.append("KW2939 : 'KW' '2939';\n"); + grammarBuilder.append("KW2940 : 'KW' '2940';\n"); + grammarBuilder.append("KW2941 : 'KW' '2941';\n"); + grammarBuilder.append("KW2942 : 'KW' '2942';\n"); + grammarBuilder.append("KW2943 : 'KW' '2943';\n"); + grammarBuilder.append("KW2944 : 'KW' '2944';\n"); + grammarBuilder.append("KW2945 : 'KW' '2945';\n"); + grammarBuilder.append("KW2946 : 'KW' '2946';\n"); + grammarBuilder.append("KW2947 : 'KW' '2947';\n"); + grammarBuilder.append("KW2948 : 'KW' '2948';\n"); + grammarBuilder.append("KW2949 : 'KW' '2949';\n"); + grammarBuilder.append("KW2950 : 'KW' '2950';\n"); + grammarBuilder.append("KW2951 : 'KW' '2951';\n"); + grammarBuilder.append("KW2952 : 'KW' '2952';\n"); + grammarBuilder.append("KW2953 : 'KW' '2953';\n"); + grammarBuilder.append("KW2954 : 'KW' '2954';\n"); + grammarBuilder.append("KW2955 : 'KW' '2955';\n"); + grammarBuilder.append("KW2956 : 'KW' '2956';\n"); + grammarBuilder.append("KW2957 : 'KW' '2957';\n"); + grammarBuilder.append("KW2958 : 'KW' '2958';\n"); + grammarBuilder.append("KW2959 : 'KW' '2959';\n"); + grammarBuilder.append("KW2960 : 'KW' '2960';\n"); + grammarBuilder.append("KW2961 : 'KW' '2961';\n"); + grammarBuilder.append("KW2962 : 'KW' '2962';\n"); + grammarBuilder.append("KW2963 : 'KW' '2963';\n"); + grammarBuilder.append("KW2964 : 'KW' '2964';\n"); + grammarBuilder.append("KW2965 : 'KW' '2965';\n"); + grammarBuilder.append("KW2966 : 'KW' '2966';\n"); + grammarBuilder.append("KW2967 : 'KW' '2967';\n"); + grammarBuilder.append("KW2968 : 'KW' '2968';\n"); + grammarBuilder.append("KW2969 : 'KW' '2969';\n"); + grammarBuilder.append("KW2970 : 'KW' '2970';\n"); + grammarBuilder.append("KW2971 : 'KW' '2971';\n"); + grammarBuilder.append("KW2972 : 'KW' '2972';\n"); + grammarBuilder.append("KW2973 : 'KW' '2973';\n"); + grammarBuilder.append("KW2974 : 'KW' '2974';\n"); + grammarBuilder.append("KW2975 : 'KW' '2975';\n"); + grammarBuilder.append("KW2976 : 'KW' '2976';\n"); + grammarBuilder.append("KW2977 : 'KW' '2977';\n"); + grammarBuilder.append("KW2978 : 'KW' '2978';\n"); + grammarBuilder.append("KW2979 : 'KW' '2979';\n"); + grammarBuilder.append("KW2980 : 'KW' '2980';\n"); + grammarBuilder.append("KW2981 : 'KW' '2981';\n"); + grammarBuilder.append("KW2982 : 'KW' '2982';\n"); + grammarBuilder.append("KW2983 : 'KW' '2983';\n"); + grammarBuilder.append("KW2984 : 'KW' '2984';\n"); + grammarBuilder.append("KW2985 : 'KW' '2985';\n"); + grammarBuilder.append("KW2986 : 'KW' '2986';\n"); + grammarBuilder.append("KW2987 : 'KW' '2987';\n"); + grammarBuilder.append("KW2988 : 'KW' '2988';\n"); + grammarBuilder.append("KW2989 : 'KW' '2989';\n"); + grammarBuilder.append("KW2990 : 'KW' '2990';\n"); + grammarBuilder.append("KW2991 : 'KW' '2991';\n"); + grammarBuilder.append("KW2992 : 'KW' '2992';\n"); + grammarBuilder.append("KW2993 : 'KW' '2993';\n"); + grammarBuilder.append("KW2994 : 'KW' '2994';\n"); + grammarBuilder.append("KW2995 : 'KW' '2995';\n"); + grammarBuilder.append("KW2996 : 'KW' '2996';\n"); + grammarBuilder.append("KW2997 : 'KW' '2997';\n"); + grammarBuilder.append("KW2998 : 'KW' '2998';\n"); + grammarBuilder.append("KW2999 : 'KW' '2999';\n"); + grammarBuilder.append("KW3000 : 'KW' '3000';\n"); + grammarBuilder.append("KW3001 : 'KW' '3001';\n"); + grammarBuilder.append("KW3002 : 'KW' '3002';\n"); + grammarBuilder.append("KW3003 : 'KW' '3003';\n"); + grammarBuilder.append("KW3004 : 'KW' '3004';\n"); + grammarBuilder.append("KW3005 : 'KW' '3005';\n"); + grammarBuilder.append("KW3006 : 'KW' '3006';\n"); + grammarBuilder.append("KW3007 : 'KW' '3007';\n"); + grammarBuilder.append("KW3008 : 'KW' '3008';\n"); + grammarBuilder.append("KW3009 : 'KW' '3009';\n"); + grammarBuilder.append("KW3010 : 'KW' '3010';\n"); + grammarBuilder.append("KW3011 : 'KW' '3011';\n"); + grammarBuilder.append("KW3012 : 'KW' '3012';\n"); + grammarBuilder.append("KW3013 : 'KW' '3013';\n"); + grammarBuilder.append("KW3014 : 'KW' '3014';\n"); + grammarBuilder.append("KW3015 : 'KW' '3015';\n"); + grammarBuilder.append("KW3016 : 'KW' '3016';\n"); + grammarBuilder.append("KW3017 : 'KW' '3017';\n"); + grammarBuilder.append("KW3018 : 'KW' '3018';\n"); + grammarBuilder.append("KW3019 : 'KW' '3019';\n"); + grammarBuilder.append("KW3020 : 'KW' '3020';\n"); + grammarBuilder.append("KW3021 : 'KW' '3021';\n"); + grammarBuilder.append("KW3022 : 'KW' '3022';\n"); + grammarBuilder.append("KW3023 : 'KW' '3023';\n"); + grammarBuilder.append("KW3024 : 'KW' '3024';\n"); + grammarBuilder.append("KW3025 : 'KW' '3025';\n"); + grammarBuilder.append("KW3026 : 'KW' '3026';\n"); + grammarBuilder.append("KW3027 : 'KW' '3027';\n"); + grammarBuilder.append("KW3028 : 'KW' '3028';\n"); + grammarBuilder.append("KW3029 : 'KW' '3029';\n"); + grammarBuilder.append("KW3030 : 'KW' '3030';\n"); + grammarBuilder.append("KW3031 : 'KW' '3031';\n"); + grammarBuilder.append("KW3032 : 'KW' '3032';\n"); + grammarBuilder.append("KW3033 : 'KW' '3033';\n"); + grammarBuilder.append("KW3034 : 'KW' '3034';\n"); + grammarBuilder.append("KW3035 : 'KW' '3035';\n"); + grammarBuilder.append("KW3036 : 'KW' '3036';\n"); + grammarBuilder.append("KW3037 : 'KW' '3037';\n"); + grammarBuilder.append("KW3038 : 'KW' '3038';\n"); + grammarBuilder.append("KW3039 : 'KW' '3039';\n"); + grammarBuilder.append("KW3040 : 'KW' '3040';\n"); + grammarBuilder.append("KW3041 : 'KW' '3041';\n"); + grammarBuilder.append("KW3042 : 'KW' '3042';\n"); + grammarBuilder.append("KW3043 : 'KW' '3043';\n"); + grammarBuilder.append("KW3044 : 'KW' '3044';\n"); + grammarBuilder.append("KW3045 : 'KW' '3045';\n"); + grammarBuilder.append("KW3046 : 'KW' '3046';\n"); + grammarBuilder.append("KW3047 : 'KW' '3047';\n"); + grammarBuilder.append("KW3048 : 'KW' '3048';\n"); + grammarBuilder.append("KW3049 : 'KW' '3049';\n"); + grammarBuilder.append("KW3050 : 'KW' '3050';\n"); + grammarBuilder.append("KW3051 : 'KW' '3051';\n"); + grammarBuilder.append("KW3052 : 'KW' '3052';\n"); + grammarBuilder.append("KW3053 : 'KW' '3053';\n"); + grammarBuilder.append("KW3054 : 'KW' '3054';\n"); + grammarBuilder.append("KW3055 : 'KW' '3055';\n"); + grammarBuilder.append("KW3056 : 'KW' '3056';\n"); + grammarBuilder.append("KW3057 : 'KW' '3057';\n"); + grammarBuilder.append("KW3058 : 'KW' '3058';\n"); + grammarBuilder.append("KW3059 : 'KW' '3059';\n"); + grammarBuilder.append("KW3060 : 'KW' '3060';\n"); + grammarBuilder.append("KW3061 : 'KW' '3061';\n"); + grammarBuilder.append("KW3062 : 'KW' '3062';\n"); + grammarBuilder.append("KW3063 : 'KW' '3063';\n"); + grammarBuilder.append("KW3064 : 'KW' '3064';\n"); + grammarBuilder.append("KW3065 : 'KW' '3065';\n"); + grammarBuilder.append("KW3066 : 'KW' '3066';\n"); + grammarBuilder.append("KW3067 : 'KW' '3067';\n"); + grammarBuilder.append("KW3068 : 'KW' '3068';\n"); + grammarBuilder.append("KW3069 : 'KW' '3069';\n"); + grammarBuilder.append("KW3070 : 'KW' '3070';\n"); + grammarBuilder.append("KW3071 : 'KW' '3071';\n"); + grammarBuilder.append("KW3072 : 'KW' '3072';\n"); + grammarBuilder.append("KW3073 : 'KW' '3073';\n"); + grammarBuilder.append("KW3074 : 'KW' '3074';\n"); + grammarBuilder.append("KW3075 : 'KW' '3075';\n"); + grammarBuilder.append("KW3076 : 'KW' '3076';\n"); + grammarBuilder.append("KW3077 : 'KW' '3077';\n"); + grammarBuilder.append("KW3078 : 'KW' '3078';\n"); + grammarBuilder.append("KW3079 : 'KW' '3079';\n"); + grammarBuilder.append("KW3080 : 'KW' '3080';\n"); + grammarBuilder.append("KW3081 : 'KW' '3081';\n"); + grammarBuilder.append("KW3082 : 'KW' '3082';\n"); + grammarBuilder.append("KW3083 : 'KW' '3083';\n"); + grammarBuilder.append("KW3084 : 'KW' '3084';\n"); + grammarBuilder.append("KW3085 : 'KW' '3085';\n"); + grammarBuilder.append("KW3086 : 'KW' '3086';\n"); + grammarBuilder.append("KW3087 : 'KW' '3087';\n"); + grammarBuilder.append("KW3088 : 'KW' '3088';\n"); + grammarBuilder.append("KW3089 : 'KW' '3089';\n"); + grammarBuilder.append("KW3090 : 'KW' '3090';\n"); + grammarBuilder.append("KW3091 : 'KW' '3091';\n"); + grammarBuilder.append("KW3092 : 'KW' '3092';\n"); + grammarBuilder.append("KW3093 : 'KW' '3093';\n"); + grammarBuilder.append("KW3094 : 'KW' '3094';\n"); + grammarBuilder.append("KW3095 : 'KW' '3095';\n"); + grammarBuilder.append("KW3096 : 'KW' '3096';\n"); + grammarBuilder.append("KW3097 : 'KW' '3097';\n"); + grammarBuilder.append("KW3098 : 'KW' '3098';\n"); + grammarBuilder.append("KW3099 : 'KW' '3099';\n"); + grammarBuilder.append("KW3100 : 'KW' '3100';\n"); + grammarBuilder.append("KW3101 : 'KW' '3101';\n"); + grammarBuilder.append("KW3102 : 'KW' '3102';\n"); + grammarBuilder.append("KW3103 : 'KW' '3103';\n"); + grammarBuilder.append("KW3104 : 'KW' '3104';\n"); + grammarBuilder.append("KW3105 : 'KW' '3105';\n"); + grammarBuilder.append("KW3106 : 'KW' '3106';\n"); + grammarBuilder.append("KW3107 : 'KW' '3107';\n"); + grammarBuilder.append("KW3108 : 'KW' '3108';\n"); + grammarBuilder.append("KW3109 : 'KW' '3109';\n"); + grammarBuilder.append("KW3110 : 'KW' '3110';\n"); + grammarBuilder.append("KW3111 : 'KW' '3111';\n"); + grammarBuilder.append("KW3112 : 'KW' '3112';\n"); + grammarBuilder.append("KW3113 : 'KW' '3113';\n"); + grammarBuilder.append("KW3114 : 'KW' '3114';\n"); + grammarBuilder.append("KW3115 : 'KW' '3115';\n"); + grammarBuilder.append("KW3116 : 'KW' '3116';\n"); + grammarBuilder.append("KW3117 : 'KW' '3117';\n"); + grammarBuilder.append("KW3118 : 'KW' '3118';\n"); + grammarBuilder.append("KW3119 : 'KW' '3119';\n"); + grammarBuilder.append("KW3120 : 'KW' '3120';\n"); + grammarBuilder.append("KW3121 : 'KW' '3121';\n"); + grammarBuilder.append("KW3122 : 'KW' '3122';\n"); + grammarBuilder.append("KW3123 : 'KW' '3123';\n"); + grammarBuilder.append("KW3124 : 'KW' '3124';\n"); + grammarBuilder.append("KW3125 : 'KW' '3125';\n"); + grammarBuilder.append("KW3126 : 'KW' '3126';\n"); + grammarBuilder.append("KW3127 : 'KW' '3127';\n"); + grammarBuilder.append("KW3128 : 'KW' '3128';\n"); + grammarBuilder.append("KW3129 : 'KW' '3129';\n"); + grammarBuilder.append("KW3130 : 'KW' '3130';\n"); + grammarBuilder.append("KW3131 : 'KW' '3131';\n"); + grammarBuilder.append("KW3132 : 'KW' '3132';\n"); + grammarBuilder.append("KW3133 : 'KW' '3133';\n"); + grammarBuilder.append("KW3134 : 'KW' '3134';\n"); + grammarBuilder.append("KW3135 : 'KW' '3135';\n"); + grammarBuilder.append("KW3136 : 'KW' '3136';\n"); + grammarBuilder.append("KW3137 : 'KW' '3137';\n"); + grammarBuilder.append("KW3138 : 'KW' '3138';\n"); + grammarBuilder.append("KW3139 : 'KW' '3139';\n"); + grammarBuilder.append("KW3140 : 'KW' '3140';\n"); + grammarBuilder.append("KW3141 : 'KW' '3141';\n"); + grammarBuilder.append("KW3142 : 'KW' '3142';\n"); + grammarBuilder.append("KW3143 : 'KW' '3143';\n"); + grammarBuilder.append("KW3144 : 'KW' '3144';\n"); + grammarBuilder.append("KW3145 : 'KW' '3145';\n"); + grammarBuilder.append("KW3146 : 'KW' '3146';\n"); + grammarBuilder.append("KW3147 : 'KW' '3147';\n"); + grammarBuilder.append("KW3148 : 'KW' '3148';\n"); + grammarBuilder.append("KW3149 : 'KW' '3149';\n"); + grammarBuilder.append("KW3150 : 'KW' '3150';\n"); + grammarBuilder.append("KW3151 : 'KW' '3151';\n"); + grammarBuilder.append("KW3152 : 'KW' '3152';\n"); + grammarBuilder.append("KW3153 : 'KW' '3153';\n"); + grammarBuilder.append("KW3154 : 'KW' '3154';\n"); + grammarBuilder.append("KW3155 : 'KW' '3155';\n"); + grammarBuilder.append("KW3156 : 'KW' '3156';\n"); + grammarBuilder.append("KW3157 : 'KW' '3157';\n"); + grammarBuilder.append("KW3158 : 'KW' '3158';\n"); + grammarBuilder.append("KW3159 : 'KW' '3159';\n"); + grammarBuilder.append("KW3160 : 'KW' '3160';\n"); + grammarBuilder.append("KW3161 : 'KW' '3161';\n"); + grammarBuilder.append("KW3162 : 'KW' '3162';\n"); + grammarBuilder.append("KW3163 : 'KW' '3163';\n"); + grammarBuilder.append("KW3164 : 'KW' '3164';\n"); + grammarBuilder.append("KW3165 : 'KW' '3165';\n"); + grammarBuilder.append("KW3166 : 'KW' '3166';\n"); + grammarBuilder.append("KW3167 : 'KW' '3167';\n"); + grammarBuilder.append("KW3168 : 'KW' '3168';\n"); + grammarBuilder.append("KW3169 : 'KW' '3169';\n"); + grammarBuilder.append("KW3170 : 'KW' '3170';\n"); + grammarBuilder.append("KW3171 : 'KW' '3171';\n"); + grammarBuilder.append("KW3172 : 'KW' '3172';\n"); + grammarBuilder.append("KW3173 : 'KW' '3173';\n"); + grammarBuilder.append("KW3174 : 'KW' '3174';\n"); + grammarBuilder.append("KW3175 : 'KW' '3175';\n"); + grammarBuilder.append("KW3176 : 'KW' '3176';\n"); + grammarBuilder.append("KW3177 : 'KW' '3177';\n"); + grammarBuilder.append("KW3178 : 'KW' '3178';\n"); + grammarBuilder.append("KW3179 : 'KW' '3179';\n"); + grammarBuilder.append("KW3180 : 'KW' '3180';\n"); + grammarBuilder.append("KW3181 : 'KW' '3181';\n"); + grammarBuilder.append("KW3182 : 'KW' '3182';\n"); + grammarBuilder.append("KW3183 : 'KW' '3183';\n"); + grammarBuilder.append("KW3184 : 'KW' '3184';\n"); + grammarBuilder.append("KW3185 : 'KW' '3185';\n"); + grammarBuilder.append("KW3186 : 'KW' '3186';\n"); + grammarBuilder.append("KW3187 : 'KW' '3187';\n"); + grammarBuilder.append("KW3188 : 'KW' '3188';\n"); + grammarBuilder.append("KW3189 : 'KW' '3189';\n"); + grammarBuilder.append("KW3190 : 'KW' '3190';\n"); + grammarBuilder.append("KW3191 : 'KW' '3191';\n"); + grammarBuilder.append("KW3192 : 'KW' '3192';\n"); + grammarBuilder.append("KW3193 : 'KW' '3193';\n"); + grammarBuilder.append("KW3194 : 'KW' '3194';\n"); + grammarBuilder.append("KW3195 : 'KW' '3195';\n"); + grammarBuilder.append("KW3196 : 'KW' '3196';\n"); + grammarBuilder.append("KW3197 : 'KW' '3197';\n"); + grammarBuilder.append("KW3198 : 'KW' '3198';\n"); + grammarBuilder.append("KW3199 : 'KW' '3199';\n"); + grammarBuilder.append("KW3200 : 'KW' '3200';\n"); + grammarBuilder.append("KW3201 : 'KW' '3201';\n"); + grammarBuilder.append("KW3202 : 'KW' '3202';\n"); + grammarBuilder.append("KW3203 : 'KW' '3203';\n"); + grammarBuilder.append("KW3204 : 'KW' '3204';\n"); + grammarBuilder.append("KW3205 : 'KW' '3205';\n"); + grammarBuilder.append("KW3206 : 'KW' '3206';\n"); + grammarBuilder.append("KW3207 : 'KW' '3207';\n"); + grammarBuilder.append("KW3208 : 'KW' '3208';\n"); + grammarBuilder.append("KW3209 : 'KW' '3209';\n"); + grammarBuilder.append("KW3210 : 'KW' '3210';\n"); + grammarBuilder.append("KW3211 : 'KW' '3211';\n"); + grammarBuilder.append("KW3212 : 'KW' '3212';\n"); + grammarBuilder.append("KW3213 : 'KW' '3213';\n"); + grammarBuilder.append("KW3214 : 'KW' '3214';\n"); + grammarBuilder.append("KW3215 : 'KW' '3215';\n"); + grammarBuilder.append("KW3216 : 'KW' '3216';\n"); + grammarBuilder.append("KW3217 : 'KW' '3217';\n"); + grammarBuilder.append("KW3218 : 'KW' '3218';\n"); + grammarBuilder.append("KW3219 : 'KW' '3219';\n"); + grammarBuilder.append("KW3220 : 'KW' '3220';\n"); + grammarBuilder.append("KW3221 : 'KW' '3221';\n"); + grammarBuilder.append("KW3222 : 'KW' '3222';\n"); + grammarBuilder.append("KW3223 : 'KW' '3223';\n"); + grammarBuilder.append("KW3224 : 'KW' '3224';\n"); + grammarBuilder.append("KW3225 : 'KW' '3225';\n"); + grammarBuilder.append("KW3226 : 'KW' '3226';\n"); + grammarBuilder.append("KW3227 : 'KW' '3227';\n"); + grammarBuilder.append("KW3228 : 'KW' '3228';\n"); + grammarBuilder.append("KW3229 : 'KW' '3229';\n"); + grammarBuilder.append("KW3230 : 'KW' '3230';\n"); + grammarBuilder.append("KW3231 : 'KW' '3231';\n"); + grammarBuilder.append("KW3232 : 'KW' '3232';\n"); + grammarBuilder.append("KW3233 : 'KW' '3233';\n"); + grammarBuilder.append("KW3234 : 'KW' '3234';\n"); + grammarBuilder.append("KW3235 : 'KW' '3235';\n"); + grammarBuilder.append("KW3236 : 'KW' '3236';\n"); + grammarBuilder.append("KW3237 : 'KW' '3237';\n"); + grammarBuilder.append("KW3238 : 'KW' '3238';\n"); + grammarBuilder.append("KW3239 : 'KW' '3239';\n"); + grammarBuilder.append("KW3240 : 'KW' '3240';\n"); + grammarBuilder.append("KW3241 : 'KW' '3241';\n"); + grammarBuilder.append("KW3242 : 'KW' '3242';\n"); + grammarBuilder.append("KW3243 : 'KW' '3243';\n"); + grammarBuilder.append("KW3244 : 'KW' '3244';\n"); + grammarBuilder.append("KW3245 : 'KW' '3245';\n"); + grammarBuilder.append("KW3246 : 'KW' '3246';\n"); + grammarBuilder.append("KW3247 : 'KW' '3247';\n"); + grammarBuilder.append("KW3248 : 'KW' '3248';\n"); + grammarBuilder.append("KW3249 : 'KW' '3249';\n"); + grammarBuilder.append("KW3250 : 'KW' '3250';\n"); + grammarBuilder.append("KW3251 : 'KW' '3251';\n"); + grammarBuilder.append("KW3252 : 'KW' '3252';\n"); + grammarBuilder.append("KW3253 : 'KW' '3253';\n"); + grammarBuilder.append("KW3254 : 'KW' '3254';\n"); + grammarBuilder.append("KW3255 : 'KW' '3255';\n"); + grammarBuilder.append("KW3256 : 'KW' '3256';\n"); + grammarBuilder.append("KW3257 : 'KW' '3257';\n"); + grammarBuilder.append("KW3258 : 'KW' '3258';\n"); + grammarBuilder.append("KW3259 : 'KW' '3259';\n"); + grammarBuilder.append("KW3260 : 'KW' '3260';\n"); + grammarBuilder.append("KW3261 : 'KW' '3261';\n"); + grammarBuilder.append("KW3262 : 'KW' '3262';\n"); + grammarBuilder.append("KW3263 : 'KW' '3263';\n"); + grammarBuilder.append("KW3264 : 'KW' '3264';\n"); + grammarBuilder.append("KW3265 : 'KW' '3265';\n"); + grammarBuilder.append("KW3266 : 'KW' '3266';\n"); + grammarBuilder.append("KW3267 : 'KW' '3267';\n"); + grammarBuilder.append("KW3268 : 'KW' '3268';\n"); + grammarBuilder.append("KW3269 : 'KW' '3269';\n"); + grammarBuilder.append("KW3270 : 'KW' '3270';\n"); + grammarBuilder.append("KW3271 : 'KW' '3271';\n"); + grammarBuilder.append("KW3272 : 'KW' '3272';\n"); + grammarBuilder.append("KW3273 : 'KW' '3273';\n"); + grammarBuilder.append("KW3274 : 'KW' '3274';\n"); + grammarBuilder.append("KW3275 : 'KW' '3275';\n"); + grammarBuilder.append("KW3276 : 'KW' '3276';\n"); + grammarBuilder.append("KW3277 : 'KW' '3277';\n"); + grammarBuilder.append("KW3278 : 'KW' '3278';\n"); + grammarBuilder.append("KW3279 : 'KW' '3279';\n"); + grammarBuilder.append("KW3280 : 'KW' '3280';\n"); + grammarBuilder.append("KW3281 : 'KW' '3281';\n"); + grammarBuilder.append("KW3282 : 'KW' '3282';\n"); + grammarBuilder.append("KW3283 : 'KW' '3283';\n"); + grammarBuilder.append("KW3284 : 'KW' '3284';\n"); + grammarBuilder.append("KW3285 : 'KW' '3285';\n"); + grammarBuilder.append("KW3286 : 'KW' '3286';\n"); + grammarBuilder.append("KW3287 : 'KW' '3287';\n"); + grammarBuilder.append("KW3288 : 'KW' '3288';\n"); + grammarBuilder.append("KW3289 : 'KW' '3289';\n"); + grammarBuilder.append("KW3290 : 'KW' '3290';\n"); + grammarBuilder.append("KW3291 : 'KW' '3291';\n"); + grammarBuilder.append("KW3292 : 'KW' '3292';\n"); + grammarBuilder.append("KW3293 : 'KW' '3293';\n"); + grammarBuilder.append("KW3294 : 'KW' '3294';\n"); + grammarBuilder.append("KW3295 : 'KW' '3295';\n"); + grammarBuilder.append("KW3296 : 'KW' '3296';\n"); + grammarBuilder.append("KW3297 : 'KW' '3297';\n"); + grammarBuilder.append("KW3298 : 'KW' '3298';\n"); + grammarBuilder.append("KW3299 : 'KW' '3299';\n"); + grammarBuilder.append("KW3300 : 'KW' '3300';\n"); + grammarBuilder.append("KW3301 : 'KW' '3301';\n"); + grammarBuilder.append("KW3302 : 'KW' '3302';\n"); + grammarBuilder.append("KW3303 : 'KW' '3303';\n"); + grammarBuilder.append("KW3304 : 'KW' '3304';\n"); + grammarBuilder.append("KW3305 : 'KW' '3305';\n"); + grammarBuilder.append("KW3306 : 'KW' '3306';\n"); + grammarBuilder.append("KW3307 : 'KW' '3307';\n"); + grammarBuilder.append("KW3308 : 'KW' '3308';\n"); + grammarBuilder.append("KW3309 : 'KW' '3309';\n"); + grammarBuilder.append("KW3310 : 'KW' '3310';\n"); + grammarBuilder.append("KW3311 : 'KW' '3311';\n"); + grammarBuilder.append("KW3312 : 'KW' '3312';\n"); + grammarBuilder.append("KW3313 : 'KW' '3313';\n"); + grammarBuilder.append("KW3314 : 'KW' '3314';\n"); + grammarBuilder.append("KW3315 : 'KW' '3315';\n"); + grammarBuilder.append("KW3316 : 'KW' '3316';\n"); + grammarBuilder.append("KW3317 : 'KW' '3317';\n"); + grammarBuilder.append("KW3318 : 'KW' '3318';\n"); + grammarBuilder.append("KW3319 : 'KW' '3319';\n"); + grammarBuilder.append("KW3320 : 'KW' '3320';\n"); + grammarBuilder.append("KW3321 : 'KW' '3321';\n"); + grammarBuilder.append("KW3322 : 'KW' '3322';\n"); + grammarBuilder.append("KW3323 : 'KW' '3323';\n"); + grammarBuilder.append("KW3324 : 'KW' '3324';\n"); + grammarBuilder.append("KW3325 : 'KW' '3325';\n"); + grammarBuilder.append("KW3326 : 'KW' '3326';\n"); + grammarBuilder.append("KW3327 : 'KW' '3327';\n"); + grammarBuilder.append("KW3328 : 'KW' '3328';\n"); + grammarBuilder.append("KW3329 : 'KW' '3329';\n"); + grammarBuilder.append("KW3330 : 'KW' '3330';\n"); + grammarBuilder.append("KW3331 : 'KW' '3331';\n"); + grammarBuilder.append("KW3332 : 'KW' '3332';\n"); + grammarBuilder.append("KW3333 : 'KW' '3333';\n"); + grammarBuilder.append("KW3334 : 'KW' '3334';\n"); + grammarBuilder.append("KW3335 : 'KW' '3335';\n"); + grammarBuilder.append("KW3336 : 'KW' '3336';\n"); + grammarBuilder.append("KW3337 : 'KW' '3337';\n"); + grammarBuilder.append("KW3338 : 'KW' '3338';\n"); + grammarBuilder.append("KW3339 : 'KW' '3339';\n"); + grammarBuilder.append("KW3340 : 'KW' '3340';\n"); + grammarBuilder.append("KW3341 : 'KW' '3341';\n"); + grammarBuilder.append("KW3342 : 'KW' '3342';\n"); + grammarBuilder.append("KW3343 : 'KW' '3343';\n"); + grammarBuilder.append("KW3344 : 'KW' '3344';\n"); + grammarBuilder.append("KW3345 : 'KW' '3345';\n"); + grammarBuilder.append("KW3346 : 'KW' '3346';\n"); + grammarBuilder.append("KW3347 : 'KW' '3347';\n"); + grammarBuilder.append("KW3348 : 'KW' '3348';\n"); + grammarBuilder.append("KW3349 : 'KW' '3349';\n"); + grammarBuilder.append("KW3350 : 'KW' '3350';\n"); + grammarBuilder.append("KW3351 : 'KW' '3351';\n"); + grammarBuilder.append("KW3352 : 'KW' '3352';\n"); + grammarBuilder.append("KW3353 : 'KW' '3353';\n"); + grammarBuilder.append("KW3354 : 'KW' '3354';\n"); + grammarBuilder.append("KW3355 : 'KW' '3355';\n"); + grammarBuilder.append("KW3356 : 'KW' '3356';\n"); + grammarBuilder.append("KW3357 : 'KW' '3357';\n"); + grammarBuilder.append("KW3358 : 'KW' '3358';\n"); + grammarBuilder.append("KW3359 : 'KW' '3359';\n"); + grammarBuilder.append("KW3360 : 'KW' '3360';\n"); + grammarBuilder.append("KW3361 : 'KW' '3361';\n"); + grammarBuilder.append("KW3362 : 'KW' '3362';\n"); + grammarBuilder.append("KW3363 : 'KW' '3363';\n"); + grammarBuilder.append("KW3364 : 'KW' '3364';\n"); + grammarBuilder.append("KW3365 : 'KW' '3365';\n"); + grammarBuilder.append("KW3366 : 'KW' '3366';\n"); + grammarBuilder.append("KW3367 : 'KW' '3367';\n"); + grammarBuilder.append("KW3368 : 'KW' '3368';\n"); + grammarBuilder.append("KW3369 : 'KW' '3369';\n"); + grammarBuilder.append("KW3370 : 'KW' '3370';\n"); + grammarBuilder.append("KW3371 : 'KW' '3371';\n"); + grammarBuilder.append("KW3372 : 'KW' '3372';\n"); + grammarBuilder.append("KW3373 : 'KW' '3373';\n"); + grammarBuilder.append("KW3374 : 'KW' '3374';\n"); + grammarBuilder.append("KW3375 : 'KW' '3375';\n"); + grammarBuilder.append("KW3376 : 'KW' '3376';\n"); + grammarBuilder.append("KW3377 : 'KW' '3377';\n"); + grammarBuilder.append("KW3378 : 'KW' '3378';\n"); + grammarBuilder.append("KW3379 : 'KW' '3379';\n"); + grammarBuilder.append("KW3380 : 'KW' '3380';\n"); + grammarBuilder.append("KW3381 : 'KW' '3381';\n"); + grammarBuilder.append("KW3382 : 'KW' '3382';\n"); + grammarBuilder.append("KW3383 : 'KW' '3383';\n"); + grammarBuilder.append("KW3384 : 'KW' '3384';\n"); + grammarBuilder.append("KW3385 : 'KW' '3385';\n"); + grammarBuilder.append("KW3386 : 'KW' '3386';\n"); + grammarBuilder.append("KW3387 : 'KW' '3387';\n"); + grammarBuilder.append("KW3388 : 'KW' '3388';\n"); + grammarBuilder.append("KW3389 : 'KW' '3389';\n"); + grammarBuilder.append("KW3390 : 'KW' '3390';\n"); + grammarBuilder.append("KW3391 : 'KW' '3391';\n"); + grammarBuilder.append("KW3392 : 'KW' '3392';\n"); + grammarBuilder.append("KW3393 : 'KW' '3393';\n"); + grammarBuilder.append("KW3394 : 'KW' '3394';\n"); + grammarBuilder.append("KW3395 : 'KW' '3395';\n"); + grammarBuilder.append("KW3396 : 'KW' '3396';\n"); + grammarBuilder.append("KW3397 : 'KW' '3397';\n"); + grammarBuilder.append("KW3398 : 'KW' '3398';\n"); + grammarBuilder.append("KW3399 : 'KW' '3399';\n"); + grammarBuilder.append("KW3400 : 'KW' '3400';\n"); + grammarBuilder.append("KW3401 : 'KW' '3401';\n"); + grammarBuilder.append("KW3402 : 'KW' '3402';\n"); + grammarBuilder.append("KW3403 : 'KW' '3403';\n"); + grammarBuilder.append("KW3404 : 'KW' '3404';\n"); + grammarBuilder.append("KW3405 : 'KW' '3405';\n"); + grammarBuilder.append("KW3406 : 'KW' '3406';\n"); + grammarBuilder.append("KW3407 : 'KW' '3407';\n"); + grammarBuilder.append("KW3408 : 'KW' '3408';\n"); + grammarBuilder.append("KW3409 : 'KW' '3409';\n"); + grammarBuilder.append("KW3410 : 'KW' '3410';\n"); + grammarBuilder.append("KW3411 : 'KW' '3411';\n"); + grammarBuilder.append("KW3412 : 'KW' '3412';\n"); + grammarBuilder.append("KW3413 : 'KW' '3413';\n"); + grammarBuilder.append("KW3414 : 'KW' '3414';\n"); + grammarBuilder.append("KW3415 : 'KW' '3415';\n"); + grammarBuilder.append("KW3416 : 'KW' '3416';\n"); + grammarBuilder.append("KW3417 : 'KW' '3417';\n"); + grammarBuilder.append("KW3418 : 'KW' '3418';\n"); + grammarBuilder.append("KW3419 : 'KW' '3419';\n"); + grammarBuilder.append("KW3420 : 'KW' '3420';\n"); + grammarBuilder.append("KW3421 : 'KW' '3421';\n"); + grammarBuilder.append("KW3422 : 'KW' '3422';\n"); + grammarBuilder.append("KW3423 : 'KW' '3423';\n"); + grammarBuilder.append("KW3424 : 'KW' '3424';\n"); + grammarBuilder.append("KW3425 : 'KW' '3425';\n"); + grammarBuilder.append("KW3426 : 'KW' '3426';\n"); + grammarBuilder.append("KW3427 : 'KW' '3427';\n"); + grammarBuilder.append("KW3428 : 'KW' '3428';\n"); + grammarBuilder.append("KW3429 : 'KW' '3429';\n"); + grammarBuilder.append("KW3430 : 'KW' '3430';\n"); + grammarBuilder.append("KW3431 : 'KW' '3431';\n"); + grammarBuilder.append("KW3432 : 'KW' '3432';\n"); + grammarBuilder.append("KW3433 : 'KW' '3433';\n"); + grammarBuilder.append("KW3434 : 'KW' '3434';\n"); + grammarBuilder.append("KW3435 : 'KW' '3435';\n"); + grammarBuilder.append("KW3436 : 'KW' '3436';\n"); + grammarBuilder.append("KW3437 : 'KW' '3437';\n"); + grammarBuilder.append("KW3438 : 'KW' '3438';\n"); + grammarBuilder.append("KW3439 : 'KW' '3439';\n"); + grammarBuilder.append("KW3440 : 'KW' '3440';\n"); + grammarBuilder.append("KW3441 : 'KW' '3441';\n"); + grammarBuilder.append("KW3442 : 'KW' '3442';\n"); + grammarBuilder.append("KW3443 : 'KW' '3443';\n"); + grammarBuilder.append("KW3444 : 'KW' '3444';\n"); + grammarBuilder.append("KW3445 : 'KW' '3445';\n"); + grammarBuilder.append("KW3446 : 'KW' '3446';\n"); + grammarBuilder.append("KW3447 : 'KW' '3447';\n"); + grammarBuilder.append("KW3448 : 'KW' '3448';\n"); + grammarBuilder.append("KW3449 : 'KW' '3449';\n"); + grammarBuilder.append("KW3450 : 'KW' '3450';\n"); + grammarBuilder.append("KW3451 : 'KW' '3451';\n"); + grammarBuilder.append("KW3452 : 'KW' '3452';\n"); + grammarBuilder.append("KW3453 : 'KW' '3453';\n"); + grammarBuilder.append("KW3454 : 'KW' '3454';\n"); + grammarBuilder.append("KW3455 : 'KW' '3455';\n"); + grammarBuilder.append("KW3456 : 'KW' '3456';\n"); + grammarBuilder.append("KW3457 : 'KW' '3457';\n"); + grammarBuilder.append("KW3458 : 'KW' '3458';\n"); + grammarBuilder.append("KW3459 : 'KW' '3459';\n"); + grammarBuilder.append("KW3460 : 'KW' '3460';\n"); + grammarBuilder.append("KW3461 : 'KW' '3461';\n"); + grammarBuilder.append("KW3462 : 'KW' '3462';\n"); + grammarBuilder.append("KW3463 : 'KW' '3463';\n"); + grammarBuilder.append("KW3464 : 'KW' '3464';\n"); + grammarBuilder.append("KW3465 : 'KW' '3465';\n"); + grammarBuilder.append("KW3466 : 'KW' '3466';\n"); + grammarBuilder.append("KW3467 : 'KW' '3467';\n"); + grammarBuilder.append("KW3468 : 'KW' '3468';\n"); + grammarBuilder.append("KW3469 : 'KW' '3469';\n"); + grammarBuilder.append("KW3470 : 'KW' '3470';\n"); + grammarBuilder.append("KW3471 : 'KW' '3471';\n"); + grammarBuilder.append("KW3472 : 'KW' '3472';\n"); + grammarBuilder.append("KW3473 : 'KW' '3473';\n"); + grammarBuilder.append("KW3474 : 'KW' '3474';\n"); + grammarBuilder.append("KW3475 : 'KW' '3475';\n"); + grammarBuilder.append("KW3476 : 'KW' '3476';\n"); + grammarBuilder.append("KW3477 : 'KW' '3477';\n"); + grammarBuilder.append("KW3478 : 'KW' '3478';\n"); + grammarBuilder.append("KW3479 : 'KW' '3479';\n"); + grammarBuilder.append("KW3480 : 'KW' '3480';\n"); + grammarBuilder.append("KW3481 : 'KW' '3481';\n"); + grammarBuilder.append("KW3482 : 'KW' '3482';\n"); + grammarBuilder.append("KW3483 : 'KW' '3483';\n"); + grammarBuilder.append("KW3484 : 'KW' '3484';\n"); + grammarBuilder.append("KW3485 : 'KW' '3485';\n"); + grammarBuilder.append("KW3486 : 'KW' '3486';\n"); + grammarBuilder.append("KW3487 : 'KW' '3487';\n"); + grammarBuilder.append("KW3488 : 'KW' '3488';\n"); + grammarBuilder.append("KW3489 : 'KW' '3489';\n"); + grammarBuilder.append("KW3490 : 'KW' '3490';\n"); + grammarBuilder.append("KW3491 : 'KW' '3491';\n"); + grammarBuilder.append("KW3492 : 'KW' '3492';\n"); + grammarBuilder.append("KW3493 : 'KW' '3493';\n"); + grammarBuilder.append("KW3494 : 'KW' '3494';\n"); + grammarBuilder.append("KW3495 : 'KW' '3495';\n"); + grammarBuilder.append("KW3496 : 'KW' '3496';\n"); + grammarBuilder.append("KW3497 : 'KW' '3497';\n"); + grammarBuilder.append("KW3498 : 'KW' '3498';\n"); + grammarBuilder.append("KW3499 : 'KW' '3499';\n"); + grammarBuilder.append("KW3500 : 'KW' '3500';\n"); + grammarBuilder.append("KW3501 : 'KW' '3501';\n"); + grammarBuilder.append("KW3502 : 'KW' '3502';\n"); + grammarBuilder.append("KW3503 : 'KW' '3503';\n"); + grammarBuilder.append("KW3504 : 'KW' '3504';\n"); + grammarBuilder.append("KW3505 : 'KW' '3505';\n"); + grammarBuilder.append("KW3506 : 'KW' '3506';\n"); + grammarBuilder.append("KW3507 : 'KW' '3507';\n"); + grammarBuilder.append("KW3508 : 'KW' '3508';\n"); + grammarBuilder.append("KW3509 : 'KW' '3509';\n"); + grammarBuilder.append("KW3510 : 'KW' '3510';\n"); + grammarBuilder.append("KW3511 : 'KW' '3511';\n"); + grammarBuilder.append("KW3512 : 'KW' '3512';\n"); + grammarBuilder.append("KW3513 : 'KW' '3513';\n"); + grammarBuilder.append("KW3514 : 'KW' '3514';\n"); + grammarBuilder.append("KW3515 : 'KW' '3515';\n"); + grammarBuilder.append("KW3516 : 'KW' '3516';\n"); + grammarBuilder.append("KW3517 : 'KW' '3517';\n"); + grammarBuilder.append("KW3518 : 'KW' '3518';\n"); + grammarBuilder.append("KW3519 : 'KW' '3519';\n"); + grammarBuilder.append("KW3520 : 'KW' '3520';\n"); + grammarBuilder.append("KW3521 : 'KW' '3521';\n"); + grammarBuilder.append("KW3522 : 'KW' '3522';\n"); + grammarBuilder.append("KW3523 : 'KW' '3523';\n"); + grammarBuilder.append("KW3524 : 'KW' '3524';\n"); + grammarBuilder.append("KW3525 : 'KW' '3525';\n"); + grammarBuilder.append("KW3526 : 'KW' '3526';\n"); + grammarBuilder.append("KW3527 : 'KW' '3527';\n"); + grammarBuilder.append("KW3528 : 'KW' '3528';\n"); + grammarBuilder.append("KW3529 : 'KW' '3529';\n"); + grammarBuilder.append("KW3530 : 'KW' '3530';\n"); + grammarBuilder.append("KW3531 : 'KW' '3531';\n"); + grammarBuilder.append("KW3532 : 'KW' '3532';\n"); + grammarBuilder.append("KW3533 : 'KW' '3533';\n"); + grammarBuilder.append("KW3534 : 'KW' '3534';\n"); + grammarBuilder.append("KW3535 : 'KW' '3535';\n"); + grammarBuilder.append("KW3536 : 'KW' '3536';\n"); + grammarBuilder.append("KW3537 : 'KW' '3537';\n"); + grammarBuilder.append("KW3538 : 'KW' '3538';\n"); + grammarBuilder.append("KW3539 : 'KW' '3539';\n"); + grammarBuilder.append("KW3540 : 'KW' '3540';\n"); + grammarBuilder.append("KW3541 : 'KW' '3541';\n"); + grammarBuilder.append("KW3542 : 'KW' '3542';\n"); + grammarBuilder.append("KW3543 : 'KW' '3543';\n"); + grammarBuilder.append("KW3544 : 'KW' '3544';\n"); + grammarBuilder.append("KW3545 : 'KW' '3545';\n"); + grammarBuilder.append("KW3546 : 'KW' '3546';\n"); + grammarBuilder.append("KW3547 : 'KW' '3547';\n"); + grammarBuilder.append("KW3548 : 'KW' '3548';\n"); + grammarBuilder.append("KW3549 : 'KW' '3549';\n"); + grammarBuilder.append("KW3550 : 'KW' '3550';\n"); + grammarBuilder.append("KW3551 : 'KW' '3551';\n"); + grammarBuilder.append("KW3552 : 'KW' '3552';\n"); + grammarBuilder.append("KW3553 : 'KW' '3553';\n"); + grammarBuilder.append("KW3554 : 'KW' '3554';\n"); + grammarBuilder.append("KW3555 : 'KW' '3555';\n"); + grammarBuilder.append("KW3556 : 'KW' '3556';\n"); + grammarBuilder.append("KW3557 : 'KW' '3557';\n"); + grammarBuilder.append("KW3558 : 'KW' '3558';\n"); + grammarBuilder.append("KW3559 : 'KW' '3559';\n"); + grammarBuilder.append("KW3560 : 'KW' '3560';\n"); + grammarBuilder.append("KW3561 : 'KW' '3561';\n"); + grammarBuilder.append("KW3562 : 'KW' '3562';\n"); + grammarBuilder.append("KW3563 : 'KW' '3563';\n"); + grammarBuilder.append("KW3564 : 'KW' '3564';\n"); + grammarBuilder.append("KW3565 : 'KW' '3565';\n"); + grammarBuilder.append("KW3566 : 'KW' '3566';\n"); + grammarBuilder.append("KW3567 : 'KW' '3567';\n"); + grammarBuilder.append("KW3568 : 'KW' '3568';\n"); + grammarBuilder.append("KW3569 : 'KW' '3569';\n"); + grammarBuilder.append("KW3570 : 'KW' '3570';\n"); + grammarBuilder.append("KW3571 : 'KW' '3571';\n"); + grammarBuilder.append("KW3572 : 'KW' '3572';\n"); + grammarBuilder.append("KW3573 : 'KW' '3573';\n"); + grammarBuilder.append("KW3574 : 'KW' '3574';\n"); + grammarBuilder.append("KW3575 : 'KW' '3575';\n"); + grammarBuilder.append("KW3576 : 'KW' '3576';\n"); + grammarBuilder.append("KW3577 : 'KW' '3577';\n"); + grammarBuilder.append("KW3578 : 'KW' '3578';\n"); + grammarBuilder.append("KW3579 : 'KW' '3579';\n"); + grammarBuilder.append("KW3580 : 'KW' '3580';\n"); + grammarBuilder.append("KW3581 : 'KW' '3581';\n"); + grammarBuilder.append("KW3582 : 'KW' '3582';\n"); + grammarBuilder.append("KW3583 : 'KW' '3583';\n"); + grammarBuilder.append("KW3584 : 'KW' '3584';\n"); + grammarBuilder.append("KW3585 : 'KW' '3585';\n"); + grammarBuilder.append("KW3586 : 'KW' '3586';\n"); + grammarBuilder.append("KW3587 : 'KW' '3587';\n"); + grammarBuilder.append("KW3588 : 'KW' '3588';\n"); + grammarBuilder.append("KW3589 : 'KW' '3589';\n"); + grammarBuilder.append("KW3590 : 'KW' '3590';\n"); + grammarBuilder.append("KW3591 : 'KW' '3591';\n"); + grammarBuilder.append("KW3592 : 'KW' '3592';\n"); + grammarBuilder.append("KW3593 : 'KW' '3593';\n"); + grammarBuilder.append("KW3594 : 'KW' '3594';\n"); + grammarBuilder.append("KW3595 : 'KW' '3595';\n"); + grammarBuilder.append("KW3596 : 'KW' '3596';\n"); + grammarBuilder.append("KW3597 : 'KW' '3597';\n"); + grammarBuilder.append("KW3598 : 'KW' '3598';\n"); + grammarBuilder.append("KW3599 : 'KW' '3599';\n"); + grammarBuilder.append("KW3600 : 'KW' '3600';\n"); + grammarBuilder.append("KW3601 : 'KW' '3601';\n"); + grammarBuilder.append("KW3602 : 'KW' '3602';\n"); + grammarBuilder.append("KW3603 : 'KW' '3603';\n"); + grammarBuilder.append("KW3604 : 'KW' '3604';\n"); + grammarBuilder.append("KW3605 : 'KW' '3605';\n"); + grammarBuilder.append("KW3606 : 'KW' '3606';\n"); + grammarBuilder.append("KW3607 : 'KW' '3607';\n"); + grammarBuilder.append("KW3608 : 'KW' '3608';\n"); + grammarBuilder.append("KW3609 : 'KW' '3609';\n"); + grammarBuilder.append("KW3610 : 'KW' '3610';\n"); + grammarBuilder.append("KW3611 : 'KW' '3611';\n"); + grammarBuilder.append("KW3612 : 'KW' '3612';\n"); + grammarBuilder.append("KW3613 : 'KW' '3613';\n"); + grammarBuilder.append("KW3614 : 'KW' '3614';\n"); + grammarBuilder.append("KW3615 : 'KW' '3615';\n"); + grammarBuilder.append("KW3616 : 'KW' '3616';\n"); + grammarBuilder.append("KW3617 : 'KW' '3617';\n"); + grammarBuilder.append("KW3618 : 'KW' '3618';\n"); + grammarBuilder.append("KW3619 : 'KW' '3619';\n"); + grammarBuilder.append("KW3620 : 'KW' '3620';\n"); + grammarBuilder.append("KW3621 : 'KW' '3621';\n"); + grammarBuilder.append("KW3622 : 'KW' '3622';\n"); + grammarBuilder.append("KW3623 : 'KW' '3623';\n"); + grammarBuilder.append("KW3624 : 'KW' '3624';\n"); + grammarBuilder.append("KW3625 : 'KW' '3625';\n"); + grammarBuilder.append("KW3626 : 'KW' '3626';\n"); + grammarBuilder.append("KW3627 : 'KW' '3627';\n"); + grammarBuilder.append("KW3628 : 'KW' '3628';\n"); + grammarBuilder.append("KW3629 : 'KW' '3629';\n"); + grammarBuilder.append("KW3630 : 'KW' '3630';\n"); + grammarBuilder.append("KW3631 : 'KW' '3631';\n"); + grammarBuilder.append("KW3632 : 'KW' '3632';\n"); + grammarBuilder.append("KW3633 : 'KW' '3633';\n"); + grammarBuilder.append("KW3634 : 'KW' '3634';\n"); + grammarBuilder.append("KW3635 : 'KW' '3635';\n"); + grammarBuilder.append("KW3636 : 'KW' '3636';\n"); + grammarBuilder.append("KW3637 : 'KW' '3637';\n"); + grammarBuilder.append("KW3638 : 'KW' '3638';\n"); + grammarBuilder.append("KW3639 : 'KW' '3639';\n"); + grammarBuilder.append("KW3640 : 'KW' '3640';\n"); + grammarBuilder.append("KW3641 : 'KW' '3641';\n"); + grammarBuilder.append("KW3642 : 'KW' '3642';\n"); + grammarBuilder.append("KW3643 : 'KW' '3643';\n"); + grammarBuilder.append("KW3644 : 'KW' '3644';\n"); + grammarBuilder.append("KW3645 : 'KW' '3645';\n"); + grammarBuilder.append("KW3646 : 'KW' '3646';\n"); + grammarBuilder.append("KW3647 : 'KW' '3647';\n"); + grammarBuilder.append("KW3648 : 'KW' '3648';\n"); + grammarBuilder.append("KW3649 : 'KW' '3649';\n"); + grammarBuilder.append("KW3650 : 'KW' '3650';\n"); + grammarBuilder.append("KW3651 : 'KW' '3651';\n"); + grammarBuilder.append("KW3652 : 'KW' '3652';\n"); + grammarBuilder.append("KW3653 : 'KW' '3653';\n"); + grammarBuilder.append("KW3654 : 'KW' '3654';\n"); + grammarBuilder.append("KW3655 : 'KW' '3655';\n"); + grammarBuilder.append("KW3656 : 'KW' '3656';\n"); + grammarBuilder.append("KW3657 : 'KW' '3657';\n"); + grammarBuilder.append("KW3658 : 'KW' '3658';\n"); + grammarBuilder.append("KW3659 : 'KW' '3659';\n"); + grammarBuilder.append("KW3660 : 'KW' '3660';\n"); + grammarBuilder.append("KW3661 : 'KW' '3661';\n"); + grammarBuilder.append("KW3662 : 'KW' '3662';\n"); + grammarBuilder.append("KW3663 : 'KW' '3663';\n"); + grammarBuilder.append("KW3664 : 'KW' '3664';\n"); + grammarBuilder.append("KW3665 : 'KW' '3665';\n"); + grammarBuilder.append("KW3666 : 'KW' '3666';\n"); + grammarBuilder.append("KW3667 : 'KW' '3667';\n"); + grammarBuilder.append("KW3668 : 'KW' '3668';\n"); + grammarBuilder.append("KW3669 : 'KW' '3669';\n"); + grammarBuilder.append("KW3670 : 'KW' '3670';\n"); + grammarBuilder.append("KW3671 : 'KW' '3671';\n"); + grammarBuilder.append("KW3672 : 'KW' '3672';\n"); + grammarBuilder.append("KW3673 : 'KW' '3673';\n"); + grammarBuilder.append("KW3674 : 'KW' '3674';\n"); + grammarBuilder.append("KW3675 : 'KW' '3675';\n"); + grammarBuilder.append("KW3676 : 'KW' '3676';\n"); + grammarBuilder.append("KW3677 : 'KW' '3677';\n"); + grammarBuilder.append("KW3678 : 'KW' '3678';\n"); + grammarBuilder.append("KW3679 : 'KW' '3679';\n"); + grammarBuilder.append("KW3680 : 'KW' '3680';\n"); + grammarBuilder.append("KW3681 : 'KW' '3681';\n"); + grammarBuilder.append("KW3682 : 'KW' '3682';\n"); + grammarBuilder.append("KW3683 : 'KW' '3683';\n"); + grammarBuilder.append("KW3684 : 'KW' '3684';\n"); + grammarBuilder.append("KW3685 : 'KW' '3685';\n"); + grammarBuilder.append("KW3686 : 'KW' '3686';\n"); + grammarBuilder.append("KW3687 : 'KW' '3687';\n"); + grammarBuilder.append("KW3688 : 'KW' '3688';\n"); + grammarBuilder.append("KW3689 : 'KW' '3689';\n"); + grammarBuilder.append("KW3690 : 'KW' '3690';\n"); + grammarBuilder.append("KW3691 : 'KW' '3691';\n"); + grammarBuilder.append("KW3692 : 'KW' '3692';\n"); + grammarBuilder.append("KW3693 : 'KW' '3693';\n"); + grammarBuilder.append("KW3694 : 'KW' '3694';\n"); + grammarBuilder.append("KW3695 : 'KW' '3695';\n"); + grammarBuilder.append("KW3696 : 'KW' '3696';\n"); + grammarBuilder.append("KW3697 : 'KW' '3697';\n"); + grammarBuilder.append("KW3698 : 'KW' '3698';\n"); + grammarBuilder.append("KW3699 : 'KW' '3699';\n"); + grammarBuilder.append("KW3700 : 'KW' '3700';\n"); + grammarBuilder.append("KW3701 : 'KW' '3701';\n"); + grammarBuilder.append("KW3702 : 'KW' '3702';\n"); + grammarBuilder.append("KW3703 : 'KW' '3703';\n"); + grammarBuilder.append("KW3704 : 'KW' '3704';\n"); + grammarBuilder.append("KW3705 : 'KW' '3705';\n"); + grammarBuilder.append("KW3706 : 'KW' '3706';\n"); + grammarBuilder.append("KW3707 : 'KW' '3707';\n"); + grammarBuilder.append("KW3708 : 'KW' '3708';\n"); + grammarBuilder.append("KW3709 : 'KW' '3709';\n"); + grammarBuilder.append("KW3710 : 'KW' '3710';\n"); + grammarBuilder.append("KW3711 : 'KW' '3711';\n"); + grammarBuilder.append("KW3712 : 'KW' '3712';\n"); + grammarBuilder.append("KW3713 : 'KW' '3713';\n"); + grammarBuilder.append("KW3714 : 'KW' '3714';\n"); + grammarBuilder.append("KW3715 : 'KW' '3715';\n"); + grammarBuilder.append("KW3716 : 'KW' '3716';\n"); + grammarBuilder.append("KW3717 : 'KW' '3717';\n"); + grammarBuilder.append("KW3718 : 'KW' '3718';\n"); + grammarBuilder.append("KW3719 : 'KW' '3719';\n"); + grammarBuilder.append("KW3720 : 'KW' '3720';\n"); + grammarBuilder.append("KW3721 : 'KW' '3721';\n"); + grammarBuilder.append("KW3722 : 'KW' '3722';\n"); + grammarBuilder.append("KW3723 : 'KW' '3723';\n"); + grammarBuilder.append("KW3724 : 'KW' '3724';\n"); + grammarBuilder.append("KW3725 : 'KW' '3725';\n"); + grammarBuilder.append("KW3726 : 'KW' '3726';\n"); + grammarBuilder.append("KW3727 : 'KW' '3727';\n"); + grammarBuilder.append("KW3728 : 'KW' '3728';\n"); + grammarBuilder.append("KW3729 : 'KW' '3729';\n"); + grammarBuilder.append("KW3730 : 'KW' '3730';\n"); + grammarBuilder.append("KW3731 : 'KW' '3731';\n"); + grammarBuilder.append("KW3732 : 'KW' '3732';\n"); + grammarBuilder.append("KW3733 : 'KW' '3733';\n"); + grammarBuilder.append("KW3734 : 'KW' '3734';\n"); + grammarBuilder.append("KW3735 : 'KW' '3735';\n"); + grammarBuilder.append("KW3736 : 'KW' '3736';\n"); + grammarBuilder.append("KW3737 : 'KW' '3737';\n"); + grammarBuilder.append("KW3738 : 'KW' '3738';\n"); + grammarBuilder.append("KW3739 : 'KW' '3739';\n"); + grammarBuilder.append("KW3740 : 'KW' '3740';\n"); + grammarBuilder.append("KW3741 : 'KW' '3741';\n"); + grammarBuilder.append("KW3742 : 'KW' '3742';\n"); + grammarBuilder.append("KW3743 : 'KW' '3743';\n"); + grammarBuilder.append("KW3744 : 'KW' '3744';\n"); + grammarBuilder.append("KW3745 : 'KW' '3745';\n"); + grammarBuilder.append("KW3746 : 'KW' '3746';\n"); + grammarBuilder.append("KW3747 : 'KW' '3747';\n"); + grammarBuilder.append("KW3748 : 'KW' '3748';\n"); + grammarBuilder.append("KW3749 : 'KW' '3749';\n"); + grammarBuilder.append("KW3750 : 'KW' '3750';\n"); + grammarBuilder.append("KW3751 : 'KW' '3751';\n"); + grammarBuilder.append("KW3752 : 'KW' '3752';\n"); + grammarBuilder.append("KW3753 : 'KW' '3753';\n"); + grammarBuilder.append("KW3754 : 'KW' '3754';\n"); + grammarBuilder.append("KW3755 : 'KW' '3755';\n"); + grammarBuilder.append("KW3756 : 'KW' '3756';\n"); + grammarBuilder.append("KW3757 : 'KW' '3757';\n"); + grammarBuilder.append("KW3758 : 'KW' '3758';\n"); + grammarBuilder.append("KW3759 : 'KW' '3759';\n"); + grammarBuilder.append("KW3760 : 'KW' '3760';\n"); + grammarBuilder.append("KW3761 : 'KW' '3761';\n"); + grammarBuilder.append("KW3762 : 'KW' '3762';\n"); + grammarBuilder.append("KW3763 : 'KW' '3763';\n"); + grammarBuilder.append("KW3764 : 'KW' '3764';\n"); + grammarBuilder.append("KW3765 : 'KW' '3765';\n"); + grammarBuilder.append("KW3766 : 'KW' '3766';\n"); + grammarBuilder.append("KW3767 : 'KW' '3767';\n"); + grammarBuilder.append("KW3768 : 'KW' '3768';\n"); + grammarBuilder.append("KW3769 : 'KW' '3769';\n"); + grammarBuilder.append("KW3770 : 'KW' '3770';\n"); + grammarBuilder.append("KW3771 : 'KW' '3771';\n"); + grammarBuilder.append("KW3772 : 'KW' '3772';\n"); + grammarBuilder.append("KW3773 : 'KW' '3773';\n"); + grammarBuilder.append("KW3774 : 'KW' '3774';\n"); + grammarBuilder.append("KW3775 : 'KW' '3775';\n"); + grammarBuilder.append("KW3776 : 'KW' '3776';\n"); + grammarBuilder.append("KW3777 : 'KW' '3777';\n"); + grammarBuilder.append("KW3778 : 'KW' '3778';\n"); + grammarBuilder.append("KW3779 : 'KW' '3779';\n"); + grammarBuilder.append("KW3780 : 'KW' '3780';\n"); + grammarBuilder.append("KW3781 : 'KW' '3781';\n"); + grammarBuilder.append("KW3782 : 'KW' '3782';\n"); + grammarBuilder.append("KW3783 : 'KW' '3783';\n"); + grammarBuilder.append("KW3784 : 'KW' '3784';\n"); + grammarBuilder.append("KW3785 : 'KW' '3785';\n"); + grammarBuilder.append("KW3786 : 'KW' '3786';\n"); + grammarBuilder.append("KW3787 : 'KW' '3787';\n"); + grammarBuilder.append("KW3788 : 'KW' '3788';\n"); + grammarBuilder.append("KW3789 : 'KW' '3789';\n"); + grammarBuilder.append("KW3790 : 'KW' '3790';\n"); + grammarBuilder.append("KW3791 : 'KW' '3791';\n"); + grammarBuilder.append("KW3792 : 'KW' '3792';\n"); + grammarBuilder.append("KW3793 : 'KW' '3793';\n"); + grammarBuilder.append("KW3794 : 'KW' '3794';\n"); + grammarBuilder.append("KW3795 : 'KW' '3795';\n"); + grammarBuilder.append("KW3796 : 'KW' '3796';\n"); + grammarBuilder.append("KW3797 : 'KW' '3797';\n"); + grammarBuilder.append("KW3798 : 'KW' '3798';\n"); + grammarBuilder.append("KW3799 : 'KW' '3799';\n"); + grammarBuilder.append("KW3800 : 'KW' '3800';\n"); + grammarBuilder.append("KW3801 : 'KW' '3801';\n"); + grammarBuilder.append("KW3802 : 'KW' '3802';\n"); + grammarBuilder.append("KW3803 : 'KW' '3803';\n"); + grammarBuilder.append("KW3804 : 'KW' '3804';\n"); + grammarBuilder.append("KW3805 : 'KW' '3805';\n"); + grammarBuilder.append("KW3806 : 'KW' '3806';\n"); + grammarBuilder.append("KW3807 : 'KW' '3807';\n"); + grammarBuilder.append("KW3808 : 'KW' '3808';\n"); + grammarBuilder.append("KW3809 : 'KW' '3809';\n"); + grammarBuilder.append("KW3810 : 'KW' '3810';\n"); + grammarBuilder.append("KW3811 : 'KW' '3811';\n"); + grammarBuilder.append("KW3812 : 'KW' '3812';\n"); + grammarBuilder.append("KW3813 : 'KW' '3813';\n"); + grammarBuilder.append("KW3814 : 'KW' '3814';\n"); + grammarBuilder.append("KW3815 : 'KW' '3815';\n"); + grammarBuilder.append("KW3816 : 'KW' '3816';\n"); + grammarBuilder.append("KW3817 : 'KW' '3817';\n"); + grammarBuilder.append("KW3818 : 'KW' '3818';\n"); + grammarBuilder.append("KW3819 : 'KW' '3819';\n"); + grammarBuilder.append("KW3820 : 'KW' '3820';\n"); + grammarBuilder.append("KW3821 : 'KW' '3821';\n"); + grammarBuilder.append("KW3822 : 'KW' '3822';\n"); + grammarBuilder.append("KW3823 : 'KW' '3823';\n"); + grammarBuilder.append("KW3824 : 'KW' '3824';\n"); + grammarBuilder.append("KW3825 : 'KW' '3825';\n"); + grammarBuilder.append("KW3826 : 'KW' '3826';\n"); + grammarBuilder.append("KW3827 : 'KW' '3827';\n"); + grammarBuilder.append("KW3828 : 'KW' '3828';\n"); + grammarBuilder.append("KW3829 : 'KW' '3829';\n"); + grammarBuilder.append("KW3830 : 'KW' '3830';\n"); + grammarBuilder.append("KW3831 : 'KW' '3831';\n"); + grammarBuilder.append("KW3832 : 'KW' '3832';\n"); + grammarBuilder.append("KW3833 : 'KW' '3833';\n"); + grammarBuilder.append("KW3834 : 'KW' '3834';\n"); + grammarBuilder.append("KW3835 : 'KW' '3835';\n"); + grammarBuilder.append("KW3836 : 'KW' '3836';\n"); + grammarBuilder.append("KW3837 : 'KW' '3837';\n"); + grammarBuilder.append("KW3838 : 'KW' '3838';\n"); + grammarBuilder.append("KW3839 : 'KW' '3839';\n"); + grammarBuilder.append("KW3840 : 'KW' '3840';\n"); + grammarBuilder.append("KW3841 : 'KW' '3841';\n"); + grammarBuilder.append("KW3842 : 'KW' '3842';\n"); + grammarBuilder.append("KW3843 : 'KW' '3843';\n"); + grammarBuilder.append("KW3844 : 'KW' '3844';\n"); + grammarBuilder.append("KW3845 : 'KW' '3845';\n"); + grammarBuilder.append("KW3846 : 'KW' '3846';\n"); + grammarBuilder.append("KW3847 : 'KW' '3847';\n"); + grammarBuilder.append("KW3848 : 'KW' '3848';\n"); + grammarBuilder.append("KW3849 : 'KW' '3849';\n"); + grammarBuilder.append("KW3850 : 'KW' '3850';\n"); + grammarBuilder.append("KW3851 : 'KW' '3851';\n"); + grammarBuilder.append("KW3852 : 'KW' '3852';\n"); + grammarBuilder.append("KW3853 : 'KW' '3853';\n"); + grammarBuilder.append("KW3854 : 'KW' '3854';\n"); + grammarBuilder.append("KW3855 : 'KW' '3855';\n"); + grammarBuilder.append("KW3856 : 'KW' '3856';\n"); + grammarBuilder.append("KW3857 : 'KW' '3857';\n"); + grammarBuilder.append("KW3858 : 'KW' '3858';\n"); + grammarBuilder.append("KW3859 : 'KW' '3859';\n"); + grammarBuilder.append("KW3860 : 'KW' '3860';\n"); + grammarBuilder.append("KW3861 : 'KW' '3861';\n"); + grammarBuilder.append("KW3862 : 'KW' '3862';\n"); + grammarBuilder.append("KW3863 : 'KW' '3863';\n"); + grammarBuilder.append("KW3864 : 'KW' '3864';\n"); + grammarBuilder.append("KW3865 : 'KW' '3865';\n"); + grammarBuilder.append("KW3866 : 'KW' '3866';\n"); + grammarBuilder.append("KW3867 : 'KW' '3867';\n"); + grammarBuilder.append("KW3868 : 'KW' '3868';\n"); + grammarBuilder.append("KW3869 : 'KW' '3869';\n"); + grammarBuilder.append("KW3870 : 'KW' '3870';\n"); + grammarBuilder.append("KW3871 : 'KW' '3871';\n"); + grammarBuilder.append("KW3872 : 'KW' '3872';\n"); + grammarBuilder.append("KW3873 : 'KW' '3873';\n"); + grammarBuilder.append("KW3874 : 'KW' '3874';\n"); + grammarBuilder.append("KW3875 : 'KW' '3875';\n"); + grammarBuilder.append("KW3876 : 'KW' '3876';\n"); + grammarBuilder.append("KW3877 : 'KW' '3877';\n"); + grammarBuilder.append("KW3878 : 'KW' '3878';\n"); + grammarBuilder.append("KW3879 : 'KW' '3879';\n"); + grammarBuilder.append("KW3880 : 'KW' '3880';\n"); + grammarBuilder.append("KW3881 : 'KW' '3881';\n"); + grammarBuilder.append("KW3882 : 'KW' '3882';\n"); + grammarBuilder.append("KW3883 : 'KW' '3883';\n"); + grammarBuilder.append("KW3884 : 'KW' '3884';\n"); + grammarBuilder.append("KW3885 : 'KW' '3885';\n"); + grammarBuilder.append("KW3886 : 'KW' '3886';\n"); + grammarBuilder.append("KW3887 : 'KW' '3887';\n"); + grammarBuilder.append("KW3888 : 'KW' '3888';\n"); + grammarBuilder.append("KW3889 : 'KW' '3889';\n"); + grammarBuilder.append("KW3890 : 'KW' '3890';\n"); + grammarBuilder.append("KW3891 : 'KW' '3891';\n"); + grammarBuilder.append("KW3892 : 'KW' '3892';\n"); + grammarBuilder.append("KW3893 : 'KW' '3893';\n"); + grammarBuilder.append("KW3894 : 'KW' '3894';\n"); + grammarBuilder.append("KW3895 : 'KW' '3895';\n"); + grammarBuilder.append("KW3896 : 'KW' '3896';\n"); + grammarBuilder.append("KW3897 : 'KW' '3897';\n"); + grammarBuilder.append("KW3898 : 'KW' '3898';\n"); + grammarBuilder.append("KW3899 : 'KW' '3899';\n"); + grammarBuilder.append("KW3900 : 'KW' '3900';\n"); + grammarBuilder.append("KW3901 : 'KW' '3901';\n"); + grammarBuilder.append("KW3902 : 'KW' '3902';\n"); + grammarBuilder.append("KW3903 : 'KW' '3903';\n"); + grammarBuilder.append("KW3904 : 'KW' '3904';\n"); + grammarBuilder.append("KW3905 : 'KW' '3905';\n"); + grammarBuilder.append("KW3906 : 'KW' '3906';\n"); + grammarBuilder.append("KW3907 : 'KW' '3907';\n"); + grammarBuilder.append("KW3908 : 'KW' '3908';\n"); + grammarBuilder.append("KW3909 : 'KW' '3909';\n"); + grammarBuilder.append("KW3910 : 'KW' '3910';\n"); + grammarBuilder.append("KW3911 : 'KW' '3911';\n"); + grammarBuilder.append("KW3912 : 'KW' '3912';\n"); + grammarBuilder.append("KW3913 : 'KW' '3913';\n"); + grammarBuilder.append("KW3914 : 'KW' '3914';\n"); + grammarBuilder.append("KW3915 : 'KW' '3915';\n"); + grammarBuilder.append("KW3916 : 'KW' '3916';\n"); + grammarBuilder.append("KW3917 : 'KW' '3917';\n"); + grammarBuilder.append("KW3918 : 'KW' '3918';\n"); + grammarBuilder.append("KW3919 : 'KW' '3919';\n"); + grammarBuilder.append("KW3920 : 'KW' '3920';\n"); + grammarBuilder.append("KW3921 : 'KW' '3921';\n"); + grammarBuilder.append("KW3922 : 'KW' '3922';\n"); + grammarBuilder.append("KW3923 : 'KW' '3923';\n"); + grammarBuilder.append("KW3924 : 'KW' '3924';\n"); + grammarBuilder.append("KW3925 : 'KW' '3925';\n"); + grammarBuilder.append("KW3926 : 'KW' '3926';\n"); + grammarBuilder.append("KW3927 : 'KW' '3927';\n"); + grammarBuilder.append("KW3928 : 'KW' '3928';\n"); + grammarBuilder.append("KW3929 : 'KW' '3929';\n"); + grammarBuilder.append("KW3930 : 'KW' '3930';\n"); + grammarBuilder.append("KW3931 : 'KW' '3931';\n"); + grammarBuilder.append("KW3932 : 'KW' '3932';\n"); + grammarBuilder.append("KW3933 : 'KW' '3933';\n"); + grammarBuilder.append("KW3934 : 'KW' '3934';\n"); + grammarBuilder.append("KW3935 : 'KW' '3935';\n"); + grammarBuilder.append("KW3936 : 'KW' '3936';\n"); + grammarBuilder.append("KW3937 : 'KW' '3937';\n"); + grammarBuilder.append("KW3938 : 'KW' '3938';\n"); + grammarBuilder.append("KW3939 : 'KW' '3939';\n"); + grammarBuilder.append("KW3940 : 'KW' '3940';\n"); + grammarBuilder.append("KW3941 : 'KW' '3941';\n"); + grammarBuilder.append("KW3942 : 'KW' '3942';\n"); + grammarBuilder.append("KW3943 : 'KW' '3943';\n"); + grammarBuilder.append("KW3944 : 'KW' '3944';\n"); + grammarBuilder.append("KW3945 : 'KW' '3945';\n"); + grammarBuilder.append("KW3946 : 'KW' '3946';\n"); + grammarBuilder.append("KW3947 : 'KW' '3947';\n"); + grammarBuilder.append("KW3948 : 'KW' '3948';\n"); + grammarBuilder.append("KW3949 : 'KW' '3949';\n"); + grammarBuilder.append("KW3950 : 'KW' '3950';\n"); + grammarBuilder.append("KW3951 : 'KW' '3951';\n"); + grammarBuilder.append("KW3952 : 'KW' '3952';\n"); + grammarBuilder.append("KW3953 : 'KW' '3953';\n"); + grammarBuilder.append("KW3954 : 'KW' '3954';\n"); + grammarBuilder.append("KW3955 : 'KW' '3955';\n"); + grammarBuilder.append("KW3956 : 'KW' '3956';\n"); + grammarBuilder.append("KW3957 : 'KW' '3957';\n"); + grammarBuilder.append("KW3958 : 'KW' '3958';\n"); + grammarBuilder.append("KW3959 : 'KW' '3959';\n"); + grammarBuilder.append("KW3960 : 'KW' '3960';\n"); + grammarBuilder.append("KW3961 : 'KW' '3961';\n"); + grammarBuilder.append("KW3962 : 'KW' '3962';\n"); + grammarBuilder.append("KW3963 : 'KW' '3963';\n"); + grammarBuilder.append("KW3964 : 'KW' '3964';\n"); + grammarBuilder.append("KW3965 : 'KW' '3965';\n"); + grammarBuilder.append("KW3966 : 'KW' '3966';\n"); + grammarBuilder.append("KW3967 : 'KW' '3967';\n"); + grammarBuilder.append("KW3968 : 'KW' '3968';\n"); + grammarBuilder.append("KW3969 : 'KW' '3969';\n"); + grammarBuilder.append("KW3970 : 'KW' '3970';\n"); + grammarBuilder.append("KW3971 : 'KW' '3971';\n"); + grammarBuilder.append("KW3972 : 'KW' '3972';\n"); + grammarBuilder.append("KW3973 : 'KW' '3973';\n"); + grammarBuilder.append("KW3974 : 'KW' '3974';\n"); + grammarBuilder.append("KW3975 : 'KW' '3975';\n"); + grammarBuilder.append("KW3976 : 'KW' '3976';\n"); + grammarBuilder.append("KW3977 : 'KW' '3977';\n"); + grammarBuilder.append("KW3978 : 'KW' '3978';\n"); + grammarBuilder.append("KW3979 : 'KW' '3979';\n"); + grammarBuilder.append("KW3980 : 'KW' '3980';\n"); + grammarBuilder.append("KW3981 : 'KW' '3981';\n"); + grammarBuilder.append("KW3982 : 'KW' '3982';\n"); + grammarBuilder.append("KW3983 : 'KW' '3983';\n"); + grammarBuilder.append("KW3984 : 'KW' '3984';\n"); + grammarBuilder.append("KW3985 : 'KW' '3985';\n"); + grammarBuilder.append("KW3986 : 'KW' '3986';\n"); + grammarBuilder.append("KW3987 : 'KW' '3987';\n"); + grammarBuilder.append("KW3988 : 'KW' '3988';\n"); + grammarBuilder.append("KW3989 : 'KW' '3989';\n"); + grammarBuilder.append("KW3990 : 'KW' '3990';\n"); + grammarBuilder.append("KW3991 : 'KW' '3991';\n"); + grammarBuilder.append("KW3992 : 'KW' '3992';\n"); + grammarBuilder.append("KW3993 : 'KW' '3993';\n"); + grammarBuilder.append("KW3994 : 'KW' '3994';\n"); + grammarBuilder.append("KW3995 : 'KW' '3995';\n"); + grammarBuilder.append("KW3996 : 'KW' '3996';\n"); + grammarBuilder.append("KW3997 : 'KW' '3997';\n"); + grammarBuilder.append("KW3998 : 'KW' '3998';\n"); + grammarBuilder.append("KW3999 : 'KW' '3999';"); + String grammar = grammarBuilder.toString(); + + String input ="KW400"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='KW400',<402>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(110); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : .*? ('a' | 'ab') {print(self.text)} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : . {print(self.text)};"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "a\n" + + "b\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:1='b',<3>,1:1]\n" + + "[@2,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"hi\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:3='\"hi\"',<1>,1:0]\n" + + "[@1,4:8='\"mom\"',<1>,1:4]\n" + + "[@2,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParentheses() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("START_BLOCK: '-.-.-';\n"); + grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); + grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); + grammarBuilder.append("fragment L_A: '.-';\n"); + grammarBuilder.append("fragment L_K: '-.-';\n"); + grammarBuilder.append("SEPARATOR: '!';"); + String grammar = grammarBuilder.toString(); + + String input ="-.-.-!"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='-.-.-',<1>,1:0]\n" + + "[@1,5:5='!',<3>,1:5]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPositionAdjustingLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(1839); + grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("def resetAcceptPosition(self, index, line, column):\n"); + grammarBuilder.append(" self._input.seek(index)\n"); + grammarBuilder.append(" self.line = line\n"); + grammarBuilder.append(" self.column = column\n"); + grammarBuilder.append(" self._interp.consume(self._input)\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def nextToken(self):\n"); + grammarBuilder.append(" if self._interp.__dict__.get(\"resetAcceptPosition\", None) is None:\n"); + grammarBuilder.append(" self._interp.__dict__[\"resetAcceptPosition\"] = self.resetAcceptPosition\n"); + grammarBuilder.append(" return super(type(self),self).nextToken()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def emit(self):\n"); + grammarBuilder.append(" if self._type==PositionAdjustingLexer.TOKENS:\n"); + grammarBuilder.append(" self.handleAcceptPositionForKeyword(\"tokens\")\n"); + grammarBuilder.append(" elif self._type==PositionAdjustingLexer.LABEL:\n"); + grammarBuilder.append(" self.handleAcceptPositionForIdentifier()\n"); + grammarBuilder.append(" return super(type(self),self).emit()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def handleAcceptPositionForIdentifier(self):\n"); + grammarBuilder.append(" tokenText = self.text\n"); + grammarBuilder.append(" identifierLength = 0\n"); + grammarBuilder.append(" while identifierLength < len(tokenText) and self.isIdentifierChar(tokenText[identifierLength]):\n"); + grammarBuilder.append(" identifierLength += 1\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + identifierLength:\n"); + grammarBuilder.append(" offset = identifierLength - 1\n"); + grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); + grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); + grammarBuilder.append(" return True\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" return False\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def handleAcceptPositionForKeyword(self, keyword):\n"); + grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + len(keyword):\n"); + grammarBuilder.append(" offset = len(keyword) - 1\n"); + grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); + grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); + grammarBuilder.append(" return True\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" return False\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@staticmethod\n"); + grammarBuilder.append("def isIdentifierChar(c):\n"); + grammarBuilder.append(" return c.isalnum() or c == '_'\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ASSIGN : '=' ;\n"); + grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); + grammarBuilder.append("LCURLY: '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// 'tokens' followed by '{'\n"); + grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); + grammarBuilder.append("LABEL\n"); + grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("IDENTIFIER\n"); + grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("IGNORED\n"); + grammarBuilder.append(" : [ \\t\\r\\n]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("NEWLINE\n"); + grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS\n"); + grammarBuilder.append(" : [ \\t]+ -> skip\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + String input = + "tokens\n" + + "tokens {\n" + + "notLabel\n" + + "label1 =\n" + + "label2 +=\n" + + "notLabel\n"; + String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); + assertEquals( + "[@0,0:5='tokens',<6>,1:0]\n" + + "[@1,7:12='tokens',<4>,2:0]\n" + + "[@2,14:14='{',<3>,2:7]\n" + + "[@3,16:23='notLabel',<6>,3:0]\n" + + "[@4,25:30='label1',<5>,4:0]\n" + + "[@5,32:32='=',<1>,4:7]\n" + + "[@6,34:39='label2',<5>,5:0]\n" + + "[@7,41:42='+=',<2>,5:7]\n" + + "[@8,44:51='notLabel',<6>,6:0]\n" + + "[@9,53:52='',<-1>,7:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testQuoteTranslation() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); + String grammar = grammarBuilder.toString(); + + String input ="\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\"',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : '-' I ;\n"); + grammarBuilder.append("I : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 -21 3"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='34',<2>,1:0]\n" + + "[@1,3:5='-21',<1>,1:3]\n" + + "[@2,7:7='3',<2>,1:7]\n" + + "[@3,8:7='',<-1>,1:8]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSlashes() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("Backslash : '\\\\';\n"); + grammarBuilder.append("Slash : '/';\n"); + grammarBuilder.append("Vee : '\\\\/';\n"); + grammarBuilder.append("Wedge : '/\\\\';\n"); + grammarBuilder.append("WS : [ \\t] -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="\\ / \\/ /\\"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\\',<1>,1:0]\n" + + "[@1,2:2='/',<2>,1:2]\n" + + "[@2,4:5='\\/',<3>,1:4]\n" + + "[@3,7:8='/\\',<4>,1:7]\n" + + "[@4,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testZeroLengthToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("BeginString\n"); + grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("mode StringMode;\n"); + grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); + grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); + grammarBuilder.append("mode EndStringMode; \n"); + grammarBuilder.append(" EndString : '\\'' -> popMode;"); + String grammar = grammarBuilder.toString(); + + String input ="'xxx'"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4=''xxx'',<1>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestListeners.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestListeners.java new file mode 100644 index 000000000..7b51eb48d --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestListeners.java @@ -0,0 +1,378 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestListeners extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(490); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("class LeafListener(TListener):\n"); + grammarBuilder.append(" def visitTerminal(self, node):\n"); + grammarBuilder.append(" print(node.symbol.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1\n" + + "2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLR() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(651); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("class LeafListener(TListener):\n"); + grammarBuilder.append(" def exitE(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==3:\n"); + grammarBuilder.append(" print(ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text)\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e op='*' e\n"); + grammarBuilder.append(" | e op='+' e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) + (e (e 2) * (e 3)))\n" + + "1\n" + + "2\n" + + "3\n" + + "2 3 2\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLRWithLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(631); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("class LeafListener(TListener):\n"); + grammarBuilder.append(" def exitCall(self, ctx):\n"); + grammarBuilder.append(" print(ctx.e().start.text + ' ' + str(ctx.eList()))\n"); + grammarBuilder.append(" def exitInt(self, ctx):\n"); + grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e '(' eList ')' # Call\n"); + grammarBuilder.append(" | INT # Int\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("eList : e (',' e)* ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1(2,3)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + + "1\n" + + "2\n" + + "3\n" + + "1 [13 6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(676); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("class LeafListener(TListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b 1) (b 2))\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(676); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("class LeafListener(TListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b abc))\n" + + "abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(639); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("class LeafListener(TListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1 2 [1, 2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(639); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("class LeafListener(TListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a abc)\n" + + "[@0,0:2='abc',<4>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParseTrees.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParseTrees.java new file mode 100644 index 000000000..3abfd34d7 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParseTrees.java @@ -0,0 +1,310 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParseTrees extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2AltLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(136); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyyxyxz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y y x y x z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2Alts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(129); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAltNum() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(562); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class MyRuleNode(ParserRuleContext):\n"); + grammarBuilder.append(" def __init__(self, parent = None, invokingStateNumber = None ):\n"); + grammarBuilder.append(" super(TParser.MyRuleNode, self).__init__(parent, invokingStateNumber)\n"); + grammarBuilder.append(" self.altNum = 0;\n"); + grammarBuilder.append(" def getAltNumber(self):\n"); + grammarBuilder.append(" return self.altNum\n"); + grammarBuilder.append(" def setAltNumber(self, altNum):\n"); + grammarBuilder.append(" self.altNum = altNum\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("a : 'f'\n"); + grammarBuilder.append(" | 'g'\n"); + grammarBuilder.append(" | 'x' b 'z'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'e' {} | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a:3 x (b:2 y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExtraToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="xzy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(144); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a z)\n", found); + + assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleRef() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(138); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b 'x'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'y' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="yx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a (b y) x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSync() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(145); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'* '!'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xzyy!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y y !)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToken2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenAndRuleContextString() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(173); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' { \n"); + grammarBuilder.append("print(str_list(self.getRuleInvocationStack()))\n"); + grammarBuilder.append("} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "[a, s]\n" + + "(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserErrors.java new file mode 100644 index 000000000..1ac5e5075 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserErrors.java @@ -0,0 +1,751 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserErrors extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x='b' {print(\"conjured=\" + str($x))} 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpTokenFromSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(67); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x=('b'|'c') {print(\"conjured=\" + str($x))} 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testContextListGetters() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(160); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members{\n"); + grammarBuilder.append("def foo():\n"); + grammarBuilder.append(" s = SContext()\n"); + grammarBuilder.append(" a = s.a()\n"); + grammarBuilder.append(" b = s.b()\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : (a | b)+;\n"); + grammarBuilder.append("a : 'a' {print(\"a\",end='')};\n"); + grammarBuilder.append("b : 'b' {print(\"b\",end='')};"); + String grammar = grammarBuilder.toString(); + + + String input ="abab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("abab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidATNStateRemoval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(102); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {pass} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input ="x:x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidEmptyInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID+;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + + assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1ErrorInfo() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(314); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); + grammarBuilder.append("animal : (DOG | CAT );\n"); + grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); + grammarBuilder.append("AND : 'and';\n"); + grammarBuilder.append("DOG : 'dog';\n"); + grammarBuilder.append("CAT : 'cat';\n"); + grammarBuilder.append("HARDWARE: 'hardware';\n"); + grammarBuilder.append("SOFTWARE: 'software';\n"); + grammarBuilder.append("WS : ' ' -> skip ;\n"); + grammarBuilder.append("acClass\n"); + grammarBuilder.append("@init\n"); + grammarBuilder.append("{print(self.getExpectedTokens().toString(self.literalNames, self.symbolicNames))}\n"); + grammarBuilder.append(" : ;"); + String grammar = grammarBuilder.toString(); + + + String input ="dog and software"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("{'hardware', 'software'}\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'\n"); + grammarBuilder.append(" | 'a' 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(55); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c'\n"); + grammarBuilder.append(" | 'a' 'b' 'd'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abe"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLLStar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aaae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(40); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(41); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAltAvoidance() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e '!' ;\n"); + grammarBuilder.append("e : 'a' 'b'\n"); + grammarBuilder.append(" | 'a'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a."; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(34); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@0,0:0='a',<3>,1:0]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('b' | 'c')\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'a'\n"); + grammarBuilder.append(";"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(25); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})*;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforePredict() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="caaab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="aabd"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@2,2:2='b',<1>,1:2]\n", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(41); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionExpectingSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); + grammarBuilder.append("expr: ID '=' STR ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="( ~FORCE_ERROR~ "; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserExec.java new file mode 100644 index 000000000..8e7c1f1eb --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestParserExec.java @@ -0,0 +1,823 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserExec extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID+ {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)+ {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorB() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(122); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID {\n"); + grammarBuilder.append("print(\"alt 1\")\n"); + grammarBuilder.append("} | INT {\n"); + grammarBuilder.append("print(\"alt 2\")\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(105); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})+ {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(105); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(105); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID INT {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFInClosure() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : stat EOF;\n"); + grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(186); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(186); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(187); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(186); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(103); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(103); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : a* EOF;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : label=subrule {print($label.text)} #One\n"); + grammarBuilder.append(" | label='y' {print($label.text)} #Two\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("subrule : 'x';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "x\n" + + "y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); + grammarBuilder.append("b : id_=ID val+=INT*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelForClosureContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(456); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("ifStatement\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("assert isinstance(v, (list, tuple))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : 'if' expression\n"); + grammarBuilder.append(" ( ( 'then'\n"); + grammarBuilder.append(" executableStatement*\n"); + grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); + grammarBuilder.append(" elseStatement?\n"); + grammarBuilder.append(" 'end' 'if'\n"); + grammarBuilder.append(" ) | executableStatement )\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("elseIfStatement\n"); + grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expression : 'a' ;\n"); + grammarBuilder.append("executableStatement : 'a' ;\n"); + grammarBuilder.append("elseStatement : 'a' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelsOnSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b b* ';' ;\n"); + grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleEOFHandling() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(42); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserProperty() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(153); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("def Property(self):\n"); + grammarBuilder.append(" return True\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("a : {$parser.Property()}? ID {print(\"valid\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("valid\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedIfIfElse() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(175); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : stmt EOF ;\n"); + grammarBuilder.append("stmt : ifStmt | ID;\n"); + grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { self._input.LA(1)!=TParser.ELSE }?);\n"); + grammarBuilder.append("ELSE : 'else';\n"); + grammarBuilder.append("ID : [a-zA-Z]+;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x if x a else b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredictionIssue334() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(244); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_ @init{\n"); + grammarBuilder.append("self._errHandler = BailErrorStrategy()\n"); + grammarBuilder.append("} \n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); + grammarBuilder.append("item : A B?;\n"); + grammarBuilder.append("SEMICOLON: ';';\n"); + grammarBuilder.append("A : 'a'|'A';\n"); + grammarBuilder.append("B : 'b'|'B';\n"); + grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); + + assertEquals("(file_ (item a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestPerformance.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestPerformance.java new file mode 100644 index 000000000..6c5f71ace --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestPerformance.java @@ -0,0 +1,220 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestPerformance extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalLexer.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalLexer.java new file mode 100644 index 000000000..c8b71837b --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalLexer.java @@ -0,0 +1,218 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalLexer extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisableRule() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("E1 : 'enum' { False }? ;\n"); + grammarBuilder.append("E2 : 'enum' { True }? ; // winner not E1 or ID\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<3>,1:5]\n" + + "[@2,8:7='',<-1>,1:8]\n" + + "s0-' '->:s5=>4\n" + + "s0-'a'->:s6=>3\n" + + "s0-'e'->:s1=>3\n" + + ":s1=>3-'n'->:s2=>3\n" + + ":s2=>3-'u'->:s3=>3\n" + + ":s6=>3-'b'->:s6=>3\n" + + ":s6=>3-'c'->:s6=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnumNotID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(96); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<1>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s3=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDnotEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { False }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s2=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDvsEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : 'enum' { False }? ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s5=>3\n" + + "s0-'a'->:s4=>2\n" + + "s0-'e'->:s1=>2\n" + + ":s1=>2-'n'->:s2=>2\n" + + ":s2=>2-'u'->:s3=>2\n" + + ":s4=>2-'b'->:s4=>2\n" + + ":s4=>2-'c'->:s4=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndent() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("INDENT : [ \\t]+ { self._tokenStartColumn==0 }?\n"); + grammarBuilder.append(" { print(\"INDENT\") } ;\n"); + grammarBuilder.append("NL : '\\n';\n"); + grammarBuilder.append("WS : [ \\t]+ ;"); + String grammar = grammarBuilder.toString(); + + String input = + "abc\n" + + " def \n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "INDENT\n" + + "[@0,0:2='abc',<1>,1:0]\n" + + "[@1,3:3='\\n',<3>,1:3]\n" + + "[@2,4:5=' ',<2>,2:0]\n" + + "[@3,6:8='def',<1>,2:2]\n" + + "[@4,9:10=' ',<4>,2:5]\n" + + "[@5,11:11='\\n',<3>,2:7]\n" + + "[@6,12:11='',<-1>,3:0]\n" + + "s0-'\n" + + "'->:s2=>3\n" + + "s0-'a'->:s1=>1\n" + + "s0-'d'->:s1=>1\n" + + ":s1=>1-'b'->:s1=>1\n" + + ":s1=>1-'c'->:s1=>1\n" + + ":s1=>1-'e'->:s1=>1\n" + + ":s1=>1-'f'->:s1=>1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerInputPositionSensitivePredicates() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(206); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WORD1 : ID1+ { print(self.text) } ;\n"); + grammarBuilder.append("WORD2 : ID2+ { print(self.text) } ;\n"); + grammarBuilder.append("fragment ID1 : { self.column < 2 }? [a-zA-Z];\n"); + grammarBuilder.append("fragment ID2 : { self.column >= 2 }? [a-zA-Z];\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input = + "a cde\n" + + "abcde\n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "a\n" + + "cde\n" + + "ab\n" + + "cde\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:4='cde',<2>,1:2]\n" + + "[@2,6:7='ab',<1>,2:0]\n" + + "[@3,8:10='cde',<2>,2:2]\n" + + "[@4,12:11='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedKeywords() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? { print(\"enum!\") } ;\n"); + grammarBuilder.append("ID : [a-z]+ { print(\"ID \" + self.text) } ;\n"); + grammarBuilder.append("WS : [ \\n] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="enum enu a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "enum!\n" + + "ID enu\n" + + "ID a\n" + + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='enu',<2>,1:5]\n" + + "[@2,9:9='a',<2>,1:9]\n" + + "[@3,10:9='',<-1>,1:10]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalParser.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalParser.java new file mode 100644 index 000000000..530580e20 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSemPredEvalParser.java @@ -0,0 +1,789 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalParser extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAlts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(276); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a; // do 2x: once in ATN, next in DFA\n"); + grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" | {False}? ID {print(\"alt 3\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + + assertEquals( + "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + + "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(321); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a ';' a;\n"); + grammarBuilder.append("a : INT {print(\"alt 1\")}\n"); + grammarBuilder.append(" | ID {print(\"alt 2\")} // must pick this one for ID since pred is false\n"); + grammarBuilder.append(" | ID {print(\"alt 3\")}\n"); + grammarBuilder.append(" | {False}? ID {print(\"alt 4\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34; x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 2\n" + + "alt 2\n", found); + + assertEquals( + "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + + "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionHidesPreds() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(212); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : a+ ;\n"); + grammarBuilder.append("a : {self.i = 1} ID {self.i == 1}? {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {self.i = 2} ID {self.i == 2}? {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionsHidePredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(277); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("def pred(self, v):\n"); + grammarBuilder.append(" print('eval=' + str(v).lower())\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {} {self.pred(True)}? {print(\"parse\")} '!' ;\n"); + grammarBuilder.append("t : e {} {self.pred(False)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAtomWithClosureInTranslatedLRRule() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : e[0] EOF;\n"); + grammarBuilder.append("e[int _p]\n"); + grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); + grammarBuilder.append(" ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b+a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDepedentPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("def pred(self, v):\n"); + grammarBuilder.append(" print('eval=' + str(v).lower())\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : a[99] ;\n"); + grammarBuilder.append("a[int i] : e {self.pred($i==99)}? {print(\"parse\")} '!' ;\n"); + grammarBuilder.append("b[int i] : e {self.pred($i==99)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(256); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); + grammarBuilder.append("b[int i] : a[i] ;\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisabledAlternative() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); + grammarBuilder.append("content: anything | {False}? .;\n"); + grammarBuilder.append("anything: ANY_CHAR;\n"); + grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); + String grammar = grammarBuilder.toString(); + + + String input ="hello"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(169); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b ';' | b '.' ;\n"); + grammarBuilder.append("b : a ;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoTruePredsThrowsNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {False}? ID INT {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {False}? ID INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOrder() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); + grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); + grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); + grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(203); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); + + assertEquals( + "line 5:0 mismatched input '' expecting '\n" + + "'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(203); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n" + + "\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {enumKeyword = True}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); + grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("ID abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {enumKeyword = True}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); + grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="enum"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(189); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID \n"); + grammarBuilder.append(" | {$i==2}? ID \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(271); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("def pred(self, v):\n"); + grammarBuilder.append(" print('eval=' + str(v).lower())\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {self.pred(True)}? {print(\"parse\")} '!' ;\n"); + grammarBuilder.append("t : e {self.pred(False)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRewindBeforePredEval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(201); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {self._input.LT(1).text==\"x\"}? ID INT {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {self._input.LT(1).text==\"y\"}? ID INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" | INT {print(\"alt 3\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y 3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(153); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a;\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="3 4 x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n", found); + + assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeft() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append(" s : a+ ;\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeftWithVaryingPredicate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(243); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : ({self.i += 1\n"); + grammarBuilder.append("print(\"i=\",end='')\n"); + grammarBuilder.append("print(self.i)} a)+ ;\n"); + grammarBuilder.append("a : {self.i % 2 == 0}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {self.i % 2 != 0}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "i=1\n" + + "alt 2\n" + + "i=2\n" + + "alt 1\n" + + "i=3\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testUnpredicatedPathsInAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(169); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {print(\"alt 1\")}\n"); + grammarBuilder.append(" | b {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("a : {False}? ID INT\n"); + grammarBuilder.append(" | ID INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testValidateInDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(318); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ';' a;\n"); + grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); + grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); + grammarBuilder.append("// throws an exception if the validating predicate fails\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x ; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 no viable alternative at input 'x'\n" + + "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSets.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSets.java new file mode 100644 index 000000000..a4b576c8a --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestSets.java @@ -0,0 +1,500 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSets extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetLiteral() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (A {print($A.text)})+ ;\n"); + grammarBuilder.append("A : [AaBb] ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="A a B b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals( + "A\n" + + "a\n" + + "B\n" + + "b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testComplementSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("parse : ~NEW_LINE;\n"); + grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 token recognition error at: 'a'\n" + + "line 1:1 missing {} at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotChar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : ~'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : ~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : h=~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithRuleRef3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("B : ~('a'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')? 'c' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A? 'c' {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(50); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~('x'|'y') 'z' {print($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(56); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ~'x' 'z' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("zz\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotTokenWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(44); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~'x' 'z' {print($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(45); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=('x'|'y') {print($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleAsSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print(self._input.getText())} : 'a' | 'b' |'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSeqDoesNotBecomeSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : C {print(self._input.getText())} ;\n"); + grammarBuilder.append("fragment A : '1' | '2';\n"); + grammarBuilder.append("fragment B : '3' '4';\n"); + grammarBuilder.append("C : A | B;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')* 'c' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestVisitors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestVisitors.java new file mode 100644 index 000000000..e6b7de515 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python2/TestVisitors.java @@ -0,0 +1,53 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python2; + +import org.junit.Ignore; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestVisitors extends BasePython2Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testBasic() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLR() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLRWithLabels() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_2() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_2() throws Exception { + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/BasePython3Test.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/BasePython3Test.java new file mode 100644 index 000000000..5bf515180 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/BasePython3Test.java @@ -0,0 +1,122 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.antlr.v4.test.runtime.legacy.python.BasePythonTest; +import org.stringtemplate.v4.ST; + +public abstract class BasePython3Test extends BasePythonTest { + + @Override + protected String getLanguage() { + return "Python3"; + } + + @Override + protected String getPythonExecutable() { + return "python3.5"; + } // force 3.5 + + @Override + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + ST outputFileST = new ST( + "import sys\n" + + "from antlr4 import *\n" + + "from import \n" + + "\n" + + "def main(argv):\n" + + " input = FileStream(argv[1])\n" + + " lexer = (input)\n" + + " stream = CommonTokenStream(lexer)\n" + + " stream.fill()\n" + + " [ print(str(t)) for t in stream.tokens ]\n" + + (showDFA ? " print(lexer._interp.decisionToDFA[Lexer.DEFAULT_MODE].toLexerString(), end='')\n" + : "") + "\n" + "if __name__ == '__main__':\n" + + " main(sys.argv)\n" + "\n"); + outputFileST.add("lexerName", lexerName); + writeFile(tmpdir, "Test.py", outputFileST.render()); + } + + @Override + protected void writeParserTestFile(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { + if(!parserStartRuleName.endsWith(")")) + parserStartRuleName += "()"; + ST outputFileST = new ST( + "import sys\n" + + "from antlr4 import *\n" + + "from import \n" + + "from import \n" + + "from import \n" + + "from import \n" + + "\n" + + "class TreeShapeListener(ParseTreeListener):\n" + + "\n" + + " def visitTerminal(self, node:TerminalNode):\n" + + " pass\n" + + "\n" + + " def visitErrorNode(self, node:ErrorNode):\n" + + " pass\n" + + "\n" + + " def exitEveryRule(self, ctx:ParserRuleContext):\n" + + " pass\n" + + "\n" + + " def enterEveryRule(self, ctx:ParserRuleContext):\n" + + " for child in ctx.getChildren():\n" + + " parent = child.parentCtx\n" + + " if not isinstance(parent, RuleNode) or parent.getRuleContext() != ctx:\n" + + " raise IllegalStateException(\"Invalid parse tree shape detected.\")\n" + + "\n" + + "def main(argv):\n" + + " input = FileStream(argv[1])\n" + + " lexer = (input)\n" + + " stream = CommonTokenStream(lexer)\n" + + "" + + " parser.buildParseTrees = True\n" + + " tree = parser.\n" + + " ParseTreeWalker.DEFAULT.walk(TreeShapeListener(), tree)\n" + + "\n" + "if __name__ == '__main__':\n" + + " main(sys.argv)\n" + "\n"); + String stSource = " parser = (stream)\n"; + if (debug) + stSource += " parser.addErrorListener(DiagnosticErrorListener())\n"; + if (trace) + stSource += " parser.setTrace(True)\n"; + ST createParserST = new ST(stSource); + outputFileST.add("createParser", createParserST); + outputFileST.add("parserName", parserName); + outputFileST.add("lexerName", lexerName); + outputFileST.add("listenerName", listenerName); + outputFileST.add("visitorName", visitorName); + outputFileST.add("parserStartRuleName", parserStartRuleName); + writeFile(tmpdir, "Test.py", outputFileST.render()); + } +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeLexers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeLexers.java new file mode 100644 index 000000000..cbfd978de --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeLexers.java @@ -0,0 +1,71 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeLexers extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {print(\"S.A\")};\n" + + "C : 'c' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="abc"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "S.A\n" + + "[@0,0:0='a',<3>,1:0]\n" + + "[@1,1:1='b',<1>,1:1]\n" + + "[@2,2:2='c',<4>,1:2]\n" + + "[@3,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "A : 'a' {print(\"S.A\")} ;\n" + + "B : 'b' {print(\"S.B\")} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + StringBuilder grammarBuilder = new StringBuilder(79); + grammarBuilder.append("lexer grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("A : 'a' B {print(\"M.A\")} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("M.g4", grammar, "M", input, false); + assertEquals( + "M.A\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeParsers.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeParsers.java new file mode 100644 index 000000000..8f7743bdd --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestCompositeParsers.java @@ -0,0 +1,503 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.antlr.v4.test.runtime.legacy.java.ErrorQueue; +import org.antlr.v4.tool.Grammar; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestCompositeParsers extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBringInLiteralsFromDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : '=' 'a' {print(\"S.a\",end='')};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="=a"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCombinedImportsCombined() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : 'x' INT {print(\"S.x\")};\n" + + "INT : '0'..'9'+ ;\n" + + "WS : (' '|'\\n') -> skip ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(31); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : x INT;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + + + String input ="x 34 9"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatesSeeSameTokenType() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { C, B, A } // reverse order\n" + + "y : A {print(\"T.y\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "tokens { A, B, C }\n" + + "x : A {print(\"S.x\")};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(598); + grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); + grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); + grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); + grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); + grammarBuilder.append("// mapping in each parser:\n"); + grammarBuilder.append("// public static final int C=6;\n"); + grammarBuilder.append("// public static final int EOF=-1;\n"); + grammarBuilder.append("// public static final int B=5;\n"); + grammarBuilder.append("// public static final int WS=7;\n"); + grammarBuilder.append("// public static final int A=4;\n"); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); + grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); + grammarBuilder.append("A : 'a' ; \n"); + grammarBuilder.append("C : 'c' ; \n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + + + String input ="aa"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals( + "S.x\n" + + "T.y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorAccessesDelegateMembers() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "@parser::members {\n" + + "def foo(self):\n" + + " print('foo')\n" + + "}\n" + + "a : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(126); + grammarBuilder.append("grammar M; // uses no rules from the import\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : 'b' {self.foo()} ; // gS is import pointer\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("foo\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {print(\"S.a\")};"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(104); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a[int x] returns [int y] : B {print(\"S.a\",end='')} {$y=1000;} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : label=a[3] {print($label.y)} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a1000\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : B {print(\"S.a\",end='')} ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(128); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a {print($a.text,end='')} ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.ab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "a : B {print(\"T.a\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {print(\"S.a\")};\n" + + "b : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S,T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a : b {print(\"S.a\",end='')};\n" + + "b : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("b : 'b'|'c';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals("S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesDelegates() throws Exception { + mkdir(tmpdir); + + String slave_T = + "parser grammar T;\n" + + "tokens { A }\n" + + "b : 'b' {print(\"T.b\")};"; + writeFile(tmpdir, "T.g4", slave_T); + + String slave_S = + "parser grammar S;\n" + + "a : b {print(\"S.a\")};\n" + + "b : 'b' ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(81); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S, T;\n"); + grammarBuilder.append("b : 'b'|'c' {print(\"M.b\")}|B|A;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.b\n" + + "S.a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "type_ : 'int' ;\n" + + "decl : type_ ID ';'\n" + + " | type_ ID init ';' {print(\"JavaDecl: \" + $text,end='')};\n" + + "init : '=' INT;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("prog : decl ;\n"); + grammarBuilder.append("type_ : 'int' | 'float' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="float x = 3;"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); + + assertEquals("JavaDecl: floatx=3;\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportLexerWithOnlyFragmentRules() throws Exception { + mkdir(tmpdir); + + String slave_Unicode = + "lexer grammar Unicode;\n" + + "\n" + + "fragment\n" + + "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + + " | '\\u2000'..'\\u200A'\n" + + " | '\\u202F' | '\\u205F' | '\\u3000'\n" + + " ;\n"; + writeFile(tmpdir, "Unicode.g4", slave_Unicode); + + + StringBuilder grammarBuilder = new StringBuilder(91); + grammarBuilder.append("grammar Test;\n"); + grammarBuilder.append("import Unicode;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program : 'test' 'test';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="test test"; + String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedGrammarWithEmptyOptions() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "options {}\n" + + "a : B ;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("B : 'b' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testImportedRuleWithAction() throws Exception { + mkdir(tmpdir); + + String slave_S = + "parser grammar S;\n" + + "a @after {x = 0} : B;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("s : a;\n"); + grammarBuilder.append("B : 'b';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordVSIDOrder() throws Exception { + mkdir(tmpdir); + + String slave_S = + "lexer grammar S;\n" + + "ID : 'a'..'z'+;"; + writeFile(tmpdir, "S.g4", slave_S); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar M;\n"); + grammarBuilder.append("import S;\n"); + grammarBuilder.append("a : A {print(\"M.a: \" + str($A))};\n"); + grammarBuilder.append("A : 'abc' {print(\"M.A\")};\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); + + assertEquals( + "M.A\n" + + "M.a: [@0,0:2='abc',<1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestFullContextParsing.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestFullContextParsing.java new file mode 100644 index 000000000..ea993612d --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestFullContextParsing.java @@ -0,0 +1,522 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestFullContextParsing extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigYieldsCtxSensitiveDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(100); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : ID | ID {} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-ID->:s1^=>1\n", found); + + assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbiguityNoLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(206); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(" : expr expr {print(\"alt 1\")}\n"); + grammarBuilder.append(" | expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: '@'\n"); + grammarBuilder.append(" | ID '@'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a@"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("alt 1\n", found); + + assertEquals( + "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + + "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + + "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFATwoDiffInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc @ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 2:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + + "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + + "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(161); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="$ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCtxSensitiveDFA_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(161); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '$' a | '@' b ;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="@ 34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + + "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(286); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExprAmbiguity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(286); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); + grammarBuilder.append(" expr[int _p]\n"); + grammarBuilder.append(" : ID \n"); + grammarBuilder.append(" ( \n"); + grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); + grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); + grammarBuilder.append(" )*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("(expr a + (expr b * (expr c)))\n", found); + + assertEquals( + "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + + "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + + "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + + "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s1=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="{ if x then if y then return else foo else bar }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + + "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testFullContextIF_THEN_ELSEParse_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(240); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s \n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append("@after {self.dumpDFA()}\n"); + grammarBuilder.append(" : '{' stat* '}' ;\n"); + grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); + grammarBuilder.append(" | 'return'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "{ if x then return else foo\n" + + "if x then if y then return else foo }"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 1:\n" + + "s0-'}'->:s2=>2\n" + + "s0-'else'->:s1^=>1\n", found); + + assertEquals( + "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + + "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + + "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLoopsSimulateTailRecursion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(299); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog\n"); + grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); + grammarBuilder.append(" : expr_or_assign*;\n"); + grammarBuilder.append("expr_or_assign\n"); + grammarBuilder.append(" : expr '++' {print(\"fail.\")}\n"); + grammarBuilder.append(" | expr {print(\"pass: \"+$expr.text)}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); + grammarBuilder.append("expr_primary\n"); + grammarBuilder.append(" : '(' ID ')'\n"); + grammarBuilder.append(" | ID '(' ID ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a(i)<-x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); + + assertEquals("pass: a(i)<-x\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + + "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSLLSeesEOFInLLGrammar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(148); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {self.dumpDFA()}\n"); + grammarBuilder.append(" : a;\n"); + grammarBuilder.append("a : e ID ;\n"); + grammarBuilder.append("b : e INT ID ;\n"); + grammarBuilder.append("e : INT | ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34 abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "Decision 0:\n" + + "s0-INT->s1\n" + + "s1-ID->:s2^=>1\n", found); + + assertEquals( + "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + + "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLeftRecursion.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLeftRecursion.java new file mode 100644 index 000000000..793755a07 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLeftRecursion.java @@ -0,0 +1,3502 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLeftRecursion extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="1\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a = 5\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="b = 6\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b*2\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAmbigLR_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(705); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog: stat ;\n"); + grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); + grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); + grammarBuilder.append(" | NEWLINE # blank\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); + grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); + grammarBuilder.append(" | INT # int\n"); + grammarBuilder.append(" | ID # id\n"); + grammarBuilder.append(" | '(' expr ')' # parens\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); + grammarBuilder.append("DIV : '/' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("SUB : '-' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); + grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); + grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); + grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3\n"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(*a)[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="**a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[3]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator b) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator ( (declarator a) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[]()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a[][]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDeclarations_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(391); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("declarator\n"); + grammarBuilder.append(" : declarator '[' e ']'\n"); + grammarBuilder.append(" | declarator '[' ']'\n"); + grammarBuilder.append(" | declarator '(' ')'\n"); + grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); + grammarBuilder.append(" | '(' declarator ')'\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : INT ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="*a[]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a x) y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDirectCallToLeftRecursiveRule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(119); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("(a (a (a x) y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 1) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) - (e 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.this"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) . this) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e - (e a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(250); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("e : e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | '-' e\n"); + grammarBuilder.append(" | e '*' e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a|b&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_10() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f(x)==T.c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_11() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a.f().g(x,1)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_12() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new T[((n-1) * x) + 1]"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(a|b)&c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a > b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) > (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a >> b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) >> (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a^b^c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="new A().b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testJavaExpressions_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(1247); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); + grammarBuilder.append("expressionList\n"); + grammarBuilder.append(" : e (',' e)*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("e : '(' e ')'\n"); + grammarBuilder.append(" | 'this'\n"); + grammarBuilder.append(" | 'super'\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" | typespec '.' 'class'\n"); + grammarBuilder.append(" | e '.' ID\n"); + grammarBuilder.append(" | e '.' 'this'\n"); + grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); + grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); + grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); + grammarBuilder.append(" | e '[' e ']'\n"); + grammarBuilder.append(" | '(' typespec ')' e\n"); + grammarBuilder.append(" | e ('++' | '--')\n"); + grammarBuilder.append(" | e '(' expressionList? ')'\n"); + grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); + grammarBuilder.append(" | ('~'|'!') e\n"); + grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); + grammarBuilder.append(" | e ('+'|'-') e\n"); + grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); + grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); + grammarBuilder.append(" | e 'instanceof' e\n"); + grammarBuilder.append(" | e ('==' | '!=') e\n"); + grammarBuilder.append(" | e '&' e\n"); + grammarBuilder.append(" | e '^' e\n"); + grammarBuilder.append(" | e '|' e\n"); + grammarBuilder.append(" | e '&&' e\n"); + grammarBuilder.append(" | e '||' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" |\n"); + grammarBuilder.append(" e ('='\n"); + grammarBuilder.append(" |'+='\n"); + grammarBuilder.append(" |'-='\n"); + grammarBuilder.append(" |'*='\n"); + grammarBuilder.append(" |'/='\n"); + grammarBuilder.append(" |'&='\n"); + grammarBuilder.append(" |'|='\n"); + grammarBuilder.append(" |'^='\n"); + grammarBuilder.append(" |'>>='\n"); + grammarBuilder.append(" |'>>>='\n"); + grammarBuilder.append(" |'<<='\n"); + grammarBuilder.append(" |'%=') e\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("typespec\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | ID '[' ']'\n"); + grammarBuilder.append(" | 'int'\n"); + grammarBuilder.append(" | 'int' '[' ']'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(T)t.f()"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(170); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(170); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelsOnOpSubrule_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(170); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); + grammarBuilder.append(" | INT {}\n"); + grammarBuilder.append(" | '(' x=e ')' {}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActionsPredicatesOptions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(238); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); + grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e 4))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1*2/3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(177); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); + grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); + grammarBuilder.append(" | INT {}{}\n"); + grammarBuilder.append(" | '(' x=e ')' {}{}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="(1/2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleAlternativesWithCommonLabel_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(560); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)};\n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); + grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); + grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); + grammarBuilder.append(" | ID {$v = 3} # anID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("INC : '++' ;\n"); + grammarBuilder.append("DEC : '--' ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrecedenceFilterConsidersContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog \n"); + grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); + grammarBuilder.append(": statement* EOF {};\n"); + grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); + grammarBuilder.append("letterA: 'a';"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(216); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (literal - 1)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixAndOtherAlt_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(216); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); + grammarBuilder.append("expr : literal\n"); + grammarBuilder.append(" | op expr\n"); + grammarBuilder.append(" | expr op expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("literal : '-'? Integer ;\n"); + grammarBuilder.append("op : '+' | '-' ;\n"); + grammarBuilder.append("Integer : [0-9]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="-1 + -1"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(329); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(329); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a+b)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPrefixOpWithActionAndLabel_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(329); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.result)} ;\n"); + grammarBuilder.append("e returns [String result]\n"); + grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); + grammarBuilder.append(" | ID {$result = $ID.text;}\n"); + grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b+c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("((a=b)+c)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsAndLabels_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(447); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : q=e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v]\n"); + grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); + grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); + grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); + grammarBuilder.append(" | e '--' # dec\n"); + grammarBuilder.append(" | ID {$v = 3;} # anID\n"); + grammarBuilder.append(" ; \n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="i++*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("12\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList1_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr a) * (expr b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a,c>>x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr x) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActionsList2_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(317); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); + grammarBuilder.append("expr:\n"); + grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); + grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); + grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); + grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); + grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b,c,x*y>>r"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("4\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("7\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReturnValueAndActions_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e {print($e.v)}; \n"); + grammarBuilder.append("e returns [int v, ignored]\n"); + grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); + grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); + grammarBuilder.append(" | INT {$v = $INT.int;}\n"); + grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="(1+2)*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("9\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPred() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a {True}? ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSemPredFailOption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(159); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID {False}?\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y z))\n", found); + + assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a x))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a x) y))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); + grammarBuilder.append("a : a ID\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (a (a (a x) y) z))\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExprExplicitAssociativity_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) + (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a*b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) * (e b)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b:c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_5() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a=b=c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_6() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b+c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_7() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b=c:d"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_8() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a? b?c:d : e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTernaryExpr_9() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(258); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); + grammarBuilder.append("e : e '*' e\n"); + grammarBuilder.append(" | e '+' e\n"); + grammarBuilder.append(" | e '?' e ':' e\n"); + grammarBuilder.append(" | e '=' e\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a?b: c?d:e"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1,3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testWhitespaceInfluence_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(2763); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("prog : expression EOF;\n"); + grammarBuilder.append("expression\n"); + grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); + grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); + grammarBuilder.append(" | '!' expression # doNot\n"); + grammarBuilder.append(" | '-' expression # doNegate\n"); + grammarBuilder.append(" | '+' expression # doPositiv\n"); + grammarBuilder.append(" | expression '^' expression # doPower\n"); + grammarBuilder.append(" | expression '*' expression # doMultipy\n"); + grammarBuilder.append(" | expression '/' expression # doDivide\n"); + grammarBuilder.append(" | expression '%' expression # doModulo\n"); + grammarBuilder.append(" | expression '-' expression # doMinus\n"); + grammarBuilder.append(" | expression '+' expression # doPlus\n"); + grammarBuilder.append(" | expression '=' expression # doEqual\n"); + grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); + grammarBuilder.append(" | expression '>' expression # doGreather\n"); + grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); + grammarBuilder.append(" | expression '<' expression # doLesser\n"); + grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); + grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); + grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); + grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); + grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); + grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); + grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); + grammarBuilder.append(" | NUMBER # newNumber\n"); + grammarBuilder.append(" | DATE # newDateTime\n"); + grammarBuilder.append(" | ID # newIdentifier\n"); + grammarBuilder.append(" | SQ_STRING # newString\n"); + grammarBuilder.append(" | K_NULL # newNull\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Fragments\n"); + grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); + grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); + grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); + grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); + grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); + grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// Tokens\n"); + grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); + grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); + grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); + grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); + grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); + grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="Test(1, 3)"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerErrors.java new file mode 100644 index 000000000..5a43d8d89 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerErrors.java @@ -0,0 +1,259 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerErrors extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatFailsBackToDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(39); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:3='ab',<1>,1:2]\n" + + "[@2,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'ab' ;\n"); + grammarBuilder.append("B : 'abc' ;\n"); + grammarBuilder.append("C : 'abcd' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ababcx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:4='abc',<2>,1:2]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { } }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='{ { } }',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnforcedGreedyNestedBrances_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); + grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="{ { }"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,5:4='',<-1>,1:5]\n", found); + + assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testErrorInMiddle() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'abc' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStart() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,1:0='',<-1>,1:1]\n", found); + + assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharAtStartAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abx"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + + assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="ax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,2:1='',<-1>,1:2]\n", found); + + assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidCharInTokenAfterDFACache() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + String input ="abax"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + + assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerExecDFA() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar L;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + String input ="x : x"; + String found = execLexer("L.g4", grammar, "LLexer", input, false); + assertEquals( + "[@0,0:0='x',<3>,1:0]\n" + + "[@1,2:2=':',<1>,1:2]\n" + + "[@2,4:4='x',<3>,1:4]\n" + + "[@3,5:4='',<-1>,1:5]\n", found); + + assertEquals( + "line 1:1 token recognition error at: ' '\n" + + "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo\"]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStringsEmbeddedInActions_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(109); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); + grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="[\"foo]"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,6:5='',<-1>,1:6]\n", found); + + assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerExec.java new file mode 100644 index 000000000..3b9c1ec05 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestLexerExec.java @@ -0,0 +1,4997 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestLexerExec extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionPlacement() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(228); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ({print(\"stuff fail: \" + self.text)} 'a'\n"); + grammarBuilder.append("| {print(\"stuff0: \" + self.text)}\n"); + grammarBuilder.append(" 'a' {print(\"stuff1: \" + self.text)}\n"); + grammarBuilder.append(" 'b' {print(\"stuff2: \" + self.text)})\n"); + grammarBuilder.append(" {print(self.text)} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "stuff0: \n" + + "stuff1: a\n" + + "stuff2: ab\n" + + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(72); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetInSet() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(79); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : (~[ab \\n]|'a') {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="a x"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:2='x',<1>,1:2]\n" + + "[@2,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetNot() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="xaf"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:2='xaf',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetPlus() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(73); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,6:5='',<-1>,2:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(115); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); + grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {print(\"ID\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input = + "34\n" + + " 34 a2 abc \n" + + " "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "I\n" + + "ID\n" + + "ID\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,4:5='34',<1>,2:1]\n" + + "[@2,7:8='a2',<2>,2:4]\n" + + "[@3,10:12='abc',<2>,2:7]\n" + + "[@4,18:17='',<-1>,3:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithEscapedChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(81); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DASHBRACK : [\\-\\]]+ {print(\"DASHBRACK\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="- ] "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "DASHBRACK\n" + + "DASHBRACK\n" + + "[@0,0:0='-',<1>,1:0]\n" + + "[@1,2:2=']',<1>,1:2]\n" + + "[@2,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEndRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-]+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="00\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='00',<1>,1:0]\n" + + "[@1,3:2='',<-1>,2:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithMissingEscapeChar() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 "; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "I\n" + + "[@0,0:1='34',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(67); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"a-z]+ {print(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:2='b\"a',<1>,1:0]\n" + + "[@1,3:2='',<-1>,1:3]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithQuote2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(68); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [\"\\\\ab]+ {print(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="b\"\\a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:3='b\"\\a',<1>,1:0]\n" + + "[@1,4:3='',<-1>,1:4]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetWithReversedRange() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(65); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : [z-a9]+ {print(\"A\")} ;\n"); + grammarBuilder.append("WS : [ \\u]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="9"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "A\n" + + "[@0,0:0='9',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFByItself() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("DONE : EOF ;\n"); + grammarBuilder.append("A : 'a';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:-1='',<1>,1:0]\n" + + "[@1,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input =""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFSuffixInFirstRule_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : 'a' EOF ;\n"); + grammarBuilder.append("B : 'a';\n"); + grammarBuilder.append("C : 'c';"); + String grammar = grammarBuilder.toString(); + + String input ="a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(87); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : ('a' | 'ab') {print(self.text)} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : .;"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "ab\n" + + "[@0,0:1='ab',<1>,1:0]\n" + + "[@1,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(60); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(58); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + + "[@1,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testHexVsID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(265); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); + grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); + grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="x 0 1 a.b a.l"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='x',<5>,1:0]\n" + + "[@1,1:1=' ',<6>,1:1]\n" + + "[@2,2:2='0',<2>,1:2]\n" + + "[@3,3:3=' ',<6>,1:3]\n" + + "[@4,4:4='1',<2>,1:4]\n" + + "[@5,5:5=' ',<6>,1:5]\n" + + "[@6,6:6='a',<5>,1:6]\n" + + "[@7,7:7='.',<4>,1:7]\n" + + "[@8,8:8='b',<5>,1:8]\n" + + "[@9,9:9=' ',<6>,1:9]\n" + + "[@10,10:10='a',<5>,1:10]\n" + + "[@11,11:11='.',<4>,1:11]\n" + + "[@12,12:12='l',<5>,1:12]\n" + + "[@13,13:12='',<-1>,1:13]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testKeywordID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("KEND : 'end' ; // has priority\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input ="end eend ending a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:2='end',<1>,1:0]\n" + + "[@1,3:3=' ',<3>,1:3]\n" + + "[@2,4:7='eend',<2>,1:4]\n" + + "[@3,8:8=' ',<3>,1:8]\n" + + "[@4,9:14='ending',<2>,1:9]\n" + + "[@5,15:15=' ',<3>,1:15]\n" + + "[@6,16:16='a',<2>,1:16]\n" + + "[@7,17:16='',<-1>,1:17]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLargeLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85821); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); + grammarBuilder.append("KW0 : 'KW' '0';\n"); + grammarBuilder.append("KW1 : 'KW' '1';\n"); + grammarBuilder.append("KW2 : 'KW' '2';\n"); + grammarBuilder.append("KW3 : 'KW' '3';\n"); + grammarBuilder.append("KW4 : 'KW' '4';\n"); + grammarBuilder.append("KW5 : 'KW' '5';\n"); + grammarBuilder.append("KW6 : 'KW' '6';\n"); + grammarBuilder.append("KW7 : 'KW' '7';\n"); + grammarBuilder.append("KW8 : 'KW' '8';\n"); + grammarBuilder.append("KW9 : 'KW' '9';\n"); + grammarBuilder.append("KW10 : 'KW' '10';\n"); + grammarBuilder.append("KW11 : 'KW' '11';\n"); + grammarBuilder.append("KW12 : 'KW' '12';\n"); + grammarBuilder.append("KW13 : 'KW' '13';\n"); + grammarBuilder.append("KW14 : 'KW' '14';\n"); + grammarBuilder.append("KW15 : 'KW' '15';\n"); + grammarBuilder.append("KW16 : 'KW' '16';\n"); + grammarBuilder.append("KW17 : 'KW' '17';\n"); + grammarBuilder.append("KW18 : 'KW' '18';\n"); + grammarBuilder.append("KW19 : 'KW' '19';\n"); + grammarBuilder.append("KW20 : 'KW' '20';\n"); + grammarBuilder.append("KW21 : 'KW' '21';\n"); + grammarBuilder.append("KW22 : 'KW' '22';\n"); + grammarBuilder.append("KW23 : 'KW' '23';\n"); + grammarBuilder.append("KW24 : 'KW' '24';\n"); + grammarBuilder.append("KW25 : 'KW' '25';\n"); + grammarBuilder.append("KW26 : 'KW' '26';\n"); + grammarBuilder.append("KW27 : 'KW' '27';\n"); + grammarBuilder.append("KW28 : 'KW' '28';\n"); + grammarBuilder.append("KW29 : 'KW' '29';\n"); + grammarBuilder.append("KW30 : 'KW' '30';\n"); + grammarBuilder.append("KW31 : 'KW' '31';\n"); + grammarBuilder.append("KW32 : 'KW' '32';\n"); + grammarBuilder.append("KW33 : 'KW' '33';\n"); + grammarBuilder.append("KW34 : 'KW' '34';\n"); + grammarBuilder.append("KW35 : 'KW' '35';\n"); + grammarBuilder.append("KW36 : 'KW' '36';\n"); + grammarBuilder.append("KW37 : 'KW' '37';\n"); + grammarBuilder.append("KW38 : 'KW' '38';\n"); + grammarBuilder.append("KW39 : 'KW' '39';\n"); + grammarBuilder.append("KW40 : 'KW' '40';\n"); + grammarBuilder.append("KW41 : 'KW' '41';\n"); + grammarBuilder.append("KW42 : 'KW' '42';\n"); + grammarBuilder.append("KW43 : 'KW' '43';\n"); + grammarBuilder.append("KW44 : 'KW' '44';\n"); + grammarBuilder.append("KW45 : 'KW' '45';\n"); + grammarBuilder.append("KW46 : 'KW' '46';\n"); + grammarBuilder.append("KW47 : 'KW' '47';\n"); + grammarBuilder.append("KW48 : 'KW' '48';\n"); + grammarBuilder.append("KW49 : 'KW' '49';\n"); + grammarBuilder.append("KW50 : 'KW' '50';\n"); + grammarBuilder.append("KW51 : 'KW' '51';\n"); + grammarBuilder.append("KW52 : 'KW' '52';\n"); + grammarBuilder.append("KW53 : 'KW' '53';\n"); + grammarBuilder.append("KW54 : 'KW' '54';\n"); + grammarBuilder.append("KW55 : 'KW' '55';\n"); + grammarBuilder.append("KW56 : 'KW' '56';\n"); + grammarBuilder.append("KW57 : 'KW' '57';\n"); + grammarBuilder.append("KW58 : 'KW' '58';\n"); + grammarBuilder.append("KW59 : 'KW' '59';\n"); + grammarBuilder.append("KW60 : 'KW' '60';\n"); + grammarBuilder.append("KW61 : 'KW' '61';\n"); + grammarBuilder.append("KW62 : 'KW' '62';\n"); + grammarBuilder.append("KW63 : 'KW' '63';\n"); + grammarBuilder.append("KW64 : 'KW' '64';\n"); + grammarBuilder.append("KW65 : 'KW' '65';\n"); + grammarBuilder.append("KW66 : 'KW' '66';\n"); + grammarBuilder.append("KW67 : 'KW' '67';\n"); + grammarBuilder.append("KW68 : 'KW' '68';\n"); + grammarBuilder.append("KW69 : 'KW' '69';\n"); + grammarBuilder.append("KW70 : 'KW' '70';\n"); + grammarBuilder.append("KW71 : 'KW' '71';\n"); + grammarBuilder.append("KW72 : 'KW' '72';\n"); + grammarBuilder.append("KW73 : 'KW' '73';\n"); + grammarBuilder.append("KW74 : 'KW' '74';\n"); + grammarBuilder.append("KW75 : 'KW' '75';\n"); + grammarBuilder.append("KW76 : 'KW' '76';\n"); + grammarBuilder.append("KW77 : 'KW' '77';\n"); + grammarBuilder.append("KW78 : 'KW' '78';\n"); + grammarBuilder.append("KW79 : 'KW' '79';\n"); + grammarBuilder.append("KW80 : 'KW' '80';\n"); + grammarBuilder.append("KW81 : 'KW' '81';\n"); + grammarBuilder.append("KW82 : 'KW' '82';\n"); + grammarBuilder.append("KW83 : 'KW' '83';\n"); + grammarBuilder.append("KW84 : 'KW' '84';\n"); + grammarBuilder.append("KW85 : 'KW' '85';\n"); + grammarBuilder.append("KW86 : 'KW' '86';\n"); + grammarBuilder.append("KW87 : 'KW' '87';\n"); + grammarBuilder.append("KW88 : 'KW' '88';\n"); + grammarBuilder.append("KW89 : 'KW' '89';\n"); + grammarBuilder.append("KW90 : 'KW' '90';\n"); + grammarBuilder.append("KW91 : 'KW' '91';\n"); + grammarBuilder.append("KW92 : 'KW' '92';\n"); + grammarBuilder.append("KW93 : 'KW' '93';\n"); + grammarBuilder.append("KW94 : 'KW' '94';\n"); + grammarBuilder.append("KW95 : 'KW' '95';\n"); + grammarBuilder.append("KW96 : 'KW' '96';\n"); + grammarBuilder.append("KW97 : 'KW' '97';\n"); + grammarBuilder.append("KW98 : 'KW' '98';\n"); + grammarBuilder.append("KW99 : 'KW' '99';\n"); + grammarBuilder.append("KW100 : 'KW' '100';\n"); + grammarBuilder.append("KW101 : 'KW' '101';\n"); + grammarBuilder.append("KW102 : 'KW' '102';\n"); + grammarBuilder.append("KW103 : 'KW' '103';\n"); + grammarBuilder.append("KW104 : 'KW' '104';\n"); + grammarBuilder.append("KW105 : 'KW' '105';\n"); + grammarBuilder.append("KW106 : 'KW' '106';\n"); + grammarBuilder.append("KW107 : 'KW' '107';\n"); + grammarBuilder.append("KW108 : 'KW' '108';\n"); + grammarBuilder.append("KW109 : 'KW' '109';\n"); + grammarBuilder.append("KW110 : 'KW' '110';\n"); + grammarBuilder.append("KW111 : 'KW' '111';\n"); + grammarBuilder.append("KW112 : 'KW' '112';\n"); + grammarBuilder.append("KW113 : 'KW' '113';\n"); + grammarBuilder.append("KW114 : 'KW' '114';\n"); + grammarBuilder.append("KW115 : 'KW' '115';\n"); + grammarBuilder.append("KW116 : 'KW' '116';\n"); + grammarBuilder.append("KW117 : 'KW' '117';\n"); + grammarBuilder.append("KW118 : 'KW' '118';\n"); + grammarBuilder.append("KW119 : 'KW' '119';\n"); + grammarBuilder.append("KW120 : 'KW' '120';\n"); + grammarBuilder.append("KW121 : 'KW' '121';\n"); + grammarBuilder.append("KW122 : 'KW' '122';\n"); + grammarBuilder.append("KW123 : 'KW' '123';\n"); + grammarBuilder.append("KW124 : 'KW' '124';\n"); + grammarBuilder.append("KW125 : 'KW' '125';\n"); + grammarBuilder.append("KW126 : 'KW' '126';\n"); + grammarBuilder.append("KW127 : 'KW' '127';\n"); + grammarBuilder.append("KW128 : 'KW' '128';\n"); + grammarBuilder.append("KW129 : 'KW' '129';\n"); + grammarBuilder.append("KW130 : 'KW' '130';\n"); + grammarBuilder.append("KW131 : 'KW' '131';\n"); + grammarBuilder.append("KW132 : 'KW' '132';\n"); + grammarBuilder.append("KW133 : 'KW' '133';\n"); + grammarBuilder.append("KW134 : 'KW' '134';\n"); + grammarBuilder.append("KW135 : 'KW' '135';\n"); + grammarBuilder.append("KW136 : 'KW' '136';\n"); + grammarBuilder.append("KW137 : 'KW' '137';\n"); + grammarBuilder.append("KW138 : 'KW' '138';\n"); + grammarBuilder.append("KW139 : 'KW' '139';\n"); + grammarBuilder.append("KW140 : 'KW' '140';\n"); + grammarBuilder.append("KW141 : 'KW' '141';\n"); + grammarBuilder.append("KW142 : 'KW' '142';\n"); + grammarBuilder.append("KW143 : 'KW' '143';\n"); + grammarBuilder.append("KW144 : 'KW' '144';\n"); + grammarBuilder.append("KW145 : 'KW' '145';\n"); + grammarBuilder.append("KW146 : 'KW' '146';\n"); + grammarBuilder.append("KW147 : 'KW' '147';\n"); + grammarBuilder.append("KW148 : 'KW' '148';\n"); + grammarBuilder.append("KW149 : 'KW' '149';\n"); + grammarBuilder.append("KW150 : 'KW' '150';\n"); + grammarBuilder.append("KW151 : 'KW' '151';\n"); + grammarBuilder.append("KW152 : 'KW' '152';\n"); + grammarBuilder.append("KW153 : 'KW' '153';\n"); + grammarBuilder.append("KW154 : 'KW' '154';\n"); + grammarBuilder.append("KW155 : 'KW' '155';\n"); + grammarBuilder.append("KW156 : 'KW' '156';\n"); + grammarBuilder.append("KW157 : 'KW' '157';\n"); + grammarBuilder.append("KW158 : 'KW' '158';\n"); + grammarBuilder.append("KW159 : 'KW' '159';\n"); + grammarBuilder.append("KW160 : 'KW' '160';\n"); + grammarBuilder.append("KW161 : 'KW' '161';\n"); + grammarBuilder.append("KW162 : 'KW' '162';\n"); + grammarBuilder.append("KW163 : 'KW' '163';\n"); + grammarBuilder.append("KW164 : 'KW' '164';\n"); + grammarBuilder.append("KW165 : 'KW' '165';\n"); + grammarBuilder.append("KW166 : 'KW' '166';\n"); + grammarBuilder.append("KW167 : 'KW' '167';\n"); + grammarBuilder.append("KW168 : 'KW' '168';\n"); + grammarBuilder.append("KW169 : 'KW' '169';\n"); + grammarBuilder.append("KW170 : 'KW' '170';\n"); + grammarBuilder.append("KW171 : 'KW' '171';\n"); + grammarBuilder.append("KW172 : 'KW' '172';\n"); + grammarBuilder.append("KW173 : 'KW' '173';\n"); + grammarBuilder.append("KW174 : 'KW' '174';\n"); + grammarBuilder.append("KW175 : 'KW' '175';\n"); + grammarBuilder.append("KW176 : 'KW' '176';\n"); + grammarBuilder.append("KW177 : 'KW' '177';\n"); + grammarBuilder.append("KW178 : 'KW' '178';\n"); + grammarBuilder.append("KW179 : 'KW' '179';\n"); + grammarBuilder.append("KW180 : 'KW' '180';\n"); + grammarBuilder.append("KW181 : 'KW' '181';\n"); + grammarBuilder.append("KW182 : 'KW' '182';\n"); + grammarBuilder.append("KW183 : 'KW' '183';\n"); + grammarBuilder.append("KW184 : 'KW' '184';\n"); + grammarBuilder.append("KW185 : 'KW' '185';\n"); + grammarBuilder.append("KW186 : 'KW' '186';\n"); + grammarBuilder.append("KW187 : 'KW' '187';\n"); + grammarBuilder.append("KW188 : 'KW' '188';\n"); + grammarBuilder.append("KW189 : 'KW' '189';\n"); + grammarBuilder.append("KW190 : 'KW' '190';\n"); + grammarBuilder.append("KW191 : 'KW' '191';\n"); + grammarBuilder.append("KW192 : 'KW' '192';\n"); + grammarBuilder.append("KW193 : 'KW' '193';\n"); + grammarBuilder.append("KW194 : 'KW' '194';\n"); + grammarBuilder.append("KW195 : 'KW' '195';\n"); + grammarBuilder.append("KW196 : 'KW' '196';\n"); + grammarBuilder.append("KW197 : 'KW' '197';\n"); + grammarBuilder.append("KW198 : 'KW' '198';\n"); + grammarBuilder.append("KW199 : 'KW' '199';\n"); + grammarBuilder.append("KW200 : 'KW' '200';\n"); + grammarBuilder.append("KW201 : 'KW' '201';\n"); + grammarBuilder.append("KW202 : 'KW' '202';\n"); + grammarBuilder.append("KW203 : 'KW' '203';\n"); + grammarBuilder.append("KW204 : 'KW' '204';\n"); + grammarBuilder.append("KW205 : 'KW' '205';\n"); + grammarBuilder.append("KW206 : 'KW' '206';\n"); + grammarBuilder.append("KW207 : 'KW' '207';\n"); + grammarBuilder.append("KW208 : 'KW' '208';\n"); + grammarBuilder.append("KW209 : 'KW' '209';\n"); + grammarBuilder.append("KW210 : 'KW' '210';\n"); + grammarBuilder.append("KW211 : 'KW' '211';\n"); + grammarBuilder.append("KW212 : 'KW' '212';\n"); + grammarBuilder.append("KW213 : 'KW' '213';\n"); + grammarBuilder.append("KW214 : 'KW' '214';\n"); + grammarBuilder.append("KW215 : 'KW' '215';\n"); + grammarBuilder.append("KW216 : 'KW' '216';\n"); + grammarBuilder.append("KW217 : 'KW' '217';\n"); + grammarBuilder.append("KW218 : 'KW' '218';\n"); + grammarBuilder.append("KW219 : 'KW' '219';\n"); + grammarBuilder.append("KW220 : 'KW' '220';\n"); + grammarBuilder.append("KW221 : 'KW' '221';\n"); + grammarBuilder.append("KW222 : 'KW' '222';\n"); + grammarBuilder.append("KW223 : 'KW' '223';\n"); + grammarBuilder.append("KW224 : 'KW' '224';\n"); + grammarBuilder.append("KW225 : 'KW' '225';\n"); + grammarBuilder.append("KW226 : 'KW' '226';\n"); + grammarBuilder.append("KW227 : 'KW' '227';\n"); + grammarBuilder.append("KW228 : 'KW' '228';\n"); + grammarBuilder.append("KW229 : 'KW' '229';\n"); + grammarBuilder.append("KW230 : 'KW' '230';\n"); + grammarBuilder.append("KW231 : 'KW' '231';\n"); + grammarBuilder.append("KW232 : 'KW' '232';\n"); + grammarBuilder.append("KW233 : 'KW' '233';\n"); + grammarBuilder.append("KW234 : 'KW' '234';\n"); + grammarBuilder.append("KW235 : 'KW' '235';\n"); + grammarBuilder.append("KW236 : 'KW' '236';\n"); + grammarBuilder.append("KW237 : 'KW' '237';\n"); + grammarBuilder.append("KW238 : 'KW' '238';\n"); + grammarBuilder.append("KW239 : 'KW' '239';\n"); + grammarBuilder.append("KW240 : 'KW' '240';\n"); + grammarBuilder.append("KW241 : 'KW' '241';\n"); + grammarBuilder.append("KW242 : 'KW' '242';\n"); + grammarBuilder.append("KW243 : 'KW' '243';\n"); + grammarBuilder.append("KW244 : 'KW' '244';\n"); + grammarBuilder.append("KW245 : 'KW' '245';\n"); + grammarBuilder.append("KW246 : 'KW' '246';\n"); + grammarBuilder.append("KW247 : 'KW' '247';\n"); + grammarBuilder.append("KW248 : 'KW' '248';\n"); + grammarBuilder.append("KW249 : 'KW' '249';\n"); + grammarBuilder.append("KW250 : 'KW' '250';\n"); + grammarBuilder.append("KW251 : 'KW' '251';\n"); + grammarBuilder.append("KW252 : 'KW' '252';\n"); + grammarBuilder.append("KW253 : 'KW' '253';\n"); + grammarBuilder.append("KW254 : 'KW' '254';\n"); + grammarBuilder.append("KW255 : 'KW' '255';\n"); + grammarBuilder.append("KW256 : 'KW' '256';\n"); + grammarBuilder.append("KW257 : 'KW' '257';\n"); + grammarBuilder.append("KW258 : 'KW' '258';\n"); + grammarBuilder.append("KW259 : 'KW' '259';\n"); + grammarBuilder.append("KW260 : 'KW' '260';\n"); + grammarBuilder.append("KW261 : 'KW' '261';\n"); + grammarBuilder.append("KW262 : 'KW' '262';\n"); + grammarBuilder.append("KW263 : 'KW' '263';\n"); + grammarBuilder.append("KW264 : 'KW' '264';\n"); + grammarBuilder.append("KW265 : 'KW' '265';\n"); + grammarBuilder.append("KW266 : 'KW' '266';\n"); + grammarBuilder.append("KW267 : 'KW' '267';\n"); + grammarBuilder.append("KW268 : 'KW' '268';\n"); + grammarBuilder.append("KW269 : 'KW' '269';\n"); + grammarBuilder.append("KW270 : 'KW' '270';\n"); + grammarBuilder.append("KW271 : 'KW' '271';\n"); + grammarBuilder.append("KW272 : 'KW' '272';\n"); + grammarBuilder.append("KW273 : 'KW' '273';\n"); + grammarBuilder.append("KW274 : 'KW' '274';\n"); + grammarBuilder.append("KW275 : 'KW' '275';\n"); + grammarBuilder.append("KW276 : 'KW' '276';\n"); + grammarBuilder.append("KW277 : 'KW' '277';\n"); + grammarBuilder.append("KW278 : 'KW' '278';\n"); + grammarBuilder.append("KW279 : 'KW' '279';\n"); + grammarBuilder.append("KW280 : 'KW' '280';\n"); + grammarBuilder.append("KW281 : 'KW' '281';\n"); + grammarBuilder.append("KW282 : 'KW' '282';\n"); + grammarBuilder.append("KW283 : 'KW' '283';\n"); + grammarBuilder.append("KW284 : 'KW' '284';\n"); + grammarBuilder.append("KW285 : 'KW' '285';\n"); + grammarBuilder.append("KW286 : 'KW' '286';\n"); + grammarBuilder.append("KW287 : 'KW' '287';\n"); + grammarBuilder.append("KW288 : 'KW' '288';\n"); + grammarBuilder.append("KW289 : 'KW' '289';\n"); + grammarBuilder.append("KW290 : 'KW' '290';\n"); + grammarBuilder.append("KW291 : 'KW' '291';\n"); + grammarBuilder.append("KW292 : 'KW' '292';\n"); + grammarBuilder.append("KW293 : 'KW' '293';\n"); + grammarBuilder.append("KW294 : 'KW' '294';\n"); + grammarBuilder.append("KW295 : 'KW' '295';\n"); + grammarBuilder.append("KW296 : 'KW' '296';\n"); + grammarBuilder.append("KW297 : 'KW' '297';\n"); + grammarBuilder.append("KW298 : 'KW' '298';\n"); + grammarBuilder.append("KW299 : 'KW' '299';\n"); + grammarBuilder.append("KW300 : 'KW' '300';\n"); + grammarBuilder.append("KW301 : 'KW' '301';\n"); + grammarBuilder.append("KW302 : 'KW' '302';\n"); + grammarBuilder.append("KW303 : 'KW' '303';\n"); + grammarBuilder.append("KW304 : 'KW' '304';\n"); + grammarBuilder.append("KW305 : 'KW' '305';\n"); + grammarBuilder.append("KW306 : 'KW' '306';\n"); + grammarBuilder.append("KW307 : 'KW' '307';\n"); + grammarBuilder.append("KW308 : 'KW' '308';\n"); + grammarBuilder.append("KW309 : 'KW' '309';\n"); + grammarBuilder.append("KW310 : 'KW' '310';\n"); + grammarBuilder.append("KW311 : 'KW' '311';\n"); + grammarBuilder.append("KW312 : 'KW' '312';\n"); + grammarBuilder.append("KW313 : 'KW' '313';\n"); + grammarBuilder.append("KW314 : 'KW' '314';\n"); + grammarBuilder.append("KW315 : 'KW' '315';\n"); + grammarBuilder.append("KW316 : 'KW' '316';\n"); + grammarBuilder.append("KW317 : 'KW' '317';\n"); + grammarBuilder.append("KW318 : 'KW' '318';\n"); + grammarBuilder.append("KW319 : 'KW' '319';\n"); + grammarBuilder.append("KW320 : 'KW' '320';\n"); + grammarBuilder.append("KW321 : 'KW' '321';\n"); + grammarBuilder.append("KW322 : 'KW' '322';\n"); + grammarBuilder.append("KW323 : 'KW' '323';\n"); + grammarBuilder.append("KW324 : 'KW' '324';\n"); + grammarBuilder.append("KW325 : 'KW' '325';\n"); + grammarBuilder.append("KW326 : 'KW' '326';\n"); + grammarBuilder.append("KW327 : 'KW' '327';\n"); + grammarBuilder.append("KW328 : 'KW' '328';\n"); + grammarBuilder.append("KW329 : 'KW' '329';\n"); + grammarBuilder.append("KW330 : 'KW' '330';\n"); + grammarBuilder.append("KW331 : 'KW' '331';\n"); + grammarBuilder.append("KW332 : 'KW' '332';\n"); + grammarBuilder.append("KW333 : 'KW' '333';\n"); + grammarBuilder.append("KW334 : 'KW' '334';\n"); + grammarBuilder.append("KW335 : 'KW' '335';\n"); + grammarBuilder.append("KW336 : 'KW' '336';\n"); + grammarBuilder.append("KW337 : 'KW' '337';\n"); + grammarBuilder.append("KW338 : 'KW' '338';\n"); + grammarBuilder.append("KW339 : 'KW' '339';\n"); + grammarBuilder.append("KW340 : 'KW' '340';\n"); + grammarBuilder.append("KW341 : 'KW' '341';\n"); + grammarBuilder.append("KW342 : 'KW' '342';\n"); + grammarBuilder.append("KW343 : 'KW' '343';\n"); + grammarBuilder.append("KW344 : 'KW' '344';\n"); + grammarBuilder.append("KW345 : 'KW' '345';\n"); + grammarBuilder.append("KW346 : 'KW' '346';\n"); + grammarBuilder.append("KW347 : 'KW' '347';\n"); + grammarBuilder.append("KW348 : 'KW' '348';\n"); + grammarBuilder.append("KW349 : 'KW' '349';\n"); + grammarBuilder.append("KW350 : 'KW' '350';\n"); + grammarBuilder.append("KW351 : 'KW' '351';\n"); + grammarBuilder.append("KW352 : 'KW' '352';\n"); + grammarBuilder.append("KW353 : 'KW' '353';\n"); + grammarBuilder.append("KW354 : 'KW' '354';\n"); + grammarBuilder.append("KW355 : 'KW' '355';\n"); + grammarBuilder.append("KW356 : 'KW' '356';\n"); + grammarBuilder.append("KW357 : 'KW' '357';\n"); + grammarBuilder.append("KW358 : 'KW' '358';\n"); + grammarBuilder.append("KW359 : 'KW' '359';\n"); + grammarBuilder.append("KW360 : 'KW' '360';\n"); + grammarBuilder.append("KW361 : 'KW' '361';\n"); + grammarBuilder.append("KW362 : 'KW' '362';\n"); + grammarBuilder.append("KW363 : 'KW' '363';\n"); + grammarBuilder.append("KW364 : 'KW' '364';\n"); + grammarBuilder.append("KW365 : 'KW' '365';\n"); + grammarBuilder.append("KW366 : 'KW' '366';\n"); + grammarBuilder.append("KW367 : 'KW' '367';\n"); + grammarBuilder.append("KW368 : 'KW' '368';\n"); + grammarBuilder.append("KW369 : 'KW' '369';\n"); + grammarBuilder.append("KW370 : 'KW' '370';\n"); + grammarBuilder.append("KW371 : 'KW' '371';\n"); + grammarBuilder.append("KW372 : 'KW' '372';\n"); + grammarBuilder.append("KW373 : 'KW' '373';\n"); + grammarBuilder.append("KW374 : 'KW' '374';\n"); + grammarBuilder.append("KW375 : 'KW' '375';\n"); + grammarBuilder.append("KW376 : 'KW' '376';\n"); + grammarBuilder.append("KW377 : 'KW' '377';\n"); + grammarBuilder.append("KW378 : 'KW' '378';\n"); + grammarBuilder.append("KW379 : 'KW' '379';\n"); + grammarBuilder.append("KW380 : 'KW' '380';\n"); + grammarBuilder.append("KW381 : 'KW' '381';\n"); + grammarBuilder.append("KW382 : 'KW' '382';\n"); + grammarBuilder.append("KW383 : 'KW' '383';\n"); + grammarBuilder.append("KW384 : 'KW' '384';\n"); + grammarBuilder.append("KW385 : 'KW' '385';\n"); + grammarBuilder.append("KW386 : 'KW' '386';\n"); + grammarBuilder.append("KW387 : 'KW' '387';\n"); + grammarBuilder.append("KW388 : 'KW' '388';\n"); + grammarBuilder.append("KW389 : 'KW' '389';\n"); + grammarBuilder.append("KW390 : 'KW' '390';\n"); + grammarBuilder.append("KW391 : 'KW' '391';\n"); + grammarBuilder.append("KW392 : 'KW' '392';\n"); + grammarBuilder.append("KW393 : 'KW' '393';\n"); + grammarBuilder.append("KW394 : 'KW' '394';\n"); + grammarBuilder.append("KW395 : 'KW' '395';\n"); + grammarBuilder.append("KW396 : 'KW' '396';\n"); + grammarBuilder.append("KW397 : 'KW' '397';\n"); + grammarBuilder.append("KW398 : 'KW' '398';\n"); + grammarBuilder.append("KW399 : 'KW' '399';\n"); + grammarBuilder.append("KW400 : 'KW' '400';\n"); + grammarBuilder.append("KW401 : 'KW' '401';\n"); + grammarBuilder.append("KW402 : 'KW' '402';\n"); + grammarBuilder.append("KW403 : 'KW' '403';\n"); + grammarBuilder.append("KW404 : 'KW' '404';\n"); + grammarBuilder.append("KW405 : 'KW' '405';\n"); + grammarBuilder.append("KW406 : 'KW' '406';\n"); + grammarBuilder.append("KW407 : 'KW' '407';\n"); + grammarBuilder.append("KW408 : 'KW' '408';\n"); + grammarBuilder.append("KW409 : 'KW' '409';\n"); + grammarBuilder.append("KW410 : 'KW' '410';\n"); + grammarBuilder.append("KW411 : 'KW' '411';\n"); + grammarBuilder.append("KW412 : 'KW' '412';\n"); + grammarBuilder.append("KW413 : 'KW' '413';\n"); + grammarBuilder.append("KW414 : 'KW' '414';\n"); + grammarBuilder.append("KW415 : 'KW' '415';\n"); + grammarBuilder.append("KW416 : 'KW' '416';\n"); + grammarBuilder.append("KW417 : 'KW' '417';\n"); + grammarBuilder.append("KW418 : 'KW' '418';\n"); + grammarBuilder.append("KW419 : 'KW' '419';\n"); + grammarBuilder.append("KW420 : 'KW' '420';\n"); + grammarBuilder.append("KW421 : 'KW' '421';\n"); + grammarBuilder.append("KW422 : 'KW' '422';\n"); + grammarBuilder.append("KW423 : 'KW' '423';\n"); + grammarBuilder.append("KW424 : 'KW' '424';\n"); + grammarBuilder.append("KW425 : 'KW' '425';\n"); + grammarBuilder.append("KW426 : 'KW' '426';\n"); + grammarBuilder.append("KW427 : 'KW' '427';\n"); + grammarBuilder.append("KW428 : 'KW' '428';\n"); + grammarBuilder.append("KW429 : 'KW' '429';\n"); + grammarBuilder.append("KW430 : 'KW' '430';\n"); + grammarBuilder.append("KW431 : 'KW' '431';\n"); + grammarBuilder.append("KW432 : 'KW' '432';\n"); + grammarBuilder.append("KW433 : 'KW' '433';\n"); + grammarBuilder.append("KW434 : 'KW' '434';\n"); + grammarBuilder.append("KW435 : 'KW' '435';\n"); + grammarBuilder.append("KW436 : 'KW' '436';\n"); + grammarBuilder.append("KW437 : 'KW' '437';\n"); + grammarBuilder.append("KW438 : 'KW' '438';\n"); + grammarBuilder.append("KW439 : 'KW' '439';\n"); + grammarBuilder.append("KW440 : 'KW' '440';\n"); + grammarBuilder.append("KW441 : 'KW' '441';\n"); + grammarBuilder.append("KW442 : 'KW' '442';\n"); + grammarBuilder.append("KW443 : 'KW' '443';\n"); + grammarBuilder.append("KW444 : 'KW' '444';\n"); + grammarBuilder.append("KW445 : 'KW' '445';\n"); + grammarBuilder.append("KW446 : 'KW' '446';\n"); + grammarBuilder.append("KW447 : 'KW' '447';\n"); + grammarBuilder.append("KW448 : 'KW' '448';\n"); + grammarBuilder.append("KW449 : 'KW' '449';\n"); + grammarBuilder.append("KW450 : 'KW' '450';\n"); + grammarBuilder.append("KW451 : 'KW' '451';\n"); + grammarBuilder.append("KW452 : 'KW' '452';\n"); + grammarBuilder.append("KW453 : 'KW' '453';\n"); + grammarBuilder.append("KW454 : 'KW' '454';\n"); + grammarBuilder.append("KW455 : 'KW' '455';\n"); + grammarBuilder.append("KW456 : 'KW' '456';\n"); + grammarBuilder.append("KW457 : 'KW' '457';\n"); + grammarBuilder.append("KW458 : 'KW' '458';\n"); + grammarBuilder.append("KW459 : 'KW' '459';\n"); + grammarBuilder.append("KW460 : 'KW' '460';\n"); + grammarBuilder.append("KW461 : 'KW' '461';\n"); + grammarBuilder.append("KW462 : 'KW' '462';\n"); + grammarBuilder.append("KW463 : 'KW' '463';\n"); + grammarBuilder.append("KW464 : 'KW' '464';\n"); + grammarBuilder.append("KW465 : 'KW' '465';\n"); + grammarBuilder.append("KW466 : 'KW' '466';\n"); + grammarBuilder.append("KW467 : 'KW' '467';\n"); + grammarBuilder.append("KW468 : 'KW' '468';\n"); + grammarBuilder.append("KW469 : 'KW' '469';\n"); + grammarBuilder.append("KW470 : 'KW' '470';\n"); + grammarBuilder.append("KW471 : 'KW' '471';\n"); + grammarBuilder.append("KW472 : 'KW' '472';\n"); + grammarBuilder.append("KW473 : 'KW' '473';\n"); + grammarBuilder.append("KW474 : 'KW' '474';\n"); + grammarBuilder.append("KW475 : 'KW' '475';\n"); + grammarBuilder.append("KW476 : 'KW' '476';\n"); + grammarBuilder.append("KW477 : 'KW' '477';\n"); + grammarBuilder.append("KW478 : 'KW' '478';\n"); + grammarBuilder.append("KW479 : 'KW' '479';\n"); + grammarBuilder.append("KW480 : 'KW' '480';\n"); + grammarBuilder.append("KW481 : 'KW' '481';\n"); + grammarBuilder.append("KW482 : 'KW' '482';\n"); + grammarBuilder.append("KW483 : 'KW' '483';\n"); + grammarBuilder.append("KW484 : 'KW' '484';\n"); + grammarBuilder.append("KW485 : 'KW' '485';\n"); + grammarBuilder.append("KW486 : 'KW' '486';\n"); + grammarBuilder.append("KW487 : 'KW' '487';\n"); + grammarBuilder.append("KW488 : 'KW' '488';\n"); + grammarBuilder.append("KW489 : 'KW' '489';\n"); + grammarBuilder.append("KW490 : 'KW' '490';\n"); + grammarBuilder.append("KW491 : 'KW' '491';\n"); + grammarBuilder.append("KW492 : 'KW' '492';\n"); + grammarBuilder.append("KW493 : 'KW' '493';\n"); + grammarBuilder.append("KW494 : 'KW' '494';\n"); + grammarBuilder.append("KW495 : 'KW' '495';\n"); + grammarBuilder.append("KW496 : 'KW' '496';\n"); + grammarBuilder.append("KW497 : 'KW' '497';\n"); + grammarBuilder.append("KW498 : 'KW' '498';\n"); + grammarBuilder.append("KW499 : 'KW' '499';\n"); + grammarBuilder.append("KW500 : 'KW' '500';\n"); + grammarBuilder.append("KW501 : 'KW' '501';\n"); + grammarBuilder.append("KW502 : 'KW' '502';\n"); + grammarBuilder.append("KW503 : 'KW' '503';\n"); + grammarBuilder.append("KW504 : 'KW' '504';\n"); + grammarBuilder.append("KW505 : 'KW' '505';\n"); + grammarBuilder.append("KW506 : 'KW' '506';\n"); + grammarBuilder.append("KW507 : 'KW' '507';\n"); + grammarBuilder.append("KW508 : 'KW' '508';\n"); + grammarBuilder.append("KW509 : 'KW' '509';\n"); + grammarBuilder.append("KW510 : 'KW' '510';\n"); + grammarBuilder.append("KW511 : 'KW' '511';\n"); + grammarBuilder.append("KW512 : 'KW' '512';\n"); + grammarBuilder.append("KW513 : 'KW' '513';\n"); + grammarBuilder.append("KW514 : 'KW' '514';\n"); + grammarBuilder.append("KW515 : 'KW' '515';\n"); + grammarBuilder.append("KW516 : 'KW' '516';\n"); + grammarBuilder.append("KW517 : 'KW' '517';\n"); + grammarBuilder.append("KW518 : 'KW' '518';\n"); + grammarBuilder.append("KW519 : 'KW' '519';\n"); + grammarBuilder.append("KW520 : 'KW' '520';\n"); + grammarBuilder.append("KW521 : 'KW' '521';\n"); + grammarBuilder.append("KW522 : 'KW' '522';\n"); + grammarBuilder.append("KW523 : 'KW' '523';\n"); + grammarBuilder.append("KW524 : 'KW' '524';\n"); + grammarBuilder.append("KW525 : 'KW' '525';\n"); + grammarBuilder.append("KW526 : 'KW' '526';\n"); + grammarBuilder.append("KW527 : 'KW' '527';\n"); + grammarBuilder.append("KW528 : 'KW' '528';\n"); + grammarBuilder.append("KW529 : 'KW' '529';\n"); + grammarBuilder.append("KW530 : 'KW' '530';\n"); + grammarBuilder.append("KW531 : 'KW' '531';\n"); + grammarBuilder.append("KW532 : 'KW' '532';\n"); + grammarBuilder.append("KW533 : 'KW' '533';\n"); + grammarBuilder.append("KW534 : 'KW' '534';\n"); + grammarBuilder.append("KW535 : 'KW' '535';\n"); + grammarBuilder.append("KW536 : 'KW' '536';\n"); + grammarBuilder.append("KW537 : 'KW' '537';\n"); + grammarBuilder.append("KW538 : 'KW' '538';\n"); + grammarBuilder.append("KW539 : 'KW' '539';\n"); + grammarBuilder.append("KW540 : 'KW' '540';\n"); + grammarBuilder.append("KW541 : 'KW' '541';\n"); + grammarBuilder.append("KW542 : 'KW' '542';\n"); + grammarBuilder.append("KW543 : 'KW' '543';\n"); + grammarBuilder.append("KW544 : 'KW' '544';\n"); + grammarBuilder.append("KW545 : 'KW' '545';\n"); + grammarBuilder.append("KW546 : 'KW' '546';\n"); + grammarBuilder.append("KW547 : 'KW' '547';\n"); + grammarBuilder.append("KW548 : 'KW' '548';\n"); + grammarBuilder.append("KW549 : 'KW' '549';\n"); + grammarBuilder.append("KW550 : 'KW' '550';\n"); + grammarBuilder.append("KW551 : 'KW' '551';\n"); + grammarBuilder.append("KW552 : 'KW' '552';\n"); + grammarBuilder.append("KW553 : 'KW' '553';\n"); + grammarBuilder.append("KW554 : 'KW' '554';\n"); + grammarBuilder.append("KW555 : 'KW' '555';\n"); + grammarBuilder.append("KW556 : 'KW' '556';\n"); + grammarBuilder.append("KW557 : 'KW' '557';\n"); + grammarBuilder.append("KW558 : 'KW' '558';\n"); + grammarBuilder.append("KW559 : 'KW' '559';\n"); + grammarBuilder.append("KW560 : 'KW' '560';\n"); + grammarBuilder.append("KW561 : 'KW' '561';\n"); + grammarBuilder.append("KW562 : 'KW' '562';\n"); + grammarBuilder.append("KW563 : 'KW' '563';\n"); + grammarBuilder.append("KW564 : 'KW' '564';\n"); + grammarBuilder.append("KW565 : 'KW' '565';\n"); + grammarBuilder.append("KW566 : 'KW' '566';\n"); + grammarBuilder.append("KW567 : 'KW' '567';\n"); + grammarBuilder.append("KW568 : 'KW' '568';\n"); + grammarBuilder.append("KW569 : 'KW' '569';\n"); + grammarBuilder.append("KW570 : 'KW' '570';\n"); + grammarBuilder.append("KW571 : 'KW' '571';\n"); + grammarBuilder.append("KW572 : 'KW' '572';\n"); + grammarBuilder.append("KW573 : 'KW' '573';\n"); + grammarBuilder.append("KW574 : 'KW' '574';\n"); + grammarBuilder.append("KW575 : 'KW' '575';\n"); + grammarBuilder.append("KW576 : 'KW' '576';\n"); + grammarBuilder.append("KW577 : 'KW' '577';\n"); + grammarBuilder.append("KW578 : 'KW' '578';\n"); + grammarBuilder.append("KW579 : 'KW' '579';\n"); + grammarBuilder.append("KW580 : 'KW' '580';\n"); + grammarBuilder.append("KW581 : 'KW' '581';\n"); + grammarBuilder.append("KW582 : 'KW' '582';\n"); + grammarBuilder.append("KW583 : 'KW' '583';\n"); + grammarBuilder.append("KW584 : 'KW' '584';\n"); + grammarBuilder.append("KW585 : 'KW' '585';\n"); + grammarBuilder.append("KW586 : 'KW' '586';\n"); + grammarBuilder.append("KW587 : 'KW' '587';\n"); + grammarBuilder.append("KW588 : 'KW' '588';\n"); + grammarBuilder.append("KW589 : 'KW' '589';\n"); + grammarBuilder.append("KW590 : 'KW' '590';\n"); + grammarBuilder.append("KW591 : 'KW' '591';\n"); + grammarBuilder.append("KW592 : 'KW' '592';\n"); + grammarBuilder.append("KW593 : 'KW' '593';\n"); + grammarBuilder.append("KW594 : 'KW' '594';\n"); + grammarBuilder.append("KW595 : 'KW' '595';\n"); + grammarBuilder.append("KW596 : 'KW' '596';\n"); + grammarBuilder.append("KW597 : 'KW' '597';\n"); + grammarBuilder.append("KW598 : 'KW' '598';\n"); + grammarBuilder.append("KW599 : 'KW' '599';\n"); + grammarBuilder.append("KW600 : 'KW' '600';\n"); + grammarBuilder.append("KW601 : 'KW' '601';\n"); + grammarBuilder.append("KW602 : 'KW' '602';\n"); + grammarBuilder.append("KW603 : 'KW' '603';\n"); + grammarBuilder.append("KW604 : 'KW' '604';\n"); + grammarBuilder.append("KW605 : 'KW' '605';\n"); + grammarBuilder.append("KW606 : 'KW' '606';\n"); + grammarBuilder.append("KW607 : 'KW' '607';\n"); + grammarBuilder.append("KW608 : 'KW' '608';\n"); + grammarBuilder.append("KW609 : 'KW' '609';\n"); + grammarBuilder.append("KW610 : 'KW' '610';\n"); + grammarBuilder.append("KW611 : 'KW' '611';\n"); + grammarBuilder.append("KW612 : 'KW' '612';\n"); + grammarBuilder.append("KW613 : 'KW' '613';\n"); + grammarBuilder.append("KW614 : 'KW' '614';\n"); + grammarBuilder.append("KW615 : 'KW' '615';\n"); + grammarBuilder.append("KW616 : 'KW' '616';\n"); + grammarBuilder.append("KW617 : 'KW' '617';\n"); + grammarBuilder.append("KW618 : 'KW' '618';\n"); + grammarBuilder.append("KW619 : 'KW' '619';\n"); + grammarBuilder.append("KW620 : 'KW' '620';\n"); + grammarBuilder.append("KW621 : 'KW' '621';\n"); + grammarBuilder.append("KW622 : 'KW' '622';\n"); + grammarBuilder.append("KW623 : 'KW' '623';\n"); + grammarBuilder.append("KW624 : 'KW' '624';\n"); + grammarBuilder.append("KW625 : 'KW' '625';\n"); + grammarBuilder.append("KW626 : 'KW' '626';\n"); + grammarBuilder.append("KW627 : 'KW' '627';\n"); + grammarBuilder.append("KW628 : 'KW' '628';\n"); + grammarBuilder.append("KW629 : 'KW' '629';\n"); + grammarBuilder.append("KW630 : 'KW' '630';\n"); + grammarBuilder.append("KW631 : 'KW' '631';\n"); + grammarBuilder.append("KW632 : 'KW' '632';\n"); + grammarBuilder.append("KW633 : 'KW' '633';\n"); + grammarBuilder.append("KW634 : 'KW' '634';\n"); + grammarBuilder.append("KW635 : 'KW' '635';\n"); + grammarBuilder.append("KW636 : 'KW' '636';\n"); + grammarBuilder.append("KW637 : 'KW' '637';\n"); + grammarBuilder.append("KW638 : 'KW' '638';\n"); + grammarBuilder.append("KW639 : 'KW' '639';\n"); + grammarBuilder.append("KW640 : 'KW' '640';\n"); + grammarBuilder.append("KW641 : 'KW' '641';\n"); + grammarBuilder.append("KW642 : 'KW' '642';\n"); + grammarBuilder.append("KW643 : 'KW' '643';\n"); + grammarBuilder.append("KW644 : 'KW' '644';\n"); + grammarBuilder.append("KW645 : 'KW' '645';\n"); + grammarBuilder.append("KW646 : 'KW' '646';\n"); + grammarBuilder.append("KW647 : 'KW' '647';\n"); + grammarBuilder.append("KW648 : 'KW' '648';\n"); + grammarBuilder.append("KW649 : 'KW' '649';\n"); + grammarBuilder.append("KW650 : 'KW' '650';\n"); + grammarBuilder.append("KW651 : 'KW' '651';\n"); + grammarBuilder.append("KW652 : 'KW' '652';\n"); + grammarBuilder.append("KW653 : 'KW' '653';\n"); + grammarBuilder.append("KW654 : 'KW' '654';\n"); + grammarBuilder.append("KW655 : 'KW' '655';\n"); + grammarBuilder.append("KW656 : 'KW' '656';\n"); + grammarBuilder.append("KW657 : 'KW' '657';\n"); + grammarBuilder.append("KW658 : 'KW' '658';\n"); + grammarBuilder.append("KW659 : 'KW' '659';\n"); + grammarBuilder.append("KW660 : 'KW' '660';\n"); + grammarBuilder.append("KW661 : 'KW' '661';\n"); + grammarBuilder.append("KW662 : 'KW' '662';\n"); + grammarBuilder.append("KW663 : 'KW' '663';\n"); + grammarBuilder.append("KW664 : 'KW' '664';\n"); + grammarBuilder.append("KW665 : 'KW' '665';\n"); + grammarBuilder.append("KW666 : 'KW' '666';\n"); + grammarBuilder.append("KW667 : 'KW' '667';\n"); + grammarBuilder.append("KW668 : 'KW' '668';\n"); + grammarBuilder.append("KW669 : 'KW' '669';\n"); + grammarBuilder.append("KW670 : 'KW' '670';\n"); + grammarBuilder.append("KW671 : 'KW' '671';\n"); + grammarBuilder.append("KW672 : 'KW' '672';\n"); + grammarBuilder.append("KW673 : 'KW' '673';\n"); + grammarBuilder.append("KW674 : 'KW' '674';\n"); + grammarBuilder.append("KW675 : 'KW' '675';\n"); + grammarBuilder.append("KW676 : 'KW' '676';\n"); + grammarBuilder.append("KW677 : 'KW' '677';\n"); + grammarBuilder.append("KW678 : 'KW' '678';\n"); + grammarBuilder.append("KW679 : 'KW' '679';\n"); + grammarBuilder.append("KW680 : 'KW' '680';\n"); + grammarBuilder.append("KW681 : 'KW' '681';\n"); + grammarBuilder.append("KW682 : 'KW' '682';\n"); + grammarBuilder.append("KW683 : 'KW' '683';\n"); + grammarBuilder.append("KW684 : 'KW' '684';\n"); + grammarBuilder.append("KW685 : 'KW' '685';\n"); + grammarBuilder.append("KW686 : 'KW' '686';\n"); + grammarBuilder.append("KW687 : 'KW' '687';\n"); + grammarBuilder.append("KW688 : 'KW' '688';\n"); + grammarBuilder.append("KW689 : 'KW' '689';\n"); + grammarBuilder.append("KW690 : 'KW' '690';\n"); + grammarBuilder.append("KW691 : 'KW' '691';\n"); + grammarBuilder.append("KW692 : 'KW' '692';\n"); + grammarBuilder.append("KW693 : 'KW' '693';\n"); + grammarBuilder.append("KW694 : 'KW' '694';\n"); + grammarBuilder.append("KW695 : 'KW' '695';\n"); + grammarBuilder.append("KW696 : 'KW' '696';\n"); + grammarBuilder.append("KW697 : 'KW' '697';\n"); + grammarBuilder.append("KW698 : 'KW' '698';\n"); + grammarBuilder.append("KW699 : 'KW' '699';\n"); + grammarBuilder.append("KW700 : 'KW' '700';\n"); + grammarBuilder.append("KW701 : 'KW' '701';\n"); + grammarBuilder.append("KW702 : 'KW' '702';\n"); + grammarBuilder.append("KW703 : 'KW' '703';\n"); + grammarBuilder.append("KW704 : 'KW' '704';\n"); + grammarBuilder.append("KW705 : 'KW' '705';\n"); + grammarBuilder.append("KW706 : 'KW' '706';\n"); + grammarBuilder.append("KW707 : 'KW' '707';\n"); + grammarBuilder.append("KW708 : 'KW' '708';\n"); + grammarBuilder.append("KW709 : 'KW' '709';\n"); + grammarBuilder.append("KW710 : 'KW' '710';\n"); + grammarBuilder.append("KW711 : 'KW' '711';\n"); + grammarBuilder.append("KW712 : 'KW' '712';\n"); + grammarBuilder.append("KW713 : 'KW' '713';\n"); + grammarBuilder.append("KW714 : 'KW' '714';\n"); + grammarBuilder.append("KW715 : 'KW' '715';\n"); + grammarBuilder.append("KW716 : 'KW' '716';\n"); + grammarBuilder.append("KW717 : 'KW' '717';\n"); + grammarBuilder.append("KW718 : 'KW' '718';\n"); + grammarBuilder.append("KW719 : 'KW' '719';\n"); + grammarBuilder.append("KW720 : 'KW' '720';\n"); + grammarBuilder.append("KW721 : 'KW' '721';\n"); + grammarBuilder.append("KW722 : 'KW' '722';\n"); + grammarBuilder.append("KW723 : 'KW' '723';\n"); + grammarBuilder.append("KW724 : 'KW' '724';\n"); + grammarBuilder.append("KW725 : 'KW' '725';\n"); + grammarBuilder.append("KW726 : 'KW' '726';\n"); + grammarBuilder.append("KW727 : 'KW' '727';\n"); + grammarBuilder.append("KW728 : 'KW' '728';\n"); + grammarBuilder.append("KW729 : 'KW' '729';\n"); + grammarBuilder.append("KW730 : 'KW' '730';\n"); + grammarBuilder.append("KW731 : 'KW' '731';\n"); + grammarBuilder.append("KW732 : 'KW' '732';\n"); + grammarBuilder.append("KW733 : 'KW' '733';\n"); + grammarBuilder.append("KW734 : 'KW' '734';\n"); + grammarBuilder.append("KW735 : 'KW' '735';\n"); + grammarBuilder.append("KW736 : 'KW' '736';\n"); + grammarBuilder.append("KW737 : 'KW' '737';\n"); + grammarBuilder.append("KW738 : 'KW' '738';\n"); + grammarBuilder.append("KW739 : 'KW' '739';\n"); + grammarBuilder.append("KW740 : 'KW' '740';\n"); + grammarBuilder.append("KW741 : 'KW' '741';\n"); + grammarBuilder.append("KW742 : 'KW' '742';\n"); + grammarBuilder.append("KW743 : 'KW' '743';\n"); + grammarBuilder.append("KW744 : 'KW' '744';\n"); + grammarBuilder.append("KW745 : 'KW' '745';\n"); + grammarBuilder.append("KW746 : 'KW' '746';\n"); + grammarBuilder.append("KW747 : 'KW' '747';\n"); + grammarBuilder.append("KW748 : 'KW' '748';\n"); + grammarBuilder.append("KW749 : 'KW' '749';\n"); + grammarBuilder.append("KW750 : 'KW' '750';\n"); + grammarBuilder.append("KW751 : 'KW' '751';\n"); + grammarBuilder.append("KW752 : 'KW' '752';\n"); + grammarBuilder.append("KW753 : 'KW' '753';\n"); + grammarBuilder.append("KW754 : 'KW' '754';\n"); + grammarBuilder.append("KW755 : 'KW' '755';\n"); + grammarBuilder.append("KW756 : 'KW' '756';\n"); + grammarBuilder.append("KW757 : 'KW' '757';\n"); + grammarBuilder.append("KW758 : 'KW' '758';\n"); + grammarBuilder.append("KW759 : 'KW' '759';\n"); + grammarBuilder.append("KW760 : 'KW' '760';\n"); + grammarBuilder.append("KW761 : 'KW' '761';\n"); + grammarBuilder.append("KW762 : 'KW' '762';\n"); + grammarBuilder.append("KW763 : 'KW' '763';\n"); + grammarBuilder.append("KW764 : 'KW' '764';\n"); + grammarBuilder.append("KW765 : 'KW' '765';\n"); + grammarBuilder.append("KW766 : 'KW' '766';\n"); + grammarBuilder.append("KW767 : 'KW' '767';\n"); + grammarBuilder.append("KW768 : 'KW' '768';\n"); + grammarBuilder.append("KW769 : 'KW' '769';\n"); + grammarBuilder.append("KW770 : 'KW' '770';\n"); + grammarBuilder.append("KW771 : 'KW' '771';\n"); + grammarBuilder.append("KW772 : 'KW' '772';\n"); + grammarBuilder.append("KW773 : 'KW' '773';\n"); + grammarBuilder.append("KW774 : 'KW' '774';\n"); + grammarBuilder.append("KW775 : 'KW' '775';\n"); + grammarBuilder.append("KW776 : 'KW' '776';\n"); + grammarBuilder.append("KW777 : 'KW' '777';\n"); + grammarBuilder.append("KW778 : 'KW' '778';\n"); + grammarBuilder.append("KW779 : 'KW' '779';\n"); + grammarBuilder.append("KW780 : 'KW' '780';\n"); + grammarBuilder.append("KW781 : 'KW' '781';\n"); + grammarBuilder.append("KW782 : 'KW' '782';\n"); + grammarBuilder.append("KW783 : 'KW' '783';\n"); + grammarBuilder.append("KW784 : 'KW' '784';\n"); + grammarBuilder.append("KW785 : 'KW' '785';\n"); + grammarBuilder.append("KW786 : 'KW' '786';\n"); + grammarBuilder.append("KW787 : 'KW' '787';\n"); + grammarBuilder.append("KW788 : 'KW' '788';\n"); + grammarBuilder.append("KW789 : 'KW' '789';\n"); + grammarBuilder.append("KW790 : 'KW' '790';\n"); + grammarBuilder.append("KW791 : 'KW' '791';\n"); + grammarBuilder.append("KW792 : 'KW' '792';\n"); + grammarBuilder.append("KW793 : 'KW' '793';\n"); + grammarBuilder.append("KW794 : 'KW' '794';\n"); + grammarBuilder.append("KW795 : 'KW' '795';\n"); + grammarBuilder.append("KW796 : 'KW' '796';\n"); + grammarBuilder.append("KW797 : 'KW' '797';\n"); + grammarBuilder.append("KW798 : 'KW' '798';\n"); + grammarBuilder.append("KW799 : 'KW' '799';\n"); + grammarBuilder.append("KW800 : 'KW' '800';\n"); + grammarBuilder.append("KW801 : 'KW' '801';\n"); + grammarBuilder.append("KW802 : 'KW' '802';\n"); + grammarBuilder.append("KW803 : 'KW' '803';\n"); + grammarBuilder.append("KW804 : 'KW' '804';\n"); + grammarBuilder.append("KW805 : 'KW' '805';\n"); + grammarBuilder.append("KW806 : 'KW' '806';\n"); + grammarBuilder.append("KW807 : 'KW' '807';\n"); + grammarBuilder.append("KW808 : 'KW' '808';\n"); + grammarBuilder.append("KW809 : 'KW' '809';\n"); + grammarBuilder.append("KW810 : 'KW' '810';\n"); + grammarBuilder.append("KW811 : 'KW' '811';\n"); + grammarBuilder.append("KW812 : 'KW' '812';\n"); + grammarBuilder.append("KW813 : 'KW' '813';\n"); + grammarBuilder.append("KW814 : 'KW' '814';\n"); + grammarBuilder.append("KW815 : 'KW' '815';\n"); + grammarBuilder.append("KW816 : 'KW' '816';\n"); + grammarBuilder.append("KW817 : 'KW' '817';\n"); + grammarBuilder.append("KW818 : 'KW' '818';\n"); + grammarBuilder.append("KW819 : 'KW' '819';\n"); + grammarBuilder.append("KW820 : 'KW' '820';\n"); + grammarBuilder.append("KW821 : 'KW' '821';\n"); + grammarBuilder.append("KW822 : 'KW' '822';\n"); + grammarBuilder.append("KW823 : 'KW' '823';\n"); + grammarBuilder.append("KW824 : 'KW' '824';\n"); + grammarBuilder.append("KW825 : 'KW' '825';\n"); + grammarBuilder.append("KW826 : 'KW' '826';\n"); + grammarBuilder.append("KW827 : 'KW' '827';\n"); + grammarBuilder.append("KW828 : 'KW' '828';\n"); + grammarBuilder.append("KW829 : 'KW' '829';\n"); + grammarBuilder.append("KW830 : 'KW' '830';\n"); + grammarBuilder.append("KW831 : 'KW' '831';\n"); + grammarBuilder.append("KW832 : 'KW' '832';\n"); + grammarBuilder.append("KW833 : 'KW' '833';\n"); + grammarBuilder.append("KW834 : 'KW' '834';\n"); + grammarBuilder.append("KW835 : 'KW' '835';\n"); + grammarBuilder.append("KW836 : 'KW' '836';\n"); + grammarBuilder.append("KW837 : 'KW' '837';\n"); + grammarBuilder.append("KW838 : 'KW' '838';\n"); + grammarBuilder.append("KW839 : 'KW' '839';\n"); + grammarBuilder.append("KW840 : 'KW' '840';\n"); + grammarBuilder.append("KW841 : 'KW' '841';\n"); + grammarBuilder.append("KW842 : 'KW' '842';\n"); + grammarBuilder.append("KW843 : 'KW' '843';\n"); + grammarBuilder.append("KW844 : 'KW' '844';\n"); + grammarBuilder.append("KW845 : 'KW' '845';\n"); + grammarBuilder.append("KW846 : 'KW' '846';\n"); + grammarBuilder.append("KW847 : 'KW' '847';\n"); + grammarBuilder.append("KW848 : 'KW' '848';\n"); + grammarBuilder.append("KW849 : 'KW' '849';\n"); + grammarBuilder.append("KW850 : 'KW' '850';\n"); + grammarBuilder.append("KW851 : 'KW' '851';\n"); + grammarBuilder.append("KW852 : 'KW' '852';\n"); + grammarBuilder.append("KW853 : 'KW' '853';\n"); + grammarBuilder.append("KW854 : 'KW' '854';\n"); + grammarBuilder.append("KW855 : 'KW' '855';\n"); + grammarBuilder.append("KW856 : 'KW' '856';\n"); + grammarBuilder.append("KW857 : 'KW' '857';\n"); + grammarBuilder.append("KW858 : 'KW' '858';\n"); + grammarBuilder.append("KW859 : 'KW' '859';\n"); + grammarBuilder.append("KW860 : 'KW' '860';\n"); + grammarBuilder.append("KW861 : 'KW' '861';\n"); + grammarBuilder.append("KW862 : 'KW' '862';\n"); + grammarBuilder.append("KW863 : 'KW' '863';\n"); + grammarBuilder.append("KW864 : 'KW' '864';\n"); + grammarBuilder.append("KW865 : 'KW' '865';\n"); + grammarBuilder.append("KW866 : 'KW' '866';\n"); + grammarBuilder.append("KW867 : 'KW' '867';\n"); + grammarBuilder.append("KW868 : 'KW' '868';\n"); + grammarBuilder.append("KW869 : 'KW' '869';\n"); + grammarBuilder.append("KW870 : 'KW' '870';\n"); + grammarBuilder.append("KW871 : 'KW' '871';\n"); + grammarBuilder.append("KW872 : 'KW' '872';\n"); + grammarBuilder.append("KW873 : 'KW' '873';\n"); + grammarBuilder.append("KW874 : 'KW' '874';\n"); + grammarBuilder.append("KW875 : 'KW' '875';\n"); + grammarBuilder.append("KW876 : 'KW' '876';\n"); + grammarBuilder.append("KW877 : 'KW' '877';\n"); + grammarBuilder.append("KW878 : 'KW' '878';\n"); + grammarBuilder.append("KW879 : 'KW' '879';\n"); + grammarBuilder.append("KW880 : 'KW' '880';\n"); + grammarBuilder.append("KW881 : 'KW' '881';\n"); + grammarBuilder.append("KW882 : 'KW' '882';\n"); + grammarBuilder.append("KW883 : 'KW' '883';\n"); + grammarBuilder.append("KW884 : 'KW' '884';\n"); + grammarBuilder.append("KW885 : 'KW' '885';\n"); + grammarBuilder.append("KW886 : 'KW' '886';\n"); + grammarBuilder.append("KW887 : 'KW' '887';\n"); + grammarBuilder.append("KW888 : 'KW' '888';\n"); + grammarBuilder.append("KW889 : 'KW' '889';\n"); + grammarBuilder.append("KW890 : 'KW' '890';\n"); + grammarBuilder.append("KW891 : 'KW' '891';\n"); + grammarBuilder.append("KW892 : 'KW' '892';\n"); + grammarBuilder.append("KW893 : 'KW' '893';\n"); + grammarBuilder.append("KW894 : 'KW' '894';\n"); + grammarBuilder.append("KW895 : 'KW' '895';\n"); + grammarBuilder.append("KW896 : 'KW' '896';\n"); + grammarBuilder.append("KW897 : 'KW' '897';\n"); + grammarBuilder.append("KW898 : 'KW' '898';\n"); + grammarBuilder.append("KW899 : 'KW' '899';\n"); + grammarBuilder.append("KW900 : 'KW' '900';\n"); + grammarBuilder.append("KW901 : 'KW' '901';\n"); + grammarBuilder.append("KW902 : 'KW' '902';\n"); + grammarBuilder.append("KW903 : 'KW' '903';\n"); + grammarBuilder.append("KW904 : 'KW' '904';\n"); + grammarBuilder.append("KW905 : 'KW' '905';\n"); + grammarBuilder.append("KW906 : 'KW' '906';\n"); + grammarBuilder.append("KW907 : 'KW' '907';\n"); + grammarBuilder.append("KW908 : 'KW' '908';\n"); + grammarBuilder.append("KW909 : 'KW' '909';\n"); + grammarBuilder.append("KW910 : 'KW' '910';\n"); + grammarBuilder.append("KW911 : 'KW' '911';\n"); + grammarBuilder.append("KW912 : 'KW' '912';\n"); + grammarBuilder.append("KW913 : 'KW' '913';\n"); + grammarBuilder.append("KW914 : 'KW' '914';\n"); + grammarBuilder.append("KW915 : 'KW' '915';\n"); + grammarBuilder.append("KW916 : 'KW' '916';\n"); + grammarBuilder.append("KW917 : 'KW' '917';\n"); + grammarBuilder.append("KW918 : 'KW' '918';\n"); + grammarBuilder.append("KW919 : 'KW' '919';\n"); + grammarBuilder.append("KW920 : 'KW' '920';\n"); + grammarBuilder.append("KW921 : 'KW' '921';\n"); + grammarBuilder.append("KW922 : 'KW' '922';\n"); + grammarBuilder.append("KW923 : 'KW' '923';\n"); + grammarBuilder.append("KW924 : 'KW' '924';\n"); + grammarBuilder.append("KW925 : 'KW' '925';\n"); + grammarBuilder.append("KW926 : 'KW' '926';\n"); + grammarBuilder.append("KW927 : 'KW' '927';\n"); + grammarBuilder.append("KW928 : 'KW' '928';\n"); + grammarBuilder.append("KW929 : 'KW' '929';\n"); + grammarBuilder.append("KW930 : 'KW' '930';\n"); + grammarBuilder.append("KW931 : 'KW' '931';\n"); + grammarBuilder.append("KW932 : 'KW' '932';\n"); + grammarBuilder.append("KW933 : 'KW' '933';\n"); + grammarBuilder.append("KW934 : 'KW' '934';\n"); + grammarBuilder.append("KW935 : 'KW' '935';\n"); + grammarBuilder.append("KW936 : 'KW' '936';\n"); + grammarBuilder.append("KW937 : 'KW' '937';\n"); + grammarBuilder.append("KW938 : 'KW' '938';\n"); + grammarBuilder.append("KW939 : 'KW' '939';\n"); + grammarBuilder.append("KW940 : 'KW' '940';\n"); + grammarBuilder.append("KW941 : 'KW' '941';\n"); + grammarBuilder.append("KW942 : 'KW' '942';\n"); + grammarBuilder.append("KW943 : 'KW' '943';\n"); + grammarBuilder.append("KW944 : 'KW' '944';\n"); + grammarBuilder.append("KW945 : 'KW' '945';\n"); + grammarBuilder.append("KW946 : 'KW' '946';\n"); + grammarBuilder.append("KW947 : 'KW' '947';\n"); + grammarBuilder.append("KW948 : 'KW' '948';\n"); + grammarBuilder.append("KW949 : 'KW' '949';\n"); + grammarBuilder.append("KW950 : 'KW' '950';\n"); + grammarBuilder.append("KW951 : 'KW' '951';\n"); + grammarBuilder.append("KW952 : 'KW' '952';\n"); + grammarBuilder.append("KW953 : 'KW' '953';\n"); + grammarBuilder.append("KW954 : 'KW' '954';\n"); + grammarBuilder.append("KW955 : 'KW' '955';\n"); + grammarBuilder.append("KW956 : 'KW' '956';\n"); + grammarBuilder.append("KW957 : 'KW' '957';\n"); + grammarBuilder.append("KW958 : 'KW' '958';\n"); + grammarBuilder.append("KW959 : 'KW' '959';\n"); + grammarBuilder.append("KW960 : 'KW' '960';\n"); + grammarBuilder.append("KW961 : 'KW' '961';\n"); + grammarBuilder.append("KW962 : 'KW' '962';\n"); + grammarBuilder.append("KW963 : 'KW' '963';\n"); + grammarBuilder.append("KW964 : 'KW' '964';\n"); + grammarBuilder.append("KW965 : 'KW' '965';\n"); + grammarBuilder.append("KW966 : 'KW' '966';\n"); + grammarBuilder.append("KW967 : 'KW' '967';\n"); + grammarBuilder.append("KW968 : 'KW' '968';\n"); + grammarBuilder.append("KW969 : 'KW' '969';\n"); + grammarBuilder.append("KW970 : 'KW' '970';\n"); + grammarBuilder.append("KW971 : 'KW' '971';\n"); + grammarBuilder.append("KW972 : 'KW' '972';\n"); + grammarBuilder.append("KW973 : 'KW' '973';\n"); + grammarBuilder.append("KW974 : 'KW' '974';\n"); + grammarBuilder.append("KW975 : 'KW' '975';\n"); + grammarBuilder.append("KW976 : 'KW' '976';\n"); + grammarBuilder.append("KW977 : 'KW' '977';\n"); + grammarBuilder.append("KW978 : 'KW' '978';\n"); + grammarBuilder.append("KW979 : 'KW' '979';\n"); + grammarBuilder.append("KW980 : 'KW' '980';\n"); + grammarBuilder.append("KW981 : 'KW' '981';\n"); + grammarBuilder.append("KW982 : 'KW' '982';\n"); + grammarBuilder.append("KW983 : 'KW' '983';\n"); + grammarBuilder.append("KW984 : 'KW' '984';\n"); + grammarBuilder.append("KW985 : 'KW' '985';\n"); + grammarBuilder.append("KW986 : 'KW' '986';\n"); + grammarBuilder.append("KW987 : 'KW' '987';\n"); + grammarBuilder.append("KW988 : 'KW' '988';\n"); + grammarBuilder.append("KW989 : 'KW' '989';\n"); + grammarBuilder.append("KW990 : 'KW' '990';\n"); + grammarBuilder.append("KW991 : 'KW' '991';\n"); + grammarBuilder.append("KW992 : 'KW' '992';\n"); + grammarBuilder.append("KW993 : 'KW' '993';\n"); + grammarBuilder.append("KW994 : 'KW' '994';\n"); + grammarBuilder.append("KW995 : 'KW' '995';\n"); + grammarBuilder.append("KW996 : 'KW' '996';\n"); + grammarBuilder.append("KW997 : 'KW' '997';\n"); + grammarBuilder.append("KW998 : 'KW' '998';\n"); + grammarBuilder.append("KW999 : 'KW' '999';\n"); + grammarBuilder.append("KW1000 : 'KW' '1000';\n"); + grammarBuilder.append("KW1001 : 'KW' '1001';\n"); + grammarBuilder.append("KW1002 : 'KW' '1002';\n"); + grammarBuilder.append("KW1003 : 'KW' '1003';\n"); + grammarBuilder.append("KW1004 : 'KW' '1004';\n"); + grammarBuilder.append("KW1005 : 'KW' '1005';\n"); + grammarBuilder.append("KW1006 : 'KW' '1006';\n"); + grammarBuilder.append("KW1007 : 'KW' '1007';\n"); + grammarBuilder.append("KW1008 : 'KW' '1008';\n"); + grammarBuilder.append("KW1009 : 'KW' '1009';\n"); + grammarBuilder.append("KW1010 : 'KW' '1010';\n"); + grammarBuilder.append("KW1011 : 'KW' '1011';\n"); + grammarBuilder.append("KW1012 : 'KW' '1012';\n"); + grammarBuilder.append("KW1013 : 'KW' '1013';\n"); + grammarBuilder.append("KW1014 : 'KW' '1014';\n"); + grammarBuilder.append("KW1015 : 'KW' '1015';\n"); + grammarBuilder.append("KW1016 : 'KW' '1016';\n"); + grammarBuilder.append("KW1017 : 'KW' '1017';\n"); + grammarBuilder.append("KW1018 : 'KW' '1018';\n"); + grammarBuilder.append("KW1019 : 'KW' '1019';\n"); + grammarBuilder.append("KW1020 : 'KW' '1020';\n"); + grammarBuilder.append("KW1021 : 'KW' '1021';\n"); + grammarBuilder.append("KW1022 : 'KW' '1022';\n"); + grammarBuilder.append("KW1023 : 'KW' '1023';\n"); + grammarBuilder.append("KW1024 : 'KW' '1024';\n"); + grammarBuilder.append("KW1025 : 'KW' '1025';\n"); + grammarBuilder.append("KW1026 : 'KW' '1026';\n"); + grammarBuilder.append("KW1027 : 'KW' '1027';\n"); + grammarBuilder.append("KW1028 : 'KW' '1028';\n"); + grammarBuilder.append("KW1029 : 'KW' '1029';\n"); + grammarBuilder.append("KW1030 : 'KW' '1030';\n"); + grammarBuilder.append("KW1031 : 'KW' '1031';\n"); + grammarBuilder.append("KW1032 : 'KW' '1032';\n"); + grammarBuilder.append("KW1033 : 'KW' '1033';\n"); + grammarBuilder.append("KW1034 : 'KW' '1034';\n"); + grammarBuilder.append("KW1035 : 'KW' '1035';\n"); + grammarBuilder.append("KW1036 : 'KW' '1036';\n"); + grammarBuilder.append("KW1037 : 'KW' '1037';\n"); + grammarBuilder.append("KW1038 : 'KW' '1038';\n"); + grammarBuilder.append("KW1039 : 'KW' '1039';\n"); + grammarBuilder.append("KW1040 : 'KW' '1040';\n"); + grammarBuilder.append("KW1041 : 'KW' '1041';\n"); + grammarBuilder.append("KW1042 : 'KW' '1042';\n"); + grammarBuilder.append("KW1043 : 'KW' '1043';\n"); + grammarBuilder.append("KW1044 : 'KW' '1044';\n"); + grammarBuilder.append("KW1045 : 'KW' '1045';\n"); + grammarBuilder.append("KW1046 : 'KW' '1046';\n"); + grammarBuilder.append("KW1047 : 'KW' '1047';\n"); + grammarBuilder.append("KW1048 : 'KW' '1048';\n"); + grammarBuilder.append("KW1049 : 'KW' '1049';\n"); + grammarBuilder.append("KW1050 : 'KW' '1050';\n"); + grammarBuilder.append("KW1051 : 'KW' '1051';\n"); + grammarBuilder.append("KW1052 : 'KW' '1052';\n"); + grammarBuilder.append("KW1053 : 'KW' '1053';\n"); + grammarBuilder.append("KW1054 : 'KW' '1054';\n"); + grammarBuilder.append("KW1055 : 'KW' '1055';\n"); + grammarBuilder.append("KW1056 : 'KW' '1056';\n"); + grammarBuilder.append("KW1057 : 'KW' '1057';\n"); + grammarBuilder.append("KW1058 : 'KW' '1058';\n"); + grammarBuilder.append("KW1059 : 'KW' '1059';\n"); + grammarBuilder.append("KW1060 : 'KW' '1060';\n"); + grammarBuilder.append("KW1061 : 'KW' '1061';\n"); + grammarBuilder.append("KW1062 : 'KW' '1062';\n"); + grammarBuilder.append("KW1063 : 'KW' '1063';\n"); + grammarBuilder.append("KW1064 : 'KW' '1064';\n"); + grammarBuilder.append("KW1065 : 'KW' '1065';\n"); + grammarBuilder.append("KW1066 : 'KW' '1066';\n"); + grammarBuilder.append("KW1067 : 'KW' '1067';\n"); + grammarBuilder.append("KW1068 : 'KW' '1068';\n"); + grammarBuilder.append("KW1069 : 'KW' '1069';\n"); + grammarBuilder.append("KW1070 : 'KW' '1070';\n"); + grammarBuilder.append("KW1071 : 'KW' '1071';\n"); + grammarBuilder.append("KW1072 : 'KW' '1072';\n"); + grammarBuilder.append("KW1073 : 'KW' '1073';\n"); + grammarBuilder.append("KW1074 : 'KW' '1074';\n"); + grammarBuilder.append("KW1075 : 'KW' '1075';\n"); + grammarBuilder.append("KW1076 : 'KW' '1076';\n"); + grammarBuilder.append("KW1077 : 'KW' '1077';\n"); + grammarBuilder.append("KW1078 : 'KW' '1078';\n"); + grammarBuilder.append("KW1079 : 'KW' '1079';\n"); + grammarBuilder.append("KW1080 : 'KW' '1080';\n"); + grammarBuilder.append("KW1081 : 'KW' '1081';\n"); + grammarBuilder.append("KW1082 : 'KW' '1082';\n"); + grammarBuilder.append("KW1083 : 'KW' '1083';\n"); + grammarBuilder.append("KW1084 : 'KW' '1084';\n"); + grammarBuilder.append("KW1085 : 'KW' '1085';\n"); + grammarBuilder.append("KW1086 : 'KW' '1086';\n"); + grammarBuilder.append("KW1087 : 'KW' '1087';\n"); + grammarBuilder.append("KW1088 : 'KW' '1088';\n"); + grammarBuilder.append("KW1089 : 'KW' '1089';\n"); + grammarBuilder.append("KW1090 : 'KW' '1090';\n"); + grammarBuilder.append("KW1091 : 'KW' '1091';\n"); + grammarBuilder.append("KW1092 : 'KW' '1092';\n"); + grammarBuilder.append("KW1093 : 'KW' '1093';\n"); + grammarBuilder.append("KW1094 : 'KW' '1094';\n"); + grammarBuilder.append("KW1095 : 'KW' '1095';\n"); + grammarBuilder.append("KW1096 : 'KW' '1096';\n"); + grammarBuilder.append("KW1097 : 'KW' '1097';\n"); + grammarBuilder.append("KW1098 : 'KW' '1098';\n"); + grammarBuilder.append("KW1099 : 'KW' '1099';\n"); + grammarBuilder.append("KW1100 : 'KW' '1100';\n"); + grammarBuilder.append("KW1101 : 'KW' '1101';\n"); + grammarBuilder.append("KW1102 : 'KW' '1102';\n"); + grammarBuilder.append("KW1103 : 'KW' '1103';\n"); + grammarBuilder.append("KW1104 : 'KW' '1104';\n"); + grammarBuilder.append("KW1105 : 'KW' '1105';\n"); + grammarBuilder.append("KW1106 : 'KW' '1106';\n"); + grammarBuilder.append("KW1107 : 'KW' '1107';\n"); + grammarBuilder.append("KW1108 : 'KW' '1108';\n"); + grammarBuilder.append("KW1109 : 'KW' '1109';\n"); + grammarBuilder.append("KW1110 : 'KW' '1110';\n"); + grammarBuilder.append("KW1111 : 'KW' '1111';\n"); + grammarBuilder.append("KW1112 : 'KW' '1112';\n"); + grammarBuilder.append("KW1113 : 'KW' '1113';\n"); + grammarBuilder.append("KW1114 : 'KW' '1114';\n"); + grammarBuilder.append("KW1115 : 'KW' '1115';\n"); + grammarBuilder.append("KW1116 : 'KW' '1116';\n"); + grammarBuilder.append("KW1117 : 'KW' '1117';\n"); + grammarBuilder.append("KW1118 : 'KW' '1118';\n"); + grammarBuilder.append("KW1119 : 'KW' '1119';\n"); + grammarBuilder.append("KW1120 : 'KW' '1120';\n"); + grammarBuilder.append("KW1121 : 'KW' '1121';\n"); + grammarBuilder.append("KW1122 : 'KW' '1122';\n"); + grammarBuilder.append("KW1123 : 'KW' '1123';\n"); + grammarBuilder.append("KW1124 : 'KW' '1124';\n"); + grammarBuilder.append("KW1125 : 'KW' '1125';\n"); + grammarBuilder.append("KW1126 : 'KW' '1126';\n"); + grammarBuilder.append("KW1127 : 'KW' '1127';\n"); + grammarBuilder.append("KW1128 : 'KW' '1128';\n"); + grammarBuilder.append("KW1129 : 'KW' '1129';\n"); + grammarBuilder.append("KW1130 : 'KW' '1130';\n"); + grammarBuilder.append("KW1131 : 'KW' '1131';\n"); + grammarBuilder.append("KW1132 : 'KW' '1132';\n"); + grammarBuilder.append("KW1133 : 'KW' '1133';\n"); + grammarBuilder.append("KW1134 : 'KW' '1134';\n"); + grammarBuilder.append("KW1135 : 'KW' '1135';\n"); + grammarBuilder.append("KW1136 : 'KW' '1136';\n"); + grammarBuilder.append("KW1137 : 'KW' '1137';\n"); + grammarBuilder.append("KW1138 : 'KW' '1138';\n"); + grammarBuilder.append("KW1139 : 'KW' '1139';\n"); + grammarBuilder.append("KW1140 : 'KW' '1140';\n"); + grammarBuilder.append("KW1141 : 'KW' '1141';\n"); + grammarBuilder.append("KW1142 : 'KW' '1142';\n"); + grammarBuilder.append("KW1143 : 'KW' '1143';\n"); + grammarBuilder.append("KW1144 : 'KW' '1144';\n"); + grammarBuilder.append("KW1145 : 'KW' '1145';\n"); + grammarBuilder.append("KW1146 : 'KW' '1146';\n"); + grammarBuilder.append("KW1147 : 'KW' '1147';\n"); + grammarBuilder.append("KW1148 : 'KW' '1148';\n"); + grammarBuilder.append("KW1149 : 'KW' '1149';\n"); + grammarBuilder.append("KW1150 : 'KW' '1150';\n"); + grammarBuilder.append("KW1151 : 'KW' '1151';\n"); + grammarBuilder.append("KW1152 : 'KW' '1152';\n"); + grammarBuilder.append("KW1153 : 'KW' '1153';\n"); + grammarBuilder.append("KW1154 : 'KW' '1154';\n"); + grammarBuilder.append("KW1155 : 'KW' '1155';\n"); + grammarBuilder.append("KW1156 : 'KW' '1156';\n"); + grammarBuilder.append("KW1157 : 'KW' '1157';\n"); + grammarBuilder.append("KW1158 : 'KW' '1158';\n"); + grammarBuilder.append("KW1159 : 'KW' '1159';\n"); + grammarBuilder.append("KW1160 : 'KW' '1160';\n"); + grammarBuilder.append("KW1161 : 'KW' '1161';\n"); + grammarBuilder.append("KW1162 : 'KW' '1162';\n"); + grammarBuilder.append("KW1163 : 'KW' '1163';\n"); + grammarBuilder.append("KW1164 : 'KW' '1164';\n"); + grammarBuilder.append("KW1165 : 'KW' '1165';\n"); + grammarBuilder.append("KW1166 : 'KW' '1166';\n"); + grammarBuilder.append("KW1167 : 'KW' '1167';\n"); + grammarBuilder.append("KW1168 : 'KW' '1168';\n"); + grammarBuilder.append("KW1169 : 'KW' '1169';\n"); + grammarBuilder.append("KW1170 : 'KW' '1170';\n"); + grammarBuilder.append("KW1171 : 'KW' '1171';\n"); + grammarBuilder.append("KW1172 : 'KW' '1172';\n"); + grammarBuilder.append("KW1173 : 'KW' '1173';\n"); + grammarBuilder.append("KW1174 : 'KW' '1174';\n"); + grammarBuilder.append("KW1175 : 'KW' '1175';\n"); + grammarBuilder.append("KW1176 : 'KW' '1176';\n"); + grammarBuilder.append("KW1177 : 'KW' '1177';\n"); + grammarBuilder.append("KW1178 : 'KW' '1178';\n"); + grammarBuilder.append("KW1179 : 'KW' '1179';\n"); + grammarBuilder.append("KW1180 : 'KW' '1180';\n"); + grammarBuilder.append("KW1181 : 'KW' '1181';\n"); + grammarBuilder.append("KW1182 : 'KW' '1182';\n"); + grammarBuilder.append("KW1183 : 'KW' '1183';\n"); + grammarBuilder.append("KW1184 : 'KW' '1184';\n"); + grammarBuilder.append("KW1185 : 'KW' '1185';\n"); + grammarBuilder.append("KW1186 : 'KW' '1186';\n"); + grammarBuilder.append("KW1187 : 'KW' '1187';\n"); + grammarBuilder.append("KW1188 : 'KW' '1188';\n"); + grammarBuilder.append("KW1189 : 'KW' '1189';\n"); + grammarBuilder.append("KW1190 : 'KW' '1190';\n"); + grammarBuilder.append("KW1191 : 'KW' '1191';\n"); + grammarBuilder.append("KW1192 : 'KW' '1192';\n"); + grammarBuilder.append("KW1193 : 'KW' '1193';\n"); + grammarBuilder.append("KW1194 : 'KW' '1194';\n"); + grammarBuilder.append("KW1195 : 'KW' '1195';\n"); + grammarBuilder.append("KW1196 : 'KW' '1196';\n"); + grammarBuilder.append("KW1197 : 'KW' '1197';\n"); + grammarBuilder.append("KW1198 : 'KW' '1198';\n"); + grammarBuilder.append("KW1199 : 'KW' '1199';\n"); + grammarBuilder.append("KW1200 : 'KW' '1200';\n"); + grammarBuilder.append("KW1201 : 'KW' '1201';\n"); + grammarBuilder.append("KW1202 : 'KW' '1202';\n"); + grammarBuilder.append("KW1203 : 'KW' '1203';\n"); + grammarBuilder.append("KW1204 : 'KW' '1204';\n"); + grammarBuilder.append("KW1205 : 'KW' '1205';\n"); + grammarBuilder.append("KW1206 : 'KW' '1206';\n"); + grammarBuilder.append("KW1207 : 'KW' '1207';\n"); + grammarBuilder.append("KW1208 : 'KW' '1208';\n"); + grammarBuilder.append("KW1209 : 'KW' '1209';\n"); + grammarBuilder.append("KW1210 : 'KW' '1210';\n"); + grammarBuilder.append("KW1211 : 'KW' '1211';\n"); + grammarBuilder.append("KW1212 : 'KW' '1212';\n"); + grammarBuilder.append("KW1213 : 'KW' '1213';\n"); + grammarBuilder.append("KW1214 : 'KW' '1214';\n"); + grammarBuilder.append("KW1215 : 'KW' '1215';\n"); + grammarBuilder.append("KW1216 : 'KW' '1216';\n"); + grammarBuilder.append("KW1217 : 'KW' '1217';\n"); + grammarBuilder.append("KW1218 : 'KW' '1218';\n"); + grammarBuilder.append("KW1219 : 'KW' '1219';\n"); + grammarBuilder.append("KW1220 : 'KW' '1220';\n"); + grammarBuilder.append("KW1221 : 'KW' '1221';\n"); + grammarBuilder.append("KW1222 : 'KW' '1222';\n"); + grammarBuilder.append("KW1223 : 'KW' '1223';\n"); + grammarBuilder.append("KW1224 : 'KW' '1224';\n"); + grammarBuilder.append("KW1225 : 'KW' '1225';\n"); + grammarBuilder.append("KW1226 : 'KW' '1226';\n"); + grammarBuilder.append("KW1227 : 'KW' '1227';\n"); + grammarBuilder.append("KW1228 : 'KW' '1228';\n"); + grammarBuilder.append("KW1229 : 'KW' '1229';\n"); + grammarBuilder.append("KW1230 : 'KW' '1230';\n"); + grammarBuilder.append("KW1231 : 'KW' '1231';\n"); + grammarBuilder.append("KW1232 : 'KW' '1232';\n"); + grammarBuilder.append("KW1233 : 'KW' '1233';\n"); + grammarBuilder.append("KW1234 : 'KW' '1234';\n"); + grammarBuilder.append("KW1235 : 'KW' '1235';\n"); + grammarBuilder.append("KW1236 : 'KW' '1236';\n"); + grammarBuilder.append("KW1237 : 'KW' '1237';\n"); + grammarBuilder.append("KW1238 : 'KW' '1238';\n"); + grammarBuilder.append("KW1239 : 'KW' '1239';\n"); + grammarBuilder.append("KW1240 : 'KW' '1240';\n"); + grammarBuilder.append("KW1241 : 'KW' '1241';\n"); + grammarBuilder.append("KW1242 : 'KW' '1242';\n"); + grammarBuilder.append("KW1243 : 'KW' '1243';\n"); + grammarBuilder.append("KW1244 : 'KW' '1244';\n"); + grammarBuilder.append("KW1245 : 'KW' '1245';\n"); + grammarBuilder.append("KW1246 : 'KW' '1246';\n"); + grammarBuilder.append("KW1247 : 'KW' '1247';\n"); + grammarBuilder.append("KW1248 : 'KW' '1248';\n"); + grammarBuilder.append("KW1249 : 'KW' '1249';\n"); + grammarBuilder.append("KW1250 : 'KW' '1250';\n"); + grammarBuilder.append("KW1251 : 'KW' '1251';\n"); + grammarBuilder.append("KW1252 : 'KW' '1252';\n"); + grammarBuilder.append("KW1253 : 'KW' '1253';\n"); + grammarBuilder.append("KW1254 : 'KW' '1254';\n"); + grammarBuilder.append("KW1255 : 'KW' '1255';\n"); + grammarBuilder.append("KW1256 : 'KW' '1256';\n"); + grammarBuilder.append("KW1257 : 'KW' '1257';\n"); + grammarBuilder.append("KW1258 : 'KW' '1258';\n"); + grammarBuilder.append("KW1259 : 'KW' '1259';\n"); + grammarBuilder.append("KW1260 : 'KW' '1260';\n"); + grammarBuilder.append("KW1261 : 'KW' '1261';\n"); + grammarBuilder.append("KW1262 : 'KW' '1262';\n"); + grammarBuilder.append("KW1263 : 'KW' '1263';\n"); + grammarBuilder.append("KW1264 : 'KW' '1264';\n"); + grammarBuilder.append("KW1265 : 'KW' '1265';\n"); + grammarBuilder.append("KW1266 : 'KW' '1266';\n"); + grammarBuilder.append("KW1267 : 'KW' '1267';\n"); + grammarBuilder.append("KW1268 : 'KW' '1268';\n"); + grammarBuilder.append("KW1269 : 'KW' '1269';\n"); + grammarBuilder.append("KW1270 : 'KW' '1270';\n"); + grammarBuilder.append("KW1271 : 'KW' '1271';\n"); + grammarBuilder.append("KW1272 : 'KW' '1272';\n"); + grammarBuilder.append("KW1273 : 'KW' '1273';\n"); + grammarBuilder.append("KW1274 : 'KW' '1274';\n"); + grammarBuilder.append("KW1275 : 'KW' '1275';\n"); + grammarBuilder.append("KW1276 : 'KW' '1276';\n"); + grammarBuilder.append("KW1277 : 'KW' '1277';\n"); + grammarBuilder.append("KW1278 : 'KW' '1278';\n"); + grammarBuilder.append("KW1279 : 'KW' '1279';\n"); + grammarBuilder.append("KW1280 : 'KW' '1280';\n"); + grammarBuilder.append("KW1281 : 'KW' '1281';\n"); + grammarBuilder.append("KW1282 : 'KW' '1282';\n"); + grammarBuilder.append("KW1283 : 'KW' '1283';\n"); + grammarBuilder.append("KW1284 : 'KW' '1284';\n"); + grammarBuilder.append("KW1285 : 'KW' '1285';\n"); + grammarBuilder.append("KW1286 : 'KW' '1286';\n"); + grammarBuilder.append("KW1287 : 'KW' '1287';\n"); + grammarBuilder.append("KW1288 : 'KW' '1288';\n"); + grammarBuilder.append("KW1289 : 'KW' '1289';\n"); + grammarBuilder.append("KW1290 : 'KW' '1290';\n"); + grammarBuilder.append("KW1291 : 'KW' '1291';\n"); + grammarBuilder.append("KW1292 : 'KW' '1292';\n"); + grammarBuilder.append("KW1293 : 'KW' '1293';\n"); + grammarBuilder.append("KW1294 : 'KW' '1294';\n"); + grammarBuilder.append("KW1295 : 'KW' '1295';\n"); + grammarBuilder.append("KW1296 : 'KW' '1296';\n"); + grammarBuilder.append("KW1297 : 'KW' '1297';\n"); + grammarBuilder.append("KW1298 : 'KW' '1298';\n"); + grammarBuilder.append("KW1299 : 'KW' '1299';\n"); + grammarBuilder.append("KW1300 : 'KW' '1300';\n"); + grammarBuilder.append("KW1301 : 'KW' '1301';\n"); + grammarBuilder.append("KW1302 : 'KW' '1302';\n"); + grammarBuilder.append("KW1303 : 'KW' '1303';\n"); + grammarBuilder.append("KW1304 : 'KW' '1304';\n"); + grammarBuilder.append("KW1305 : 'KW' '1305';\n"); + grammarBuilder.append("KW1306 : 'KW' '1306';\n"); + grammarBuilder.append("KW1307 : 'KW' '1307';\n"); + grammarBuilder.append("KW1308 : 'KW' '1308';\n"); + grammarBuilder.append("KW1309 : 'KW' '1309';\n"); + grammarBuilder.append("KW1310 : 'KW' '1310';\n"); + grammarBuilder.append("KW1311 : 'KW' '1311';\n"); + grammarBuilder.append("KW1312 : 'KW' '1312';\n"); + grammarBuilder.append("KW1313 : 'KW' '1313';\n"); + grammarBuilder.append("KW1314 : 'KW' '1314';\n"); + grammarBuilder.append("KW1315 : 'KW' '1315';\n"); + grammarBuilder.append("KW1316 : 'KW' '1316';\n"); + grammarBuilder.append("KW1317 : 'KW' '1317';\n"); + grammarBuilder.append("KW1318 : 'KW' '1318';\n"); + grammarBuilder.append("KW1319 : 'KW' '1319';\n"); + grammarBuilder.append("KW1320 : 'KW' '1320';\n"); + grammarBuilder.append("KW1321 : 'KW' '1321';\n"); + grammarBuilder.append("KW1322 : 'KW' '1322';\n"); + grammarBuilder.append("KW1323 : 'KW' '1323';\n"); + grammarBuilder.append("KW1324 : 'KW' '1324';\n"); + grammarBuilder.append("KW1325 : 'KW' '1325';\n"); + grammarBuilder.append("KW1326 : 'KW' '1326';\n"); + grammarBuilder.append("KW1327 : 'KW' '1327';\n"); + grammarBuilder.append("KW1328 : 'KW' '1328';\n"); + grammarBuilder.append("KW1329 : 'KW' '1329';\n"); + grammarBuilder.append("KW1330 : 'KW' '1330';\n"); + grammarBuilder.append("KW1331 : 'KW' '1331';\n"); + grammarBuilder.append("KW1332 : 'KW' '1332';\n"); + grammarBuilder.append("KW1333 : 'KW' '1333';\n"); + grammarBuilder.append("KW1334 : 'KW' '1334';\n"); + grammarBuilder.append("KW1335 : 'KW' '1335';\n"); + grammarBuilder.append("KW1336 : 'KW' '1336';\n"); + grammarBuilder.append("KW1337 : 'KW' '1337';\n"); + grammarBuilder.append("KW1338 : 'KW' '1338';\n"); + grammarBuilder.append("KW1339 : 'KW' '1339';\n"); + grammarBuilder.append("KW1340 : 'KW' '1340';\n"); + grammarBuilder.append("KW1341 : 'KW' '1341';\n"); + grammarBuilder.append("KW1342 : 'KW' '1342';\n"); + grammarBuilder.append("KW1343 : 'KW' '1343';\n"); + grammarBuilder.append("KW1344 : 'KW' '1344';\n"); + grammarBuilder.append("KW1345 : 'KW' '1345';\n"); + grammarBuilder.append("KW1346 : 'KW' '1346';\n"); + grammarBuilder.append("KW1347 : 'KW' '1347';\n"); + grammarBuilder.append("KW1348 : 'KW' '1348';\n"); + grammarBuilder.append("KW1349 : 'KW' '1349';\n"); + grammarBuilder.append("KW1350 : 'KW' '1350';\n"); + grammarBuilder.append("KW1351 : 'KW' '1351';\n"); + grammarBuilder.append("KW1352 : 'KW' '1352';\n"); + grammarBuilder.append("KW1353 : 'KW' '1353';\n"); + grammarBuilder.append("KW1354 : 'KW' '1354';\n"); + grammarBuilder.append("KW1355 : 'KW' '1355';\n"); + grammarBuilder.append("KW1356 : 'KW' '1356';\n"); + grammarBuilder.append("KW1357 : 'KW' '1357';\n"); + grammarBuilder.append("KW1358 : 'KW' '1358';\n"); + grammarBuilder.append("KW1359 : 'KW' '1359';\n"); + grammarBuilder.append("KW1360 : 'KW' '1360';\n"); + grammarBuilder.append("KW1361 : 'KW' '1361';\n"); + grammarBuilder.append("KW1362 : 'KW' '1362';\n"); + grammarBuilder.append("KW1363 : 'KW' '1363';\n"); + grammarBuilder.append("KW1364 : 'KW' '1364';\n"); + grammarBuilder.append("KW1365 : 'KW' '1365';\n"); + grammarBuilder.append("KW1366 : 'KW' '1366';\n"); + grammarBuilder.append("KW1367 : 'KW' '1367';\n"); + grammarBuilder.append("KW1368 : 'KW' '1368';\n"); + grammarBuilder.append("KW1369 : 'KW' '1369';\n"); + grammarBuilder.append("KW1370 : 'KW' '1370';\n"); + grammarBuilder.append("KW1371 : 'KW' '1371';\n"); + grammarBuilder.append("KW1372 : 'KW' '1372';\n"); + grammarBuilder.append("KW1373 : 'KW' '1373';\n"); + grammarBuilder.append("KW1374 : 'KW' '1374';\n"); + grammarBuilder.append("KW1375 : 'KW' '1375';\n"); + grammarBuilder.append("KW1376 : 'KW' '1376';\n"); + grammarBuilder.append("KW1377 : 'KW' '1377';\n"); + grammarBuilder.append("KW1378 : 'KW' '1378';\n"); + grammarBuilder.append("KW1379 : 'KW' '1379';\n"); + grammarBuilder.append("KW1380 : 'KW' '1380';\n"); + grammarBuilder.append("KW1381 : 'KW' '1381';\n"); + grammarBuilder.append("KW1382 : 'KW' '1382';\n"); + grammarBuilder.append("KW1383 : 'KW' '1383';\n"); + grammarBuilder.append("KW1384 : 'KW' '1384';\n"); + grammarBuilder.append("KW1385 : 'KW' '1385';\n"); + grammarBuilder.append("KW1386 : 'KW' '1386';\n"); + grammarBuilder.append("KW1387 : 'KW' '1387';\n"); + grammarBuilder.append("KW1388 : 'KW' '1388';\n"); + grammarBuilder.append("KW1389 : 'KW' '1389';\n"); + grammarBuilder.append("KW1390 : 'KW' '1390';\n"); + grammarBuilder.append("KW1391 : 'KW' '1391';\n"); + grammarBuilder.append("KW1392 : 'KW' '1392';\n"); + grammarBuilder.append("KW1393 : 'KW' '1393';\n"); + grammarBuilder.append("KW1394 : 'KW' '1394';\n"); + grammarBuilder.append("KW1395 : 'KW' '1395';\n"); + grammarBuilder.append("KW1396 : 'KW' '1396';\n"); + grammarBuilder.append("KW1397 : 'KW' '1397';\n"); + grammarBuilder.append("KW1398 : 'KW' '1398';\n"); + grammarBuilder.append("KW1399 : 'KW' '1399';\n"); + grammarBuilder.append("KW1400 : 'KW' '1400';\n"); + grammarBuilder.append("KW1401 : 'KW' '1401';\n"); + grammarBuilder.append("KW1402 : 'KW' '1402';\n"); + grammarBuilder.append("KW1403 : 'KW' '1403';\n"); + grammarBuilder.append("KW1404 : 'KW' '1404';\n"); + grammarBuilder.append("KW1405 : 'KW' '1405';\n"); + grammarBuilder.append("KW1406 : 'KW' '1406';\n"); + grammarBuilder.append("KW1407 : 'KW' '1407';\n"); + grammarBuilder.append("KW1408 : 'KW' '1408';\n"); + grammarBuilder.append("KW1409 : 'KW' '1409';\n"); + grammarBuilder.append("KW1410 : 'KW' '1410';\n"); + grammarBuilder.append("KW1411 : 'KW' '1411';\n"); + grammarBuilder.append("KW1412 : 'KW' '1412';\n"); + grammarBuilder.append("KW1413 : 'KW' '1413';\n"); + grammarBuilder.append("KW1414 : 'KW' '1414';\n"); + grammarBuilder.append("KW1415 : 'KW' '1415';\n"); + grammarBuilder.append("KW1416 : 'KW' '1416';\n"); + grammarBuilder.append("KW1417 : 'KW' '1417';\n"); + grammarBuilder.append("KW1418 : 'KW' '1418';\n"); + grammarBuilder.append("KW1419 : 'KW' '1419';\n"); + grammarBuilder.append("KW1420 : 'KW' '1420';\n"); + grammarBuilder.append("KW1421 : 'KW' '1421';\n"); + grammarBuilder.append("KW1422 : 'KW' '1422';\n"); + grammarBuilder.append("KW1423 : 'KW' '1423';\n"); + grammarBuilder.append("KW1424 : 'KW' '1424';\n"); + grammarBuilder.append("KW1425 : 'KW' '1425';\n"); + grammarBuilder.append("KW1426 : 'KW' '1426';\n"); + grammarBuilder.append("KW1427 : 'KW' '1427';\n"); + grammarBuilder.append("KW1428 : 'KW' '1428';\n"); + grammarBuilder.append("KW1429 : 'KW' '1429';\n"); + grammarBuilder.append("KW1430 : 'KW' '1430';\n"); + grammarBuilder.append("KW1431 : 'KW' '1431';\n"); + grammarBuilder.append("KW1432 : 'KW' '1432';\n"); + grammarBuilder.append("KW1433 : 'KW' '1433';\n"); + grammarBuilder.append("KW1434 : 'KW' '1434';\n"); + grammarBuilder.append("KW1435 : 'KW' '1435';\n"); + grammarBuilder.append("KW1436 : 'KW' '1436';\n"); + grammarBuilder.append("KW1437 : 'KW' '1437';\n"); + grammarBuilder.append("KW1438 : 'KW' '1438';\n"); + grammarBuilder.append("KW1439 : 'KW' '1439';\n"); + grammarBuilder.append("KW1440 : 'KW' '1440';\n"); + grammarBuilder.append("KW1441 : 'KW' '1441';\n"); + grammarBuilder.append("KW1442 : 'KW' '1442';\n"); + grammarBuilder.append("KW1443 : 'KW' '1443';\n"); + grammarBuilder.append("KW1444 : 'KW' '1444';\n"); + grammarBuilder.append("KW1445 : 'KW' '1445';\n"); + grammarBuilder.append("KW1446 : 'KW' '1446';\n"); + grammarBuilder.append("KW1447 : 'KW' '1447';\n"); + grammarBuilder.append("KW1448 : 'KW' '1448';\n"); + grammarBuilder.append("KW1449 : 'KW' '1449';\n"); + grammarBuilder.append("KW1450 : 'KW' '1450';\n"); + grammarBuilder.append("KW1451 : 'KW' '1451';\n"); + grammarBuilder.append("KW1452 : 'KW' '1452';\n"); + grammarBuilder.append("KW1453 : 'KW' '1453';\n"); + grammarBuilder.append("KW1454 : 'KW' '1454';\n"); + grammarBuilder.append("KW1455 : 'KW' '1455';\n"); + grammarBuilder.append("KW1456 : 'KW' '1456';\n"); + grammarBuilder.append("KW1457 : 'KW' '1457';\n"); + grammarBuilder.append("KW1458 : 'KW' '1458';\n"); + grammarBuilder.append("KW1459 : 'KW' '1459';\n"); + grammarBuilder.append("KW1460 : 'KW' '1460';\n"); + grammarBuilder.append("KW1461 : 'KW' '1461';\n"); + grammarBuilder.append("KW1462 : 'KW' '1462';\n"); + grammarBuilder.append("KW1463 : 'KW' '1463';\n"); + grammarBuilder.append("KW1464 : 'KW' '1464';\n"); + grammarBuilder.append("KW1465 : 'KW' '1465';\n"); + grammarBuilder.append("KW1466 : 'KW' '1466';\n"); + grammarBuilder.append("KW1467 : 'KW' '1467';\n"); + grammarBuilder.append("KW1468 : 'KW' '1468';\n"); + grammarBuilder.append("KW1469 : 'KW' '1469';\n"); + grammarBuilder.append("KW1470 : 'KW' '1470';\n"); + grammarBuilder.append("KW1471 : 'KW' '1471';\n"); + grammarBuilder.append("KW1472 : 'KW' '1472';\n"); + grammarBuilder.append("KW1473 : 'KW' '1473';\n"); + grammarBuilder.append("KW1474 : 'KW' '1474';\n"); + grammarBuilder.append("KW1475 : 'KW' '1475';\n"); + grammarBuilder.append("KW1476 : 'KW' '1476';\n"); + grammarBuilder.append("KW1477 : 'KW' '1477';\n"); + grammarBuilder.append("KW1478 : 'KW' '1478';\n"); + grammarBuilder.append("KW1479 : 'KW' '1479';\n"); + grammarBuilder.append("KW1480 : 'KW' '1480';\n"); + grammarBuilder.append("KW1481 : 'KW' '1481';\n"); + grammarBuilder.append("KW1482 : 'KW' '1482';\n"); + grammarBuilder.append("KW1483 : 'KW' '1483';\n"); + grammarBuilder.append("KW1484 : 'KW' '1484';\n"); + grammarBuilder.append("KW1485 : 'KW' '1485';\n"); + grammarBuilder.append("KW1486 : 'KW' '1486';\n"); + grammarBuilder.append("KW1487 : 'KW' '1487';\n"); + grammarBuilder.append("KW1488 : 'KW' '1488';\n"); + grammarBuilder.append("KW1489 : 'KW' '1489';\n"); + grammarBuilder.append("KW1490 : 'KW' '1490';\n"); + grammarBuilder.append("KW1491 : 'KW' '1491';\n"); + grammarBuilder.append("KW1492 : 'KW' '1492';\n"); + grammarBuilder.append("KW1493 : 'KW' '1493';\n"); + grammarBuilder.append("KW1494 : 'KW' '1494';\n"); + grammarBuilder.append("KW1495 : 'KW' '1495';\n"); + grammarBuilder.append("KW1496 : 'KW' '1496';\n"); + grammarBuilder.append("KW1497 : 'KW' '1497';\n"); + grammarBuilder.append("KW1498 : 'KW' '1498';\n"); + grammarBuilder.append("KW1499 : 'KW' '1499';\n"); + grammarBuilder.append("KW1500 : 'KW' '1500';\n"); + grammarBuilder.append("KW1501 : 'KW' '1501';\n"); + grammarBuilder.append("KW1502 : 'KW' '1502';\n"); + grammarBuilder.append("KW1503 : 'KW' '1503';\n"); + grammarBuilder.append("KW1504 : 'KW' '1504';\n"); + grammarBuilder.append("KW1505 : 'KW' '1505';\n"); + grammarBuilder.append("KW1506 : 'KW' '1506';\n"); + grammarBuilder.append("KW1507 : 'KW' '1507';\n"); + grammarBuilder.append("KW1508 : 'KW' '1508';\n"); + grammarBuilder.append("KW1509 : 'KW' '1509';\n"); + grammarBuilder.append("KW1510 : 'KW' '1510';\n"); + grammarBuilder.append("KW1511 : 'KW' '1511';\n"); + grammarBuilder.append("KW1512 : 'KW' '1512';\n"); + grammarBuilder.append("KW1513 : 'KW' '1513';\n"); + grammarBuilder.append("KW1514 : 'KW' '1514';\n"); + grammarBuilder.append("KW1515 : 'KW' '1515';\n"); + grammarBuilder.append("KW1516 : 'KW' '1516';\n"); + grammarBuilder.append("KW1517 : 'KW' '1517';\n"); + grammarBuilder.append("KW1518 : 'KW' '1518';\n"); + grammarBuilder.append("KW1519 : 'KW' '1519';\n"); + grammarBuilder.append("KW1520 : 'KW' '1520';\n"); + grammarBuilder.append("KW1521 : 'KW' '1521';\n"); + grammarBuilder.append("KW1522 : 'KW' '1522';\n"); + grammarBuilder.append("KW1523 : 'KW' '1523';\n"); + grammarBuilder.append("KW1524 : 'KW' '1524';\n"); + grammarBuilder.append("KW1525 : 'KW' '1525';\n"); + grammarBuilder.append("KW1526 : 'KW' '1526';\n"); + grammarBuilder.append("KW1527 : 'KW' '1527';\n"); + grammarBuilder.append("KW1528 : 'KW' '1528';\n"); + grammarBuilder.append("KW1529 : 'KW' '1529';\n"); + grammarBuilder.append("KW1530 : 'KW' '1530';\n"); + grammarBuilder.append("KW1531 : 'KW' '1531';\n"); + grammarBuilder.append("KW1532 : 'KW' '1532';\n"); + grammarBuilder.append("KW1533 : 'KW' '1533';\n"); + grammarBuilder.append("KW1534 : 'KW' '1534';\n"); + grammarBuilder.append("KW1535 : 'KW' '1535';\n"); + grammarBuilder.append("KW1536 : 'KW' '1536';\n"); + grammarBuilder.append("KW1537 : 'KW' '1537';\n"); + grammarBuilder.append("KW1538 : 'KW' '1538';\n"); + grammarBuilder.append("KW1539 : 'KW' '1539';\n"); + grammarBuilder.append("KW1540 : 'KW' '1540';\n"); + grammarBuilder.append("KW1541 : 'KW' '1541';\n"); + grammarBuilder.append("KW1542 : 'KW' '1542';\n"); + grammarBuilder.append("KW1543 : 'KW' '1543';\n"); + grammarBuilder.append("KW1544 : 'KW' '1544';\n"); + grammarBuilder.append("KW1545 : 'KW' '1545';\n"); + grammarBuilder.append("KW1546 : 'KW' '1546';\n"); + grammarBuilder.append("KW1547 : 'KW' '1547';\n"); + grammarBuilder.append("KW1548 : 'KW' '1548';\n"); + grammarBuilder.append("KW1549 : 'KW' '1549';\n"); + grammarBuilder.append("KW1550 : 'KW' '1550';\n"); + grammarBuilder.append("KW1551 : 'KW' '1551';\n"); + grammarBuilder.append("KW1552 : 'KW' '1552';\n"); + grammarBuilder.append("KW1553 : 'KW' '1553';\n"); + grammarBuilder.append("KW1554 : 'KW' '1554';\n"); + grammarBuilder.append("KW1555 : 'KW' '1555';\n"); + grammarBuilder.append("KW1556 : 'KW' '1556';\n"); + grammarBuilder.append("KW1557 : 'KW' '1557';\n"); + grammarBuilder.append("KW1558 : 'KW' '1558';\n"); + grammarBuilder.append("KW1559 : 'KW' '1559';\n"); + grammarBuilder.append("KW1560 : 'KW' '1560';\n"); + grammarBuilder.append("KW1561 : 'KW' '1561';\n"); + grammarBuilder.append("KW1562 : 'KW' '1562';\n"); + grammarBuilder.append("KW1563 : 'KW' '1563';\n"); + grammarBuilder.append("KW1564 : 'KW' '1564';\n"); + grammarBuilder.append("KW1565 : 'KW' '1565';\n"); + grammarBuilder.append("KW1566 : 'KW' '1566';\n"); + grammarBuilder.append("KW1567 : 'KW' '1567';\n"); + grammarBuilder.append("KW1568 : 'KW' '1568';\n"); + grammarBuilder.append("KW1569 : 'KW' '1569';\n"); + grammarBuilder.append("KW1570 : 'KW' '1570';\n"); + grammarBuilder.append("KW1571 : 'KW' '1571';\n"); + grammarBuilder.append("KW1572 : 'KW' '1572';\n"); + grammarBuilder.append("KW1573 : 'KW' '1573';\n"); + grammarBuilder.append("KW1574 : 'KW' '1574';\n"); + grammarBuilder.append("KW1575 : 'KW' '1575';\n"); + grammarBuilder.append("KW1576 : 'KW' '1576';\n"); + grammarBuilder.append("KW1577 : 'KW' '1577';\n"); + grammarBuilder.append("KW1578 : 'KW' '1578';\n"); + grammarBuilder.append("KW1579 : 'KW' '1579';\n"); + grammarBuilder.append("KW1580 : 'KW' '1580';\n"); + grammarBuilder.append("KW1581 : 'KW' '1581';\n"); + grammarBuilder.append("KW1582 : 'KW' '1582';\n"); + grammarBuilder.append("KW1583 : 'KW' '1583';\n"); + grammarBuilder.append("KW1584 : 'KW' '1584';\n"); + grammarBuilder.append("KW1585 : 'KW' '1585';\n"); + grammarBuilder.append("KW1586 : 'KW' '1586';\n"); + grammarBuilder.append("KW1587 : 'KW' '1587';\n"); + grammarBuilder.append("KW1588 : 'KW' '1588';\n"); + grammarBuilder.append("KW1589 : 'KW' '1589';\n"); + grammarBuilder.append("KW1590 : 'KW' '1590';\n"); + grammarBuilder.append("KW1591 : 'KW' '1591';\n"); + grammarBuilder.append("KW1592 : 'KW' '1592';\n"); + grammarBuilder.append("KW1593 : 'KW' '1593';\n"); + grammarBuilder.append("KW1594 : 'KW' '1594';\n"); + grammarBuilder.append("KW1595 : 'KW' '1595';\n"); + grammarBuilder.append("KW1596 : 'KW' '1596';\n"); + grammarBuilder.append("KW1597 : 'KW' '1597';\n"); + grammarBuilder.append("KW1598 : 'KW' '1598';\n"); + grammarBuilder.append("KW1599 : 'KW' '1599';\n"); + grammarBuilder.append("KW1600 : 'KW' '1600';\n"); + grammarBuilder.append("KW1601 : 'KW' '1601';\n"); + grammarBuilder.append("KW1602 : 'KW' '1602';\n"); + grammarBuilder.append("KW1603 : 'KW' '1603';\n"); + grammarBuilder.append("KW1604 : 'KW' '1604';\n"); + grammarBuilder.append("KW1605 : 'KW' '1605';\n"); + grammarBuilder.append("KW1606 : 'KW' '1606';\n"); + grammarBuilder.append("KW1607 : 'KW' '1607';\n"); + grammarBuilder.append("KW1608 : 'KW' '1608';\n"); + grammarBuilder.append("KW1609 : 'KW' '1609';\n"); + grammarBuilder.append("KW1610 : 'KW' '1610';\n"); + grammarBuilder.append("KW1611 : 'KW' '1611';\n"); + grammarBuilder.append("KW1612 : 'KW' '1612';\n"); + grammarBuilder.append("KW1613 : 'KW' '1613';\n"); + grammarBuilder.append("KW1614 : 'KW' '1614';\n"); + grammarBuilder.append("KW1615 : 'KW' '1615';\n"); + grammarBuilder.append("KW1616 : 'KW' '1616';\n"); + grammarBuilder.append("KW1617 : 'KW' '1617';\n"); + grammarBuilder.append("KW1618 : 'KW' '1618';\n"); + grammarBuilder.append("KW1619 : 'KW' '1619';\n"); + grammarBuilder.append("KW1620 : 'KW' '1620';\n"); + grammarBuilder.append("KW1621 : 'KW' '1621';\n"); + grammarBuilder.append("KW1622 : 'KW' '1622';\n"); + grammarBuilder.append("KW1623 : 'KW' '1623';\n"); + grammarBuilder.append("KW1624 : 'KW' '1624';\n"); + grammarBuilder.append("KW1625 : 'KW' '1625';\n"); + grammarBuilder.append("KW1626 : 'KW' '1626';\n"); + grammarBuilder.append("KW1627 : 'KW' '1627';\n"); + grammarBuilder.append("KW1628 : 'KW' '1628';\n"); + grammarBuilder.append("KW1629 : 'KW' '1629';\n"); + grammarBuilder.append("KW1630 : 'KW' '1630';\n"); + grammarBuilder.append("KW1631 : 'KW' '1631';\n"); + grammarBuilder.append("KW1632 : 'KW' '1632';\n"); + grammarBuilder.append("KW1633 : 'KW' '1633';\n"); + grammarBuilder.append("KW1634 : 'KW' '1634';\n"); + grammarBuilder.append("KW1635 : 'KW' '1635';\n"); + grammarBuilder.append("KW1636 : 'KW' '1636';\n"); + grammarBuilder.append("KW1637 : 'KW' '1637';\n"); + grammarBuilder.append("KW1638 : 'KW' '1638';\n"); + grammarBuilder.append("KW1639 : 'KW' '1639';\n"); + grammarBuilder.append("KW1640 : 'KW' '1640';\n"); + grammarBuilder.append("KW1641 : 'KW' '1641';\n"); + grammarBuilder.append("KW1642 : 'KW' '1642';\n"); + grammarBuilder.append("KW1643 : 'KW' '1643';\n"); + grammarBuilder.append("KW1644 : 'KW' '1644';\n"); + grammarBuilder.append("KW1645 : 'KW' '1645';\n"); + grammarBuilder.append("KW1646 : 'KW' '1646';\n"); + grammarBuilder.append("KW1647 : 'KW' '1647';\n"); + grammarBuilder.append("KW1648 : 'KW' '1648';\n"); + grammarBuilder.append("KW1649 : 'KW' '1649';\n"); + grammarBuilder.append("KW1650 : 'KW' '1650';\n"); + grammarBuilder.append("KW1651 : 'KW' '1651';\n"); + grammarBuilder.append("KW1652 : 'KW' '1652';\n"); + grammarBuilder.append("KW1653 : 'KW' '1653';\n"); + grammarBuilder.append("KW1654 : 'KW' '1654';\n"); + grammarBuilder.append("KW1655 : 'KW' '1655';\n"); + grammarBuilder.append("KW1656 : 'KW' '1656';\n"); + grammarBuilder.append("KW1657 : 'KW' '1657';\n"); + grammarBuilder.append("KW1658 : 'KW' '1658';\n"); + grammarBuilder.append("KW1659 : 'KW' '1659';\n"); + grammarBuilder.append("KW1660 : 'KW' '1660';\n"); + grammarBuilder.append("KW1661 : 'KW' '1661';\n"); + grammarBuilder.append("KW1662 : 'KW' '1662';\n"); + grammarBuilder.append("KW1663 : 'KW' '1663';\n"); + grammarBuilder.append("KW1664 : 'KW' '1664';\n"); + grammarBuilder.append("KW1665 : 'KW' '1665';\n"); + grammarBuilder.append("KW1666 : 'KW' '1666';\n"); + grammarBuilder.append("KW1667 : 'KW' '1667';\n"); + grammarBuilder.append("KW1668 : 'KW' '1668';\n"); + grammarBuilder.append("KW1669 : 'KW' '1669';\n"); + grammarBuilder.append("KW1670 : 'KW' '1670';\n"); + grammarBuilder.append("KW1671 : 'KW' '1671';\n"); + grammarBuilder.append("KW1672 : 'KW' '1672';\n"); + grammarBuilder.append("KW1673 : 'KW' '1673';\n"); + grammarBuilder.append("KW1674 : 'KW' '1674';\n"); + grammarBuilder.append("KW1675 : 'KW' '1675';\n"); + grammarBuilder.append("KW1676 : 'KW' '1676';\n"); + grammarBuilder.append("KW1677 : 'KW' '1677';\n"); + grammarBuilder.append("KW1678 : 'KW' '1678';\n"); + grammarBuilder.append("KW1679 : 'KW' '1679';\n"); + grammarBuilder.append("KW1680 : 'KW' '1680';\n"); + grammarBuilder.append("KW1681 : 'KW' '1681';\n"); + grammarBuilder.append("KW1682 : 'KW' '1682';\n"); + grammarBuilder.append("KW1683 : 'KW' '1683';\n"); + grammarBuilder.append("KW1684 : 'KW' '1684';\n"); + grammarBuilder.append("KW1685 : 'KW' '1685';\n"); + grammarBuilder.append("KW1686 : 'KW' '1686';\n"); + grammarBuilder.append("KW1687 : 'KW' '1687';\n"); + grammarBuilder.append("KW1688 : 'KW' '1688';\n"); + grammarBuilder.append("KW1689 : 'KW' '1689';\n"); + grammarBuilder.append("KW1690 : 'KW' '1690';\n"); + grammarBuilder.append("KW1691 : 'KW' '1691';\n"); + grammarBuilder.append("KW1692 : 'KW' '1692';\n"); + grammarBuilder.append("KW1693 : 'KW' '1693';\n"); + grammarBuilder.append("KW1694 : 'KW' '1694';\n"); + grammarBuilder.append("KW1695 : 'KW' '1695';\n"); + grammarBuilder.append("KW1696 : 'KW' '1696';\n"); + grammarBuilder.append("KW1697 : 'KW' '1697';\n"); + grammarBuilder.append("KW1698 : 'KW' '1698';\n"); + grammarBuilder.append("KW1699 : 'KW' '1699';\n"); + grammarBuilder.append("KW1700 : 'KW' '1700';\n"); + grammarBuilder.append("KW1701 : 'KW' '1701';\n"); + grammarBuilder.append("KW1702 : 'KW' '1702';\n"); + grammarBuilder.append("KW1703 : 'KW' '1703';\n"); + grammarBuilder.append("KW1704 : 'KW' '1704';\n"); + grammarBuilder.append("KW1705 : 'KW' '1705';\n"); + grammarBuilder.append("KW1706 : 'KW' '1706';\n"); + grammarBuilder.append("KW1707 : 'KW' '1707';\n"); + grammarBuilder.append("KW1708 : 'KW' '1708';\n"); + grammarBuilder.append("KW1709 : 'KW' '1709';\n"); + grammarBuilder.append("KW1710 : 'KW' '1710';\n"); + grammarBuilder.append("KW1711 : 'KW' '1711';\n"); + grammarBuilder.append("KW1712 : 'KW' '1712';\n"); + grammarBuilder.append("KW1713 : 'KW' '1713';\n"); + grammarBuilder.append("KW1714 : 'KW' '1714';\n"); + grammarBuilder.append("KW1715 : 'KW' '1715';\n"); + grammarBuilder.append("KW1716 : 'KW' '1716';\n"); + grammarBuilder.append("KW1717 : 'KW' '1717';\n"); + grammarBuilder.append("KW1718 : 'KW' '1718';\n"); + grammarBuilder.append("KW1719 : 'KW' '1719';\n"); + grammarBuilder.append("KW1720 : 'KW' '1720';\n"); + grammarBuilder.append("KW1721 : 'KW' '1721';\n"); + grammarBuilder.append("KW1722 : 'KW' '1722';\n"); + grammarBuilder.append("KW1723 : 'KW' '1723';\n"); + grammarBuilder.append("KW1724 : 'KW' '1724';\n"); + grammarBuilder.append("KW1725 : 'KW' '1725';\n"); + grammarBuilder.append("KW1726 : 'KW' '1726';\n"); + grammarBuilder.append("KW1727 : 'KW' '1727';\n"); + grammarBuilder.append("KW1728 : 'KW' '1728';\n"); + grammarBuilder.append("KW1729 : 'KW' '1729';\n"); + grammarBuilder.append("KW1730 : 'KW' '1730';\n"); + grammarBuilder.append("KW1731 : 'KW' '1731';\n"); + grammarBuilder.append("KW1732 : 'KW' '1732';\n"); + grammarBuilder.append("KW1733 : 'KW' '1733';\n"); + grammarBuilder.append("KW1734 : 'KW' '1734';\n"); + grammarBuilder.append("KW1735 : 'KW' '1735';\n"); + grammarBuilder.append("KW1736 : 'KW' '1736';\n"); + grammarBuilder.append("KW1737 : 'KW' '1737';\n"); + grammarBuilder.append("KW1738 : 'KW' '1738';\n"); + grammarBuilder.append("KW1739 : 'KW' '1739';\n"); + grammarBuilder.append("KW1740 : 'KW' '1740';\n"); + grammarBuilder.append("KW1741 : 'KW' '1741';\n"); + grammarBuilder.append("KW1742 : 'KW' '1742';\n"); + grammarBuilder.append("KW1743 : 'KW' '1743';\n"); + grammarBuilder.append("KW1744 : 'KW' '1744';\n"); + grammarBuilder.append("KW1745 : 'KW' '1745';\n"); + grammarBuilder.append("KW1746 : 'KW' '1746';\n"); + grammarBuilder.append("KW1747 : 'KW' '1747';\n"); + grammarBuilder.append("KW1748 : 'KW' '1748';\n"); + grammarBuilder.append("KW1749 : 'KW' '1749';\n"); + grammarBuilder.append("KW1750 : 'KW' '1750';\n"); + grammarBuilder.append("KW1751 : 'KW' '1751';\n"); + grammarBuilder.append("KW1752 : 'KW' '1752';\n"); + grammarBuilder.append("KW1753 : 'KW' '1753';\n"); + grammarBuilder.append("KW1754 : 'KW' '1754';\n"); + grammarBuilder.append("KW1755 : 'KW' '1755';\n"); + grammarBuilder.append("KW1756 : 'KW' '1756';\n"); + grammarBuilder.append("KW1757 : 'KW' '1757';\n"); + grammarBuilder.append("KW1758 : 'KW' '1758';\n"); + grammarBuilder.append("KW1759 : 'KW' '1759';\n"); + grammarBuilder.append("KW1760 : 'KW' '1760';\n"); + grammarBuilder.append("KW1761 : 'KW' '1761';\n"); + grammarBuilder.append("KW1762 : 'KW' '1762';\n"); + grammarBuilder.append("KW1763 : 'KW' '1763';\n"); + grammarBuilder.append("KW1764 : 'KW' '1764';\n"); + grammarBuilder.append("KW1765 : 'KW' '1765';\n"); + grammarBuilder.append("KW1766 : 'KW' '1766';\n"); + grammarBuilder.append("KW1767 : 'KW' '1767';\n"); + grammarBuilder.append("KW1768 : 'KW' '1768';\n"); + grammarBuilder.append("KW1769 : 'KW' '1769';\n"); + grammarBuilder.append("KW1770 : 'KW' '1770';\n"); + grammarBuilder.append("KW1771 : 'KW' '1771';\n"); + grammarBuilder.append("KW1772 : 'KW' '1772';\n"); + grammarBuilder.append("KW1773 : 'KW' '1773';\n"); + grammarBuilder.append("KW1774 : 'KW' '1774';\n"); + grammarBuilder.append("KW1775 : 'KW' '1775';\n"); + grammarBuilder.append("KW1776 : 'KW' '1776';\n"); + grammarBuilder.append("KW1777 : 'KW' '1777';\n"); + grammarBuilder.append("KW1778 : 'KW' '1778';\n"); + grammarBuilder.append("KW1779 : 'KW' '1779';\n"); + grammarBuilder.append("KW1780 : 'KW' '1780';\n"); + grammarBuilder.append("KW1781 : 'KW' '1781';\n"); + grammarBuilder.append("KW1782 : 'KW' '1782';\n"); + grammarBuilder.append("KW1783 : 'KW' '1783';\n"); + grammarBuilder.append("KW1784 : 'KW' '1784';\n"); + grammarBuilder.append("KW1785 : 'KW' '1785';\n"); + grammarBuilder.append("KW1786 : 'KW' '1786';\n"); + grammarBuilder.append("KW1787 : 'KW' '1787';\n"); + grammarBuilder.append("KW1788 : 'KW' '1788';\n"); + grammarBuilder.append("KW1789 : 'KW' '1789';\n"); + grammarBuilder.append("KW1790 : 'KW' '1790';\n"); + grammarBuilder.append("KW1791 : 'KW' '1791';\n"); + grammarBuilder.append("KW1792 : 'KW' '1792';\n"); + grammarBuilder.append("KW1793 : 'KW' '1793';\n"); + grammarBuilder.append("KW1794 : 'KW' '1794';\n"); + grammarBuilder.append("KW1795 : 'KW' '1795';\n"); + grammarBuilder.append("KW1796 : 'KW' '1796';\n"); + grammarBuilder.append("KW1797 : 'KW' '1797';\n"); + grammarBuilder.append("KW1798 : 'KW' '1798';\n"); + grammarBuilder.append("KW1799 : 'KW' '1799';\n"); + grammarBuilder.append("KW1800 : 'KW' '1800';\n"); + grammarBuilder.append("KW1801 : 'KW' '1801';\n"); + grammarBuilder.append("KW1802 : 'KW' '1802';\n"); + grammarBuilder.append("KW1803 : 'KW' '1803';\n"); + grammarBuilder.append("KW1804 : 'KW' '1804';\n"); + grammarBuilder.append("KW1805 : 'KW' '1805';\n"); + grammarBuilder.append("KW1806 : 'KW' '1806';\n"); + grammarBuilder.append("KW1807 : 'KW' '1807';\n"); + grammarBuilder.append("KW1808 : 'KW' '1808';\n"); + grammarBuilder.append("KW1809 : 'KW' '1809';\n"); + grammarBuilder.append("KW1810 : 'KW' '1810';\n"); + grammarBuilder.append("KW1811 : 'KW' '1811';\n"); + grammarBuilder.append("KW1812 : 'KW' '1812';\n"); + grammarBuilder.append("KW1813 : 'KW' '1813';\n"); + grammarBuilder.append("KW1814 : 'KW' '1814';\n"); + grammarBuilder.append("KW1815 : 'KW' '1815';\n"); + grammarBuilder.append("KW1816 : 'KW' '1816';\n"); + grammarBuilder.append("KW1817 : 'KW' '1817';\n"); + grammarBuilder.append("KW1818 : 'KW' '1818';\n"); + grammarBuilder.append("KW1819 : 'KW' '1819';\n"); + grammarBuilder.append("KW1820 : 'KW' '1820';\n"); + grammarBuilder.append("KW1821 : 'KW' '1821';\n"); + grammarBuilder.append("KW1822 : 'KW' '1822';\n"); + grammarBuilder.append("KW1823 : 'KW' '1823';\n"); + grammarBuilder.append("KW1824 : 'KW' '1824';\n"); + grammarBuilder.append("KW1825 : 'KW' '1825';\n"); + grammarBuilder.append("KW1826 : 'KW' '1826';\n"); + grammarBuilder.append("KW1827 : 'KW' '1827';\n"); + grammarBuilder.append("KW1828 : 'KW' '1828';\n"); + grammarBuilder.append("KW1829 : 'KW' '1829';\n"); + grammarBuilder.append("KW1830 : 'KW' '1830';\n"); + grammarBuilder.append("KW1831 : 'KW' '1831';\n"); + grammarBuilder.append("KW1832 : 'KW' '1832';\n"); + grammarBuilder.append("KW1833 : 'KW' '1833';\n"); + grammarBuilder.append("KW1834 : 'KW' '1834';\n"); + grammarBuilder.append("KW1835 : 'KW' '1835';\n"); + grammarBuilder.append("KW1836 : 'KW' '1836';\n"); + grammarBuilder.append("KW1837 : 'KW' '1837';\n"); + grammarBuilder.append("KW1838 : 'KW' '1838';\n"); + grammarBuilder.append("KW1839 : 'KW' '1839';\n"); + grammarBuilder.append("KW1840 : 'KW' '1840';\n"); + grammarBuilder.append("KW1841 : 'KW' '1841';\n"); + grammarBuilder.append("KW1842 : 'KW' '1842';\n"); + grammarBuilder.append("KW1843 : 'KW' '1843';\n"); + grammarBuilder.append("KW1844 : 'KW' '1844';\n"); + grammarBuilder.append("KW1845 : 'KW' '1845';\n"); + grammarBuilder.append("KW1846 : 'KW' '1846';\n"); + grammarBuilder.append("KW1847 : 'KW' '1847';\n"); + grammarBuilder.append("KW1848 : 'KW' '1848';\n"); + grammarBuilder.append("KW1849 : 'KW' '1849';\n"); + grammarBuilder.append("KW1850 : 'KW' '1850';\n"); + grammarBuilder.append("KW1851 : 'KW' '1851';\n"); + grammarBuilder.append("KW1852 : 'KW' '1852';\n"); + grammarBuilder.append("KW1853 : 'KW' '1853';\n"); + grammarBuilder.append("KW1854 : 'KW' '1854';\n"); + grammarBuilder.append("KW1855 : 'KW' '1855';\n"); + grammarBuilder.append("KW1856 : 'KW' '1856';\n"); + grammarBuilder.append("KW1857 : 'KW' '1857';\n"); + grammarBuilder.append("KW1858 : 'KW' '1858';\n"); + grammarBuilder.append("KW1859 : 'KW' '1859';\n"); + grammarBuilder.append("KW1860 : 'KW' '1860';\n"); + grammarBuilder.append("KW1861 : 'KW' '1861';\n"); + grammarBuilder.append("KW1862 : 'KW' '1862';\n"); + grammarBuilder.append("KW1863 : 'KW' '1863';\n"); + grammarBuilder.append("KW1864 : 'KW' '1864';\n"); + grammarBuilder.append("KW1865 : 'KW' '1865';\n"); + grammarBuilder.append("KW1866 : 'KW' '1866';\n"); + grammarBuilder.append("KW1867 : 'KW' '1867';\n"); + grammarBuilder.append("KW1868 : 'KW' '1868';\n"); + grammarBuilder.append("KW1869 : 'KW' '1869';\n"); + grammarBuilder.append("KW1870 : 'KW' '1870';\n"); + grammarBuilder.append("KW1871 : 'KW' '1871';\n"); + grammarBuilder.append("KW1872 : 'KW' '1872';\n"); + grammarBuilder.append("KW1873 : 'KW' '1873';\n"); + grammarBuilder.append("KW1874 : 'KW' '1874';\n"); + grammarBuilder.append("KW1875 : 'KW' '1875';\n"); + grammarBuilder.append("KW1876 : 'KW' '1876';\n"); + grammarBuilder.append("KW1877 : 'KW' '1877';\n"); + grammarBuilder.append("KW1878 : 'KW' '1878';\n"); + grammarBuilder.append("KW1879 : 'KW' '1879';\n"); + grammarBuilder.append("KW1880 : 'KW' '1880';\n"); + grammarBuilder.append("KW1881 : 'KW' '1881';\n"); + grammarBuilder.append("KW1882 : 'KW' '1882';\n"); + grammarBuilder.append("KW1883 : 'KW' '1883';\n"); + grammarBuilder.append("KW1884 : 'KW' '1884';\n"); + grammarBuilder.append("KW1885 : 'KW' '1885';\n"); + grammarBuilder.append("KW1886 : 'KW' '1886';\n"); + grammarBuilder.append("KW1887 : 'KW' '1887';\n"); + grammarBuilder.append("KW1888 : 'KW' '1888';\n"); + grammarBuilder.append("KW1889 : 'KW' '1889';\n"); + grammarBuilder.append("KW1890 : 'KW' '1890';\n"); + grammarBuilder.append("KW1891 : 'KW' '1891';\n"); + grammarBuilder.append("KW1892 : 'KW' '1892';\n"); + grammarBuilder.append("KW1893 : 'KW' '1893';\n"); + grammarBuilder.append("KW1894 : 'KW' '1894';\n"); + grammarBuilder.append("KW1895 : 'KW' '1895';\n"); + grammarBuilder.append("KW1896 : 'KW' '1896';\n"); + grammarBuilder.append("KW1897 : 'KW' '1897';\n"); + grammarBuilder.append("KW1898 : 'KW' '1898';\n"); + grammarBuilder.append("KW1899 : 'KW' '1899';\n"); + grammarBuilder.append("KW1900 : 'KW' '1900';\n"); + grammarBuilder.append("KW1901 : 'KW' '1901';\n"); + grammarBuilder.append("KW1902 : 'KW' '1902';\n"); + grammarBuilder.append("KW1903 : 'KW' '1903';\n"); + grammarBuilder.append("KW1904 : 'KW' '1904';\n"); + grammarBuilder.append("KW1905 : 'KW' '1905';\n"); + grammarBuilder.append("KW1906 : 'KW' '1906';\n"); + grammarBuilder.append("KW1907 : 'KW' '1907';\n"); + grammarBuilder.append("KW1908 : 'KW' '1908';\n"); + grammarBuilder.append("KW1909 : 'KW' '1909';\n"); + grammarBuilder.append("KW1910 : 'KW' '1910';\n"); + grammarBuilder.append("KW1911 : 'KW' '1911';\n"); + grammarBuilder.append("KW1912 : 'KW' '1912';\n"); + grammarBuilder.append("KW1913 : 'KW' '1913';\n"); + grammarBuilder.append("KW1914 : 'KW' '1914';\n"); + grammarBuilder.append("KW1915 : 'KW' '1915';\n"); + grammarBuilder.append("KW1916 : 'KW' '1916';\n"); + grammarBuilder.append("KW1917 : 'KW' '1917';\n"); + grammarBuilder.append("KW1918 : 'KW' '1918';\n"); + grammarBuilder.append("KW1919 : 'KW' '1919';\n"); + grammarBuilder.append("KW1920 : 'KW' '1920';\n"); + grammarBuilder.append("KW1921 : 'KW' '1921';\n"); + grammarBuilder.append("KW1922 : 'KW' '1922';\n"); + grammarBuilder.append("KW1923 : 'KW' '1923';\n"); + grammarBuilder.append("KW1924 : 'KW' '1924';\n"); + grammarBuilder.append("KW1925 : 'KW' '1925';\n"); + grammarBuilder.append("KW1926 : 'KW' '1926';\n"); + grammarBuilder.append("KW1927 : 'KW' '1927';\n"); + grammarBuilder.append("KW1928 : 'KW' '1928';\n"); + grammarBuilder.append("KW1929 : 'KW' '1929';\n"); + grammarBuilder.append("KW1930 : 'KW' '1930';\n"); + grammarBuilder.append("KW1931 : 'KW' '1931';\n"); + grammarBuilder.append("KW1932 : 'KW' '1932';\n"); + grammarBuilder.append("KW1933 : 'KW' '1933';\n"); + grammarBuilder.append("KW1934 : 'KW' '1934';\n"); + grammarBuilder.append("KW1935 : 'KW' '1935';\n"); + grammarBuilder.append("KW1936 : 'KW' '1936';\n"); + grammarBuilder.append("KW1937 : 'KW' '1937';\n"); + grammarBuilder.append("KW1938 : 'KW' '1938';\n"); + grammarBuilder.append("KW1939 : 'KW' '1939';\n"); + grammarBuilder.append("KW1940 : 'KW' '1940';\n"); + grammarBuilder.append("KW1941 : 'KW' '1941';\n"); + grammarBuilder.append("KW1942 : 'KW' '1942';\n"); + grammarBuilder.append("KW1943 : 'KW' '1943';\n"); + grammarBuilder.append("KW1944 : 'KW' '1944';\n"); + grammarBuilder.append("KW1945 : 'KW' '1945';\n"); + grammarBuilder.append("KW1946 : 'KW' '1946';\n"); + grammarBuilder.append("KW1947 : 'KW' '1947';\n"); + grammarBuilder.append("KW1948 : 'KW' '1948';\n"); + grammarBuilder.append("KW1949 : 'KW' '1949';\n"); + grammarBuilder.append("KW1950 : 'KW' '1950';\n"); + grammarBuilder.append("KW1951 : 'KW' '1951';\n"); + grammarBuilder.append("KW1952 : 'KW' '1952';\n"); + grammarBuilder.append("KW1953 : 'KW' '1953';\n"); + grammarBuilder.append("KW1954 : 'KW' '1954';\n"); + grammarBuilder.append("KW1955 : 'KW' '1955';\n"); + grammarBuilder.append("KW1956 : 'KW' '1956';\n"); + grammarBuilder.append("KW1957 : 'KW' '1957';\n"); + grammarBuilder.append("KW1958 : 'KW' '1958';\n"); + grammarBuilder.append("KW1959 : 'KW' '1959';\n"); + grammarBuilder.append("KW1960 : 'KW' '1960';\n"); + grammarBuilder.append("KW1961 : 'KW' '1961';\n"); + grammarBuilder.append("KW1962 : 'KW' '1962';\n"); + grammarBuilder.append("KW1963 : 'KW' '1963';\n"); + grammarBuilder.append("KW1964 : 'KW' '1964';\n"); + grammarBuilder.append("KW1965 : 'KW' '1965';\n"); + grammarBuilder.append("KW1966 : 'KW' '1966';\n"); + grammarBuilder.append("KW1967 : 'KW' '1967';\n"); + grammarBuilder.append("KW1968 : 'KW' '1968';\n"); + grammarBuilder.append("KW1969 : 'KW' '1969';\n"); + grammarBuilder.append("KW1970 : 'KW' '1970';\n"); + grammarBuilder.append("KW1971 : 'KW' '1971';\n"); + grammarBuilder.append("KW1972 : 'KW' '1972';\n"); + grammarBuilder.append("KW1973 : 'KW' '1973';\n"); + grammarBuilder.append("KW1974 : 'KW' '1974';\n"); + grammarBuilder.append("KW1975 : 'KW' '1975';\n"); + grammarBuilder.append("KW1976 : 'KW' '1976';\n"); + grammarBuilder.append("KW1977 : 'KW' '1977';\n"); + grammarBuilder.append("KW1978 : 'KW' '1978';\n"); + grammarBuilder.append("KW1979 : 'KW' '1979';\n"); + grammarBuilder.append("KW1980 : 'KW' '1980';\n"); + grammarBuilder.append("KW1981 : 'KW' '1981';\n"); + grammarBuilder.append("KW1982 : 'KW' '1982';\n"); + grammarBuilder.append("KW1983 : 'KW' '1983';\n"); + grammarBuilder.append("KW1984 : 'KW' '1984';\n"); + grammarBuilder.append("KW1985 : 'KW' '1985';\n"); + grammarBuilder.append("KW1986 : 'KW' '1986';\n"); + grammarBuilder.append("KW1987 : 'KW' '1987';\n"); + grammarBuilder.append("KW1988 : 'KW' '1988';\n"); + grammarBuilder.append("KW1989 : 'KW' '1989';\n"); + grammarBuilder.append("KW1990 : 'KW' '1990';\n"); + grammarBuilder.append("KW1991 : 'KW' '1991';\n"); + grammarBuilder.append("KW1992 : 'KW' '1992';\n"); + grammarBuilder.append("KW1993 : 'KW' '1993';\n"); + grammarBuilder.append("KW1994 : 'KW' '1994';\n"); + grammarBuilder.append("KW1995 : 'KW' '1995';\n"); + grammarBuilder.append("KW1996 : 'KW' '1996';\n"); + grammarBuilder.append("KW1997 : 'KW' '1997';\n"); + grammarBuilder.append("KW1998 : 'KW' '1998';\n"); + grammarBuilder.append("KW1999 : 'KW' '1999';\n"); + grammarBuilder.append("KW2000 : 'KW' '2000';\n"); + grammarBuilder.append("KW2001 : 'KW' '2001';\n"); + grammarBuilder.append("KW2002 : 'KW' '2002';\n"); + grammarBuilder.append("KW2003 : 'KW' '2003';\n"); + grammarBuilder.append("KW2004 : 'KW' '2004';\n"); + grammarBuilder.append("KW2005 : 'KW' '2005';\n"); + grammarBuilder.append("KW2006 : 'KW' '2006';\n"); + grammarBuilder.append("KW2007 : 'KW' '2007';\n"); + grammarBuilder.append("KW2008 : 'KW' '2008';\n"); + grammarBuilder.append("KW2009 : 'KW' '2009';\n"); + grammarBuilder.append("KW2010 : 'KW' '2010';\n"); + grammarBuilder.append("KW2011 : 'KW' '2011';\n"); + grammarBuilder.append("KW2012 : 'KW' '2012';\n"); + grammarBuilder.append("KW2013 : 'KW' '2013';\n"); + grammarBuilder.append("KW2014 : 'KW' '2014';\n"); + grammarBuilder.append("KW2015 : 'KW' '2015';\n"); + grammarBuilder.append("KW2016 : 'KW' '2016';\n"); + grammarBuilder.append("KW2017 : 'KW' '2017';\n"); + grammarBuilder.append("KW2018 : 'KW' '2018';\n"); + grammarBuilder.append("KW2019 : 'KW' '2019';\n"); + grammarBuilder.append("KW2020 : 'KW' '2020';\n"); + grammarBuilder.append("KW2021 : 'KW' '2021';\n"); + grammarBuilder.append("KW2022 : 'KW' '2022';\n"); + grammarBuilder.append("KW2023 : 'KW' '2023';\n"); + grammarBuilder.append("KW2024 : 'KW' '2024';\n"); + grammarBuilder.append("KW2025 : 'KW' '2025';\n"); + grammarBuilder.append("KW2026 : 'KW' '2026';\n"); + grammarBuilder.append("KW2027 : 'KW' '2027';\n"); + grammarBuilder.append("KW2028 : 'KW' '2028';\n"); + grammarBuilder.append("KW2029 : 'KW' '2029';\n"); + grammarBuilder.append("KW2030 : 'KW' '2030';\n"); + grammarBuilder.append("KW2031 : 'KW' '2031';\n"); + grammarBuilder.append("KW2032 : 'KW' '2032';\n"); + grammarBuilder.append("KW2033 : 'KW' '2033';\n"); + grammarBuilder.append("KW2034 : 'KW' '2034';\n"); + grammarBuilder.append("KW2035 : 'KW' '2035';\n"); + grammarBuilder.append("KW2036 : 'KW' '2036';\n"); + grammarBuilder.append("KW2037 : 'KW' '2037';\n"); + grammarBuilder.append("KW2038 : 'KW' '2038';\n"); + grammarBuilder.append("KW2039 : 'KW' '2039';\n"); + grammarBuilder.append("KW2040 : 'KW' '2040';\n"); + grammarBuilder.append("KW2041 : 'KW' '2041';\n"); + grammarBuilder.append("KW2042 : 'KW' '2042';\n"); + grammarBuilder.append("KW2043 : 'KW' '2043';\n"); + grammarBuilder.append("KW2044 : 'KW' '2044';\n"); + grammarBuilder.append("KW2045 : 'KW' '2045';\n"); + grammarBuilder.append("KW2046 : 'KW' '2046';\n"); + grammarBuilder.append("KW2047 : 'KW' '2047';\n"); + grammarBuilder.append("KW2048 : 'KW' '2048';\n"); + grammarBuilder.append("KW2049 : 'KW' '2049';\n"); + grammarBuilder.append("KW2050 : 'KW' '2050';\n"); + grammarBuilder.append("KW2051 : 'KW' '2051';\n"); + grammarBuilder.append("KW2052 : 'KW' '2052';\n"); + grammarBuilder.append("KW2053 : 'KW' '2053';\n"); + grammarBuilder.append("KW2054 : 'KW' '2054';\n"); + grammarBuilder.append("KW2055 : 'KW' '2055';\n"); + grammarBuilder.append("KW2056 : 'KW' '2056';\n"); + grammarBuilder.append("KW2057 : 'KW' '2057';\n"); + grammarBuilder.append("KW2058 : 'KW' '2058';\n"); + grammarBuilder.append("KW2059 : 'KW' '2059';\n"); + grammarBuilder.append("KW2060 : 'KW' '2060';\n"); + grammarBuilder.append("KW2061 : 'KW' '2061';\n"); + grammarBuilder.append("KW2062 : 'KW' '2062';\n"); + grammarBuilder.append("KW2063 : 'KW' '2063';\n"); + grammarBuilder.append("KW2064 : 'KW' '2064';\n"); + grammarBuilder.append("KW2065 : 'KW' '2065';\n"); + grammarBuilder.append("KW2066 : 'KW' '2066';\n"); + grammarBuilder.append("KW2067 : 'KW' '2067';\n"); + grammarBuilder.append("KW2068 : 'KW' '2068';\n"); + grammarBuilder.append("KW2069 : 'KW' '2069';\n"); + grammarBuilder.append("KW2070 : 'KW' '2070';\n"); + grammarBuilder.append("KW2071 : 'KW' '2071';\n"); + grammarBuilder.append("KW2072 : 'KW' '2072';\n"); + grammarBuilder.append("KW2073 : 'KW' '2073';\n"); + grammarBuilder.append("KW2074 : 'KW' '2074';\n"); + grammarBuilder.append("KW2075 : 'KW' '2075';\n"); + grammarBuilder.append("KW2076 : 'KW' '2076';\n"); + grammarBuilder.append("KW2077 : 'KW' '2077';\n"); + grammarBuilder.append("KW2078 : 'KW' '2078';\n"); + grammarBuilder.append("KW2079 : 'KW' '2079';\n"); + grammarBuilder.append("KW2080 : 'KW' '2080';\n"); + grammarBuilder.append("KW2081 : 'KW' '2081';\n"); + grammarBuilder.append("KW2082 : 'KW' '2082';\n"); + grammarBuilder.append("KW2083 : 'KW' '2083';\n"); + grammarBuilder.append("KW2084 : 'KW' '2084';\n"); + grammarBuilder.append("KW2085 : 'KW' '2085';\n"); + grammarBuilder.append("KW2086 : 'KW' '2086';\n"); + grammarBuilder.append("KW2087 : 'KW' '2087';\n"); + grammarBuilder.append("KW2088 : 'KW' '2088';\n"); + grammarBuilder.append("KW2089 : 'KW' '2089';\n"); + grammarBuilder.append("KW2090 : 'KW' '2090';\n"); + grammarBuilder.append("KW2091 : 'KW' '2091';\n"); + grammarBuilder.append("KW2092 : 'KW' '2092';\n"); + grammarBuilder.append("KW2093 : 'KW' '2093';\n"); + grammarBuilder.append("KW2094 : 'KW' '2094';\n"); + grammarBuilder.append("KW2095 : 'KW' '2095';\n"); + grammarBuilder.append("KW2096 : 'KW' '2096';\n"); + grammarBuilder.append("KW2097 : 'KW' '2097';\n"); + grammarBuilder.append("KW2098 : 'KW' '2098';\n"); + grammarBuilder.append("KW2099 : 'KW' '2099';\n"); + grammarBuilder.append("KW2100 : 'KW' '2100';\n"); + grammarBuilder.append("KW2101 : 'KW' '2101';\n"); + grammarBuilder.append("KW2102 : 'KW' '2102';\n"); + grammarBuilder.append("KW2103 : 'KW' '2103';\n"); + grammarBuilder.append("KW2104 : 'KW' '2104';\n"); + grammarBuilder.append("KW2105 : 'KW' '2105';\n"); + grammarBuilder.append("KW2106 : 'KW' '2106';\n"); + grammarBuilder.append("KW2107 : 'KW' '2107';\n"); + grammarBuilder.append("KW2108 : 'KW' '2108';\n"); + grammarBuilder.append("KW2109 : 'KW' '2109';\n"); + grammarBuilder.append("KW2110 : 'KW' '2110';\n"); + grammarBuilder.append("KW2111 : 'KW' '2111';\n"); + grammarBuilder.append("KW2112 : 'KW' '2112';\n"); + grammarBuilder.append("KW2113 : 'KW' '2113';\n"); + grammarBuilder.append("KW2114 : 'KW' '2114';\n"); + grammarBuilder.append("KW2115 : 'KW' '2115';\n"); + grammarBuilder.append("KW2116 : 'KW' '2116';\n"); + grammarBuilder.append("KW2117 : 'KW' '2117';\n"); + grammarBuilder.append("KW2118 : 'KW' '2118';\n"); + grammarBuilder.append("KW2119 : 'KW' '2119';\n"); + grammarBuilder.append("KW2120 : 'KW' '2120';\n"); + grammarBuilder.append("KW2121 : 'KW' '2121';\n"); + grammarBuilder.append("KW2122 : 'KW' '2122';\n"); + grammarBuilder.append("KW2123 : 'KW' '2123';\n"); + grammarBuilder.append("KW2124 : 'KW' '2124';\n"); + grammarBuilder.append("KW2125 : 'KW' '2125';\n"); + grammarBuilder.append("KW2126 : 'KW' '2126';\n"); + grammarBuilder.append("KW2127 : 'KW' '2127';\n"); + grammarBuilder.append("KW2128 : 'KW' '2128';\n"); + grammarBuilder.append("KW2129 : 'KW' '2129';\n"); + grammarBuilder.append("KW2130 : 'KW' '2130';\n"); + grammarBuilder.append("KW2131 : 'KW' '2131';\n"); + grammarBuilder.append("KW2132 : 'KW' '2132';\n"); + grammarBuilder.append("KW2133 : 'KW' '2133';\n"); + grammarBuilder.append("KW2134 : 'KW' '2134';\n"); + grammarBuilder.append("KW2135 : 'KW' '2135';\n"); + grammarBuilder.append("KW2136 : 'KW' '2136';\n"); + grammarBuilder.append("KW2137 : 'KW' '2137';\n"); + grammarBuilder.append("KW2138 : 'KW' '2138';\n"); + grammarBuilder.append("KW2139 : 'KW' '2139';\n"); + grammarBuilder.append("KW2140 : 'KW' '2140';\n"); + grammarBuilder.append("KW2141 : 'KW' '2141';\n"); + grammarBuilder.append("KW2142 : 'KW' '2142';\n"); + grammarBuilder.append("KW2143 : 'KW' '2143';\n"); + grammarBuilder.append("KW2144 : 'KW' '2144';\n"); + grammarBuilder.append("KW2145 : 'KW' '2145';\n"); + grammarBuilder.append("KW2146 : 'KW' '2146';\n"); + grammarBuilder.append("KW2147 : 'KW' '2147';\n"); + grammarBuilder.append("KW2148 : 'KW' '2148';\n"); + grammarBuilder.append("KW2149 : 'KW' '2149';\n"); + grammarBuilder.append("KW2150 : 'KW' '2150';\n"); + grammarBuilder.append("KW2151 : 'KW' '2151';\n"); + grammarBuilder.append("KW2152 : 'KW' '2152';\n"); + grammarBuilder.append("KW2153 : 'KW' '2153';\n"); + grammarBuilder.append("KW2154 : 'KW' '2154';\n"); + grammarBuilder.append("KW2155 : 'KW' '2155';\n"); + grammarBuilder.append("KW2156 : 'KW' '2156';\n"); + grammarBuilder.append("KW2157 : 'KW' '2157';\n"); + grammarBuilder.append("KW2158 : 'KW' '2158';\n"); + grammarBuilder.append("KW2159 : 'KW' '2159';\n"); + grammarBuilder.append("KW2160 : 'KW' '2160';\n"); + grammarBuilder.append("KW2161 : 'KW' '2161';\n"); + grammarBuilder.append("KW2162 : 'KW' '2162';\n"); + grammarBuilder.append("KW2163 : 'KW' '2163';\n"); + grammarBuilder.append("KW2164 : 'KW' '2164';\n"); + grammarBuilder.append("KW2165 : 'KW' '2165';\n"); + grammarBuilder.append("KW2166 : 'KW' '2166';\n"); + grammarBuilder.append("KW2167 : 'KW' '2167';\n"); + grammarBuilder.append("KW2168 : 'KW' '2168';\n"); + grammarBuilder.append("KW2169 : 'KW' '2169';\n"); + grammarBuilder.append("KW2170 : 'KW' '2170';\n"); + grammarBuilder.append("KW2171 : 'KW' '2171';\n"); + grammarBuilder.append("KW2172 : 'KW' '2172';\n"); + grammarBuilder.append("KW2173 : 'KW' '2173';\n"); + grammarBuilder.append("KW2174 : 'KW' '2174';\n"); + grammarBuilder.append("KW2175 : 'KW' '2175';\n"); + grammarBuilder.append("KW2176 : 'KW' '2176';\n"); + grammarBuilder.append("KW2177 : 'KW' '2177';\n"); + grammarBuilder.append("KW2178 : 'KW' '2178';\n"); + grammarBuilder.append("KW2179 : 'KW' '2179';\n"); + grammarBuilder.append("KW2180 : 'KW' '2180';\n"); + grammarBuilder.append("KW2181 : 'KW' '2181';\n"); + grammarBuilder.append("KW2182 : 'KW' '2182';\n"); + grammarBuilder.append("KW2183 : 'KW' '2183';\n"); + grammarBuilder.append("KW2184 : 'KW' '2184';\n"); + grammarBuilder.append("KW2185 : 'KW' '2185';\n"); + grammarBuilder.append("KW2186 : 'KW' '2186';\n"); + grammarBuilder.append("KW2187 : 'KW' '2187';\n"); + grammarBuilder.append("KW2188 : 'KW' '2188';\n"); + grammarBuilder.append("KW2189 : 'KW' '2189';\n"); + grammarBuilder.append("KW2190 : 'KW' '2190';\n"); + grammarBuilder.append("KW2191 : 'KW' '2191';\n"); + grammarBuilder.append("KW2192 : 'KW' '2192';\n"); + grammarBuilder.append("KW2193 : 'KW' '2193';\n"); + grammarBuilder.append("KW2194 : 'KW' '2194';\n"); + grammarBuilder.append("KW2195 : 'KW' '2195';\n"); + grammarBuilder.append("KW2196 : 'KW' '2196';\n"); + grammarBuilder.append("KW2197 : 'KW' '2197';\n"); + grammarBuilder.append("KW2198 : 'KW' '2198';\n"); + grammarBuilder.append("KW2199 : 'KW' '2199';\n"); + grammarBuilder.append("KW2200 : 'KW' '2200';\n"); + grammarBuilder.append("KW2201 : 'KW' '2201';\n"); + grammarBuilder.append("KW2202 : 'KW' '2202';\n"); + grammarBuilder.append("KW2203 : 'KW' '2203';\n"); + grammarBuilder.append("KW2204 : 'KW' '2204';\n"); + grammarBuilder.append("KW2205 : 'KW' '2205';\n"); + grammarBuilder.append("KW2206 : 'KW' '2206';\n"); + grammarBuilder.append("KW2207 : 'KW' '2207';\n"); + grammarBuilder.append("KW2208 : 'KW' '2208';\n"); + grammarBuilder.append("KW2209 : 'KW' '2209';\n"); + grammarBuilder.append("KW2210 : 'KW' '2210';\n"); + grammarBuilder.append("KW2211 : 'KW' '2211';\n"); + grammarBuilder.append("KW2212 : 'KW' '2212';\n"); + grammarBuilder.append("KW2213 : 'KW' '2213';\n"); + grammarBuilder.append("KW2214 : 'KW' '2214';\n"); + grammarBuilder.append("KW2215 : 'KW' '2215';\n"); + grammarBuilder.append("KW2216 : 'KW' '2216';\n"); + grammarBuilder.append("KW2217 : 'KW' '2217';\n"); + grammarBuilder.append("KW2218 : 'KW' '2218';\n"); + grammarBuilder.append("KW2219 : 'KW' '2219';\n"); + grammarBuilder.append("KW2220 : 'KW' '2220';\n"); + grammarBuilder.append("KW2221 : 'KW' '2221';\n"); + grammarBuilder.append("KW2222 : 'KW' '2222';\n"); + grammarBuilder.append("KW2223 : 'KW' '2223';\n"); + grammarBuilder.append("KW2224 : 'KW' '2224';\n"); + grammarBuilder.append("KW2225 : 'KW' '2225';\n"); + grammarBuilder.append("KW2226 : 'KW' '2226';\n"); + grammarBuilder.append("KW2227 : 'KW' '2227';\n"); + grammarBuilder.append("KW2228 : 'KW' '2228';\n"); + grammarBuilder.append("KW2229 : 'KW' '2229';\n"); + grammarBuilder.append("KW2230 : 'KW' '2230';\n"); + grammarBuilder.append("KW2231 : 'KW' '2231';\n"); + grammarBuilder.append("KW2232 : 'KW' '2232';\n"); + grammarBuilder.append("KW2233 : 'KW' '2233';\n"); + grammarBuilder.append("KW2234 : 'KW' '2234';\n"); + grammarBuilder.append("KW2235 : 'KW' '2235';\n"); + grammarBuilder.append("KW2236 : 'KW' '2236';\n"); + grammarBuilder.append("KW2237 : 'KW' '2237';\n"); + grammarBuilder.append("KW2238 : 'KW' '2238';\n"); + grammarBuilder.append("KW2239 : 'KW' '2239';\n"); + grammarBuilder.append("KW2240 : 'KW' '2240';\n"); + grammarBuilder.append("KW2241 : 'KW' '2241';\n"); + grammarBuilder.append("KW2242 : 'KW' '2242';\n"); + grammarBuilder.append("KW2243 : 'KW' '2243';\n"); + grammarBuilder.append("KW2244 : 'KW' '2244';\n"); + grammarBuilder.append("KW2245 : 'KW' '2245';\n"); + grammarBuilder.append("KW2246 : 'KW' '2246';\n"); + grammarBuilder.append("KW2247 : 'KW' '2247';\n"); + grammarBuilder.append("KW2248 : 'KW' '2248';\n"); + grammarBuilder.append("KW2249 : 'KW' '2249';\n"); + grammarBuilder.append("KW2250 : 'KW' '2250';\n"); + grammarBuilder.append("KW2251 : 'KW' '2251';\n"); + grammarBuilder.append("KW2252 : 'KW' '2252';\n"); + grammarBuilder.append("KW2253 : 'KW' '2253';\n"); + grammarBuilder.append("KW2254 : 'KW' '2254';\n"); + grammarBuilder.append("KW2255 : 'KW' '2255';\n"); + grammarBuilder.append("KW2256 : 'KW' '2256';\n"); + grammarBuilder.append("KW2257 : 'KW' '2257';\n"); + grammarBuilder.append("KW2258 : 'KW' '2258';\n"); + grammarBuilder.append("KW2259 : 'KW' '2259';\n"); + grammarBuilder.append("KW2260 : 'KW' '2260';\n"); + grammarBuilder.append("KW2261 : 'KW' '2261';\n"); + grammarBuilder.append("KW2262 : 'KW' '2262';\n"); + grammarBuilder.append("KW2263 : 'KW' '2263';\n"); + grammarBuilder.append("KW2264 : 'KW' '2264';\n"); + grammarBuilder.append("KW2265 : 'KW' '2265';\n"); + grammarBuilder.append("KW2266 : 'KW' '2266';\n"); + grammarBuilder.append("KW2267 : 'KW' '2267';\n"); + grammarBuilder.append("KW2268 : 'KW' '2268';\n"); + grammarBuilder.append("KW2269 : 'KW' '2269';\n"); + grammarBuilder.append("KW2270 : 'KW' '2270';\n"); + grammarBuilder.append("KW2271 : 'KW' '2271';\n"); + grammarBuilder.append("KW2272 : 'KW' '2272';\n"); + grammarBuilder.append("KW2273 : 'KW' '2273';\n"); + grammarBuilder.append("KW2274 : 'KW' '2274';\n"); + grammarBuilder.append("KW2275 : 'KW' '2275';\n"); + grammarBuilder.append("KW2276 : 'KW' '2276';\n"); + grammarBuilder.append("KW2277 : 'KW' '2277';\n"); + grammarBuilder.append("KW2278 : 'KW' '2278';\n"); + grammarBuilder.append("KW2279 : 'KW' '2279';\n"); + grammarBuilder.append("KW2280 : 'KW' '2280';\n"); + grammarBuilder.append("KW2281 : 'KW' '2281';\n"); + grammarBuilder.append("KW2282 : 'KW' '2282';\n"); + grammarBuilder.append("KW2283 : 'KW' '2283';\n"); + grammarBuilder.append("KW2284 : 'KW' '2284';\n"); + grammarBuilder.append("KW2285 : 'KW' '2285';\n"); + grammarBuilder.append("KW2286 : 'KW' '2286';\n"); + grammarBuilder.append("KW2287 : 'KW' '2287';\n"); + grammarBuilder.append("KW2288 : 'KW' '2288';\n"); + grammarBuilder.append("KW2289 : 'KW' '2289';\n"); + grammarBuilder.append("KW2290 : 'KW' '2290';\n"); + grammarBuilder.append("KW2291 : 'KW' '2291';\n"); + grammarBuilder.append("KW2292 : 'KW' '2292';\n"); + grammarBuilder.append("KW2293 : 'KW' '2293';\n"); + grammarBuilder.append("KW2294 : 'KW' '2294';\n"); + grammarBuilder.append("KW2295 : 'KW' '2295';\n"); + grammarBuilder.append("KW2296 : 'KW' '2296';\n"); + grammarBuilder.append("KW2297 : 'KW' '2297';\n"); + grammarBuilder.append("KW2298 : 'KW' '2298';\n"); + grammarBuilder.append("KW2299 : 'KW' '2299';\n"); + grammarBuilder.append("KW2300 : 'KW' '2300';\n"); + grammarBuilder.append("KW2301 : 'KW' '2301';\n"); + grammarBuilder.append("KW2302 : 'KW' '2302';\n"); + grammarBuilder.append("KW2303 : 'KW' '2303';\n"); + grammarBuilder.append("KW2304 : 'KW' '2304';\n"); + grammarBuilder.append("KW2305 : 'KW' '2305';\n"); + grammarBuilder.append("KW2306 : 'KW' '2306';\n"); + grammarBuilder.append("KW2307 : 'KW' '2307';\n"); + grammarBuilder.append("KW2308 : 'KW' '2308';\n"); + grammarBuilder.append("KW2309 : 'KW' '2309';\n"); + grammarBuilder.append("KW2310 : 'KW' '2310';\n"); + grammarBuilder.append("KW2311 : 'KW' '2311';\n"); + grammarBuilder.append("KW2312 : 'KW' '2312';\n"); + grammarBuilder.append("KW2313 : 'KW' '2313';\n"); + grammarBuilder.append("KW2314 : 'KW' '2314';\n"); + grammarBuilder.append("KW2315 : 'KW' '2315';\n"); + grammarBuilder.append("KW2316 : 'KW' '2316';\n"); + grammarBuilder.append("KW2317 : 'KW' '2317';\n"); + grammarBuilder.append("KW2318 : 'KW' '2318';\n"); + grammarBuilder.append("KW2319 : 'KW' '2319';\n"); + grammarBuilder.append("KW2320 : 'KW' '2320';\n"); + grammarBuilder.append("KW2321 : 'KW' '2321';\n"); + grammarBuilder.append("KW2322 : 'KW' '2322';\n"); + grammarBuilder.append("KW2323 : 'KW' '2323';\n"); + grammarBuilder.append("KW2324 : 'KW' '2324';\n"); + grammarBuilder.append("KW2325 : 'KW' '2325';\n"); + grammarBuilder.append("KW2326 : 'KW' '2326';\n"); + grammarBuilder.append("KW2327 : 'KW' '2327';\n"); + grammarBuilder.append("KW2328 : 'KW' '2328';\n"); + grammarBuilder.append("KW2329 : 'KW' '2329';\n"); + grammarBuilder.append("KW2330 : 'KW' '2330';\n"); + grammarBuilder.append("KW2331 : 'KW' '2331';\n"); + grammarBuilder.append("KW2332 : 'KW' '2332';\n"); + grammarBuilder.append("KW2333 : 'KW' '2333';\n"); + grammarBuilder.append("KW2334 : 'KW' '2334';\n"); + grammarBuilder.append("KW2335 : 'KW' '2335';\n"); + grammarBuilder.append("KW2336 : 'KW' '2336';\n"); + grammarBuilder.append("KW2337 : 'KW' '2337';\n"); + grammarBuilder.append("KW2338 : 'KW' '2338';\n"); + grammarBuilder.append("KW2339 : 'KW' '2339';\n"); + grammarBuilder.append("KW2340 : 'KW' '2340';\n"); + grammarBuilder.append("KW2341 : 'KW' '2341';\n"); + grammarBuilder.append("KW2342 : 'KW' '2342';\n"); + grammarBuilder.append("KW2343 : 'KW' '2343';\n"); + grammarBuilder.append("KW2344 : 'KW' '2344';\n"); + grammarBuilder.append("KW2345 : 'KW' '2345';\n"); + grammarBuilder.append("KW2346 : 'KW' '2346';\n"); + grammarBuilder.append("KW2347 : 'KW' '2347';\n"); + grammarBuilder.append("KW2348 : 'KW' '2348';\n"); + grammarBuilder.append("KW2349 : 'KW' '2349';\n"); + grammarBuilder.append("KW2350 : 'KW' '2350';\n"); + grammarBuilder.append("KW2351 : 'KW' '2351';\n"); + grammarBuilder.append("KW2352 : 'KW' '2352';\n"); + grammarBuilder.append("KW2353 : 'KW' '2353';\n"); + grammarBuilder.append("KW2354 : 'KW' '2354';\n"); + grammarBuilder.append("KW2355 : 'KW' '2355';\n"); + grammarBuilder.append("KW2356 : 'KW' '2356';\n"); + grammarBuilder.append("KW2357 : 'KW' '2357';\n"); + grammarBuilder.append("KW2358 : 'KW' '2358';\n"); + grammarBuilder.append("KW2359 : 'KW' '2359';\n"); + grammarBuilder.append("KW2360 : 'KW' '2360';\n"); + grammarBuilder.append("KW2361 : 'KW' '2361';\n"); + grammarBuilder.append("KW2362 : 'KW' '2362';\n"); + grammarBuilder.append("KW2363 : 'KW' '2363';\n"); + grammarBuilder.append("KW2364 : 'KW' '2364';\n"); + grammarBuilder.append("KW2365 : 'KW' '2365';\n"); + grammarBuilder.append("KW2366 : 'KW' '2366';\n"); + grammarBuilder.append("KW2367 : 'KW' '2367';\n"); + grammarBuilder.append("KW2368 : 'KW' '2368';\n"); + grammarBuilder.append("KW2369 : 'KW' '2369';\n"); + grammarBuilder.append("KW2370 : 'KW' '2370';\n"); + grammarBuilder.append("KW2371 : 'KW' '2371';\n"); + grammarBuilder.append("KW2372 : 'KW' '2372';\n"); + grammarBuilder.append("KW2373 : 'KW' '2373';\n"); + grammarBuilder.append("KW2374 : 'KW' '2374';\n"); + grammarBuilder.append("KW2375 : 'KW' '2375';\n"); + grammarBuilder.append("KW2376 : 'KW' '2376';\n"); + grammarBuilder.append("KW2377 : 'KW' '2377';\n"); + grammarBuilder.append("KW2378 : 'KW' '2378';\n"); + grammarBuilder.append("KW2379 : 'KW' '2379';\n"); + grammarBuilder.append("KW2380 : 'KW' '2380';\n"); + grammarBuilder.append("KW2381 : 'KW' '2381';\n"); + grammarBuilder.append("KW2382 : 'KW' '2382';\n"); + grammarBuilder.append("KW2383 : 'KW' '2383';\n"); + grammarBuilder.append("KW2384 : 'KW' '2384';\n"); + grammarBuilder.append("KW2385 : 'KW' '2385';\n"); + grammarBuilder.append("KW2386 : 'KW' '2386';\n"); + grammarBuilder.append("KW2387 : 'KW' '2387';\n"); + grammarBuilder.append("KW2388 : 'KW' '2388';\n"); + grammarBuilder.append("KW2389 : 'KW' '2389';\n"); + grammarBuilder.append("KW2390 : 'KW' '2390';\n"); + grammarBuilder.append("KW2391 : 'KW' '2391';\n"); + grammarBuilder.append("KW2392 : 'KW' '2392';\n"); + grammarBuilder.append("KW2393 : 'KW' '2393';\n"); + grammarBuilder.append("KW2394 : 'KW' '2394';\n"); + grammarBuilder.append("KW2395 : 'KW' '2395';\n"); + grammarBuilder.append("KW2396 : 'KW' '2396';\n"); + grammarBuilder.append("KW2397 : 'KW' '2397';\n"); + grammarBuilder.append("KW2398 : 'KW' '2398';\n"); + grammarBuilder.append("KW2399 : 'KW' '2399';\n"); + grammarBuilder.append("KW2400 : 'KW' '2400';\n"); + grammarBuilder.append("KW2401 : 'KW' '2401';\n"); + grammarBuilder.append("KW2402 : 'KW' '2402';\n"); + grammarBuilder.append("KW2403 : 'KW' '2403';\n"); + grammarBuilder.append("KW2404 : 'KW' '2404';\n"); + grammarBuilder.append("KW2405 : 'KW' '2405';\n"); + grammarBuilder.append("KW2406 : 'KW' '2406';\n"); + grammarBuilder.append("KW2407 : 'KW' '2407';\n"); + grammarBuilder.append("KW2408 : 'KW' '2408';\n"); + grammarBuilder.append("KW2409 : 'KW' '2409';\n"); + grammarBuilder.append("KW2410 : 'KW' '2410';\n"); + grammarBuilder.append("KW2411 : 'KW' '2411';\n"); + grammarBuilder.append("KW2412 : 'KW' '2412';\n"); + grammarBuilder.append("KW2413 : 'KW' '2413';\n"); + grammarBuilder.append("KW2414 : 'KW' '2414';\n"); + grammarBuilder.append("KW2415 : 'KW' '2415';\n"); + grammarBuilder.append("KW2416 : 'KW' '2416';\n"); + grammarBuilder.append("KW2417 : 'KW' '2417';\n"); + grammarBuilder.append("KW2418 : 'KW' '2418';\n"); + grammarBuilder.append("KW2419 : 'KW' '2419';\n"); + grammarBuilder.append("KW2420 : 'KW' '2420';\n"); + grammarBuilder.append("KW2421 : 'KW' '2421';\n"); + grammarBuilder.append("KW2422 : 'KW' '2422';\n"); + grammarBuilder.append("KW2423 : 'KW' '2423';\n"); + grammarBuilder.append("KW2424 : 'KW' '2424';\n"); + grammarBuilder.append("KW2425 : 'KW' '2425';\n"); + grammarBuilder.append("KW2426 : 'KW' '2426';\n"); + grammarBuilder.append("KW2427 : 'KW' '2427';\n"); + grammarBuilder.append("KW2428 : 'KW' '2428';\n"); + grammarBuilder.append("KW2429 : 'KW' '2429';\n"); + grammarBuilder.append("KW2430 : 'KW' '2430';\n"); + grammarBuilder.append("KW2431 : 'KW' '2431';\n"); + grammarBuilder.append("KW2432 : 'KW' '2432';\n"); + grammarBuilder.append("KW2433 : 'KW' '2433';\n"); + grammarBuilder.append("KW2434 : 'KW' '2434';\n"); + grammarBuilder.append("KW2435 : 'KW' '2435';\n"); + grammarBuilder.append("KW2436 : 'KW' '2436';\n"); + grammarBuilder.append("KW2437 : 'KW' '2437';\n"); + grammarBuilder.append("KW2438 : 'KW' '2438';\n"); + grammarBuilder.append("KW2439 : 'KW' '2439';\n"); + grammarBuilder.append("KW2440 : 'KW' '2440';\n"); + grammarBuilder.append("KW2441 : 'KW' '2441';\n"); + grammarBuilder.append("KW2442 : 'KW' '2442';\n"); + grammarBuilder.append("KW2443 : 'KW' '2443';\n"); + grammarBuilder.append("KW2444 : 'KW' '2444';\n"); + grammarBuilder.append("KW2445 : 'KW' '2445';\n"); + grammarBuilder.append("KW2446 : 'KW' '2446';\n"); + grammarBuilder.append("KW2447 : 'KW' '2447';\n"); + grammarBuilder.append("KW2448 : 'KW' '2448';\n"); + grammarBuilder.append("KW2449 : 'KW' '2449';\n"); + grammarBuilder.append("KW2450 : 'KW' '2450';\n"); + grammarBuilder.append("KW2451 : 'KW' '2451';\n"); + grammarBuilder.append("KW2452 : 'KW' '2452';\n"); + grammarBuilder.append("KW2453 : 'KW' '2453';\n"); + grammarBuilder.append("KW2454 : 'KW' '2454';\n"); + grammarBuilder.append("KW2455 : 'KW' '2455';\n"); + grammarBuilder.append("KW2456 : 'KW' '2456';\n"); + grammarBuilder.append("KW2457 : 'KW' '2457';\n"); + grammarBuilder.append("KW2458 : 'KW' '2458';\n"); + grammarBuilder.append("KW2459 : 'KW' '2459';\n"); + grammarBuilder.append("KW2460 : 'KW' '2460';\n"); + grammarBuilder.append("KW2461 : 'KW' '2461';\n"); + grammarBuilder.append("KW2462 : 'KW' '2462';\n"); + grammarBuilder.append("KW2463 : 'KW' '2463';\n"); + grammarBuilder.append("KW2464 : 'KW' '2464';\n"); + grammarBuilder.append("KW2465 : 'KW' '2465';\n"); + grammarBuilder.append("KW2466 : 'KW' '2466';\n"); + grammarBuilder.append("KW2467 : 'KW' '2467';\n"); + grammarBuilder.append("KW2468 : 'KW' '2468';\n"); + grammarBuilder.append("KW2469 : 'KW' '2469';\n"); + grammarBuilder.append("KW2470 : 'KW' '2470';\n"); + grammarBuilder.append("KW2471 : 'KW' '2471';\n"); + grammarBuilder.append("KW2472 : 'KW' '2472';\n"); + grammarBuilder.append("KW2473 : 'KW' '2473';\n"); + grammarBuilder.append("KW2474 : 'KW' '2474';\n"); + grammarBuilder.append("KW2475 : 'KW' '2475';\n"); + grammarBuilder.append("KW2476 : 'KW' '2476';\n"); + grammarBuilder.append("KW2477 : 'KW' '2477';\n"); + grammarBuilder.append("KW2478 : 'KW' '2478';\n"); + grammarBuilder.append("KW2479 : 'KW' '2479';\n"); + grammarBuilder.append("KW2480 : 'KW' '2480';\n"); + grammarBuilder.append("KW2481 : 'KW' '2481';\n"); + grammarBuilder.append("KW2482 : 'KW' '2482';\n"); + grammarBuilder.append("KW2483 : 'KW' '2483';\n"); + grammarBuilder.append("KW2484 : 'KW' '2484';\n"); + grammarBuilder.append("KW2485 : 'KW' '2485';\n"); + grammarBuilder.append("KW2486 : 'KW' '2486';\n"); + grammarBuilder.append("KW2487 : 'KW' '2487';\n"); + grammarBuilder.append("KW2488 : 'KW' '2488';\n"); + grammarBuilder.append("KW2489 : 'KW' '2489';\n"); + grammarBuilder.append("KW2490 : 'KW' '2490';\n"); + grammarBuilder.append("KW2491 : 'KW' '2491';\n"); + grammarBuilder.append("KW2492 : 'KW' '2492';\n"); + grammarBuilder.append("KW2493 : 'KW' '2493';\n"); + grammarBuilder.append("KW2494 : 'KW' '2494';\n"); + grammarBuilder.append("KW2495 : 'KW' '2495';\n"); + grammarBuilder.append("KW2496 : 'KW' '2496';\n"); + grammarBuilder.append("KW2497 : 'KW' '2497';\n"); + grammarBuilder.append("KW2498 : 'KW' '2498';\n"); + grammarBuilder.append("KW2499 : 'KW' '2499';\n"); + grammarBuilder.append("KW2500 : 'KW' '2500';\n"); + grammarBuilder.append("KW2501 : 'KW' '2501';\n"); + grammarBuilder.append("KW2502 : 'KW' '2502';\n"); + grammarBuilder.append("KW2503 : 'KW' '2503';\n"); + grammarBuilder.append("KW2504 : 'KW' '2504';\n"); + grammarBuilder.append("KW2505 : 'KW' '2505';\n"); + grammarBuilder.append("KW2506 : 'KW' '2506';\n"); + grammarBuilder.append("KW2507 : 'KW' '2507';\n"); + grammarBuilder.append("KW2508 : 'KW' '2508';\n"); + grammarBuilder.append("KW2509 : 'KW' '2509';\n"); + grammarBuilder.append("KW2510 : 'KW' '2510';\n"); + grammarBuilder.append("KW2511 : 'KW' '2511';\n"); + grammarBuilder.append("KW2512 : 'KW' '2512';\n"); + grammarBuilder.append("KW2513 : 'KW' '2513';\n"); + grammarBuilder.append("KW2514 : 'KW' '2514';\n"); + grammarBuilder.append("KW2515 : 'KW' '2515';\n"); + grammarBuilder.append("KW2516 : 'KW' '2516';\n"); + grammarBuilder.append("KW2517 : 'KW' '2517';\n"); + grammarBuilder.append("KW2518 : 'KW' '2518';\n"); + grammarBuilder.append("KW2519 : 'KW' '2519';\n"); + grammarBuilder.append("KW2520 : 'KW' '2520';\n"); + grammarBuilder.append("KW2521 : 'KW' '2521';\n"); + grammarBuilder.append("KW2522 : 'KW' '2522';\n"); + grammarBuilder.append("KW2523 : 'KW' '2523';\n"); + grammarBuilder.append("KW2524 : 'KW' '2524';\n"); + grammarBuilder.append("KW2525 : 'KW' '2525';\n"); + grammarBuilder.append("KW2526 : 'KW' '2526';\n"); + grammarBuilder.append("KW2527 : 'KW' '2527';\n"); + grammarBuilder.append("KW2528 : 'KW' '2528';\n"); + grammarBuilder.append("KW2529 : 'KW' '2529';\n"); + grammarBuilder.append("KW2530 : 'KW' '2530';\n"); + grammarBuilder.append("KW2531 : 'KW' '2531';\n"); + grammarBuilder.append("KW2532 : 'KW' '2532';\n"); + grammarBuilder.append("KW2533 : 'KW' '2533';\n"); + grammarBuilder.append("KW2534 : 'KW' '2534';\n"); + grammarBuilder.append("KW2535 : 'KW' '2535';\n"); + grammarBuilder.append("KW2536 : 'KW' '2536';\n"); + grammarBuilder.append("KW2537 : 'KW' '2537';\n"); + grammarBuilder.append("KW2538 : 'KW' '2538';\n"); + grammarBuilder.append("KW2539 : 'KW' '2539';\n"); + grammarBuilder.append("KW2540 : 'KW' '2540';\n"); + grammarBuilder.append("KW2541 : 'KW' '2541';\n"); + grammarBuilder.append("KW2542 : 'KW' '2542';\n"); + grammarBuilder.append("KW2543 : 'KW' '2543';\n"); + grammarBuilder.append("KW2544 : 'KW' '2544';\n"); + grammarBuilder.append("KW2545 : 'KW' '2545';\n"); + grammarBuilder.append("KW2546 : 'KW' '2546';\n"); + grammarBuilder.append("KW2547 : 'KW' '2547';\n"); + grammarBuilder.append("KW2548 : 'KW' '2548';\n"); + grammarBuilder.append("KW2549 : 'KW' '2549';\n"); + grammarBuilder.append("KW2550 : 'KW' '2550';\n"); + grammarBuilder.append("KW2551 : 'KW' '2551';\n"); + grammarBuilder.append("KW2552 : 'KW' '2552';\n"); + grammarBuilder.append("KW2553 : 'KW' '2553';\n"); + grammarBuilder.append("KW2554 : 'KW' '2554';\n"); + grammarBuilder.append("KW2555 : 'KW' '2555';\n"); + grammarBuilder.append("KW2556 : 'KW' '2556';\n"); + grammarBuilder.append("KW2557 : 'KW' '2557';\n"); + grammarBuilder.append("KW2558 : 'KW' '2558';\n"); + grammarBuilder.append("KW2559 : 'KW' '2559';\n"); + grammarBuilder.append("KW2560 : 'KW' '2560';\n"); + grammarBuilder.append("KW2561 : 'KW' '2561';\n"); + grammarBuilder.append("KW2562 : 'KW' '2562';\n"); + grammarBuilder.append("KW2563 : 'KW' '2563';\n"); + grammarBuilder.append("KW2564 : 'KW' '2564';\n"); + grammarBuilder.append("KW2565 : 'KW' '2565';\n"); + grammarBuilder.append("KW2566 : 'KW' '2566';\n"); + grammarBuilder.append("KW2567 : 'KW' '2567';\n"); + grammarBuilder.append("KW2568 : 'KW' '2568';\n"); + grammarBuilder.append("KW2569 : 'KW' '2569';\n"); + grammarBuilder.append("KW2570 : 'KW' '2570';\n"); + grammarBuilder.append("KW2571 : 'KW' '2571';\n"); + grammarBuilder.append("KW2572 : 'KW' '2572';\n"); + grammarBuilder.append("KW2573 : 'KW' '2573';\n"); + grammarBuilder.append("KW2574 : 'KW' '2574';\n"); + grammarBuilder.append("KW2575 : 'KW' '2575';\n"); + grammarBuilder.append("KW2576 : 'KW' '2576';\n"); + grammarBuilder.append("KW2577 : 'KW' '2577';\n"); + grammarBuilder.append("KW2578 : 'KW' '2578';\n"); + grammarBuilder.append("KW2579 : 'KW' '2579';\n"); + grammarBuilder.append("KW2580 : 'KW' '2580';\n"); + grammarBuilder.append("KW2581 : 'KW' '2581';\n"); + grammarBuilder.append("KW2582 : 'KW' '2582';\n"); + grammarBuilder.append("KW2583 : 'KW' '2583';\n"); + grammarBuilder.append("KW2584 : 'KW' '2584';\n"); + grammarBuilder.append("KW2585 : 'KW' '2585';\n"); + grammarBuilder.append("KW2586 : 'KW' '2586';\n"); + grammarBuilder.append("KW2587 : 'KW' '2587';\n"); + grammarBuilder.append("KW2588 : 'KW' '2588';\n"); + grammarBuilder.append("KW2589 : 'KW' '2589';\n"); + grammarBuilder.append("KW2590 : 'KW' '2590';\n"); + grammarBuilder.append("KW2591 : 'KW' '2591';\n"); + grammarBuilder.append("KW2592 : 'KW' '2592';\n"); + grammarBuilder.append("KW2593 : 'KW' '2593';\n"); + grammarBuilder.append("KW2594 : 'KW' '2594';\n"); + grammarBuilder.append("KW2595 : 'KW' '2595';\n"); + grammarBuilder.append("KW2596 : 'KW' '2596';\n"); + grammarBuilder.append("KW2597 : 'KW' '2597';\n"); + grammarBuilder.append("KW2598 : 'KW' '2598';\n"); + grammarBuilder.append("KW2599 : 'KW' '2599';\n"); + grammarBuilder.append("KW2600 : 'KW' '2600';\n"); + grammarBuilder.append("KW2601 : 'KW' '2601';\n"); + grammarBuilder.append("KW2602 : 'KW' '2602';\n"); + grammarBuilder.append("KW2603 : 'KW' '2603';\n"); + grammarBuilder.append("KW2604 : 'KW' '2604';\n"); + grammarBuilder.append("KW2605 : 'KW' '2605';\n"); + grammarBuilder.append("KW2606 : 'KW' '2606';\n"); + grammarBuilder.append("KW2607 : 'KW' '2607';\n"); + grammarBuilder.append("KW2608 : 'KW' '2608';\n"); + grammarBuilder.append("KW2609 : 'KW' '2609';\n"); + grammarBuilder.append("KW2610 : 'KW' '2610';\n"); + grammarBuilder.append("KW2611 : 'KW' '2611';\n"); + grammarBuilder.append("KW2612 : 'KW' '2612';\n"); + grammarBuilder.append("KW2613 : 'KW' '2613';\n"); + grammarBuilder.append("KW2614 : 'KW' '2614';\n"); + grammarBuilder.append("KW2615 : 'KW' '2615';\n"); + grammarBuilder.append("KW2616 : 'KW' '2616';\n"); + grammarBuilder.append("KW2617 : 'KW' '2617';\n"); + grammarBuilder.append("KW2618 : 'KW' '2618';\n"); + grammarBuilder.append("KW2619 : 'KW' '2619';\n"); + grammarBuilder.append("KW2620 : 'KW' '2620';\n"); + grammarBuilder.append("KW2621 : 'KW' '2621';\n"); + grammarBuilder.append("KW2622 : 'KW' '2622';\n"); + grammarBuilder.append("KW2623 : 'KW' '2623';\n"); + grammarBuilder.append("KW2624 : 'KW' '2624';\n"); + grammarBuilder.append("KW2625 : 'KW' '2625';\n"); + grammarBuilder.append("KW2626 : 'KW' '2626';\n"); + grammarBuilder.append("KW2627 : 'KW' '2627';\n"); + grammarBuilder.append("KW2628 : 'KW' '2628';\n"); + grammarBuilder.append("KW2629 : 'KW' '2629';\n"); + grammarBuilder.append("KW2630 : 'KW' '2630';\n"); + grammarBuilder.append("KW2631 : 'KW' '2631';\n"); + grammarBuilder.append("KW2632 : 'KW' '2632';\n"); + grammarBuilder.append("KW2633 : 'KW' '2633';\n"); + grammarBuilder.append("KW2634 : 'KW' '2634';\n"); + grammarBuilder.append("KW2635 : 'KW' '2635';\n"); + grammarBuilder.append("KW2636 : 'KW' '2636';\n"); + grammarBuilder.append("KW2637 : 'KW' '2637';\n"); + grammarBuilder.append("KW2638 : 'KW' '2638';\n"); + grammarBuilder.append("KW2639 : 'KW' '2639';\n"); + grammarBuilder.append("KW2640 : 'KW' '2640';\n"); + grammarBuilder.append("KW2641 : 'KW' '2641';\n"); + grammarBuilder.append("KW2642 : 'KW' '2642';\n"); + grammarBuilder.append("KW2643 : 'KW' '2643';\n"); + grammarBuilder.append("KW2644 : 'KW' '2644';\n"); + grammarBuilder.append("KW2645 : 'KW' '2645';\n"); + grammarBuilder.append("KW2646 : 'KW' '2646';\n"); + grammarBuilder.append("KW2647 : 'KW' '2647';\n"); + grammarBuilder.append("KW2648 : 'KW' '2648';\n"); + grammarBuilder.append("KW2649 : 'KW' '2649';\n"); + grammarBuilder.append("KW2650 : 'KW' '2650';\n"); + grammarBuilder.append("KW2651 : 'KW' '2651';\n"); + grammarBuilder.append("KW2652 : 'KW' '2652';\n"); + grammarBuilder.append("KW2653 : 'KW' '2653';\n"); + grammarBuilder.append("KW2654 : 'KW' '2654';\n"); + grammarBuilder.append("KW2655 : 'KW' '2655';\n"); + grammarBuilder.append("KW2656 : 'KW' '2656';\n"); + grammarBuilder.append("KW2657 : 'KW' '2657';\n"); + grammarBuilder.append("KW2658 : 'KW' '2658';\n"); + grammarBuilder.append("KW2659 : 'KW' '2659';\n"); + grammarBuilder.append("KW2660 : 'KW' '2660';\n"); + grammarBuilder.append("KW2661 : 'KW' '2661';\n"); + grammarBuilder.append("KW2662 : 'KW' '2662';\n"); + grammarBuilder.append("KW2663 : 'KW' '2663';\n"); + grammarBuilder.append("KW2664 : 'KW' '2664';\n"); + grammarBuilder.append("KW2665 : 'KW' '2665';\n"); + grammarBuilder.append("KW2666 : 'KW' '2666';\n"); + grammarBuilder.append("KW2667 : 'KW' '2667';\n"); + grammarBuilder.append("KW2668 : 'KW' '2668';\n"); + grammarBuilder.append("KW2669 : 'KW' '2669';\n"); + grammarBuilder.append("KW2670 : 'KW' '2670';\n"); + grammarBuilder.append("KW2671 : 'KW' '2671';\n"); + grammarBuilder.append("KW2672 : 'KW' '2672';\n"); + grammarBuilder.append("KW2673 : 'KW' '2673';\n"); + grammarBuilder.append("KW2674 : 'KW' '2674';\n"); + grammarBuilder.append("KW2675 : 'KW' '2675';\n"); + grammarBuilder.append("KW2676 : 'KW' '2676';\n"); + grammarBuilder.append("KW2677 : 'KW' '2677';\n"); + grammarBuilder.append("KW2678 : 'KW' '2678';\n"); + grammarBuilder.append("KW2679 : 'KW' '2679';\n"); + grammarBuilder.append("KW2680 : 'KW' '2680';\n"); + grammarBuilder.append("KW2681 : 'KW' '2681';\n"); + grammarBuilder.append("KW2682 : 'KW' '2682';\n"); + grammarBuilder.append("KW2683 : 'KW' '2683';\n"); + grammarBuilder.append("KW2684 : 'KW' '2684';\n"); + grammarBuilder.append("KW2685 : 'KW' '2685';\n"); + grammarBuilder.append("KW2686 : 'KW' '2686';\n"); + grammarBuilder.append("KW2687 : 'KW' '2687';\n"); + grammarBuilder.append("KW2688 : 'KW' '2688';\n"); + grammarBuilder.append("KW2689 : 'KW' '2689';\n"); + grammarBuilder.append("KW2690 : 'KW' '2690';\n"); + grammarBuilder.append("KW2691 : 'KW' '2691';\n"); + grammarBuilder.append("KW2692 : 'KW' '2692';\n"); + grammarBuilder.append("KW2693 : 'KW' '2693';\n"); + grammarBuilder.append("KW2694 : 'KW' '2694';\n"); + grammarBuilder.append("KW2695 : 'KW' '2695';\n"); + grammarBuilder.append("KW2696 : 'KW' '2696';\n"); + grammarBuilder.append("KW2697 : 'KW' '2697';\n"); + grammarBuilder.append("KW2698 : 'KW' '2698';\n"); + grammarBuilder.append("KW2699 : 'KW' '2699';\n"); + grammarBuilder.append("KW2700 : 'KW' '2700';\n"); + grammarBuilder.append("KW2701 : 'KW' '2701';\n"); + grammarBuilder.append("KW2702 : 'KW' '2702';\n"); + grammarBuilder.append("KW2703 : 'KW' '2703';\n"); + grammarBuilder.append("KW2704 : 'KW' '2704';\n"); + grammarBuilder.append("KW2705 : 'KW' '2705';\n"); + grammarBuilder.append("KW2706 : 'KW' '2706';\n"); + grammarBuilder.append("KW2707 : 'KW' '2707';\n"); + grammarBuilder.append("KW2708 : 'KW' '2708';\n"); + grammarBuilder.append("KW2709 : 'KW' '2709';\n"); + grammarBuilder.append("KW2710 : 'KW' '2710';\n"); + grammarBuilder.append("KW2711 : 'KW' '2711';\n"); + grammarBuilder.append("KW2712 : 'KW' '2712';\n"); + grammarBuilder.append("KW2713 : 'KW' '2713';\n"); + grammarBuilder.append("KW2714 : 'KW' '2714';\n"); + grammarBuilder.append("KW2715 : 'KW' '2715';\n"); + grammarBuilder.append("KW2716 : 'KW' '2716';\n"); + grammarBuilder.append("KW2717 : 'KW' '2717';\n"); + grammarBuilder.append("KW2718 : 'KW' '2718';\n"); + grammarBuilder.append("KW2719 : 'KW' '2719';\n"); + grammarBuilder.append("KW2720 : 'KW' '2720';\n"); + grammarBuilder.append("KW2721 : 'KW' '2721';\n"); + grammarBuilder.append("KW2722 : 'KW' '2722';\n"); + grammarBuilder.append("KW2723 : 'KW' '2723';\n"); + grammarBuilder.append("KW2724 : 'KW' '2724';\n"); + grammarBuilder.append("KW2725 : 'KW' '2725';\n"); + grammarBuilder.append("KW2726 : 'KW' '2726';\n"); + grammarBuilder.append("KW2727 : 'KW' '2727';\n"); + grammarBuilder.append("KW2728 : 'KW' '2728';\n"); + grammarBuilder.append("KW2729 : 'KW' '2729';\n"); + grammarBuilder.append("KW2730 : 'KW' '2730';\n"); + grammarBuilder.append("KW2731 : 'KW' '2731';\n"); + grammarBuilder.append("KW2732 : 'KW' '2732';\n"); + grammarBuilder.append("KW2733 : 'KW' '2733';\n"); + grammarBuilder.append("KW2734 : 'KW' '2734';\n"); + grammarBuilder.append("KW2735 : 'KW' '2735';\n"); + grammarBuilder.append("KW2736 : 'KW' '2736';\n"); + grammarBuilder.append("KW2737 : 'KW' '2737';\n"); + grammarBuilder.append("KW2738 : 'KW' '2738';\n"); + grammarBuilder.append("KW2739 : 'KW' '2739';\n"); + grammarBuilder.append("KW2740 : 'KW' '2740';\n"); + grammarBuilder.append("KW2741 : 'KW' '2741';\n"); + grammarBuilder.append("KW2742 : 'KW' '2742';\n"); + grammarBuilder.append("KW2743 : 'KW' '2743';\n"); + grammarBuilder.append("KW2744 : 'KW' '2744';\n"); + grammarBuilder.append("KW2745 : 'KW' '2745';\n"); + grammarBuilder.append("KW2746 : 'KW' '2746';\n"); + grammarBuilder.append("KW2747 : 'KW' '2747';\n"); + grammarBuilder.append("KW2748 : 'KW' '2748';\n"); + grammarBuilder.append("KW2749 : 'KW' '2749';\n"); + grammarBuilder.append("KW2750 : 'KW' '2750';\n"); + grammarBuilder.append("KW2751 : 'KW' '2751';\n"); + grammarBuilder.append("KW2752 : 'KW' '2752';\n"); + grammarBuilder.append("KW2753 : 'KW' '2753';\n"); + grammarBuilder.append("KW2754 : 'KW' '2754';\n"); + grammarBuilder.append("KW2755 : 'KW' '2755';\n"); + grammarBuilder.append("KW2756 : 'KW' '2756';\n"); + grammarBuilder.append("KW2757 : 'KW' '2757';\n"); + grammarBuilder.append("KW2758 : 'KW' '2758';\n"); + grammarBuilder.append("KW2759 : 'KW' '2759';\n"); + grammarBuilder.append("KW2760 : 'KW' '2760';\n"); + grammarBuilder.append("KW2761 : 'KW' '2761';\n"); + grammarBuilder.append("KW2762 : 'KW' '2762';\n"); + grammarBuilder.append("KW2763 : 'KW' '2763';\n"); + grammarBuilder.append("KW2764 : 'KW' '2764';\n"); + grammarBuilder.append("KW2765 : 'KW' '2765';\n"); + grammarBuilder.append("KW2766 : 'KW' '2766';\n"); + grammarBuilder.append("KW2767 : 'KW' '2767';\n"); + grammarBuilder.append("KW2768 : 'KW' '2768';\n"); + grammarBuilder.append("KW2769 : 'KW' '2769';\n"); + grammarBuilder.append("KW2770 : 'KW' '2770';\n"); + grammarBuilder.append("KW2771 : 'KW' '2771';\n"); + grammarBuilder.append("KW2772 : 'KW' '2772';\n"); + grammarBuilder.append("KW2773 : 'KW' '2773';\n"); + grammarBuilder.append("KW2774 : 'KW' '2774';\n"); + grammarBuilder.append("KW2775 : 'KW' '2775';\n"); + grammarBuilder.append("KW2776 : 'KW' '2776';\n"); + grammarBuilder.append("KW2777 : 'KW' '2777';\n"); + grammarBuilder.append("KW2778 : 'KW' '2778';\n"); + grammarBuilder.append("KW2779 : 'KW' '2779';\n"); + grammarBuilder.append("KW2780 : 'KW' '2780';\n"); + grammarBuilder.append("KW2781 : 'KW' '2781';\n"); + grammarBuilder.append("KW2782 : 'KW' '2782';\n"); + grammarBuilder.append("KW2783 : 'KW' '2783';\n"); + grammarBuilder.append("KW2784 : 'KW' '2784';\n"); + grammarBuilder.append("KW2785 : 'KW' '2785';\n"); + grammarBuilder.append("KW2786 : 'KW' '2786';\n"); + grammarBuilder.append("KW2787 : 'KW' '2787';\n"); + grammarBuilder.append("KW2788 : 'KW' '2788';\n"); + grammarBuilder.append("KW2789 : 'KW' '2789';\n"); + grammarBuilder.append("KW2790 : 'KW' '2790';\n"); + grammarBuilder.append("KW2791 : 'KW' '2791';\n"); + grammarBuilder.append("KW2792 : 'KW' '2792';\n"); + grammarBuilder.append("KW2793 : 'KW' '2793';\n"); + grammarBuilder.append("KW2794 : 'KW' '2794';\n"); + grammarBuilder.append("KW2795 : 'KW' '2795';\n"); + grammarBuilder.append("KW2796 : 'KW' '2796';\n"); + grammarBuilder.append("KW2797 : 'KW' '2797';\n"); + grammarBuilder.append("KW2798 : 'KW' '2798';\n"); + grammarBuilder.append("KW2799 : 'KW' '2799';\n"); + grammarBuilder.append("KW2800 : 'KW' '2800';\n"); + grammarBuilder.append("KW2801 : 'KW' '2801';\n"); + grammarBuilder.append("KW2802 : 'KW' '2802';\n"); + grammarBuilder.append("KW2803 : 'KW' '2803';\n"); + grammarBuilder.append("KW2804 : 'KW' '2804';\n"); + grammarBuilder.append("KW2805 : 'KW' '2805';\n"); + grammarBuilder.append("KW2806 : 'KW' '2806';\n"); + grammarBuilder.append("KW2807 : 'KW' '2807';\n"); + grammarBuilder.append("KW2808 : 'KW' '2808';\n"); + grammarBuilder.append("KW2809 : 'KW' '2809';\n"); + grammarBuilder.append("KW2810 : 'KW' '2810';\n"); + grammarBuilder.append("KW2811 : 'KW' '2811';\n"); + grammarBuilder.append("KW2812 : 'KW' '2812';\n"); + grammarBuilder.append("KW2813 : 'KW' '2813';\n"); + grammarBuilder.append("KW2814 : 'KW' '2814';\n"); + grammarBuilder.append("KW2815 : 'KW' '2815';\n"); + grammarBuilder.append("KW2816 : 'KW' '2816';\n"); + grammarBuilder.append("KW2817 : 'KW' '2817';\n"); + grammarBuilder.append("KW2818 : 'KW' '2818';\n"); + grammarBuilder.append("KW2819 : 'KW' '2819';\n"); + grammarBuilder.append("KW2820 : 'KW' '2820';\n"); + grammarBuilder.append("KW2821 : 'KW' '2821';\n"); + grammarBuilder.append("KW2822 : 'KW' '2822';\n"); + grammarBuilder.append("KW2823 : 'KW' '2823';\n"); + grammarBuilder.append("KW2824 : 'KW' '2824';\n"); + grammarBuilder.append("KW2825 : 'KW' '2825';\n"); + grammarBuilder.append("KW2826 : 'KW' '2826';\n"); + grammarBuilder.append("KW2827 : 'KW' '2827';\n"); + grammarBuilder.append("KW2828 : 'KW' '2828';\n"); + grammarBuilder.append("KW2829 : 'KW' '2829';\n"); + grammarBuilder.append("KW2830 : 'KW' '2830';\n"); + grammarBuilder.append("KW2831 : 'KW' '2831';\n"); + grammarBuilder.append("KW2832 : 'KW' '2832';\n"); + grammarBuilder.append("KW2833 : 'KW' '2833';\n"); + grammarBuilder.append("KW2834 : 'KW' '2834';\n"); + grammarBuilder.append("KW2835 : 'KW' '2835';\n"); + grammarBuilder.append("KW2836 : 'KW' '2836';\n"); + grammarBuilder.append("KW2837 : 'KW' '2837';\n"); + grammarBuilder.append("KW2838 : 'KW' '2838';\n"); + grammarBuilder.append("KW2839 : 'KW' '2839';\n"); + grammarBuilder.append("KW2840 : 'KW' '2840';\n"); + grammarBuilder.append("KW2841 : 'KW' '2841';\n"); + grammarBuilder.append("KW2842 : 'KW' '2842';\n"); + grammarBuilder.append("KW2843 : 'KW' '2843';\n"); + grammarBuilder.append("KW2844 : 'KW' '2844';\n"); + grammarBuilder.append("KW2845 : 'KW' '2845';\n"); + grammarBuilder.append("KW2846 : 'KW' '2846';\n"); + grammarBuilder.append("KW2847 : 'KW' '2847';\n"); + grammarBuilder.append("KW2848 : 'KW' '2848';\n"); + grammarBuilder.append("KW2849 : 'KW' '2849';\n"); + grammarBuilder.append("KW2850 : 'KW' '2850';\n"); + grammarBuilder.append("KW2851 : 'KW' '2851';\n"); + grammarBuilder.append("KW2852 : 'KW' '2852';\n"); + grammarBuilder.append("KW2853 : 'KW' '2853';\n"); + grammarBuilder.append("KW2854 : 'KW' '2854';\n"); + grammarBuilder.append("KW2855 : 'KW' '2855';\n"); + grammarBuilder.append("KW2856 : 'KW' '2856';\n"); + grammarBuilder.append("KW2857 : 'KW' '2857';\n"); + grammarBuilder.append("KW2858 : 'KW' '2858';\n"); + grammarBuilder.append("KW2859 : 'KW' '2859';\n"); + grammarBuilder.append("KW2860 : 'KW' '2860';\n"); + grammarBuilder.append("KW2861 : 'KW' '2861';\n"); + grammarBuilder.append("KW2862 : 'KW' '2862';\n"); + grammarBuilder.append("KW2863 : 'KW' '2863';\n"); + grammarBuilder.append("KW2864 : 'KW' '2864';\n"); + grammarBuilder.append("KW2865 : 'KW' '2865';\n"); + grammarBuilder.append("KW2866 : 'KW' '2866';\n"); + grammarBuilder.append("KW2867 : 'KW' '2867';\n"); + grammarBuilder.append("KW2868 : 'KW' '2868';\n"); + grammarBuilder.append("KW2869 : 'KW' '2869';\n"); + grammarBuilder.append("KW2870 : 'KW' '2870';\n"); + grammarBuilder.append("KW2871 : 'KW' '2871';\n"); + grammarBuilder.append("KW2872 : 'KW' '2872';\n"); + grammarBuilder.append("KW2873 : 'KW' '2873';\n"); + grammarBuilder.append("KW2874 : 'KW' '2874';\n"); + grammarBuilder.append("KW2875 : 'KW' '2875';\n"); + grammarBuilder.append("KW2876 : 'KW' '2876';\n"); + grammarBuilder.append("KW2877 : 'KW' '2877';\n"); + grammarBuilder.append("KW2878 : 'KW' '2878';\n"); + grammarBuilder.append("KW2879 : 'KW' '2879';\n"); + grammarBuilder.append("KW2880 : 'KW' '2880';\n"); + grammarBuilder.append("KW2881 : 'KW' '2881';\n"); + grammarBuilder.append("KW2882 : 'KW' '2882';\n"); + grammarBuilder.append("KW2883 : 'KW' '2883';\n"); + grammarBuilder.append("KW2884 : 'KW' '2884';\n"); + grammarBuilder.append("KW2885 : 'KW' '2885';\n"); + grammarBuilder.append("KW2886 : 'KW' '2886';\n"); + grammarBuilder.append("KW2887 : 'KW' '2887';\n"); + grammarBuilder.append("KW2888 : 'KW' '2888';\n"); + grammarBuilder.append("KW2889 : 'KW' '2889';\n"); + grammarBuilder.append("KW2890 : 'KW' '2890';\n"); + grammarBuilder.append("KW2891 : 'KW' '2891';\n"); + grammarBuilder.append("KW2892 : 'KW' '2892';\n"); + grammarBuilder.append("KW2893 : 'KW' '2893';\n"); + grammarBuilder.append("KW2894 : 'KW' '2894';\n"); + grammarBuilder.append("KW2895 : 'KW' '2895';\n"); + grammarBuilder.append("KW2896 : 'KW' '2896';\n"); + grammarBuilder.append("KW2897 : 'KW' '2897';\n"); + grammarBuilder.append("KW2898 : 'KW' '2898';\n"); + grammarBuilder.append("KW2899 : 'KW' '2899';\n"); + grammarBuilder.append("KW2900 : 'KW' '2900';\n"); + grammarBuilder.append("KW2901 : 'KW' '2901';\n"); + grammarBuilder.append("KW2902 : 'KW' '2902';\n"); + grammarBuilder.append("KW2903 : 'KW' '2903';\n"); + grammarBuilder.append("KW2904 : 'KW' '2904';\n"); + grammarBuilder.append("KW2905 : 'KW' '2905';\n"); + grammarBuilder.append("KW2906 : 'KW' '2906';\n"); + grammarBuilder.append("KW2907 : 'KW' '2907';\n"); + grammarBuilder.append("KW2908 : 'KW' '2908';\n"); + grammarBuilder.append("KW2909 : 'KW' '2909';\n"); + grammarBuilder.append("KW2910 : 'KW' '2910';\n"); + grammarBuilder.append("KW2911 : 'KW' '2911';\n"); + grammarBuilder.append("KW2912 : 'KW' '2912';\n"); + grammarBuilder.append("KW2913 : 'KW' '2913';\n"); + grammarBuilder.append("KW2914 : 'KW' '2914';\n"); + grammarBuilder.append("KW2915 : 'KW' '2915';\n"); + grammarBuilder.append("KW2916 : 'KW' '2916';\n"); + grammarBuilder.append("KW2917 : 'KW' '2917';\n"); + grammarBuilder.append("KW2918 : 'KW' '2918';\n"); + grammarBuilder.append("KW2919 : 'KW' '2919';\n"); + grammarBuilder.append("KW2920 : 'KW' '2920';\n"); + grammarBuilder.append("KW2921 : 'KW' '2921';\n"); + grammarBuilder.append("KW2922 : 'KW' '2922';\n"); + grammarBuilder.append("KW2923 : 'KW' '2923';\n"); + grammarBuilder.append("KW2924 : 'KW' '2924';\n"); + grammarBuilder.append("KW2925 : 'KW' '2925';\n"); + grammarBuilder.append("KW2926 : 'KW' '2926';\n"); + grammarBuilder.append("KW2927 : 'KW' '2927';\n"); + grammarBuilder.append("KW2928 : 'KW' '2928';\n"); + grammarBuilder.append("KW2929 : 'KW' '2929';\n"); + grammarBuilder.append("KW2930 : 'KW' '2930';\n"); + grammarBuilder.append("KW2931 : 'KW' '2931';\n"); + grammarBuilder.append("KW2932 : 'KW' '2932';\n"); + grammarBuilder.append("KW2933 : 'KW' '2933';\n"); + grammarBuilder.append("KW2934 : 'KW' '2934';\n"); + grammarBuilder.append("KW2935 : 'KW' '2935';\n"); + grammarBuilder.append("KW2936 : 'KW' '2936';\n"); + grammarBuilder.append("KW2937 : 'KW' '2937';\n"); + grammarBuilder.append("KW2938 : 'KW' '2938';\n"); + grammarBuilder.append("KW2939 : 'KW' '2939';\n"); + grammarBuilder.append("KW2940 : 'KW' '2940';\n"); + grammarBuilder.append("KW2941 : 'KW' '2941';\n"); + grammarBuilder.append("KW2942 : 'KW' '2942';\n"); + grammarBuilder.append("KW2943 : 'KW' '2943';\n"); + grammarBuilder.append("KW2944 : 'KW' '2944';\n"); + grammarBuilder.append("KW2945 : 'KW' '2945';\n"); + grammarBuilder.append("KW2946 : 'KW' '2946';\n"); + grammarBuilder.append("KW2947 : 'KW' '2947';\n"); + grammarBuilder.append("KW2948 : 'KW' '2948';\n"); + grammarBuilder.append("KW2949 : 'KW' '2949';\n"); + grammarBuilder.append("KW2950 : 'KW' '2950';\n"); + grammarBuilder.append("KW2951 : 'KW' '2951';\n"); + grammarBuilder.append("KW2952 : 'KW' '2952';\n"); + grammarBuilder.append("KW2953 : 'KW' '2953';\n"); + grammarBuilder.append("KW2954 : 'KW' '2954';\n"); + grammarBuilder.append("KW2955 : 'KW' '2955';\n"); + grammarBuilder.append("KW2956 : 'KW' '2956';\n"); + grammarBuilder.append("KW2957 : 'KW' '2957';\n"); + grammarBuilder.append("KW2958 : 'KW' '2958';\n"); + grammarBuilder.append("KW2959 : 'KW' '2959';\n"); + grammarBuilder.append("KW2960 : 'KW' '2960';\n"); + grammarBuilder.append("KW2961 : 'KW' '2961';\n"); + grammarBuilder.append("KW2962 : 'KW' '2962';\n"); + grammarBuilder.append("KW2963 : 'KW' '2963';\n"); + grammarBuilder.append("KW2964 : 'KW' '2964';\n"); + grammarBuilder.append("KW2965 : 'KW' '2965';\n"); + grammarBuilder.append("KW2966 : 'KW' '2966';\n"); + grammarBuilder.append("KW2967 : 'KW' '2967';\n"); + grammarBuilder.append("KW2968 : 'KW' '2968';\n"); + grammarBuilder.append("KW2969 : 'KW' '2969';\n"); + grammarBuilder.append("KW2970 : 'KW' '2970';\n"); + grammarBuilder.append("KW2971 : 'KW' '2971';\n"); + grammarBuilder.append("KW2972 : 'KW' '2972';\n"); + grammarBuilder.append("KW2973 : 'KW' '2973';\n"); + grammarBuilder.append("KW2974 : 'KW' '2974';\n"); + grammarBuilder.append("KW2975 : 'KW' '2975';\n"); + grammarBuilder.append("KW2976 : 'KW' '2976';\n"); + grammarBuilder.append("KW2977 : 'KW' '2977';\n"); + grammarBuilder.append("KW2978 : 'KW' '2978';\n"); + grammarBuilder.append("KW2979 : 'KW' '2979';\n"); + grammarBuilder.append("KW2980 : 'KW' '2980';\n"); + grammarBuilder.append("KW2981 : 'KW' '2981';\n"); + grammarBuilder.append("KW2982 : 'KW' '2982';\n"); + grammarBuilder.append("KW2983 : 'KW' '2983';\n"); + grammarBuilder.append("KW2984 : 'KW' '2984';\n"); + grammarBuilder.append("KW2985 : 'KW' '2985';\n"); + grammarBuilder.append("KW2986 : 'KW' '2986';\n"); + grammarBuilder.append("KW2987 : 'KW' '2987';\n"); + grammarBuilder.append("KW2988 : 'KW' '2988';\n"); + grammarBuilder.append("KW2989 : 'KW' '2989';\n"); + grammarBuilder.append("KW2990 : 'KW' '2990';\n"); + grammarBuilder.append("KW2991 : 'KW' '2991';\n"); + grammarBuilder.append("KW2992 : 'KW' '2992';\n"); + grammarBuilder.append("KW2993 : 'KW' '2993';\n"); + grammarBuilder.append("KW2994 : 'KW' '2994';\n"); + grammarBuilder.append("KW2995 : 'KW' '2995';\n"); + grammarBuilder.append("KW2996 : 'KW' '2996';\n"); + grammarBuilder.append("KW2997 : 'KW' '2997';\n"); + grammarBuilder.append("KW2998 : 'KW' '2998';\n"); + grammarBuilder.append("KW2999 : 'KW' '2999';\n"); + grammarBuilder.append("KW3000 : 'KW' '3000';\n"); + grammarBuilder.append("KW3001 : 'KW' '3001';\n"); + grammarBuilder.append("KW3002 : 'KW' '3002';\n"); + grammarBuilder.append("KW3003 : 'KW' '3003';\n"); + grammarBuilder.append("KW3004 : 'KW' '3004';\n"); + grammarBuilder.append("KW3005 : 'KW' '3005';\n"); + grammarBuilder.append("KW3006 : 'KW' '3006';\n"); + grammarBuilder.append("KW3007 : 'KW' '3007';\n"); + grammarBuilder.append("KW3008 : 'KW' '3008';\n"); + grammarBuilder.append("KW3009 : 'KW' '3009';\n"); + grammarBuilder.append("KW3010 : 'KW' '3010';\n"); + grammarBuilder.append("KW3011 : 'KW' '3011';\n"); + grammarBuilder.append("KW3012 : 'KW' '3012';\n"); + grammarBuilder.append("KW3013 : 'KW' '3013';\n"); + grammarBuilder.append("KW3014 : 'KW' '3014';\n"); + grammarBuilder.append("KW3015 : 'KW' '3015';\n"); + grammarBuilder.append("KW3016 : 'KW' '3016';\n"); + grammarBuilder.append("KW3017 : 'KW' '3017';\n"); + grammarBuilder.append("KW3018 : 'KW' '3018';\n"); + grammarBuilder.append("KW3019 : 'KW' '3019';\n"); + grammarBuilder.append("KW3020 : 'KW' '3020';\n"); + grammarBuilder.append("KW3021 : 'KW' '3021';\n"); + grammarBuilder.append("KW3022 : 'KW' '3022';\n"); + grammarBuilder.append("KW3023 : 'KW' '3023';\n"); + grammarBuilder.append("KW3024 : 'KW' '3024';\n"); + grammarBuilder.append("KW3025 : 'KW' '3025';\n"); + grammarBuilder.append("KW3026 : 'KW' '3026';\n"); + grammarBuilder.append("KW3027 : 'KW' '3027';\n"); + grammarBuilder.append("KW3028 : 'KW' '3028';\n"); + grammarBuilder.append("KW3029 : 'KW' '3029';\n"); + grammarBuilder.append("KW3030 : 'KW' '3030';\n"); + grammarBuilder.append("KW3031 : 'KW' '3031';\n"); + grammarBuilder.append("KW3032 : 'KW' '3032';\n"); + grammarBuilder.append("KW3033 : 'KW' '3033';\n"); + grammarBuilder.append("KW3034 : 'KW' '3034';\n"); + grammarBuilder.append("KW3035 : 'KW' '3035';\n"); + grammarBuilder.append("KW3036 : 'KW' '3036';\n"); + grammarBuilder.append("KW3037 : 'KW' '3037';\n"); + grammarBuilder.append("KW3038 : 'KW' '3038';\n"); + grammarBuilder.append("KW3039 : 'KW' '3039';\n"); + grammarBuilder.append("KW3040 : 'KW' '3040';\n"); + grammarBuilder.append("KW3041 : 'KW' '3041';\n"); + grammarBuilder.append("KW3042 : 'KW' '3042';\n"); + grammarBuilder.append("KW3043 : 'KW' '3043';\n"); + grammarBuilder.append("KW3044 : 'KW' '3044';\n"); + grammarBuilder.append("KW3045 : 'KW' '3045';\n"); + grammarBuilder.append("KW3046 : 'KW' '3046';\n"); + grammarBuilder.append("KW3047 : 'KW' '3047';\n"); + grammarBuilder.append("KW3048 : 'KW' '3048';\n"); + grammarBuilder.append("KW3049 : 'KW' '3049';\n"); + grammarBuilder.append("KW3050 : 'KW' '3050';\n"); + grammarBuilder.append("KW3051 : 'KW' '3051';\n"); + grammarBuilder.append("KW3052 : 'KW' '3052';\n"); + grammarBuilder.append("KW3053 : 'KW' '3053';\n"); + grammarBuilder.append("KW3054 : 'KW' '3054';\n"); + grammarBuilder.append("KW3055 : 'KW' '3055';\n"); + grammarBuilder.append("KW3056 : 'KW' '3056';\n"); + grammarBuilder.append("KW3057 : 'KW' '3057';\n"); + grammarBuilder.append("KW3058 : 'KW' '3058';\n"); + grammarBuilder.append("KW3059 : 'KW' '3059';\n"); + grammarBuilder.append("KW3060 : 'KW' '3060';\n"); + grammarBuilder.append("KW3061 : 'KW' '3061';\n"); + grammarBuilder.append("KW3062 : 'KW' '3062';\n"); + grammarBuilder.append("KW3063 : 'KW' '3063';\n"); + grammarBuilder.append("KW3064 : 'KW' '3064';\n"); + grammarBuilder.append("KW3065 : 'KW' '3065';\n"); + grammarBuilder.append("KW3066 : 'KW' '3066';\n"); + grammarBuilder.append("KW3067 : 'KW' '3067';\n"); + grammarBuilder.append("KW3068 : 'KW' '3068';\n"); + grammarBuilder.append("KW3069 : 'KW' '3069';\n"); + grammarBuilder.append("KW3070 : 'KW' '3070';\n"); + grammarBuilder.append("KW3071 : 'KW' '3071';\n"); + grammarBuilder.append("KW3072 : 'KW' '3072';\n"); + grammarBuilder.append("KW3073 : 'KW' '3073';\n"); + grammarBuilder.append("KW3074 : 'KW' '3074';\n"); + grammarBuilder.append("KW3075 : 'KW' '3075';\n"); + grammarBuilder.append("KW3076 : 'KW' '3076';\n"); + grammarBuilder.append("KW3077 : 'KW' '3077';\n"); + grammarBuilder.append("KW3078 : 'KW' '3078';\n"); + grammarBuilder.append("KW3079 : 'KW' '3079';\n"); + grammarBuilder.append("KW3080 : 'KW' '3080';\n"); + grammarBuilder.append("KW3081 : 'KW' '3081';\n"); + grammarBuilder.append("KW3082 : 'KW' '3082';\n"); + grammarBuilder.append("KW3083 : 'KW' '3083';\n"); + grammarBuilder.append("KW3084 : 'KW' '3084';\n"); + grammarBuilder.append("KW3085 : 'KW' '3085';\n"); + grammarBuilder.append("KW3086 : 'KW' '3086';\n"); + grammarBuilder.append("KW3087 : 'KW' '3087';\n"); + grammarBuilder.append("KW3088 : 'KW' '3088';\n"); + grammarBuilder.append("KW3089 : 'KW' '3089';\n"); + grammarBuilder.append("KW3090 : 'KW' '3090';\n"); + grammarBuilder.append("KW3091 : 'KW' '3091';\n"); + grammarBuilder.append("KW3092 : 'KW' '3092';\n"); + grammarBuilder.append("KW3093 : 'KW' '3093';\n"); + grammarBuilder.append("KW3094 : 'KW' '3094';\n"); + grammarBuilder.append("KW3095 : 'KW' '3095';\n"); + grammarBuilder.append("KW3096 : 'KW' '3096';\n"); + grammarBuilder.append("KW3097 : 'KW' '3097';\n"); + grammarBuilder.append("KW3098 : 'KW' '3098';\n"); + grammarBuilder.append("KW3099 : 'KW' '3099';\n"); + grammarBuilder.append("KW3100 : 'KW' '3100';\n"); + grammarBuilder.append("KW3101 : 'KW' '3101';\n"); + grammarBuilder.append("KW3102 : 'KW' '3102';\n"); + grammarBuilder.append("KW3103 : 'KW' '3103';\n"); + grammarBuilder.append("KW3104 : 'KW' '3104';\n"); + grammarBuilder.append("KW3105 : 'KW' '3105';\n"); + grammarBuilder.append("KW3106 : 'KW' '3106';\n"); + grammarBuilder.append("KW3107 : 'KW' '3107';\n"); + grammarBuilder.append("KW3108 : 'KW' '3108';\n"); + grammarBuilder.append("KW3109 : 'KW' '3109';\n"); + grammarBuilder.append("KW3110 : 'KW' '3110';\n"); + grammarBuilder.append("KW3111 : 'KW' '3111';\n"); + grammarBuilder.append("KW3112 : 'KW' '3112';\n"); + grammarBuilder.append("KW3113 : 'KW' '3113';\n"); + grammarBuilder.append("KW3114 : 'KW' '3114';\n"); + grammarBuilder.append("KW3115 : 'KW' '3115';\n"); + grammarBuilder.append("KW3116 : 'KW' '3116';\n"); + grammarBuilder.append("KW3117 : 'KW' '3117';\n"); + grammarBuilder.append("KW3118 : 'KW' '3118';\n"); + grammarBuilder.append("KW3119 : 'KW' '3119';\n"); + grammarBuilder.append("KW3120 : 'KW' '3120';\n"); + grammarBuilder.append("KW3121 : 'KW' '3121';\n"); + grammarBuilder.append("KW3122 : 'KW' '3122';\n"); + grammarBuilder.append("KW3123 : 'KW' '3123';\n"); + grammarBuilder.append("KW3124 : 'KW' '3124';\n"); + grammarBuilder.append("KW3125 : 'KW' '3125';\n"); + grammarBuilder.append("KW3126 : 'KW' '3126';\n"); + grammarBuilder.append("KW3127 : 'KW' '3127';\n"); + grammarBuilder.append("KW3128 : 'KW' '3128';\n"); + grammarBuilder.append("KW3129 : 'KW' '3129';\n"); + grammarBuilder.append("KW3130 : 'KW' '3130';\n"); + grammarBuilder.append("KW3131 : 'KW' '3131';\n"); + grammarBuilder.append("KW3132 : 'KW' '3132';\n"); + grammarBuilder.append("KW3133 : 'KW' '3133';\n"); + grammarBuilder.append("KW3134 : 'KW' '3134';\n"); + grammarBuilder.append("KW3135 : 'KW' '3135';\n"); + grammarBuilder.append("KW3136 : 'KW' '3136';\n"); + grammarBuilder.append("KW3137 : 'KW' '3137';\n"); + grammarBuilder.append("KW3138 : 'KW' '3138';\n"); + grammarBuilder.append("KW3139 : 'KW' '3139';\n"); + grammarBuilder.append("KW3140 : 'KW' '3140';\n"); + grammarBuilder.append("KW3141 : 'KW' '3141';\n"); + grammarBuilder.append("KW3142 : 'KW' '3142';\n"); + grammarBuilder.append("KW3143 : 'KW' '3143';\n"); + grammarBuilder.append("KW3144 : 'KW' '3144';\n"); + grammarBuilder.append("KW3145 : 'KW' '3145';\n"); + grammarBuilder.append("KW3146 : 'KW' '3146';\n"); + grammarBuilder.append("KW3147 : 'KW' '3147';\n"); + grammarBuilder.append("KW3148 : 'KW' '3148';\n"); + grammarBuilder.append("KW3149 : 'KW' '3149';\n"); + grammarBuilder.append("KW3150 : 'KW' '3150';\n"); + grammarBuilder.append("KW3151 : 'KW' '3151';\n"); + grammarBuilder.append("KW3152 : 'KW' '3152';\n"); + grammarBuilder.append("KW3153 : 'KW' '3153';\n"); + grammarBuilder.append("KW3154 : 'KW' '3154';\n"); + grammarBuilder.append("KW3155 : 'KW' '3155';\n"); + grammarBuilder.append("KW3156 : 'KW' '3156';\n"); + grammarBuilder.append("KW3157 : 'KW' '3157';\n"); + grammarBuilder.append("KW3158 : 'KW' '3158';\n"); + grammarBuilder.append("KW3159 : 'KW' '3159';\n"); + grammarBuilder.append("KW3160 : 'KW' '3160';\n"); + grammarBuilder.append("KW3161 : 'KW' '3161';\n"); + grammarBuilder.append("KW3162 : 'KW' '3162';\n"); + grammarBuilder.append("KW3163 : 'KW' '3163';\n"); + grammarBuilder.append("KW3164 : 'KW' '3164';\n"); + grammarBuilder.append("KW3165 : 'KW' '3165';\n"); + grammarBuilder.append("KW3166 : 'KW' '3166';\n"); + grammarBuilder.append("KW3167 : 'KW' '3167';\n"); + grammarBuilder.append("KW3168 : 'KW' '3168';\n"); + grammarBuilder.append("KW3169 : 'KW' '3169';\n"); + grammarBuilder.append("KW3170 : 'KW' '3170';\n"); + grammarBuilder.append("KW3171 : 'KW' '3171';\n"); + grammarBuilder.append("KW3172 : 'KW' '3172';\n"); + grammarBuilder.append("KW3173 : 'KW' '3173';\n"); + grammarBuilder.append("KW3174 : 'KW' '3174';\n"); + grammarBuilder.append("KW3175 : 'KW' '3175';\n"); + grammarBuilder.append("KW3176 : 'KW' '3176';\n"); + grammarBuilder.append("KW3177 : 'KW' '3177';\n"); + grammarBuilder.append("KW3178 : 'KW' '3178';\n"); + grammarBuilder.append("KW3179 : 'KW' '3179';\n"); + grammarBuilder.append("KW3180 : 'KW' '3180';\n"); + grammarBuilder.append("KW3181 : 'KW' '3181';\n"); + grammarBuilder.append("KW3182 : 'KW' '3182';\n"); + grammarBuilder.append("KW3183 : 'KW' '3183';\n"); + grammarBuilder.append("KW3184 : 'KW' '3184';\n"); + grammarBuilder.append("KW3185 : 'KW' '3185';\n"); + grammarBuilder.append("KW3186 : 'KW' '3186';\n"); + grammarBuilder.append("KW3187 : 'KW' '3187';\n"); + grammarBuilder.append("KW3188 : 'KW' '3188';\n"); + grammarBuilder.append("KW3189 : 'KW' '3189';\n"); + grammarBuilder.append("KW3190 : 'KW' '3190';\n"); + grammarBuilder.append("KW3191 : 'KW' '3191';\n"); + grammarBuilder.append("KW3192 : 'KW' '3192';\n"); + grammarBuilder.append("KW3193 : 'KW' '3193';\n"); + grammarBuilder.append("KW3194 : 'KW' '3194';\n"); + grammarBuilder.append("KW3195 : 'KW' '3195';\n"); + grammarBuilder.append("KW3196 : 'KW' '3196';\n"); + grammarBuilder.append("KW3197 : 'KW' '3197';\n"); + grammarBuilder.append("KW3198 : 'KW' '3198';\n"); + grammarBuilder.append("KW3199 : 'KW' '3199';\n"); + grammarBuilder.append("KW3200 : 'KW' '3200';\n"); + grammarBuilder.append("KW3201 : 'KW' '3201';\n"); + grammarBuilder.append("KW3202 : 'KW' '3202';\n"); + grammarBuilder.append("KW3203 : 'KW' '3203';\n"); + grammarBuilder.append("KW3204 : 'KW' '3204';\n"); + grammarBuilder.append("KW3205 : 'KW' '3205';\n"); + grammarBuilder.append("KW3206 : 'KW' '3206';\n"); + grammarBuilder.append("KW3207 : 'KW' '3207';\n"); + grammarBuilder.append("KW3208 : 'KW' '3208';\n"); + grammarBuilder.append("KW3209 : 'KW' '3209';\n"); + grammarBuilder.append("KW3210 : 'KW' '3210';\n"); + grammarBuilder.append("KW3211 : 'KW' '3211';\n"); + grammarBuilder.append("KW3212 : 'KW' '3212';\n"); + grammarBuilder.append("KW3213 : 'KW' '3213';\n"); + grammarBuilder.append("KW3214 : 'KW' '3214';\n"); + grammarBuilder.append("KW3215 : 'KW' '3215';\n"); + grammarBuilder.append("KW3216 : 'KW' '3216';\n"); + grammarBuilder.append("KW3217 : 'KW' '3217';\n"); + grammarBuilder.append("KW3218 : 'KW' '3218';\n"); + grammarBuilder.append("KW3219 : 'KW' '3219';\n"); + grammarBuilder.append("KW3220 : 'KW' '3220';\n"); + grammarBuilder.append("KW3221 : 'KW' '3221';\n"); + grammarBuilder.append("KW3222 : 'KW' '3222';\n"); + grammarBuilder.append("KW3223 : 'KW' '3223';\n"); + grammarBuilder.append("KW3224 : 'KW' '3224';\n"); + grammarBuilder.append("KW3225 : 'KW' '3225';\n"); + grammarBuilder.append("KW3226 : 'KW' '3226';\n"); + grammarBuilder.append("KW3227 : 'KW' '3227';\n"); + grammarBuilder.append("KW3228 : 'KW' '3228';\n"); + grammarBuilder.append("KW3229 : 'KW' '3229';\n"); + grammarBuilder.append("KW3230 : 'KW' '3230';\n"); + grammarBuilder.append("KW3231 : 'KW' '3231';\n"); + grammarBuilder.append("KW3232 : 'KW' '3232';\n"); + grammarBuilder.append("KW3233 : 'KW' '3233';\n"); + grammarBuilder.append("KW3234 : 'KW' '3234';\n"); + grammarBuilder.append("KW3235 : 'KW' '3235';\n"); + grammarBuilder.append("KW3236 : 'KW' '3236';\n"); + grammarBuilder.append("KW3237 : 'KW' '3237';\n"); + grammarBuilder.append("KW3238 : 'KW' '3238';\n"); + grammarBuilder.append("KW3239 : 'KW' '3239';\n"); + grammarBuilder.append("KW3240 : 'KW' '3240';\n"); + grammarBuilder.append("KW3241 : 'KW' '3241';\n"); + grammarBuilder.append("KW3242 : 'KW' '3242';\n"); + grammarBuilder.append("KW3243 : 'KW' '3243';\n"); + grammarBuilder.append("KW3244 : 'KW' '3244';\n"); + grammarBuilder.append("KW3245 : 'KW' '3245';\n"); + grammarBuilder.append("KW3246 : 'KW' '3246';\n"); + grammarBuilder.append("KW3247 : 'KW' '3247';\n"); + grammarBuilder.append("KW3248 : 'KW' '3248';\n"); + grammarBuilder.append("KW3249 : 'KW' '3249';\n"); + grammarBuilder.append("KW3250 : 'KW' '3250';\n"); + grammarBuilder.append("KW3251 : 'KW' '3251';\n"); + grammarBuilder.append("KW3252 : 'KW' '3252';\n"); + grammarBuilder.append("KW3253 : 'KW' '3253';\n"); + grammarBuilder.append("KW3254 : 'KW' '3254';\n"); + grammarBuilder.append("KW3255 : 'KW' '3255';\n"); + grammarBuilder.append("KW3256 : 'KW' '3256';\n"); + grammarBuilder.append("KW3257 : 'KW' '3257';\n"); + grammarBuilder.append("KW3258 : 'KW' '3258';\n"); + grammarBuilder.append("KW3259 : 'KW' '3259';\n"); + grammarBuilder.append("KW3260 : 'KW' '3260';\n"); + grammarBuilder.append("KW3261 : 'KW' '3261';\n"); + grammarBuilder.append("KW3262 : 'KW' '3262';\n"); + grammarBuilder.append("KW3263 : 'KW' '3263';\n"); + grammarBuilder.append("KW3264 : 'KW' '3264';\n"); + grammarBuilder.append("KW3265 : 'KW' '3265';\n"); + grammarBuilder.append("KW3266 : 'KW' '3266';\n"); + grammarBuilder.append("KW3267 : 'KW' '3267';\n"); + grammarBuilder.append("KW3268 : 'KW' '3268';\n"); + grammarBuilder.append("KW3269 : 'KW' '3269';\n"); + grammarBuilder.append("KW3270 : 'KW' '3270';\n"); + grammarBuilder.append("KW3271 : 'KW' '3271';\n"); + grammarBuilder.append("KW3272 : 'KW' '3272';\n"); + grammarBuilder.append("KW3273 : 'KW' '3273';\n"); + grammarBuilder.append("KW3274 : 'KW' '3274';\n"); + grammarBuilder.append("KW3275 : 'KW' '3275';\n"); + grammarBuilder.append("KW3276 : 'KW' '3276';\n"); + grammarBuilder.append("KW3277 : 'KW' '3277';\n"); + grammarBuilder.append("KW3278 : 'KW' '3278';\n"); + grammarBuilder.append("KW3279 : 'KW' '3279';\n"); + grammarBuilder.append("KW3280 : 'KW' '3280';\n"); + grammarBuilder.append("KW3281 : 'KW' '3281';\n"); + grammarBuilder.append("KW3282 : 'KW' '3282';\n"); + grammarBuilder.append("KW3283 : 'KW' '3283';\n"); + grammarBuilder.append("KW3284 : 'KW' '3284';\n"); + grammarBuilder.append("KW3285 : 'KW' '3285';\n"); + grammarBuilder.append("KW3286 : 'KW' '3286';\n"); + grammarBuilder.append("KW3287 : 'KW' '3287';\n"); + grammarBuilder.append("KW3288 : 'KW' '3288';\n"); + grammarBuilder.append("KW3289 : 'KW' '3289';\n"); + grammarBuilder.append("KW3290 : 'KW' '3290';\n"); + grammarBuilder.append("KW3291 : 'KW' '3291';\n"); + grammarBuilder.append("KW3292 : 'KW' '3292';\n"); + grammarBuilder.append("KW3293 : 'KW' '3293';\n"); + grammarBuilder.append("KW3294 : 'KW' '3294';\n"); + grammarBuilder.append("KW3295 : 'KW' '3295';\n"); + grammarBuilder.append("KW3296 : 'KW' '3296';\n"); + grammarBuilder.append("KW3297 : 'KW' '3297';\n"); + grammarBuilder.append("KW3298 : 'KW' '3298';\n"); + grammarBuilder.append("KW3299 : 'KW' '3299';\n"); + grammarBuilder.append("KW3300 : 'KW' '3300';\n"); + grammarBuilder.append("KW3301 : 'KW' '3301';\n"); + grammarBuilder.append("KW3302 : 'KW' '3302';\n"); + grammarBuilder.append("KW3303 : 'KW' '3303';\n"); + grammarBuilder.append("KW3304 : 'KW' '3304';\n"); + grammarBuilder.append("KW3305 : 'KW' '3305';\n"); + grammarBuilder.append("KW3306 : 'KW' '3306';\n"); + grammarBuilder.append("KW3307 : 'KW' '3307';\n"); + grammarBuilder.append("KW3308 : 'KW' '3308';\n"); + grammarBuilder.append("KW3309 : 'KW' '3309';\n"); + grammarBuilder.append("KW3310 : 'KW' '3310';\n"); + grammarBuilder.append("KW3311 : 'KW' '3311';\n"); + grammarBuilder.append("KW3312 : 'KW' '3312';\n"); + grammarBuilder.append("KW3313 : 'KW' '3313';\n"); + grammarBuilder.append("KW3314 : 'KW' '3314';\n"); + grammarBuilder.append("KW3315 : 'KW' '3315';\n"); + grammarBuilder.append("KW3316 : 'KW' '3316';\n"); + grammarBuilder.append("KW3317 : 'KW' '3317';\n"); + grammarBuilder.append("KW3318 : 'KW' '3318';\n"); + grammarBuilder.append("KW3319 : 'KW' '3319';\n"); + grammarBuilder.append("KW3320 : 'KW' '3320';\n"); + grammarBuilder.append("KW3321 : 'KW' '3321';\n"); + grammarBuilder.append("KW3322 : 'KW' '3322';\n"); + grammarBuilder.append("KW3323 : 'KW' '3323';\n"); + grammarBuilder.append("KW3324 : 'KW' '3324';\n"); + grammarBuilder.append("KW3325 : 'KW' '3325';\n"); + grammarBuilder.append("KW3326 : 'KW' '3326';\n"); + grammarBuilder.append("KW3327 : 'KW' '3327';\n"); + grammarBuilder.append("KW3328 : 'KW' '3328';\n"); + grammarBuilder.append("KW3329 : 'KW' '3329';\n"); + grammarBuilder.append("KW3330 : 'KW' '3330';\n"); + grammarBuilder.append("KW3331 : 'KW' '3331';\n"); + grammarBuilder.append("KW3332 : 'KW' '3332';\n"); + grammarBuilder.append("KW3333 : 'KW' '3333';\n"); + grammarBuilder.append("KW3334 : 'KW' '3334';\n"); + grammarBuilder.append("KW3335 : 'KW' '3335';\n"); + grammarBuilder.append("KW3336 : 'KW' '3336';\n"); + grammarBuilder.append("KW3337 : 'KW' '3337';\n"); + grammarBuilder.append("KW3338 : 'KW' '3338';\n"); + grammarBuilder.append("KW3339 : 'KW' '3339';\n"); + grammarBuilder.append("KW3340 : 'KW' '3340';\n"); + grammarBuilder.append("KW3341 : 'KW' '3341';\n"); + grammarBuilder.append("KW3342 : 'KW' '3342';\n"); + grammarBuilder.append("KW3343 : 'KW' '3343';\n"); + grammarBuilder.append("KW3344 : 'KW' '3344';\n"); + grammarBuilder.append("KW3345 : 'KW' '3345';\n"); + grammarBuilder.append("KW3346 : 'KW' '3346';\n"); + grammarBuilder.append("KW3347 : 'KW' '3347';\n"); + grammarBuilder.append("KW3348 : 'KW' '3348';\n"); + grammarBuilder.append("KW3349 : 'KW' '3349';\n"); + grammarBuilder.append("KW3350 : 'KW' '3350';\n"); + grammarBuilder.append("KW3351 : 'KW' '3351';\n"); + grammarBuilder.append("KW3352 : 'KW' '3352';\n"); + grammarBuilder.append("KW3353 : 'KW' '3353';\n"); + grammarBuilder.append("KW3354 : 'KW' '3354';\n"); + grammarBuilder.append("KW3355 : 'KW' '3355';\n"); + grammarBuilder.append("KW3356 : 'KW' '3356';\n"); + grammarBuilder.append("KW3357 : 'KW' '3357';\n"); + grammarBuilder.append("KW3358 : 'KW' '3358';\n"); + grammarBuilder.append("KW3359 : 'KW' '3359';\n"); + grammarBuilder.append("KW3360 : 'KW' '3360';\n"); + grammarBuilder.append("KW3361 : 'KW' '3361';\n"); + grammarBuilder.append("KW3362 : 'KW' '3362';\n"); + grammarBuilder.append("KW3363 : 'KW' '3363';\n"); + grammarBuilder.append("KW3364 : 'KW' '3364';\n"); + grammarBuilder.append("KW3365 : 'KW' '3365';\n"); + grammarBuilder.append("KW3366 : 'KW' '3366';\n"); + grammarBuilder.append("KW3367 : 'KW' '3367';\n"); + grammarBuilder.append("KW3368 : 'KW' '3368';\n"); + grammarBuilder.append("KW3369 : 'KW' '3369';\n"); + grammarBuilder.append("KW3370 : 'KW' '3370';\n"); + grammarBuilder.append("KW3371 : 'KW' '3371';\n"); + grammarBuilder.append("KW3372 : 'KW' '3372';\n"); + grammarBuilder.append("KW3373 : 'KW' '3373';\n"); + grammarBuilder.append("KW3374 : 'KW' '3374';\n"); + grammarBuilder.append("KW3375 : 'KW' '3375';\n"); + grammarBuilder.append("KW3376 : 'KW' '3376';\n"); + grammarBuilder.append("KW3377 : 'KW' '3377';\n"); + grammarBuilder.append("KW3378 : 'KW' '3378';\n"); + grammarBuilder.append("KW3379 : 'KW' '3379';\n"); + grammarBuilder.append("KW3380 : 'KW' '3380';\n"); + grammarBuilder.append("KW3381 : 'KW' '3381';\n"); + grammarBuilder.append("KW3382 : 'KW' '3382';\n"); + grammarBuilder.append("KW3383 : 'KW' '3383';\n"); + grammarBuilder.append("KW3384 : 'KW' '3384';\n"); + grammarBuilder.append("KW3385 : 'KW' '3385';\n"); + grammarBuilder.append("KW3386 : 'KW' '3386';\n"); + grammarBuilder.append("KW3387 : 'KW' '3387';\n"); + grammarBuilder.append("KW3388 : 'KW' '3388';\n"); + grammarBuilder.append("KW3389 : 'KW' '3389';\n"); + grammarBuilder.append("KW3390 : 'KW' '3390';\n"); + grammarBuilder.append("KW3391 : 'KW' '3391';\n"); + grammarBuilder.append("KW3392 : 'KW' '3392';\n"); + grammarBuilder.append("KW3393 : 'KW' '3393';\n"); + grammarBuilder.append("KW3394 : 'KW' '3394';\n"); + grammarBuilder.append("KW3395 : 'KW' '3395';\n"); + grammarBuilder.append("KW3396 : 'KW' '3396';\n"); + grammarBuilder.append("KW3397 : 'KW' '3397';\n"); + grammarBuilder.append("KW3398 : 'KW' '3398';\n"); + grammarBuilder.append("KW3399 : 'KW' '3399';\n"); + grammarBuilder.append("KW3400 : 'KW' '3400';\n"); + grammarBuilder.append("KW3401 : 'KW' '3401';\n"); + grammarBuilder.append("KW3402 : 'KW' '3402';\n"); + grammarBuilder.append("KW3403 : 'KW' '3403';\n"); + grammarBuilder.append("KW3404 : 'KW' '3404';\n"); + grammarBuilder.append("KW3405 : 'KW' '3405';\n"); + grammarBuilder.append("KW3406 : 'KW' '3406';\n"); + grammarBuilder.append("KW3407 : 'KW' '3407';\n"); + grammarBuilder.append("KW3408 : 'KW' '3408';\n"); + grammarBuilder.append("KW3409 : 'KW' '3409';\n"); + grammarBuilder.append("KW3410 : 'KW' '3410';\n"); + grammarBuilder.append("KW3411 : 'KW' '3411';\n"); + grammarBuilder.append("KW3412 : 'KW' '3412';\n"); + grammarBuilder.append("KW3413 : 'KW' '3413';\n"); + grammarBuilder.append("KW3414 : 'KW' '3414';\n"); + grammarBuilder.append("KW3415 : 'KW' '3415';\n"); + grammarBuilder.append("KW3416 : 'KW' '3416';\n"); + grammarBuilder.append("KW3417 : 'KW' '3417';\n"); + grammarBuilder.append("KW3418 : 'KW' '3418';\n"); + grammarBuilder.append("KW3419 : 'KW' '3419';\n"); + grammarBuilder.append("KW3420 : 'KW' '3420';\n"); + grammarBuilder.append("KW3421 : 'KW' '3421';\n"); + grammarBuilder.append("KW3422 : 'KW' '3422';\n"); + grammarBuilder.append("KW3423 : 'KW' '3423';\n"); + grammarBuilder.append("KW3424 : 'KW' '3424';\n"); + grammarBuilder.append("KW3425 : 'KW' '3425';\n"); + grammarBuilder.append("KW3426 : 'KW' '3426';\n"); + grammarBuilder.append("KW3427 : 'KW' '3427';\n"); + grammarBuilder.append("KW3428 : 'KW' '3428';\n"); + grammarBuilder.append("KW3429 : 'KW' '3429';\n"); + grammarBuilder.append("KW3430 : 'KW' '3430';\n"); + grammarBuilder.append("KW3431 : 'KW' '3431';\n"); + grammarBuilder.append("KW3432 : 'KW' '3432';\n"); + grammarBuilder.append("KW3433 : 'KW' '3433';\n"); + grammarBuilder.append("KW3434 : 'KW' '3434';\n"); + grammarBuilder.append("KW3435 : 'KW' '3435';\n"); + grammarBuilder.append("KW3436 : 'KW' '3436';\n"); + grammarBuilder.append("KW3437 : 'KW' '3437';\n"); + grammarBuilder.append("KW3438 : 'KW' '3438';\n"); + grammarBuilder.append("KW3439 : 'KW' '3439';\n"); + grammarBuilder.append("KW3440 : 'KW' '3440';\n"); + grammarBuilder.append("KW3441 : 'KW' '3441';\n"); + grammarBuilder.append("KW3442 : 'KW' '3442';\n"); + grammarBuilder.append("KW3443 : 'KW' '3443';\n"); + grammarBuilder.append("KW3444 : 'KW' '3444';\n"); + grammarBuilder.append("KW3445 : 'KW' '3445';\n"); + grammarBuilder.append("KW3446 : 'KW' '3446';\n"); + grammarBuilder.append("KW3447 : 'KW' '3447';\n"); + grammarBuilder.append("KW3448 : 'KW' '3448';\n"); + grammarBuilder.append("KW3449 : 'KW' '3449';\n"); + grammarBuilder.append("KW3450 : 'KW' '3450';\n"); + grammarBuilder.append("KW3451 : 'KW' '3451';\n"); + grammarBuilder.append("KW3452 : 'KW' '3452';\n"); + grammarBuilder.append("KW3453 : 'KW' '3453';\n"); + grammarBuilder.append("KW3454 : 'KW' '3454';\n"); + grammarBuilder.append("KW3455 : 'KW' '3455';\n"); + grammarBuilder.append("KW3456 : 'KW' '3456';\n"); + grammarBuilder.append("KW3457 : 'KW' '3457';\n"); + grammarBuilder.append("KW3458 : 'KW' '3458';\n"); + grammarBuilder.append("KW3459 : 'KW' '3459';\n"); + grammarBuilder.append("KW3460 : 'KW' '3460';\n"); + grammarBuilder.append("KW3461 : 'KW' '3461';\n"); + grammarBuilder.append("KW3462 : 'KW' '3462';\n"); + grammarBuilder.append("KW3463 : 'KW' '3463';\n"); + grammarBuilder.append("KW3464 : 'KW' '3464';\n"); + grammarBuilder.append("KW3465 : 'KW' '3465';\n"); + grammarBuilder.append("KW3466 : 'KW' '3466';\n"); + grammarBuilder.append("KW3467 : 'KW' '3467';\n"); + grammarBuilder.append("KW3468 : 'KW' '3468';\n"); + grammarBuilder.append("KW3469 : 'KW' '3469';\n"); + grammarBuilder.append("KW3470 : 'KW' '3470';\n"); + grammarBuilder.append("KW3471 : 'KW' '3471';\n"); + grammarBuilder.append("KW3472 : 'KW' '3472';\n"); + grammarBuilder.append("KW3473 : 'KW' '3473';\n"); + grammarBuilder.append("KW3474 : 'KW' '3474';\n"); + grammarBuilder.append("KW3475 : 'KW' '3475';\n"); + grammarBuilder.append("KW3476 : 'KW' '3476';\n"); + grammarBuilder.append("KW3477 : 'KW' '3477';\n"); + grammarBuilder.append("KW3478 : 'KW' '3478';\n"); + grammarBuilder.append("KW3479 : 'KW' '3479';\n"); + grammarBuilder.append("KW3480 : 'KW' '3480';\n"); + grammarBuilder.append("KW3481 : 'KW' '3481';\n"); + grammarBuilder.append("KW3482 : 'KW' '3482';\n"); + grammarBuilder.append("KW3483 : 'KW' '3483';\n"); + grammarBuilder.append("KW3484 : 'KW' '3484';\n"); + grammarBuilder.append("KW3485 : 'KW' '3485';\n"); + grammarBuilder.append("KW3486 : 'KW' '3486';\n"); + grammarBuilder.append("KW3487 : 'KW' '3487';\n"); + grammarBuilder.append("KW3488 : 'KW' '3488';\n"); + grammarBuilder.append("KW3489 : 'KW' '3489';\n"); + grammarBuilder.append("KW3490 : 'KW' '3490';\n"); + grammarBuilder.append("KW3491 : 'KW' '3491';\n"); + grammarBuilder.append("KW3492 : 'KW' '3492';\n"); + grammarBuilder.append("KW3493 : 'KW' '3493';\n"); + grammarBuilder.append("KW3494 : 'KW' '3494';\n"); + grammarBuilder.append("KW3495 : 'KW' '3495';\n"); + grammarBuilder.append("KW3496 : 'KW' '3496';\n"); + grammarBuilder.append("KW3497 : 'KW' '3497';\n"); + grammarBuilder.append("KW3498 : 'KW' '3498';\n"); + grammarBuilder.append("KW3499 : 'KW' '3499';\n"); + grammarBuilder.append("KW3500 : 'KW' '3500';\n"); + grammarBuilder.append("KW3501 : 'KW' '3501';\n"); + grammarBuilder.append("KW3502 : 'KW' '3502';\n"); + grammarBuilder.append("KW3503 : 'KW' '3503';\n"); + grammarBuilder.append("KW3504 : 'KW' '3504';\n"); + grammarBuilder.append("KW3505 : 'KW' '3505';\n"); + grammarBuilder.append("KW3506 : 'KW' '3506';\n"); + grammarBuilder.append("KW3507 : 'KW' '3507';\n"); + grammarBuilder.append("KW3508 : 'KW' '3508';\n"); + grammarBuilder.append("KW3509 : 'KW' '3509';\n"); + grammarBuilder.append("KW3510 : 'KW' '3510';\n"); + grammarBuilder.append("KW3511 : 'KW' '3511';\n"); + grammarBuilder.append("KW3512 : 'KW' '3512';\n"); + grammarBuilder.append("KW3513 : 'KW' '3513';\n"); + grammarBuilder.append("KW3514 : 'KW' '3514';\n"); + grammarBuilder.append("KW3515 : 'KW' '3515';\n"); + grammarBuilder.append("KW3516 : 'KW' '3516';\n"); + grammarBuilder.append("KW3517 : 'KW' '3517';\n"); + grammarBuilder.append("KW3518 : 'KW' '3518';\n"); + grammarBuilder.append("KW3519 : 'KW' '3519';\n"); + grammarBuilder.append("KW3520 : 'KW' '3520';\n"); + grammarBuilder.append("KW3521 : 'KW' '3521';\n"); + grammarBuilder.append("KW3522 : 'KW' '3522';\n"); + grammarBuilder.append("KW3523 : 'KW' '3523';\n"); + grammarBuilder.append("KW3524 : 'KW' '3524';\n"); + grammarBuilder.append("KW3525 : 'KW' '3525';\n"); + grammarBuilder.append("KW3526 : 'KW' '3526';\n"); + grammarBuilder.append("KW3527 : 'KW' '3527';\n"); + grammarBuilder.append("KW3528 : 'KW' '3528';\n"); + grammarBuilder.append("KW3529 : 'KW' '3529';\n"); + grammarBuilder.append("KW3530 : 'KW' '3530';\n"); + grammarBuilder.append("KW3531 : 'KW' '3531';\n"); + grammarBuilder.append("KW3532 : 'KW' '3532';\n"); + grammarBuilder.append("KW3533 : 'KW' '3533';\n"); + grammarBuilder.append("KW3534 : 'KW' '3534';\n"); + grammarBuilder.append("KW3535 : 'KW' '3535';\n"); + grammarBuilder.append("KW3536 : 'KW' '3536';\n"); + grammarBuilder.append("KW3537 : 'KW' '3537';\n"); + grammarBuilder.append("KW3538 : 'KW' '3538';\n"); + grammarBuilder.append("KW3539 : 'KW' '3539';\n"); + grammarBuilder.append("KW3540 : 'KW' '3540';\n"); + grammarBuilder.append("KW3541 : 'KW' '3541';\n"); + grammarBuilder.append("KW3542 : 'KW' '3542';\n"); + grammarBuilder.append("KW3543 : 'KW' '3543';\n"); + grammarBuilder.append("KW3544 : 'KW' '3544';\n"); + grammarBuilder.append("KW3545 : 'KW' '3545';\n"); + grammarBuilder.append("KW3546 : 'KW' '3546';\n"); + grammarBuilder.append("KW3547 : 'KW' '3547';\n"); + grammarBuilder.append("KW3548 : 'KW' '3548';\n"); + grammarBuilder.append("KW3549 : 'KW' '3549';\n"); + grammarBuilder.append("KW3550 : 'KW' '3550';\n"); + grammarBuilder.append("KW3551 : 'KW' '3551';\n"); + grammarBuilder.append("KW3552 : 'KW' '3552';\n"); + grammarBuilder.append("KW3553 : 'KW' '3553';\n"); + grammarBuilder.append("KW3554 : 'KW' '3554';\n"); + grammarBuilder.append("KW3555 : 'KW' '3555';\n"); + grammarBuilder.append("KW3556 : 'KW' '3556';\n"); + grammarBuilder.append("KW3557 : 'KW' '3557';\n"); + grammarBuilder.append("KW3558 : 'KW' '3558';\n"); + grammarBuilder.append("KW3559 : 'KW' '3559';\n"); + grammarBuilder.append("KW3560 : 'KW' '3560';\n"); + grammarBuilder.append("KW3561 : 'KW' '3561';\n"); + grammarBuilder.append("KW3562 : 'KW' '3562';\n"); + grammarBuilder.append("KW3563 : 'KW' '3563';\n"); + grammarBuilder.append("KW3564 : 'KW' '3564';\n"); + grammarBuilder.append("KW3565 : 'KW' '3565';\n"); + grammarBuilder.append("KW3566 : 'KW' '3566';\n"); + grammarBuilder.append("KW3567 : 'KW' '3567';\n"); + grammarBuilder.append("KW3568 : 'KW' '3568';\n"); + grammarBuilder.append("KW3569 : 'KW' '3569';\n"); + grammarBuilder.append("KW3570 : 'KW' '3570';\n"); + grammarBuilder.append("KW3571 : 'KW' '3571';\n"); + grammarBuilder.append("KW3572 : 'KW' '3572';\n"); + grammarBuilder.append("KW3573 : 'KW' '3573';\n"); + grammarBuilder.append("KW3574 : 'KW' '3574';\n"); + grammarBuilder.append("KW3575 : 'KW' '3575';\n"); + grammarBuilder.append("KW3576 : 'KW' '3576';\n"); + grammarBuilder.append("KW3577 : 'KW' '3577';\n"); + grammarBuilder.append("KW3578 : 'KW' '3578';\n"); + grammarBuilder.append("KW3579 : 'KW' '3579';\n"); + grammarBuilder.append("KW3580 : 'KW' '3580';\n"); + grammarBuilder.append("KW3581 : 'KW' '3581';\n"); + grammarBuilder.append("KW3582 : 'KW' '3582';\n"); + grammarBuilder.append("KW3583 : 'KW' '3583';\n"); + grammarBuilder.append("KW3584 : 'KW' '3584';\n"); + grammarBuilder.append("KW3585 : 'KW' '3585';\n"); + grammarBuilder.append("KW3586 : 'KW' '3586';\n"); + grammarBuilder.append("KW3587 : 'KW' '3587';\n"); + grammarBuilder.append("KW3588 : 'KW' '3588';\n"); + grammarBuilder.append("KW3589 : 'KW' '3589';\n"); + grammarBuilder.append("KW3590 : 'KW' '3590';\n"); + grammarBuilder.append("KW3591 : 'KW' '3591';\n"); + grammarBuilder.append("KW3592 : 'KW' '3592';\n"); + grammarBuilder.append("KW3593 : 'KW' '3593';\n"); + grammarBuilder.append("KW3594 : 'KW' '3594';\n"); + grammarBuilder.append("KW3595 : 'KW' '3595';\n"); + grammarBuilder.append("KW3596 : 'KW' '3596';\n"); + grammarBuilder.append("KW3597 : 'KW' '3597';\n"); + grammarBuilder.append("KW3598 : 'KW' '3598';\n"); + grammarBuilder.append("KW3599 : 'KW' '3599';\n"); + grammarBuilder.append("KW3600 : 'KW' '3600';\n"); + grammarBuilder.append("KW3601 : 'KW' '3601';\n"); + grammarBuilder.append("KW3602 : 'KW' '3602';\n"); + grammarBuilder.append("KW3603 : 'KW' '3603';\n"); + grammarBuilder.append("KW3604 : 'KW' '3604';\n"); + grammarBuilder.append("KW3605 : 'KW' '3605';\n"); + grammarBuilder.append("KW3606 : 'KW' '3606';\n"); + grammarBuilder.append("KW3607 : 'KW' '3607';\n"); + grammarBuilder.append("KW3608 : 'KW' '3608';\n"); + grammarBuilder.append("KW3609 : 'KW' '3609';\n"); + grammarBuilder.append("KW3610 : 'KW' '3610';\n"); + grammarBuilder.append("KW3611 : 'KW' '3611';\n"); + grammarBuilder.append("KW3612 : 'KW' '3612';\n"); + grammarBuilder.append("KW3613 : 'KW' '3613';\n"); + grammarBuilder.append("KW3614 : 'KW' '3614';\n"); + grammarBuilder.append("KW3615 : 'KW' '3615';\n"); + grammarBuilder.append("KW3616 : 'KW' '3616';\n"); + grammarBuilder.append("KW3617 : 'KW' '3617';\n"); + grammarBuilder.append("KW3618 : 'KW' '3618';\n"); + grammarBuilder.append("KW3619 : 'KW' '3619';\n"); + grammarBuilder.append("KW3620 : 'KW' '3620';\n"); + grammarBuilder.append("KW3621 : 'KW' '3621';\n"); + grammarBuilder.append("KW3622 : 'KW' '3622';\n"); + grammarBuilder.append("KW3623 : 'KW' '3623';\n"); + grammarBuilder.append("KW3624 : 'KW' '3624';\n"); + grammarBuilder.append("KW3625 : 'KW' '3625';\n"); + grammarBuilder.append("KW3626 : 'KW' '3626';\n"); + grammarBuilder.append("KW3627 : 'KW' '3627';\n"); + grammarBuilder.append("KW3628 : 'KW' '3628';\n"); + grammarBuilder.append("KW3629 : 'KW' '3629';\n"); + grammarBuilder.append("KW3630 : 'KW' '3630';\n"); + grammarBuilder.append("KW3631 : 'KW' '3631';\n"); + grammarBuilder.append("KW3632 : 'KW' '3632';\n"); + grammarBuilder.append("KW3633 : 'KW' '3633';\n"); + grammarBuilder.append("KW3634 : 'KW' '3634';\n"); + grammarBuilder.append("KW3635 : 'KW' '3635';\n"); + grammarBuilder.append("KW3636 : 'KW' '3636';\n"); + grammarBuilder.append("KW3637 : 'KW' '3637';\n"); + grammarBuilder.append("KW3638 : 'KW' '3638';\n"); + grammarBuilder.append("KW3639 : 'KW' '3639';\n"); + grammarBuilder.append("KW3640 : 'KW' '3640';\n"); + grammarBuilder.append("KW3641 : 'KW' '3641';\n"); + grammarBuilder.append("KW3642 : 'KW' '3642';\n"); + grammarBuilder.append("KW3643 : 'KW' '3643';\n"); + grammarBuilder.append("KW3644 : 'KW' '3644';\n"); + grammarBuilder.append("KW3645 : 'KW' '3645';\n"); + grammarBuilder.append("KW3646 : 'KW' '3646';\n"); + grammarBuilder.append("KW3647 : 'KW' '3647';\n"); + grammarBuilder.append("KW3648 : 'KW' '3648';\n"); + grammarBuilder.append("KW3649 : 'KW' '3649';\n"); + grammarBuilder.append("KW3650 : 'KW' '3650';\n"); + grammarBuilder.append("KW3651 : 'KW' '3651';\n"); + grammarBuilder.append("KW3652 : 'KW' '3652';\n"); + grammarBuilder.append("KW3653 : 'KW' '3653';\n"); + grammarBuilder.append("KW3654 : 'KW' '3654';\n"); + grammarBuilder.append("KW3655 : 'KW' '3655';\n"); + grammarBuilder.append("KW3656 : 'KW' '3656';\n"); + grammarBuilder.append("KW3657 : 'KW' '3657';\n"); + grammarBuilder.append("KW3658 : 'KW' '3658';\n"); + grammarBuilder.append("KW3659 : 'KW' '3659';\n"); + grammarBuilder.append("KW3660 : 'KW' '3660';\n"); + grammarBuilder.append("KW3661 : 'KW' '3661';\n"); + grammarBuilder.append("KW3662 : 'KW' '3662';\n"); + grammarBuilder.append("KW3663 : 'KW' '3663';\n"); + grammarBuilder.append("KW3664 : 'KW' '3664';\n"); + grammarBuilder.append("KW3665 : 'KW' '3665';\n"); + grammarBuilder.append("KW3666 : 'KW' '3666';\n"); + grammarBuilder.append("KW3667 : 'KW' '3667';\n"); + grammarBuilder.append("KW3668 : 'KW' '3668';\n"); + grammarBuilder.append("KW3669 : 'KW' '3669';\n"); + grammarBuilder.append("KW3670 : 'KW' '3670';\n"); + grammarBuilder.append("KW3671 : 'KW' '3671';\n"); + grammarBuilder.append("KW3672 : 'KW' '3672';\n"); + grammarBuilder.append("KW3673 : 'KW' '3673';\n"); + grammarBuilder.append("KW3674 : 'KW' '3674';\n"); + grammarBuilder.append("KW3675 : 'KW' '3675';\n"); + grammarBuilder.append("KW3676 : 'KW' '3676';\n"); + grammarBuilder.append("KW3677 : 'KW' '3677';\n"); + grammarBuilder.append("KW3678 : 'KW' '3678';\n"); + grammarBuilder.append("KW3679 : 'KW' '3679';\n"); + grammarBuilder.append("KW3680 : 'KW' '3680';\n"); + grammarBuilder.append("KW3681 : 'KW' '3681';\n"); + grammarBuilder.append("KW3682 : 'KW' '3682';\n"); + grammarBuilder.append("KW3683 : 'KW' '3683';\n"); + grammarBuilder.append("KW3684 : 'KW' '3684';\n"); + grammarBuilder.append("KW3685 : 'KW' '3685';\n"); + grammarBuilder.append("KW3686 : 'KW' '3686';\n"); + grammarBuilder.append("KW3687 : 'KW' '3687';\n"); + grammarBuilder.append("KW3688 : 'KW' '3688';\n"); + grammarBuilder.append("KW3689 : 'KW' '3689';\n"); + grammarBuilder.append("KW3690 : 'KW' '3690';\n"); + grammarBuilder.append("KW3691 : 'KW' '3691';\n"); + grammarBuilder.append("KW3692 : 'KW' '3692';\n"); + grammarBuilder.append("KW3693 : 'KW' '3693';\n"); + grammarBuilder.append("KW3694 : 'KW' '3694';\n"); + grammarBuilder.append("KW3695 : 'KW' '3695';\n"); + grammarBuilder.append("KW3696 : 'KW' '3696';\n"); + grammarBuilder.append("KW3697 : 'KW' '3697';\n"); + grammarBuilder.append("KW3698 : 'KW' '3698';\n"); + grammarBuilder.append("KW3699 : 'KW' '3699';\n"); + grammarBuilder.append("KW3700 : 'KW' '3700';\n"); + grammarBuilder.append("KW3701 : 'KW' '3701';\n"); + grammarBuilder.append("KW3702 : 'KW' '3702';\n"); + grammarBuilder.append("KW3703 : 'KW' '3703';\n"); + grammarBuilder.append("KW3704 : 'KW' '3704';\n"); + grammarBuilder.append("KW3705 : 'KW' '3705';\n"); + grammarBuilder.append("KW3706 : 'KW' '3706';\n"); + grammarBuilder.append("KW3707 : 'KW' '3707';\n"); + grammarBuilder.append("KW3708 : 'KW' '3708';\n"); + grammarBuilder.append("KW3709 : 'KW' '3709';\n"); + grammarBuilder.append("KW3710 : 'KW' '3710';\n"); + grammarBuilder.append("KW3711 : 'KW' '3711';\n"); + grammarBuilder.append("KW3712 : 'KW' '3712';\n"); + grammarBuilder.append("KW3713 : 'KW' '3713';\n"); + grammarBuilder.append("KW3714 : 'KW' '3714';\n"); + grammarBuilder.append("KW3715 : 'KW' '3715';\n"); + grammarBuilder.append("KW3716 : 'KW' '3716';\n"); + grammarBuilder.append("KW3717 : 'KW' '3717';\n"); + grammarBuilder.append("KW3718 : 'KW' '3718';\n"); + grammarBuilder.append("KW3719 : 'KW' '3719';\n"); + grammarBuilder.append("KW3720 : 'KW' '3720';\n"); + grammarBuilder.append("KW3721 : 'KW' '3721';\n"); + grammarBuilder.append("KW3722 : 'KW' '3722';\n"); + grammarBuilder.append("KW3723 : 'KW' '3723';\n"); + grammarBuilder.append("KW3724 : 'KW' '3724';\n"); + grammarBuilder.append("KW3725 : 'KW' '3725';\n"); + grammarBuilder.append("KW3726 : 'KW' '3726';\n"); + grammarBuilder.append("KW3727 : 'KW' '3727';\n"); + grammarBuilder.append("KW3728 : 'KW' '3728';\n"); + grammarBuilder.append("KW3729 : 'KW' '3729';\n"); + grammarBuilder.append("KW3730 : 'KW' '3730';\n"); + grammarBuilder.append("KW3731 : 'KW' '3731';\n"); + grammarBuilder.append("KW3732 : 'KW' '3732';\n"); + grammarBuilder.append("KW3733 : 'KW' '3733';\n"); + grammarBuilder.append("KW3734 : 'KW' '3734';\n"); + grammarBuilder.append("KW3735 : 'KW' '3735';\n"); + grammarBuilder.append("KW3736 : 'KW' '3736';\n"); + grammarBuilder.append("KW3737 : 'KW' '3737';\n"); + grammarBuilder.append("KW3738 : 'KW' '3738';\n"); + grammarBuilder.append("KW3739 : 'KW' '3739';\n"); + grammarBuilder.append("KW3740 : 'KW' '3740';\n"); + grammarBuilder.append("KW3741 : 'KW' '3741';\n"); + grammarBuilder.append("KW3742 : 'KW' '3742';\n"); + grammarBuilder.append("KW3743 : 'KW' '3743';\n"); + grammarBuilder.append("KW3744 : 'KW' '3744';\n"); + grammarBuilder.append("KW3745 : 'KW' '3745';\n"); + grammarBuilder.append("KW3746 : 'KW' '3746';\n"); + grammarBuilder.append("KW3747 : 'KW' '3747';\n"); + grammarBuilder.append("KW3748 : 'KW' '3748';\n"); + grammarBuilder.append("KW3749 : 'KW' '3749';\n"); + grammarBuilder.append("KW3750 : 'KW' '3750';\n"); + grammarBuilder.append("KW3751 : 'KW' '3751';\n"); + grammarBuilder.append("KW3752 : 'KW' '3752';\n"); + grammarBuilder.append("KW3753 : 'KW' '3753';\n"); + grammarBuilder.append("KW3754 : 'KW' '3754';\n"); + grammarBuilder.append("KW3755 : 'KW' '3755';\n"); + grammarBuilder.append("KW3756 : 'KW' '3756';\n"); + grammarBuilder.append("KW3757 : 'KW' '3757';\n"); + grammarBuilder.append("KW3758 : 'KW' '3758';\n"); + grammarBuilder.append("KW3759 : 'KW' '3759';\n"); + grammarBuilder.append("KW3760 : 'KW' '3760';\n"); + grammarBuilder.append("KW3761 : 'KW' '3761';\n"); + grammarBuilder.append("KW3762 : 'KW' '3762';\n"); + grammarBuilder.append("KW3763 : 'KW' '3763';\n"); + grammarBuilder.append("KW3764 : 'KW' '3764';\n"); + grammarBuilder.append("KW3765 : 'KW' '3765';\n"); + grammarBuilder.append("KW3766 : 'KW' '3766';\n"); + grammarBuilder.append("KW3767 : 'KW' '3767';\n"); + grammarBuilder.append("KW3768 : 'KW' '3768';\n"); + grammarBuilder.append("KW3769 : 'KW' '3769';\n"); + grammarBuilder.append("KW3770 : 'KW' '3770';\n"); + grammarBuilder.append("KW3771 : 'KW' '3771';\n"); + grammarBuilder.append("KW3772 : 'KW' '3772';\n"); + grammarBuilder.append("KW3773 : 'KW' '3773';\n"); + grammarBuilder.append("KW3774 : 'KW' '3774';\n"); + grammarBuilder.append("KW3775 : 'KW' '3775';\n"); + grammarBuilder.append("KW3776 : 'KW' '3776';\n"); + grammarBuilder.append("KW3777 : 'KW' '3777';\n"); + grammarBuilder.append("KW3778 : 'KW' '3778';\n"); + grammarBuilder.append("KW3779 : 'KW' '3779';\n"); + grammarBuilder.append("KW3780 : 'KW' '3780';\n"); + grammarBuilder.append("KW3781 : 'KW' '3781';\n"); + grammarBuilder.append("KW3782 : 'KW' '3782';\n"); + grammarBuilder.append("KW3783 : 'KW' '3783';\n"); + grammarBuilder.append("KW3784 : 'KW' '3784';\n"); + grammarBuilder.append("KW3785 : 'KW' '3785';\n"); + grammarBuilder.append("KW3786 : 'KW' '3786';\n"); + grammarBuilder.append("KW3787 : 'KW' '3787';\n"); + grammarBuilder.append("KW3788 : 'KW' '3788';\n"); + grammarBuilder.append("KW3789 : 'KW' '3789';\n"); + grammarBuilder.append("KW3790 : 'KW' '3790';\n"); + grammarBuilder.append("KW3791 : 'KW' '3791';\n"); + grammarBuilder.append("KW3792 : 'KW' '3792';\n"); + grammarBuilder.append("KW3793 : 'KW' '3793';\n"); + grammarBuilder.append("KW3794 : 'KW' '3794';\n"); + grammarBuilder.append("KW3795 : 'KW' '3795';\n"); + grammarBuilder.append("KW3796 : 'KW' '3796';\n"); + grammarBuilder.append("KW3797 : 'KW' '3797';\n"); + grammarBuilder.append("KW3798 : 'KW' '3798';\n"); + grammarBuilder.append("KW3799 : 'KW' '3799';\n"); + grammarBuilder.append("KW3800 : 'KW' '3800';\n"); + grammarBuilder.append("KW3801 : 'KW' '3801';\n"); + grammarBuilder.append("KW3802 : 'KW' '3802';\n"); + grammarBuilder.append("KW3803 : 'KW' '3803';\n"); + grammarBuilder.append("KW3804 : 'KW' '3804';\n"); + grammarBuilder.append("KW3805 : 'KW' '3805';\n"); + grammarBuilder.append("KW3806 : 'KW' '3806';\n"); + grammarBuilder.append("KW3807 : 'KW' '3807';\n"); + grammarBuilder.append("KW3808 : 'KW' '3808';\n"); + grammarBuilder.append("KW3809 : 'KW' '3809';\n"); + grammarBuilder.append("KW3810 : 'KW' '3810';\n"); + grammarBuilder.append("KW3811 : 'KW' '3811';\n"); + grammarBuilder.append("KW3812 : 'KW' '3812';\n"); + grammarBuilder.append("KW3813 : 'KW' '3813';\n"); + grammarBuilder.append("KW3814 : 'KW' '3814';\n"); + grammarBuilder.append("KW3815 : 'KW' '3815';\n"); + grammarBuilder.append("KW3816 : 'KW' '3816';\n"); + grammarBuilder.append("KW3817 : 'KW' '3817';\n"); + grammarBuilder.append("KW3818 : 'KW' '3818';\n"); + grammarBuilder.append("KW3819 : 'KW' '3819';\n"); + grammarBuilder.append("KW3820 : 'KW' '3820';\n"); + grammarBuilder.append("KW3821 : 'KW' '3821';\n"); + grammarBuilder.append("KW3822 : 'KW' '3822';\n"); + grammarBuilder.append("KW3823 : 'KW' '3823';\n"); + grammarBuilder.append("KW3824 : 'KW' '3824';\n"); + grammarBuilder.append("KW3825 : 'KW' '3825';\n"); + grammarBuilder.append("KW3826 : 'KW' '3826';\n"); + grammarBuilder.append("KW3827 : 'KW' '3827';\n"); + grammarBuilder.append("KW3828 : 'KW' '3828';\n"); + grammarBuilder.append("KW3829 : 'KW' '3829';\n"); + grammarBuilder.append("KW3830 : 'KW' '3830';\n"); + grammarBuilder.append("KW3831 : 'KW' '3831';\n"); + grammarBuilder.append("KW3832 : 'KW' '3832';\n"); + grammarBuilder.append("KW3833 : 'KW' '3833';\n"); + grammarBuilder.append("KW3834 : 'KW' '3834';\n"); + grammarBuilder.append("KW3835 : 'KW' '3835';\n"); + grammarBuilder.append("KW3836 : 'KW' '3836';\n"); + grammarBuilder.append("KW3837 : 'KW' '3837';\n"); + grammarBuilder.append("KW3838 : 'KW' '3838';\n"); + grammarBuilder.append("KW3839 : 'KW' '3839';\n"); + grammarBuilder.append("KW3840 : 'KW' '3840';\n"); + grammarBuilder.append("KW3841 : 'KW' '3841';\n"); + grammarBuilder.append("KW3842 : 'KW' '3842';\n"); + grammarBuilder.append("KW3843 : 'KW' '3843';\n"); + grammarBuilder.append("KW3844 : 'KW' '3844';\n"); + grammarBuilder.append("KW3845 : 'KW' '3845';\n"); + grammarBuilder.append("KW3846 : 'KW' '3846';\n"); + grammarBuilder.append("KW3847 : 'KW' '3847';\n"); + grammarBuilder.append("KW3848 : 'KW' '3848';\n"); + grammarBuilder.append("KW3849 : 'KW' '3849';\n"); + grammarBuilder.append("KW3850 : 'KW' '3850';\n"); + grammarBuilder.append("KW3851 : 'KW' '3851';\n"); + grammarBuilder.append("KW3852 : 'KW' '3852';\n"); + grammarBuilder.append("KW3853 : 'KW' '3853';\n"); + grammarBuilder.append("KW3854 : 'KW' '3854';\n"); + grammarBuilder.append("KW3855 : 'KW' '3855';\n"); + grammarBuilder.append("KW3856 : 'KW' '3856';\n"); + grammarBuilder.append("KW3857 : 'KW' '3857';\n"); + grammarBuilder.append("KW3858 : 'KW' '3858';\n"); + grammarBuilder.append("KW3859 : 'KW' '3859';\n"); + grammarBuilder.append("KW3860 : 'KW' '3860';\n"); + grammarBuilder.append("KW3861 : 'KW' '3861';\n"); + grammarBuilder.append("KW3862 : 'KW' '3862';\n"); + grammarBuilder.append("KW3863 : 'KW' '3863';\n"); + grammarBuilder.append("KW3864 : 'KW' '3864';\n"); + grammarBuilder.append("KW3865 : 'KW' '3865';\n"); + grammarBuilder.append("KW3866 : 'KW' '3866';\n"); + grammarBuilder.append("KW3867 : 'KW' '3867';\n"); + grammarBuilder.append("KW3868 : 'KW' '3868';\n"); + grammarBuilder.append("KW3869 : 'KW' '3869';\n"); + grammarBuilder.append("KW3870 : 'KW' '3870';\n"); + grammarBuilder.append("KW3871 : 'KW' '3871';\n"); + grammarBuilder.append("KW3872 : 'KW' '3872';\n"); + grammarBuilder.append("KW3873 : 'KW' '3873';\n"); + grammarBuilder.append("KW3874 : 'KW' '3874';\n"); + grammarBuilder.append("KW3875 : 'KW' '3875';\n"); + grammarBuilder.append("KW3876 : 'KW' '3876';\n"); + grammarBuilder.append("KW3877 : 'KW' '3877';\n"); + grammarBuilder.append("KW3878 : 'KW' '3878';\n"); + grammarBuilder.append("KW3879 : 'KW' '3879';\n"); + grammarBuilder.append("KW3880 : 'KW' '3880';\n"); + grammarBuilder.append("KW3881 : 'KW' '3881';\n"); + grammarBuilder.append("KW3882 : 'KW' '3882';\n"); + grammarBuilder.append("KW3883 : 'KW' '3883';\n"); + grammarBuilder.append("KW3884 : 'KW' '3884';\n"); + grammarBuilder.append("KW3885 : 'KW' '3885';\n"); + grammarBuilder.append("KW3886 : 'KW' '3886';\n"); + grammarBuilder.append("KW3887 : 'KW' '3887';\n"); + grammarBuilder.append("KW3888 : 'KW' '3888';\n"); + grammarBuilder.append("KW3889 : 'KW' '3889';\n"); + grammarBuilder.append("KW3890 : 'KW' '3890';\n"); + grammarBuilder.append("KW3891 : 'KW' '3891';\n"); + grammarBuilder.append("KW3892 : 'KW' '3892';\n"); + grammarBuilder.append("KW3893 : 'KW' '3893';\n"); + grammarBuilder.append("KW3894 : 'KW' '3894';\n"); + grammarBuilder.append("KW3895 : 'KW' '3895';\n"); + grammarBuilder.append("KW3896 : 'KW' '3896';\n"); + grammarBuilder.append("KW3897 : 'KW' '3897';\n"); + grammarBuilder.append("KW3898 : 'KW' '3898';\n"); + grammarBuilder.append("KW3899 : 'KW' '3899';\n"); + grammarBuilder.append("KW3900 : 'KW' '3900';\n"); + grammarBuilder.append("KW3901 : 'KW' '3901';\n"); + grammarBuilder.append("KW3902 : 'KW' '3902';\n"); + grammarBuilder.append("KW3903 : 'KW' '3903';\n"); + grammarBuilder.append("KW3904 : 'KW' '3904';\n"); + grammarBuilder.append("KW3905 : 'KW' '3905';\n"); + grammarBuilder.append("KW3906 : 'KW' '3906';\n"); + grammarBuilder.append("KW3907 : 'KW' '3907';\n"); + grammarBuilder.append("KW3908 : 'KW' '3908';\n"); + grammarBuilder.append("KW3909 : 'KW' '3909';\n"); + grammarBuilder.append("KW3910 : 'KW' '3910';\n"); + grammarBuilder.append("KW3911 : 'KW' '3911';\n"); + grammarBuilder.append("KW3912 : 'KW' '3912';\n"); + grammarBuilder.append("KW3913 : 'KW' '3913';\n"); + grammarBuilder.append("KW3914 : 'KW' '3914';\n"); + grammarBuilder.append("KW3915 : 'KW' '3915';\n"); + grammarBuilder.append("KW3916 : 'KW' '3916';\n"); + grammarBuilder.append("KW3917 : 'KW' '3917';\n"); + grammarBuilder.append("KW3918 : 'KW' '3918';\n"); + grammarBuilder.append("KW3919 : 'KW' '3919';\n"); + grammarBuilder.append("KW3920 : 'KW' '3920';\n"); + grammarBuilder.append("KW3921 : 'KW' '3921';\n"); + grammarBuilder.append("KW3922 : 'KW' '3922';\n"); + grammarBuilder.append("KW3923 : 'KW' '3923';\n"); + grammarBuilder.append("KW3924 : 'KW' '3924';\n"); + grammarBuilder.append("KW3925 : 'KW' '3925';\n"); + grammarBuilder.append("KW3926 : 'KW' '3926';\n"); + grammarBuilder.append("KW3927 : 'KW' '3927';\n"); + grammarBuilder.append("KW3928 : 'KW' '3928';\n"); + grammarBuilder.append("KW3929 : 'KW' '3929';\n"); + grammarBuilder.append("KW3930 : 'KW' '3930';\n"); + grammarBuilder.append("KW3931 : 'KW' '3931';\n"); + grammarBuilder.append("KW3932 : 'KW' '3932';\n"); + grammarBuilder.append("KW3933 : 'KW' '3933';\n"); + grammarBuilder.append("KW3934 : 'KW' '3934';\n"); + grammarBuilder.append("KW3935 : 'KW' '3935';\n"); + grammarBuilder.append("KW3936 : 'KW' '3936';\n"); + grammarBuilder.append("KW3937 : 'KW' '3937';\n"); + grammarBuilder.append("KW3938 : 'KW' '3938';\n"); + grammarBuilder.append("KW3939 : 'KW' '3939';\n"); + grammarBuilder.append("KW3940 : 'KW' '3940';\n"); + grammarBuilder.append("KW3941 : 'KW' '3941';\n"); + grammarBuilder.append("KW3942 : 'KW' '3942';\n"); + grammarBuilder.append("KW3943 : 'KW' '3943';\n"); + grammarBuilder.append("KW3944 : 'KW' '3944';\n"); + grammarBuilder.append("KW3945 : 'KW' '3945';\n"); + grammarBuilder.append("KW3946 : 'KW' '3946';\n"); + grammarBuilder.append("KW3947 : 'KW' '3947';\n"); + grammarBuilder.append("KW3948 : 'KW' '3948';\n"); + grammarBuilder.append("KW3949 : 'KW' '3949';\n"); + grammarBuilder.append("KW3950 : 'KW' '3950';\n"); + grammarBuilder.append("KW3951 : 'KW' '3951';\n"); + grammarBuilder.append("KW3952 : 'KW' '3952';\n"); + grammarBuilder.append("KW3953 : 'KW' '3953';\n"); + grammarBuilder.append("KW3954 : 'KW' '3954';\n"); + grammarBuilder.append("KW3955 : 'KW' '3955';\n"); + grammarBuilder.append("KW3956 : 'KW' '3956';\n"); + grammarBuilder.append("KW3957 : 'KW' '3957';\n"); + grammarBuilder.append("KW3958 : 'KW' '3958';\n"); + grammarBuilder.append("KW3959 : 'KW' '3959';\n"); + grammarBuilder.append("KW3960 : 'KW' '3960';\n"); + grammarBuilder.append("KW3961 : 'KW' '3961';\n"); + grammarBuilder.append("KW3962 : 'KW' '3962';\n"); + grammarBuilder.append("KW3963 : 'KW' '3963';\n"); + grammarBuilder.append("KW3964 : 'KW' '3964';\n"); + grammarBuilder.append("KW3965 : 'KW' '3965';\n"); + grammarBuilder.append("KW3966 : 'KW' '3966';\n"); + grammarBuilder.append("KW3967 : 'KW' '3967';\n"); + grammarBuilder.append("KW3968 : 'KW' '3968';\n"); + grammarBuilder.append("KW3969 : 'KW' '3969';\n"); + grammarBuilder.append("KW3970 : 'KW' '3970';\n"); + grammarBuilder.append("KW3971 : 'KW' '3971';\n"); + grammarBuilder.append("KW3972 : 'KW' '3972';\n"); + grammarBuilder.append("KW3973 : 'KW' '3973';\n"); + grammarBuilder.append("KW3974 : 'KW' '3974';\n"); + grammarBuilder.append("KW3975 : 'KW' '3975';\n"); + grammarBuilder.append("KW3976 : 'KW' '3976';\n"); + grammarBuilder.append("KW3977 : 'KW' '3977';\n"); + grammarBuilder.append("KW3978 : 'KW' '3978';\n"); + grammarBuilder.append("KW3979 : 'KW' '3979';\n"); + grammarBuilder.append("KW3980 : 'KW' '3980';\n"); + grammarBuilder.append("KW3981 : 'KW' '3981';\n"); + grammarBuilder.append("KW3982 : 'KW' '3982';\n"); + grammarBuilder.append("KW3983 : 'KW' '3983';\n"); + grammarBuilder.append("KW3984 : 'KW' '3984';\n"); + grammarBuilder.append("KW3985 : 'KW' '3985';\n"); + grammarBuilder.append("KW3986 : 'KW' '3986';\n"); + grammarBuilder.append("KW3987 : 'KW' '3987';\n"); + grammarBuilder.append("KW3988 : 'KW' '3988';\n"); + grammarBuilder.append("KW3989 : 'KW' '3989';\n"); + grammarBuilder.append("KW3990 : 'KW' '3990';\n"); + grammarBuilder.append("KW3991 : 'KW' '3991';\n"); + grammarBuilder.append("KW3992 : 'KW' '3992';\n"); + grammarBuilder.append("KW3993 : 'KW' '3993';\n"); + grammarBuilder.append("KW3994 : 'KW' '3994';\n"); + grammarBuilder.append("KW3995 : 'KW' '3995';\n"); + grammarBuilder.append("KW3996 : 'KW' '3996';\n"); + grammarBuilder.append("KW3997 : 'KW' '3997';\n"); + grammarBuilder.append("KW3998 : 'KW' '3998';\n"); + grammarBuilder.append("KW3999 : 'KW' '3999';"); + String grammar = grammarBuilder.toString(); + + String input ="KW400"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='KW400',<402>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyConfigs() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(110); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("I : .*? ('a' | 'ab') {print(self.text)} ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + grammarBuilder.append("J : . {print(self.text)};"); + String grammar = grammarBuilder.toString(); + + String input ="ab"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "a\n" + + "b\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,1:1='b',<3>,1:1]\n" + + "[@2,2:1='',<-1>,1:2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyOptional() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyPositiveClosure() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(59); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); + grammarBuilder.append("WS : (' '|'\\t')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "//blah\n" + + "//blah\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='//blah\\n',<1>,1:0]\n" + + "[@1,7:13='//blah\\n',<1>,2:0]\n" + + "[@2,14:13='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"hi\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:3='\"hi\"',<1>,1:0]\n" + + "[@1,4:8='\"mom\"',<1>,1:4]\n" + + "[@2,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNonGreedyTermination2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(47); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); + String grammar = grammarBuilder.toString(); + + String input ="\"\"\"mom\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + + "[@1,7:6='',<-1>,1:7]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParentheses() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(166); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("START_BLOCK: '-.-.-';\n"); + grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); + grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); + grammarBuilder.append("fragment L_A: '.-';\n"); + grammarBuilder.append("fragment L_K: '-.-';\n"); + grammarBuilder.append("SEPARATOR: '!';"); + String grammar = grammarBuilder.toString(); + + String input ="-.-.-!"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4='-.-.-',<1>,1:0]\n" + + "[@1,5:5='!',<3>,1:5]\n" + + "[@2,6:5='',<-1>,1:6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPositionAdjustingLexer() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(1839); + grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("def resetAcceptPosition(self, index, line, column):\n"); + grammarBuilder.append(" self._input.seek(index)\n"); + grammarBuilder.append(" self.line = line\n"); + grammarBuilder.append(" self.column = column\n"); + grammarBuilder.append(" self._interp.consume(self._input)\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def nextToken(self):\n"); + grammarBuilder.append(" if self._interp.__dict__.get(\"resetAcceptPosition\", None) is None:\n"); + grammarBuilder.append(" self._interp.__dict__[\"resetAcceptPosition\"] = self.resetAcceptPosition\n"); + grammarBuilder.append(" return super(type(self),self).nextToken()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def emit(self):\n"); + grammarBuilder.append(" if self._type==PositionAdjustingLexer.TOKENS:\n"); + grammarBuilder.append(" self.handleAcceptPositionForKeyword(\"tokens\")\n"); + grammarBuilder.append(" elif self._type==PositionAdjustingLexer.LABEL:\n"); + grammarBuilder.append(" self.handleAcceptPositionForIdentifier()\n"); + grammarBuilder.append(" return super(type(self),self).emit()\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def handleAcceptPositionForIdentifier(self):\n"); + grammarBuilder.append(" tokenText = self.text\n"); + grammarBuilder.append(" identifierLength = 0\n"); + grammarBuilder.append(" while identifierLength < len(tokenText) and self.isIdentifierChar(tokenText[identifierLength]):\n"); + grammarBuilder.append(" identifierLength += 1\n"); + grammarBuilder.append("\n"); + grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + identifierLength:\n"); + grammarBuilder.append(" offset = identifierLength - 1\n"); + grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); + grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); + grammarBuilder.append(" return True\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" return False\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("def handleAcceptPositionForKeyword(self, keyword):\n"); + grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + len(keyword):\n"); + grammarBuilder.append(" offset = len(keyword) - 1\n"); + grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); + grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); + grammarBuilder.append(" return True\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" return False\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@staticmethod\n"); + grammarBuilder.append("def isIdentifierChar(c):\n"); + grammarBuilder.append(" return c.isalnum() or c == '_'\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ASSIGN : '=' ;\n"); + grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); + grammarBuilder.append("LCURLY: '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// 'tokens' followed by '{'\n"); + grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); + grammarBuilder.append("LABEL\n"); + grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("IDENTIFIER\n"); + grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("IGNORED\n"); + grammarBuilder.append(" : [ \\t\\r\\n]*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("NEWLINE\n"); + grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("WS\n"); + grammarBuilder.append(" : [ \\t]+ -> skip\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + String input = + "tokens\n" + + "tokens {\n" + + "notLabel\n" + + "label1 =\n" + + "label2 +=\n" + + "notLabel\n"; + String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); + assertEquals( + "[@0,0:5='tokens',<6>,1:0]\n" + + "[@1,7:12='tokens',<4>,2:0]\n" + + "[@2,14:14='{',<3>,2:7]\n" + + "[@3,16:23='notLabel',<6>,3:0]\n" + + "[@4,25:30='label1',<5>,4:0]\n" + + "[@5,32:32='=',<1>,4:7]\n" + + "[@6,34:39='label2',<5>,5:0]\n" + + "[@7,41:42='+=',<2>,5:7]\n" + + "[@8,44:51='notLabel',<6>,6:0]\n" + + "[@9,53:52='',<-1>,7:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testQuoteTranslation() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(57); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); + String grammar = grammarBuilder.toString(); + + String input ="\""; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\"',<1>,1:0]\n" + + "[@1,1:0='',<-1>,1:1]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */\n" + + "/* /* */\n" + + "/* /*nested*/ */\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,9:9='\\n',<2>,1:9]\n" + + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,35:35='\\n',<2>,3:16]\n" + + "[@4,36:35='',<-1>,4:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+;"); + String grammar = grammarBuilder.toString(); + + String input = + "/* ick */x\n" + + "/* /* */x\n" + + "/* /*nested*/ */x\n"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:8='/* ick */',<1>,1:0]\n" + + "[@1,10:10='\\n',<2>,1:10]\n" + + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + + "[@3,38:38='\\n',<2>,3:17]\n" + + "[@4,39:38='',<-1>,4:0]\n", found); + + assertEquals( + "line 1:9 token recognition error at: 'x'\n" + + "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("A : '-' I ;\n"); + grammarBuilder.append("I : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="34 -21 3"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:1='34',<2>,1:0]\n" + + "[@1,3:5='-21',<1>,1:3]\n" + + "[@2,7:7='3',<2>,1:7]\n" + + "[@3,8:7='',<-1>,1:8]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSlashes() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(95); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("Backslash : '\\\\';\n"); + grammarBuilder.append("Slash : '/';\n"); + grammarBuilder.append("Vee : '\\\\/';\n"); + grammarBuilder.append("Wedge : '/\\\\';\n"); + grammarBuilder.append("WS : [ \\t] -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="\\ / \\/ /\\"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:0='\\',<1>,1:0]\n" + + "[@1,2:2='/',<2>,1:2]\n" + + "[@2,4:5='\\/',<3>,1:4]\n" + + "[@3,7:8='/\\',<4>,1:7]\n" + + "[@4,9:8='',<-1>,1:9]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testZeroLengthToken() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(215); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("BeginString\n"); + grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("mode StringMode;\n"); + grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); + grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); + grammarBuilder.append("mode EndStringMode; \n"); + grammarBuilder.append(" EndString : '\\'' -> popMode;"); + String grammar = grammarBuilder.toString(); + + String input ="'xxx'"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "[@0,0:4=''xxx'',<1>,1:0]\n" + + "[@1,5:4='',<-1>,1:5]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestListeners.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestListeners.java new file mode 100644 index 000000000..688be5acb --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestListeners.java @@ -0,0 +1,406 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestListeners extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(587); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("class MockListener:\n"); + grammarBuilder.append(" pass\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class LeafListener(MockListener):\n"); + grammarBuilder.append(" def visitTerminal(self, node):\n"); + grammarBuilder.append(" print(node.symbol.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1\n" + + "2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLR() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(748); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("class MockListener:\n"); + grammarBuilder.append(" pass\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class LeafListener(MockListener):\n"); + grammarBuilder.append(" def exitE(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==3:\n"); + grammarBuilder.append(" print(ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text)\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e op='*' e\n"); + grammarBuilder.append(" | e op='+' e\n"); + grammarBuilder.append(" | INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1+2*3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) + (e (e 2) * (e 3)))\n" + + "1\n" + + "2\n" + + "3\n" + + "2 3 2\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLRWithLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(728); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("class MockListener:\n"); + grammarBuilder.append(" pass\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class LeafListener(MockListener):\n"); + grammarBuilder.append(" def exitCall(self, ctx):\n"); + grammarBuilder.append(" print(ctx.e().start.text + ' ' + str(ctx.eList()))\n"); + grammarBuilder.append(" def exitInt(self, ctx):\n"); + grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=e ;\n"); + grammarBuilder.append("e : e '(' eList ')' # Call\n"); + grammarBuilder.append(" | INT # Int\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("eList : e (',' e)* ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1(2,3)"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + + "1\n" + + "2\n" + + "3\n" + + "1 [13 6]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(773); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("class MockListener:\n"); + grammarBuilder.append(" pass\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class LeafListener(MockListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b 1) (b 2))\n" + + "1 2 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(773); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("class MockListener:\n"); + grammarBuilder.append(" pass\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class LeafListener(MockListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(ctx.b(0).start.text)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b b // forces list\n"); + grammarBuilder.append(" | b // a list still\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID | INT;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a (b abc))\n" + + "abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(736); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("class MockListener:\n"); + grammarBuilder.append(" pass\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class LeafListener(MockListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="1 2"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a 1 2)\n" + + "1 2 [1, 2]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenGetters_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(736); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::header {\n"); + grammarBuilder.append("class MockListener:\n"); + grammarBuilder.append(" pass\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class LeafListener(MockListener):\n"); + grammarBuilder.append(" def exitA(self, ctx):\n"); + grammarBuilder.append(" if ctx.getChildCount()==2:\n"); + grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); + grammarBuilder.append(" else:\n"); + grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); + grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); + grammarBuilder.append(" from .TListener import TListener\n"); + grammarBuilder.append("else:\n"); + grammarBuilder.append(" from TListener import TListener\n"); + grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); + grammarBuilder.append("walker = ParseTreeWalker()\n"); + grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : INT INT\n"); + grammarBuilder.append(" | ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("MULT: '*' ;\n"); + grammarBuilder.append("ADD : '+' ;\n"); + grammarBuilder.append("INT : [0-9]+ ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "(a abc)\n" + + "[@0,0:2='abc',<4>,1:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParseTrees.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParseTrees.java new file mode 100644 index 000000000..23e5e9f25 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParseTrees.java @@ -0,0 +1,310 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParseTrees extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2AltLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(136); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyyxyxz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y y x y x z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2Alts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(129); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAltNum() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(584); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("class MyRuleNode(ParserRuleContext):\n"); + grammarBuilder.append(" def __init__(self, parent:ParserRuleContext = None, invokingStateNumber:int = None ):\n"); + grammarBuilder.append(" super(TParser.MyRuleNode, self).__init__(parent, invokingStateNumber)\n"); + grammarBuilder.append(" self.altNum = 0;\n"); + grammarBuilder.append(" def getAltNumber(self):\n"); + grammarBuilder.append(" return self.altNum\n"); + grammarBuilder.append(" def setAltNumber(self, altNum):\n"); + grammarBuilder.append(" self.altNum = altNum\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("a : 'f'\n"); + grammarBuilder.append(" | 'g'\n"); + grammarBuilder.append(" | 'x' b 'z'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'e' {} | 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xyz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a:3 x (b:2 y) z)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExtraToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="xzy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(144); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' | 'y'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append(" "); + String grammar = grammarBuilder.toString(); + + + String input ="z"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a z)\n", found); + + assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleRef() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(138); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : b 'x'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : 'y' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="yx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a (b y) x)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSync() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(145); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'* '!'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("Z : 'z' \n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xzyy!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x z y y !)\n", found); + + assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToken2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(127); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' 'y'\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("(a x y)\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenAndRuleContextString() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(173); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s\n"); + grammarBuilder.append("@init {\n"); + grammarBuilder.append("self._buildParseTrees = True\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : r=a ;\n"); + grammarBuilder.append("a : 'x' { \n"); + grammarBuilder.append("print(str_list(self.getRuleInvocationStack()))\n"); + grammarBuilder.append("} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "[a, s]\n" + + "(a x)\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserErrors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserErrors.java new file mode 100644 index 000000000..edca1d7ee --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserErrors.java @@ -0,0 +1,751 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserErrors extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(61); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x='b' {print(\"conjured=\" + str($x))} 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testConjuringUpTokenFromSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(67); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' x=('b'|'c') {print(\"conjured=\" + str($x))} 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testContextListGetters() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(160); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members{\n"); + grammarBuilder.append("def foo():\n"); + grammarBuilder.append(" s = SContext()\n"); + grammarBuilder.append(" a = s.a()\n"); + grammarBuilder.append(" b = s.b()\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : (a | b)+;\n"); + grammarBuilder.append("a : 'a' {print(\"a\",end='')};\n"); + grammarBuilder.append("b : 'b' {print(\"b\",end='')};"); + String grammar = grammarBuilder.toString(); + + + String input ="abab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("abab\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDuplicatedLeftRecursiveCall_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(63); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : expr EOF;\n"); + grammarBuilder.append("expr : 'x'\n"); + grammarBuilder.append(" | expr expr\n"); + grammarBuilder.append(" ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xxxx"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidATNStateRemoval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(102); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID ':' expr;\n"); + grammarBuilder.append("expr : primary expr? {pass} | expr '->' ID;\n"); + grammarBuilder.append("primary : ID;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input ="x:x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testInvalidEmptyInput() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : ID+;\n"); + grammarBuilder.append("ID : [a-z]+;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); + + assertEquals("", found); + + assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1ErrorInfo() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(314); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); + grammarBuilder.append("animal : (DOG | CAT );\n"); + grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); + grammarBuilder.append("AND : 'and';\n"); + grammarBuilder.append("DOG : 'dog';\n"); + grammarBuilder.append("CAT : 'cat';\n"); + grammarBuilder.append("HARDWARE: 'hardware';\n"); + grammarBuilder.append("SOFTWARE: 'software';\n"); + grammarBuilder.append("WS : ' ' -> skip ;\n"); + grammarBuilder.append("acClass\n"); + grammarBuilder.append("@init\n"); + grammarBuilder.append("{print(self.getExpectedTokens().toString(self.literalNames, self.symbolicNames))}\n"); + grammarBuilder.append(" : ;"); + String grammar = grammarBuilder.toString(); + + + String input ="dog and software"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("{'hardware', 'software'}\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'\n"); + grammarBuilder.append(" | 'a' 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(55); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c'\n"); + grammarBuilder.append(" | 'a' 'b' 'd'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abe"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLLStar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aaae"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(40); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c';"); + String grammar = grammarBuilder.toString(); + + + String input ="aacabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultiTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(41); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaaababc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + + "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoViableAltAvoidance() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(83); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : e '!' ;\n"); + grammarBuilder.append("e : 'a' 'b'\n"); + grammarBuilder.append(" | 'a'\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("DOT : '.' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a."; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(34); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleSetInsertionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="ad"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@0,0:0='a',<3>,1:0]\n", found); + + assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(38); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('b' | 'c')\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'a'\n"); + grammarBuilder.append(";"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(25); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforeLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(36); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})*;"); + String grammar = grammarBuilder.toString(); + + + String input ="aabc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + + "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionBeforePredict() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(48); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a'+ 'b'\n"); + grammarBuilder.append(" | 'a'+ 'c'\n"); + grammarBuilder.append(";\n"); + grammarBuilder.append("q : 'e' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="caaab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionConsumption() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(80); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("myset: ('b'|'c') ;\n"); + grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); + String grammar = grammarBuilder.toString(); + + + String input ="aabd"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("[@2,2:2='b',<1>,1:2]\n", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(29); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionDuringLoop2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(41); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ababbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenDeletionExpectingSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(30); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' ('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aab"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSingleTokenInsertion() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(28); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(24); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : 'a' 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="aa"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + + assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testTokenMismatch2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(165); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); + grammarBuilder.append("expr: ID '=' STR ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); + grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); + grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); + grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="( ~FORCE_ERROR~ "; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + + assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserExec.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserExec.java new file mode 100644 index 000000000..f52c01d86 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestParserExec.java @@ -0,0 +1,823 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestParserExec extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID+ {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(77); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)+ {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorAStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(82); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ID)* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorB() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(122); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID {\n"); + grammarBuilder.append("print(\"alt 1\")\n"); + grammarBuilder.append("} | INT {\n"); + grammarBuilder.append("print(\"alt 2\")\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBPlus() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(105); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})+ {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(105); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAorBStar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(105); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|INT{\n"); + grammarBuilder.append("})* {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testBasic() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(98); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ID INT {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abc34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEOFInClosure() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(53); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : stat EOF;\n"); + grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(186); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(186); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x else x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(187); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIfIfElseNonGreedyBinding2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(186); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : statement+ ;\n"); + grammarBuilder.append("statement : 'x' | ifStatement;\n"); + grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); + String grammar = grammarBuilder.toString(); + + + String input ="if y if y x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "if y x\n" + + "if y if y x else x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(103); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLL1OptionalBlock_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(103); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|{}INT)? {\n"); + grammarBuilder.append("print($text)\n"); + grammarBuilder.append("};\n"); + grammarBuilder.append("ID : 'a'..'z'+;\n"); + grammarBuilder.append("INT : '0'..'9'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : a* EOF;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : label=subrule {print($label.text)} #One\n"); + grammarBuilder.append(" | label='y' {print($label.text)} #Two\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("subrule : 'x';\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="xy"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals( + "x\n" + + "y\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLabels() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); + grammarBuilder.append("b : id_=ID val+=INT*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelForClosureContext() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(456); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("ifStatement\n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("assert isinstance(v, (list, tuple))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : 'if' expression\n"); + grammarBuilder.append(" ( ( 'then'\n"); + grammarBuilder.append(" executableStatement*\n"); + grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); + grammarBuilder.append(" elseStatement?\n"); + grammarBuilder.append(" 'end' 'if'\n"); + grammarBuilder.append(" ) | executableStatement )\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("elseIfStatement\n"); + grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("expression : 'a' ;\n"); + grammarBuilder.append("executableStatement : 'a' ;\n"); + grammarBuilder.append("elseStatement : 'a' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testListLabelsOnSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(140); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : b b* ';' ;\n"); + grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc 34;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testMultipleEOFHandling() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(42); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptional_4() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(90); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("stat : ifstat | 'x';\n"); + grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="if if x else x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserProperty() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(153); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@members {\n"); + grammarBuilder.append("def Property(self):\n"); + grammarBuilder.append(" return True\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("a : {$parser.Property()}? ID {print(\"valid\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("valid\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedIfIfElse() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(175); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : stmt EOF ;\n"); + grammarBuilder.append("stmt : ifStmt | ID;\n"); + grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { self._input.LA(1)!=TParser.ELSE }?);\n"); + grammarBuilder.append("ELSE : 'else';\n"); + grammarBuilder.append("ID : [a-zA-Z]+;\n"); + grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="if x if x a else b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredictionIssue334() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(244); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_ @init{\n"); + grammarBuilder.append("self._errHandler = BailErrorStrategy()\n"); + grammarBuilder.append("} \n"); + grammarBuilder.append("@after {\n"); + grammarBuilder.append("print($ctx.toStringTree(recog=self))\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); + grammarBuilder.append("item : A B?;\n"); + grammarBuilder.append("SEMICOLON: ';';\n"); + grammarBuilder.append("A : 'a'|'A';\n"); + grammarBuilder.append("B : 'b'|'B';\n"); + grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); + + assertEquals("(file_ (item a) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input =""; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testReferenceToATN_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("ATN : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a 34 c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("a34c\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestPerformance.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestPerformance.java new file mode 100644 index 000000000..6a84dc25d --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestPerformance.java @@ -0,0 +1,220 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestPerformance extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testExpressionGrammar_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(164); + grammarBuilder.append("grammar Expr;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("program: expr EOF;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("expr\n"); + grammarBuilder.append(" : ID\n"); + grammarBuilder.append(" | 'not' expr\n"); + grammarBuilder.append(" | expr 'and' expr\n"); + grammarBuilder.append(" | expr 'or' expr\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); + grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); + grammarBuilder.append("ERROR: .;"); + String grammar = grammarBuilder.toString(); + + + String input = + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + + "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; + String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalLexer.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalLexer.java new file mode 100644 index 000000000..fb1dbadeb --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalLexer.java @@ -0,0 +1,218 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalLexer extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisableRule() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(131); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("E1 : 'enum' { False }? ;\n"); + grammarBuilder.append("E2 : 'enum' { True }? ; // winner not E1 or ID\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<3>,1:5]\n" + + "[@2,8:7='',<-1>,1:8]\n" + + "s0-' '->:s5=>4\n" + + "s0-'a'->:s6=>3\n" + + "s0-'e'->:s1=>3\n" + + ":s1=>3-'n'->:s2=>3\n" + + ":s2=>3-'u'->:s3=>3\n" + + ":s6=>3-'b'->:s6=>3\n" + + ":s6=>3-'c'->:s6=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testEnumNotID() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(96); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<1>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s3=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDnotEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(84); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { False }? ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s2=>3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIDvsEnum() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(85); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : 'enum' { False }? ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input ="enum abc enum"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "[@0,0:3='enum',<2>,1:0]\n" + + "[@1,5:7='abc',<2>,1:5]\n" + + "[@2,9:12='enum',<2>,1:9]\n" + + "[@3,13:12='',<-1>,1:13]\n" + + "s0-' '->:s5=>3\n" + + "s0-'a'->:s4=>2\n" + + "s0-'e'->:s1=>2\n" + + ":s1=>2-'n'->:s2=>2\n" + + ":s2=>2-'u'->:s3=>2\n" + + ":s4=>2-'b'->:s4=>2\n" + + ":s4=>2-'c'->:s4=>2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndent() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(135); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("INDENT : [ \\t]+ { self._tokenStartColumn==0 }?\n"); + grammarBuilder.append(" { print(\"INDENT\") } ;\n"); + grammarBuilder.append("NL : '\\n';\n"); + grammarBuilder.append("WS : [ \\t]+ ;"); + String grammar = grammarBuilder.toString(); + + String input = + "abc\n" + + " def \n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "INDENT\n" + + "[@0,0:2='abc',<1>,1:0]\n" + + "[@1,3:3='\\n',<3>,1:3]\n" + + "[@2,4:5=' ',<2>,2:0]\n" + + "[@3,6:8='def',<1>,2:2]\n" + + "[@4,9:10=' ',<4>,2:5]\n" + + "[@5,11:11='\\n',<3>,2:7]\n" + + "[@6,12:11='',<-1>,3:0]\n" + + "s0-'\n" + + "'->:s2=>3\n" + + "s0-'a'->:s1=>1\n" + + "s0-'d'->:s1=>1\n" + + ":s1=>1-'b'->:s1=>1\n" + + ":s1=>1-'c'->:s1=>1\n" + + ":s1=>1-'e'->:s1=>1\n" + + ":s1=>1-'f'->:s1=>1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerInputPositionSensitivePredicates() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(206); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("WORD1 : ID1+ { print(self.text) } ;\n"); + grammarBuilder.append("WORD2 : ID2+ { print(self.text) } ;\n"); + grammarBuilder.append("fragment ID1 : { self.column < 2 }? [a-zA-Z];\n"); + grammarBuilder.append("fragment ID2 : { self.column >= 2 }? [a-zA-Z];\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip;"); + String grammar = grammarBuilder.toString(); + + String input = + "a cde\n" + + "abcde\n"; + String found = execLexer("L.g4", grammar, "L", input, true); + assertEquals( + "a\n" + + "cde\n" + + "ab\n" + + "cde\n" + + "[@0,0:0='a',<1>,1:0]\n" + + "[@1,2:4='cde',<2>,1:2]\n" + + "[@2,6:7='ab',<1>,2:0]\n" + + "[@3,8:10='cde',<2>,2:2]\n" + + "[@4,12:11='',<-1>,3:0]\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicatedKeywords() throws Exception { + mkdir(tmpdir); + + StringBuilder grammarBuilder = new StringBuilder(142); + grammarBuilder.append("lexer grammar L;\n"); + grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? { print(\"enum!\") } ;\n"); + grammarBuilder.append("ID : [a-z]+ { print(\"ID \" + self.text) } ;\n"); + grammarBuilder.append("WS : [ \\n] -> skip ;"); + String grammar = grammarBuilder.toString(); + + String input ="enum enu a"; + String found = execLexer("L.g4", grammar, "L", input, false); + assertEquals( + "enum!\n" + + "ID enu\n" + + "ID a\n" + + "[@0,0:3='enum',<1>,1:0]\n" + + "[@1,5:7='enu',<2>,1:5]\n" + + "[@2,9:9='a',<2>,1:9]\n" + + "[@3,10:9='',<-1>,1:10]\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalParser.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalParser.java new file mode 100644 index 000000000..8e6282f5b --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSemPredEvalParser.java @@ -0,0 +1,789 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSemPredEvalParser extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAlts() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(276); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a; // do 2x: once in ATN, next in DFA\n"); + grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" | {False}? ID {print(\"alt 3\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + + assertEquals( + "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + + "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(321); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a ';' a;\n"); + grammarBuilder.append("a : INT {print(\"alt 1\")}\n"); + grammarBuilder.append(" | ID {print(\"alt 2\")} // must pick this one for ID since pred is false\n"); + grammarBuilder.append(" | ID {print(\"alt 3\")}\n"); + grammarBuilder.append(" | {False}? ID {print(\"alt 4\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="34; x; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); + + assertEquals( + "alt 1\n" + + "alt 2\n" + + "alt 2\n", found); + + assertEquals( + "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + + "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + + "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + + "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionHidesPreds() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(212); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : a+ ;\n"); + grammarBuilder.append("a : {self.i = 1} ID {self.i == 1}? {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {self.i = 2} ID {self.i == 2}? {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testActionsHidePredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(277); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("def pred(self, v):\n"); + grammarBuilder.append(" print('eval=' + str(v).lower())\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {} {self.pred(True)}? {print(\"parse\")} '!' ;\n"); + grammarBuilder.append("t : e {} {self.pred(False)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testAtomWithClosureInTranslatedLRRule() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(94); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("start : e[0] EOF;\n"); + grammarBuilder.append("e[int _p]\n"); + grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); + grammarBuilder.append(" ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a+b+a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDepedentPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(300); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("def pred(self, v):\n"); + grammarBuilder.append(" print('eval=' + str(v).lower())\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : a[99] ;\n"); + grammarBuilder.append("a[int i] : e {self.pred($i==99)}? {print(\"parse\")} '!' ;\n"); + grammarBuilder.append("b[int i] : e {self.pred($i==99)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(256); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); + grammarBuilder.append("b[int i] : a[i] ;\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testDisabledAlternative() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(121); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); + grammarBuilder.append("content: anything | {False}? .;\n"); + grammarBuilder.append("anything: ANY_CHAR;\n"); + grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); + String grammar = grammarBuilder.toString(); + + + String input ="hello"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(169); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : b ';' | b '.' ;\n"); + grammarBuilder.append("b : a ;\n"); + grammarBuilder.append("a\n"); + grammarBuilder.append(" : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a;"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNoTruePredsThrowsNoViableAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {False}? ID INT {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {False}? ID INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOrder() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(283); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); + grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); + grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); + grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 1\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(203); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); + + assertEquals( + "line 5:0 mismatched input '' expecting '\n" + + "'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredFromAltTestedInLoopBack_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(203); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("file_\n"); + grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); + grammarBuilder.append(" : para para EOF ;\n"); + grammarBuilder.append("para: paraContent NL NL ;\n"); + grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); + grammarBuilder.append("NL : '\\n' ;\n"); + grammarBuilder.append("s : 's' ;\n"); + grammarBuilder.append("X : 'x' ;"); + String grammar = grammarBuilder.toString(); + + + String input = + "s\n" + + "\n" + + "\n" + + "x\n" + + "\n"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); + + assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {enumKeyword = True}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); + grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("ID abc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredTestedEvenWhenUnAmbig_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(192); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {enumKeyword = True}\n"); + grammarBuilder.append("primary\n"); + grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); + grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : [a-z]+ ;\n"); + grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="enum"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(189); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredicateDependentOnArg2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(157); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : a[2] a[1];\n"); + grammarBuilder.append("a[int i]\n"); + grammarBuilder.append(" : {$i==1}? ID \n"); + grammarBuilder.append(" | {$i==2}? ID \n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPredsInGlobalFOLLOW() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(271); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {\n"); + grammarBuilder.append("def pred(self, v):\n"); + grammarBuilder.append(" print('eval=' + str(v).lower())\n"); + grammarBuilder.append(" return v\n"); + grammarBuilder.append("\n"); + grammarBuilder.append("}\n"); + grammarBuilder.append("s : e {self.pred(True)}? {print(\"parse\")} '!' ;\n"); + grammarBuilder.append("t : e {self.pred(False)}? ID ;\n"); + grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="a!"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "eval=true\n" + + "parse\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRewindBeforePredEval() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(201); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a;\n"); + grammarBuilder.append("a : {self._input.LT(1).text==\"x\"}? ID INT {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {self._input.LT(1).text==\"y\"}? ID INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="y 3 x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimple() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(235); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" | INT {print(\"alt 3\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x y 3"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 3\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ;\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSimpleValidate2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(153); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a a a;\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="3 4 x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n", found); + + assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeft() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(150); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append(" s : a+ ;\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "alt 2\n" + + "alt 2\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testToLeftWithVaryingPredicate() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(243); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("@parser::members {i = 0}\n"); + grammarBuilder.append("s : ({self.i += 1\n"); + grammarBuilder.append("print(\"i=\",end='')\n"); + grammarBuilder.append("print(self.i)} a)+ ;\n"); + grammarBuilder.append("a : {self.i % 2 == 0}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {self.i % 2 != 0}? ID {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x x y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals( + "i=1\n" + + "alt 2\n" + + "i=2\n" + + "alt 1\n" + + "i=3\n" + + "alt 2\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testUnpredicatedPathsInAlt() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(169); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a {print(\"alt 1\")}\n"); + grammarBuilder.append(" | b {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("a : {False}? ID INT\n"); + grammarBuilder.append(" | ID INT\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("b : ID ID\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x 4"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("alt 1\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testValidateInDFA() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(318); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("s : a ';' a;\n"); + grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); + grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); + grammarBuilder.append("// throws an exception if the validating predicate fails\n"); + grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); + grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); + grammarBuilder.append(" ;\n"); + grammarBuilder.append("ID : 'a'..'z'+ ;\n"); + grammarBuilder.append("INT : '0'..'9'+;\n"); + grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x ; y"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 no viable alternative at input 'x'\n" + + "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSets.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSets.java new file mode 100644 index 000000000..a2f79a49e --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestSets.java @@ -0,0 +1,500 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@SuppressWarnings("unused") +public class TestSets extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testCharSetLiteral() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(78); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : (A {print($A.text)})+ ;\n"); + grammarBuilder.append("A : [AaBb] ;\n"); + grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); + String grammar = grammarBuilder.toString(); + + + String input ="A a B b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals( + "A\n" + + "a\n" + + "B\n" + + "b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testComplementSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(51); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("parse : ~NEW_LINE;\n"); + grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); + String grammar = grammarBuilder.toString(); + + + String input ="a"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); + + assertEquals("", found); + + assertEquals( + "line 1:0 token recognition error at: 'a'\n" + + "line 1:1 missing {} at ''\n", this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testLexerStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(70); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : ('a'|'b')* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotChar() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(46); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : ~'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(52); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : ~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(54); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : h=~('b'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testNotCharSetWithRuleRef3() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(118); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print($A.text)} ;\n"); + grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); + grammarBuilder.append("fragment\n"); + grammarBuilder.append("B : ~('a'|'c') ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'? 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')? 'c' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="ac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("ac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testOptionalSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A? 'c' {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(50); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~('x'|'y') 'z' {print($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotToken() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(56); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ~'x' 'z' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("zz\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserNotTokenWithLabel() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(44); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=~'x' 'z' {print($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="zz"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("z\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testParserSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(45); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : t=('x'|'y') {print($t.text)} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="x"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("x\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusLexerSingleElement() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'+ 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testPlusSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testRuleAsSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(69); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a @after {print(self._input.getText())} : 'a' | 'b' |'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="b"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("b\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testSeqDoesNotBecomeSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(106); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : C {print(self._input.getText())} ;\n"); + grammarBuilder.append("fragment A : '1' | '2';\n"); + grammarBuilder.append("fragment B : '3' '4';\n"); + grammarBuilder.append("C : A | B;"); + String grammar = grammarBuilder.toString(); + + + String input ="34"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("34\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_1() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="bbbbc"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("bbbbc\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarLexerSingleElement_2() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(64); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); + grammarBuilder.append("A : 'b'* 'c' ;"); + String grammar = grammarBuilder.toString(); + + + String input ="c"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("c\n", found); + assertNull(this.stderrDuringParse); + + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + public void testStarSet() throws Exception { + mkdir(tmpdir); + + + StringBuilder grammarBuilder = new StringBuilder(62); + grammarBuilder.append("grammar T;\n"); + grammarBuilder.append("a : ('a'|'b')* 'c' {print(self._input.getText())} ;"); + String grammar = grammarBuilder.toString(); + + + String input ="abaac"; + String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); + + assertEquals("abaac\n", found); + assertNull(this.stderrDuringParse); + + } + + +} diff --git a/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestVisitors.java b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestVisitors.java new file mode 100644 index 000000000..7e6acc168 --- /dev/null +++ b/runtime-testsuite-legacy/test/org/antlr/v4/test/runtime/legacy/python3/TestVisitors.java @@ -0,0 +1,53 @@ +/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ +package org.antlr.v4.test.runtime.legacy.python3; + +import org.junit.Ignore; +import org.junit.Test; + +@SuppressWarnings("unused") +public class TestVisitors extends BasePython3Test { + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testBasic() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLR() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testLRWithLabels() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testRuleGetters_2() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_1() throws Exception { + } + + /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ + @Test + @Ignore("true") + public void testTokenGetters_2() throws Exception { + } + + +} diff --git a/runtime-testsuite/README.md b/runtime-testsuite/README.md deleted file mode 100644 index 7073e0062..000000000 --- a/runtime-testsuite/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Runtime Test Suite - -If you are tweaking the runtime test suite generator you can regenerate them using the following command: - -``` -mvn -Pgen generate-test-sources -``` - -This will generate the runtime test harness classes into the `test` directory where they can be checked in. diff --git a/runtime-testsuite/annotations/pom.xml b/runtime-testsuite/annotations/pom.xml new file mode 100644 index 000000000..8c651ab01 --- /dev/null +++ b/runtime-testsuite/annotations/pom.xml @@ -0,0 +1,61 @@ + + 4.0.0 + + org.antlr + antlr4-master + 4.6-SNAPSHOT + ../../pom.xml + + antlr4-runtime-test-annotations + ANTLR 4 Runtime Test Annotations + The ANTLR 4 Runtime + + + src + + + org.antlr + antlr4-maven-plugin + 4.5 + + + antlr + + src + + + antlr4 + + + + + + org.apache.felix + maven-bundle-plugin + 2.5.4 + + + bundle-manifest + process-classes + + + org.antlr.antlr4-runtime-osgi + ANTLR 4 Runtime + ANTLR + org.antlr + ${project.version} + + + + manifest + + + + + + maven-jar-plugin + 2.4 + + + + diff --git a/runtime-testsuite/annotations/src/org/antlr/v4/test/runtime/CommentHasStringValue.java b/runtime-testsuite/annotations/src/org/antlr/v4/test/runtime/CommentHasStringValue.java new file mode 100644 index 000000000..0fc46acfa --- /dev/null +++ b/runtime-testsuite/annotations/src/org/antlr/v4/test/runtime/CommentHasStringValue.java @@ -0,0 +1,14 @@ +package org.antlr.v4.test.runtime; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** This is just a tag that indicates the javadoc comment has a multi-line string */ +@Retention(RetentionPolicy.SOURCE) +@Target({ElementType.FIELD, ElementType.METHOD}) +@Inherited +public @interface CommentHasStringValue { +} diff --git a/runtime-testsuite/pom.xml b/runtime-testsuite/pom.xml index dfe4c3d34..6b0395268 100644 --- a/runtime-testsuite/pom.xml +++ b/runtime-testsuite/pom.xml @@ -1,147 +1,106 @@ - 4.0.0 - - org.antlr - antlr4-master - 4.6-SNAPSHOT - - antlr4-runtime-testsuite - ANTLR 4 Runtime Test Generator - A collection of tests for ANTLR 4 Runtime libraries. + 4.0.0 + + org.antlr + antlr4-master + 4.6-SNAPSHOT + + antlr4-runtime-testsuite + ANTLR 4 Runtime Tests (2nd generation) + A collection of tests for ANTLR 4 Runtime libraries. - - 3.0 - + + 3.0 + - 2009 + 2009 - - - org.antlr - ST4 - 4.0.8 - - - org.antlr - antlr4 - ${project.version} - - - org.antlr - antlr4-runtime - ${project.version} - - - junit - junit - 4.11 - test - - - org.seleniumhq.selenium - selenium-java - 2.46.0 - test - - - org.eclipse.jetty - jetty-server - 8.1.16.v20140903 - test - - + + + org.antlr + ST4 + 4.0.8 + + + org.antlr + antlr4 + ${project.version} + + + org.antlr + antlr4-runtime + ${project.version} + + + org.antlr + antlr4-runtime-test-annotations + ${project.version} + + + org.antlr + antlr4-runtime-test-annotation-processors + ${project.version} + + + junit + junit + 4.12 + test + + + org.seleniumhq.selenium + selenium-java + 2.46.0 + test + + + org.eclipse.jetty + jetty-server + 8.1.16.v20140903 + test + + - - src - test - - - resources - - - ../runtime - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.12.4 - - - **/csharp/Test*.java - **/java/Test*.java - **/go/Test*.java - **/javascript/node/Test*.java - **/python2/Test*.java - **/python3/Test*.java - **/cpp/Test*.java - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - test-jar - - - - - - - - - - gen - - - - org.codehaus.mojo - exec-maven-plugin - 1.4.0 - - - generate-test-sources - - java - - - org.antlr.v4.testgen.TestGenerator - - -root - ${basedir} - -outdir - ${basedir}/test - -templates - ${basedir}/resources/org/antlr/v4/test/runtime/templates - - - - - - - - - - tests - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/Test*.java - - - - - - - + + test + + + resources + + + ../runtime + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + **/csharp/Test*.java + **/java/Test*.java + **/go/Test*.java + **/javascript/node/Test*.java + **/python2/Test*.java + **/python3/Test*.java + **/cpp/Test*.java + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + test-jar + + + + + + diff --git a/runtime-testsuite/processors/pom.xml b/runtime-testsuite/processors/pom.xml new file mode 100644 index 000000000..6a215fda5 --- /dev/null +++ b/runtime-testsuite/processors/pom.xml @@ -0,0 +1,54 @@ + + 4.0.0 + + org.antlr + antlr4-master + 4.6-SNAPSHOT + ../../pom.xml + + antlr4-runtime-test-annotation-processors + ANTLR 4 Runtime Test Processors + The ANTLR 4 Runtime + + + + com.sun + tools + 1.4.2 + system + ${java.home}/../lib/tools.jar + + + org.antlr + antlr4-runtime-test-annotations + ${project.version} + + + + + src + + + resources + + + + + org.apache.maven.plugins + maven-compiler-plugin + + true + ${maven.compiler.source} + ${maven.compiler.target} + + -proc:none + + + + + maven-jar-plugin + 2.4 + + + + diff --git a/runtime-testsuite/processors/resources/META-INF/services/javax.annotation.processing.Processor b/runtime-testsuite/processors/resources/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 000000000..08311daf7 --- /dev/null +++ b/runtime-testsuite/processors/resources/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +org.antlr.v4.test.runtime.CommentHasStringValueProcessor diff --git a/runtime-testsuite/processors/src/org/antlr/v4/test/runtime/CommentHasStringValueProcessor.java b/runtime-testsuite/processors/src/org/antlr/v4/test/runtime/CommentHasStringValueProcessor.java new file mode 100644 index 000000000..d3c43151f --- /dev/null +++ b/runtime-testsuite/processors/src/org/antlr/v4/test/runtime/CommentHasStringValueProcessor.java @@ -0,0 +1,74 @@ +package org.antlr.v4.test.runtime; + +import com.sun.tools.javac.model.JavacElements; +import com.sun.tools.javac.processing.JavacProcessingEnvironment; +import com.sun.tools.javac.tree.JCTree; +import com.sun.tools.javac.tree.TreeMaker; +import com.sun.tools.javac.util.List; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import java.util.Set; + +/** + I think I figured out how to use annotation processors in maven. It's + more or less automatic and you don't even need to tell maven, with one minor + exception. The idea is to create a project for the annotation and another + for the annotation processor. Then, a project that uses the annotation + can simply set up the dependency on the other projects. You have to turn + off processing, -proc:none on the processor project itself but other than + that, java 6+ more or less tries to apply any processors it finds during + compilation. maven just works. + + Also you need a META-INF/services/javax.annotation.processing.Processor file + with "org.antlr.v4.test.runtime.CommentHasStringValueProcessor" in it. + */ +@SupportedAnnotationTypes({"org.antlr.v4.test.runtime.CommentHasStringValue"}) +@SupportedSourceVersion(SourceVersion.RELEASE_7) +public class CommentHasStringValueProcessor extends AbstractProcessor { + protected JavacElements utilities; + protected TreeMaker treeMaker; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); +// Messager messager = processingEnv.getMessager(); +// messager.printMessage(Diagnostic.Kind.NOTE, "WOW INIT--------------------"); + JavacProcessingEnvironment javacProcessingEnv = (JavacProcessingEnvironment) processingEnv; + utilities = javacProcessingEnv.getElementUtils(); + treeMaker = TreeMaker.instance(javacProcessingEnv.getContext()); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { +// Messager messager = processingEnv.getMessager(); +// messager.printMessage(Diagnostic.Kind.NOTE, "PROCESS--------------------"); + Set annotatedElements = roundEnv.getElementsAnnotatedWith(CommentHasStringValue.class); + for (Element annotatedElement : annotatedElements) { + String docComment = utilities.getDocComment(annotatedElement); + JCTree.JCLiteral literal = treeMaker.Literal(docComment!=null ? docComment : ""); + JCTree elementTree = utilities.getTree(annotatedElement); + if ( elementTree instanceof JCTree.JCVariableDecl ) { + ((JCTree.JCVariableDecl)elementTree).init = literal; + } + else if ( elementTree instanceof JCTree.JCMethodDecl ) { + JCTree.JCStatement[] statements = new JCTree.JCStatement[1]; + statements[0] = treeMaker.Return(literal); + JCTree.JCBlock body = treeMaker.Block(0, List.from(statements)); + ((JCTree.JCMethodDecl)elementTree).body = body; + } + } + return true; + } + + @Override + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latestSupported(); + } +} diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/LargeLexer.g4 b/runtime-testsuite/resources/org/antlr/v4/test/runtime/LargeLexer.g4 new file mode 100644 index 000000000..07572dae8 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/LargeLexer.g4 @@ -0,0 +1,4003 @@ +/** Has to be in separate file; LexerExec group loads this as resource */ +lexer grammar L; +WS : [ \t\r\n]+ -> skip; +KW0 : 'KW' '0'; +KW1 : 'KW' '1'; +KW2 : 'KW' '2'; +KW3 : 'KW' '3'; +KW4 : 'KW' '4'; +KW5 : 'KW' '5'; +KW6 : 'KW' '6'; +KW7 : 'KW' '7'; +KW8 : 'KW' '8'; +KW9 : 'KW' '9'; +KW10 : 'KW' '10'; +KW11 : 'KW' '11'; +KW12 : 'KW' '12'; +KW13 : 'KW' '13'; +KW14 : 'KW' '14'; +KW15 : 'KW' '15'; +KW16 : 'KW' '16'; +KW17 : 'KW' '17'; +KW18 : 'KW' '18'; +KW19 : 'KW' '19'; +KW20 : 'KW' '20'; +KW21 : 'KW' '21'; +KW22 : 'KW' '22'; +KW23 : 'KW' '23'; +KW24 : 'KW' '24'; +KW25 : 'KW' '25'; +KW26 : 'KW' '26'; +KW27 : 'KW' '27'; +KW28 : 'KW' '28'; +KW29 : 'KW' '29'; +KW30 : 'KW' '30'; +KW31 : 'KW' '31'; +KW32 : 'KW' '32'; +KW33 : 'KW' '33'; +KW34 : 'KW' '34'; +KW35 : 'KW' '35'; +KW36 : 'KW' '36'; +KW37 : 'KW' '37'; +KW38 : 'KW' '38'; +KW39 : 'KW' '39'; +KW40 : 'KW' '40'; +KW41 : 'KW' '41'; +KW42 : 'KW' '42'; +KW43 : 'KW' '43'; +KW44 : 'KW' '44'; +KW45 : 'KW' '45'; +KW46 : 'KW' '46'; +KW47 : 'KW' '47'; +KW48 : 'KW' '48'; +KW49 : 'KW' '49'; +KW50 : 'KW' '50'; +KW51 : 'KW' '51'; +KW52 : 'KW' '52'; +KW53 : 'KW' '53'; +KW54 : 'KW' '54'; +KW55 : 'KW' '55'; +KW56 : 'KW' '56'; +KW57 : 'KW' '57'; +KW58 : 'KW' '58'; +KW59 : 'KW' '59'; +KW60 : 'KW' '60'; +KW61 : 'KW' '61'; +KW62 : 'KW' '62'; +KW63 : 'KW' '63'; +KW64 : 'KW' '64'; +KW65 : 'KW' '65'; +KW66 : 'KW' '66'; +KW67 : 'KW' '67'; +KW68 : 'KW' '68'; +KW69 : 'KW' '69'; +KW70 : 'KW' '70'; +KW71 : 'KW' '71'; +KW72 : 'KW' '72'; +KW73 : 'KW' '73'; +KW74 : 'KW' '74'; +KW75 : 'KW' '75'; +KW76 : 'KW' '76'; +KW77 : 'KW' '77'; +KW78 : 'KW' '78'; +KW79 : 'KW' '79'; +KW80 : 'KW' '80'; +KW81 : 'KW' '81'; +KW82 : 'KW' '82'; +KW83 : 'KW' '83'; +KW84 : 'KW' '84'; +KW85 : 'KW' '85'; +KW86 : 'KW' '86'; +KW87 : 'KW' '87'; +KW88 : 'KW' '88'; +KW89 : 'KW' '89'; +KW90 : 'KW' '90'; +KW91 : 'KW' '91'; +KW92 : 'KW' '92'; +KW93 : 'KW' '93'; +KW94 : 'KW' '94'; +KW95 : 'KW' '95'; +KW96 : 'KW' '96'; +KW97 : 'KW' '97'; +KW98 : 'KW' '98'; +KW99 : 'KW' '99'; +KW100 : 'KW' '100'; +KW101 : 'KW' '101'; +KW102 : 'KW' '102'; +KW103 : 'KW' '103'; +KW104 : 'KW' '104'; +KW105 : 'KW' '105'; +KW106 : 'KW' '106'; +KW107 : 'KW' '107'; +KW108 : 'KW' '108'; +KW109 : 'KW' '109'; +KW110 : 'KW' '110'; +KW111 : 'KW' '111'; +KW112 : 'KW' '112'; +KW113 : 'KW' '113'; +KW114 : 'KW' '114'; +KW115 : 'KW' '115'; +KW116 : 'KW' '116'; +KW117 : 'KW' '117'; +KW118 : 'KW' '118'; +KW119 : 'KW' '119'; +KW120 : 'KW' '120'; +KW121 : 'KW' '121'; +KW122 : 'KW' '122'; +KW123 : 'KW' '123'; +KW124 : 'KW' '124'; +KW125 : 'KW' '125'; +KW126 : 'KW' '126'; +KW127 : 'KW' '127'; +KW128 : 'KW' '128'; +KW129 : 'KW' '129'; +KW130 : 'KW' '130'; +KW131 : 'KW' '131'; +KW132 : 'KW' '132'; +KW133 : 'KW' '133'; +KW134 : 'KW' '134'; +KW135 : 'KW' '135'; +KW136 : 'KW' '136'; +KW137 : 'KW' '137'; +KW138 : 'KW' '138'; +KW139 : 'KW' '139'; +KW140 : 'KW' '140'; +KW141 : 'KW' '141'; +KW142 : 'KW' '142'; +KW143 : 'KW' '143'; +KW144 : 'KW' '144'; +KW145 : 'KW' '145'; +KW146 : 'KW' '146'; +KW147 : 'KW' '147'; +KW148 : 'KW' '148'; +KW149 : 'KW' '149'; +KW150 : 'KW' '150'; +KW151 : 'KW' '151'; +KW152 : 'KW' '152'; +KW153 : 'KW' '153'; +KW154 : 'KW' '154'; +KW155 : 'KW' '155'; +KW156 : 'KW' '156'; +KW157 : 'KW' '157'; +KW158 : 'KW' '158'; +KW159 : 'KW' '159'; +KW160 : 'KW' '160'; +KW161 : 'KW' '161'; +KW162 : 'KW' '162'; +KW163 : 'KW' '163'; +KW164 : 'KW' '164'; +KW165 : 'KW' '165'; +KW166 : 'KW' '166'; +KW167 : 'KW' '167'; +KW168 : 'KW' '168'; +KW169 : 'KW' '169'; +KW170 : 'KW' '170'; +KW171 : 'KW' '171'; +KW172 : 'KW' '172'; +KW173 : 'KW' '173'; +KW174 : 'KW' '174'; +KW175 : 'KW' '175'; +KW176 : 'KW' '176'; +KW177 : 'KW' '177'; +KW178 : 'KW' '178'; +KW179 : 'KW' '179'; +KW180 : 'KW' '180'; +KW181 : 'KW' '181'; +KW182 : 'KW' '182'; +KW183 : 'KW' '183'; +KW184 : 'KW' '184'; +KW185 : 'KW' '185'; +KW186 : 'KW' '186'; +KW187 : 'KW' '187'; +KW188 : 'KW' '188'; +KW189 : 'KW' '189'; +KW190 : 'KW' '190'; +KW191 : 'KW' '191'; +KW192 : 'KW' '192'; +KW193 : 'KW' '193'; +KW194 : 'KW' '194'; +KW195 : 'KW' '195'; +KW196 : 'KW' '196'; +KW197 : 'KW' '197'; +KW198 : 'KW' '198'; +KW199 : 'KW' '199'; +KW200 : 'KW' '200'; +KW201 : 'KW' '201'; +KW202 : 'KW' '202'; +KW203 : 'KW' '203'; +KW204 : 'KW' '204'; +KW205 : 'KW' '205'; +KW206 : 'KW' '206'; +KW207 : 'KW' '207'; +KW208 : 'KW' '208'; +KW209 : 'KW' '209'; +KW210 : 'KW' '210'; +KW211 : 'KW' '211'; +KW212 : 'KW' '212'; +KW213 : 'KW' '213'; +KW214 : 'KW' '214'; +KW215 : 'KW' '215'; +KW216 : 'KW' '216'; +KW217 : 'KW' '217'; +KW218 : 'KW' '218'; +KW219 : 'KW' '219'; +KW220 : 'KW' '220'; +KW221 : 'KW' '221'; +KW222 : 'KW' '222'; +KW223 : 'KW' '223'; +KW224 : 'KW' '224'; +KW225 : 'KW' '225'; +KW226 : 'KW' '226'; +KW227 : 'KW' '227'; +KW228 : 'KW' '228'; +KW229 : 'KW' '229'; +KW230 : 'KW' '230'; +KW231 : 'KW' '231'; +KW232 : 'KW' '232'; +KW233 : 'KW' '233'; +KW234 : 'KW' '234'; +KW235 : 'KW' '235'; +KW236 : 'KW' '236'; +KW237 : 'KW' '237'; +KW238 : 'KW' '238'; +KW239 : 'KW' '239'; +KW240 : 'KW' '240'; +KW241 : 'KW' '241'; +KW242 : 'KW' '242'; +KW243 : 'KW' '243'; +KW244 : 'KW' '244'; +KW245 : 'KW' '245'; +KW246 : 'KW' '246'; +KW247 : 'KW' '247'; +KW248 : 'KW' '248'; +KW249 : 'KW' '249'; +KW250 : 'KW' '250'; +KW251 : 'KW' '251'; +KW252 : 'KW' '252'; +KW253 : 'KW' '253'; +KW254 : 'KW' '254'; +KW255 : 'KW' '255'; +KW256 : 'KW' '256'; +KW257 : 'KW' '257'; +KW258 : 'KW' '258'; +KW259 : 'KW' '259'; +KW260 : 'KW' '260'; +KW261 : 'KW' '261'; +KW262 : 'KW' '262'; +KW263 : 'KW' '263'; +KW264 : 'KW' '264'; +KW265 : 'KW' '265'; +KW266 : 'KW' '266'; +KW267 : 'KW' '267'; +KW268 : 'KW' '268'; +KW269 : 'KW' '269'; +KW270 : 'KW' '270'; +KW271 : 'KW' '271'; +KW272 : 'KW' '272'; +KW273 : 'KW' '273'; +KW274 : 'KW' '274'; +KW275 : 'KW' '275'; +KW276 : 'KW' '276'; +KW277 : 'KW' '277'; +KW278 : 'KW' '278'; +KW279 : 'KW' '279'; +KW280 : 'KW' '280'; +KW281 : 'KW' '281'; +KW282 : 'KW' '282'; +KW283 : 'KW' '283'; +KW284 : 'KW' '284'; +KW285 : 'KW' '285'; +KW286 : 'KW' '286'; +KW287 : 'KW' '287'; +KW288 : 'KW' '288'; +KW289 : 'KW' '289'; +KW290 : 'KW' '290'; +KW291 : 'KW' '291'; +KW292 : 'KW' '292'; +KW293 : 'KW' '293'; +KW294 : 'KW' '294'; +KW295 : 'KW' '295'; +KW296 : 'KW' '296'; +KW297 : 'KW' '297'; +KW298 : 'KW' '298'; +KW299 : 'KW' '299'; +KW300 : 'KW' '300'; +KW301 : 'KW' '301'; +KW302 : 'KW' '302'; +KW303 : 'KW' '303'; +KW304 : 'KW' '304'; +KW305 : 'KW' '305'; +KW306 : 'KW' '306'; +KW307 : 'KW' '307'; +KW308 : 'KW' '308'; +KW309 : 'KW' '309'; +KW310 : 'KW' '310'; +KW311 : 'KW' '311'; +KW312 : 'KW' '312'; +KW313 : 'KW' '313'; +KW314 : 'KW' '314'; +KW315 : 'KW' '315'; +KW316 : 'KW' '316'; +KW317 : 'KW' '317'; +KW318 : 'KW' '318'; +KW319 : 'KW' '319'; +KW320 : 'KW' '320'; +KW321 : 'KW' '321'; +KW322 : 'KW' '322'; +KW323 : 'KW' '323'; +KW324 : 'KW' '324'; +KW325 : 'KW' '325'; +KW326 : 'KW' '326'; +KW327 : 'KW' '327'; +KW328 : 'KW' '328'; +KW329 : 'KW' '329'; +KW330 : 'KW' '330'; +KW331 : 'KW' '331'; +KW332 : 'KW' '332'; +KW333 : 'KW' '333'; +KW334 : 'KW' '334'; +KW335 : 'KW' '335'; +KW336 : 'KW' '336'; +KW337 : 'KW' '337'; +KW338 : 'KW' '338'; +KW339 : 'KW' '339'; +KW340 : 'KW' '340'; +KW341 : 'KW' '341'; +KW342 : 'KW' '342'; +KW343 : 'KW' '343'; +KW344 : 'KW' '344'; +KW345 : 'KW' '345'; +KW346 : 'KW' '346'; +KW347 : 'KW' '347'; +KW348 : 'KW' '348'; +KW349 : 'KW' '349'; +KW350 : 'KW' '350'; +KW351 : 'KW' '351'; +KW352 : 'KW' '352'; +KW353 : 'KW' '353'; +KW354 : 'KW' '354'; +KW355 : 'KW' '355'; +KW356 : 'KW' '356'; +KW357 : 'KW' '357'; +KW358 : 'KW' '358'; +KW359 : 'KW' '359'; +KW360 : 'KW' '360'; +KW361 : 'KW' '361'; +KW362 : 'KW' '362'; +KW363 : 'KW' '363'; +KW364 : 'KW' '364'; +KW365 : 'KW' '365'; +KW366 : 'KW' '366'; +KW367 : 'KW' '367'; +KW368 : 'KW' '368'; +KW369 : 'KW' '369'; +KW370 : 'KW' '370'; +KW371 : 'KW' '371'; +KW372 : 'KW' '372'; +KW373 : 'KW' '373'; +KW374 : 'KW' '374'; +KW375 : 'KW' '375'; +KW376 : 'KW' '376'; +KW377 : 'KW' '377'; +KW378 : 'KW' '378'; +KW379 : 'KW' '379'; +KW380 : 'KW' '380'; +KW381 : 'KW' '381'; +KW382 : 'KW' '382'; +KW383 : 'KW' '383'; +KW384 : 'KW' '384'; +KW385 : 'KW' '385'; +KW386 : 'KW' '386'; +KW387 : 'KW' '387'; +KW388 : 'KW' '388'; +KW389 : 'KW' '389'; +KW390 : 'KW' '390'; +KW391 : 'KW' '391'; +KW392 : 'KW' '392'; +KW393 : 'KW' '393'; +KW394 : 'KW' '394'; +KW395 : 'KW' '395'; +KW396 : 'KW' '396'; +KW397 : 'KW' '397'; +KW398 : 'KW' '398'; +KW399 : 'KW' '399'; +KW400 : 'KW' '400'; +KW401 : 'KW' '401'; +KW402 : 'KW' '402'; +KW403 : 'KW' '403'; +KW404 : 'KW' '404'; +KW405 : 'KW' '405'; +KW406 : 'KW' '406'; +KW407 : 'KW' '407'; +KW408 : 'KW' '408'; +KW409 : 'KW' '409'; +KW410 : 'KW' '410'; +KW411 : 'KW' '411'; +KW412 : 'KW' '412'; +KW413 : 'KW' '413'; +KW414 : 'KW' '414'; +KW415 : 'KW' '415'; +KW416 : 'KW' '416'; +KW417 : 'KW' '417'; +KW418 : 'KW' '418'; +KW419 : 'KW' '419'; +KW420 : 'KW' '420'; +KW421 : 'KW' '421'; +KW422 : 'KW' '422'; +KW423 : 'KW' '423'; +KW424 : 'KW' '424'; +KW425 : 'KW' '425'; +KW426 : 'KW' '426'; +KW427 : 'KW' '427'; +KW428 : 'KW' '428'; +KW429 : 'KW' '429'; +KW430 : 'KW' '430'; +KW431 : 'KW' '431'; +KW432 : 'KW' '432'; +KW433 : 'KW' '433'; +KW434 : 'KW' '434'; +KW435 : 'KW' '435'; +KW436 : 'KW' '436'; +KW437 : 'KW' '437'; +KW438 : 'KW' '438'; +KW439 : 'KW' '439'; +KW440 : 'KW' '440'; +KW441 : 'KW' '441'; +KW442 : 'KW' '442'; +KW443 : 'KW' '443'; +KW444 : 'KW' '444'; +KW445 : 'KW' '445'; +KW446 : 'KW' '446'; +KW447 : 'KW' '447'; +KW448 : 'KW' '448'; +KW449 : 'KW' '449'; +KW450 : 'KW' '450'; +KW451 : 'KW' '451'; +KW452 : 'KW' '452'; +KW453 : 'KW' '453'; +KW454 : 'KW' '454'; +KW455 : 'KW' '455'; +KW456 : 'KW' '456'; +KW457 : 'KW' '457'; +KW458 : 'KW' '458'; +KW459 : 'KW' '459'; +KW460 : 'KW' '460'; +KW461 : 'KW' '461'; +KW462 : 'KW' '462'; +KW463 : 'KW' '463'; +KW464 : 'KW' '464'; +KW465 : 'KW' '465'; +KW466 : 'KW' '466'; +KW467 : 'KW' '467'; +KW468 : 'KW' '468'; +KW469 : 'KW' '469'; +KW470 : 'KW' '470'; +KW471 : 'KW' '471'; +KW472 : 'KW' '472'; +KW473 : 'KW' '473'; +KW474 : 'KW' '474'; +KW475 : 'KW' '475'; +KW476 : 'KW' '476'; +KW477 : 'KW' '477'; +KW478 : 'KW' '478'; +KW479 : 'KW' '479'; +KW480 : 'KW' '480'; +KW481 : 'KW' '481'; +KW482 : 'KW' '482'; +KW483 : 'KW' '483'; +KW484 : 'KW' '484'; +KW485 : 'KW' '485'; +KW486 : 'KW' '486'; +KW487 : 'KW' '487'; +KW488 : 'KW' '488'; +KW489 : 'KW' '489'; +KW490 : 'KW' '490'; +KW491 : 'KW' '491'; +KW492 : 'KW' '492'; +KW493 : 'KW' '493'; +KW494 : 'KW' '494'; +KW495 : 'KW' '495'; +KW496 : 'KW' '496'; +KW497 : 'KW' '497'; +KW498 : 'KW' '498'; +KW499 : 'KW' '499'; +KW500 : 'KW' '500'; +KW501 : 'KW' '501'; +KW502 : 'KW' '502'; +KW503 : 'KW' '503'; +KW504 : 'KW' '504'; +KW505 : 'KW' '505'; +KW506 : 'KW' '506'; +KW507 : 'KW' '507'; +KW508 : 'KW' '508'; +KW509 : 'KW' '509'; +KW510 : 'KW' '510'; +KW511 : 'KW' '511'; +KW512 : 'KW' '512'; +KW513 : 'KW' '513'; +KW514 : 'KW' '514'; +KW515 : 'KW' '515'; +KW516 : 'KW' '516'; +KW517 : 'KW' '517'; +KW518 : 'KW' '518'; +KW519 : 'KW' '519'; +KW520 : 'KW' '520'; +KW521 : 'KW' '521'; +KW522 : 'KW' '522'; +KW523 : 'KW' '523'; +KW524 : 'KW' '524'; +KW525 : 'KW' '525'; +KW526 : 'KW' '526'; +KW527 : 'KW' '527'; +KW528 : 'KW' '528'; +KW529 : 'KW' '529'; +KW530 : 'KW' '530'; +KW531 : 'KW' '531'; +KW532 : 'KW' '532'; +KW533 : 'KW' '533'; +KW534 : 'KW' '534'; +KW535 : 'KW' '535'; +KW536 : 'KW' '536'; +KW537 : 'KW' '537'; +KW538 : 'KW' '538'; +KW539 : 'KW' '539'; +KW540 : 'KW' '540'; +KW541 : 'KW' '541'; +KW542 : 'KW' '542'; +KW543 : 'KW' '543'; +KW544 : 'KW' '544'; +KW545 : 'KW' '545'; +KW546 : 'KW' '546'; +KW547 : 'KW' '547'; +KW548 : 'KW' '548'; +KW549 : 'KW' '549'; +KW550 : 'KW' '550'; +KW551 : 'KW' '551'; +KW552 : 'KW' '552'; +KW553 : 'KW' '553'; +KW554 : 'KW' '554'; +KW555 : 'KW' '555'; +KW556 : 'KW' '556'; +KW557 : 'KW' '557'; +KW558 : 'KW' '558'; +KW559 : 'KW' '559'; +KW560 : 'KW' '560'; +KW561 : 'KW' '561'; +KW562 : 'KW' '562'; +KW563 : 'KW' '563'; +KW564 : 'KW' '564'; +KW565 : 'KW' '565'; +KW566 : 'KW' '566'; +KW567 : 'KW' '567'; +KW568 : 'KW' '568'; +KW569 : 'KW' '569'; +KW570 : 'KW' '570'; +KW571 : 'KW' '571'; +KW572 : 'KW' '572'; +KW573 : 'KW' '573'; +KW574 : 'KW' '574'; +KW575 : 'KW' '575'; +KW576 : 'KW' '576'; +KW577 : 'KW' '577'; +KW578 : 'KW' '578'; +KW579 : 'KW' '579'; +KW580 : 'KW' '580'; +KW581 : 'KW' '581'; +KW582 : 'KW' '582'; +KW583 : 'KW' '583'; +KW584 : 'KW' '584'; +KW585 : 'KW' '585'; +KW586 : 'KW' '586'; +KW587 : 'KW' '587'; +KW588 : 'KW' '588'; +KW589 : 'KW' '589'; +KW590 : 'KW' '590'; +KW591 : 'KW' '591'; +KW592 : 'KW' '592'; +KW593 : 'KW' '593'; +KW594 : 'KW' '594'; +KW595 : 'KW' '595'; +KW596 : 'KW' '596'; +KW597 : 'KW' '597'; +KW598 : 'KW' '598'; +KW599 : 'KW' '599'; +KW600 : 'KW' '600'; +KW601 : 'KW' '601'; +KW602 : 'KW' '602'; +KW603 : 'KW' '603'; +KW604 : 'KW' '604'; +KW605 : 'KW' '605'; +KW606 : 'KW' '606'; +KW607 : 'KW' '607'; +KW608 : 'KW' '608'; +KW609 : 'KW' '609'; +KW610 : 'KW' '610'; +KW611 : 'KW' '611'; +KW612 : 'KW' '612'; +KW613 : 'KW' '613'; +KW614 : 'KW' '614'; +KW615 : 'KW' '615'; +KW616 : 'KW' '616'; +KW617 : 'KW' '617'; +KW618 : 'KW' '618'; +KW619 : 'KW' '619'; +KW620 : 'KW' '620'; +KW621 : 'KW' '621'; +KW622 : 'KW' '622'; +KW623 : 'KW' '623'; +KW624 : 'KW' '624'; +KW625 : 'KW' '625'; +KW626 : 'KW' '626'; +KW627 : 'KW' '627'; +KW628 : 'KW' '628'; +KW629 : 'KW' '629'; +KW630 : 'KW' '630'; +KW631 : 'KW' '631'; +KW632 : 'KW' '632'; +KW633 : 'KW' '633'; +KW634 : 'KW' '634'; +KW635 : 'KW' '635'; +KW636 : 'KW' '636'; +KW637 : 'KW' '637'; +KW638 : 'KW' '638'; +KW639 : 'KW' '639'; +KW640 : 'KW' '640'; +KW641 : 'KW' '641'; +KW642 : 'KW' '642'; +KW643 : 'KW' '643'; +KW644 : 'KW' '644'; +KW645 : 'KW' '645'; +KW646 : 'KW' '646'; +KW647 : 'KW' '647'; +KW648 : 'KW' '648'; +KW649 : 'KW' '649'; +KW650 : 'KW' '650'; +KW651 : 'KW' '651'; +KW652 : 'KW' '652'; +KW653 : 'KW' '653'; +KW654 : 'KW' '654'; +KW655 : 'KW' '655'; +KW656 : 'KW' '656'; +KW657 : 'KW' '657'; +KW658 : 'KW' '658'; +KW659 : 'KW' '659'; +KW660 : 'KW' '660'; +KW661 : 'KW' '661'; +KW662 : 'KW' '662'; +KW663 : 'KW' '663'; +KW664 : 'KW' '664'; +KW665 : 'KW' '665'; +KW666 : 'KW' '666'; +KW667 : 'KW' '667'; +KW668 : 'KW' '668'; +KW669 : 'KW' '669'; +KW670 : 'KW' '670'; +KW671 : 'KW' '671'; +KW672 : 'KW' '672'; +KW673 : 'KW' '673'; +KW674 : 'KW' '674'; +KW675 : 'KW' '675'; +KW676 : 'KW' '676'; +KW677 : 'KW' '677'; +KW678 : 'KW' '678'; +KW679 : 'KW' '679'; +KW680 : 'KW' '680'; +KW681 : 'KW' '681'; +KW682 : 'KW' '682'; +KW683 : 'KW' '683'; +KW684 : 'KW' '684'; +KW685 : 'KW' '685'; +KW686 : 'KW' '686'; +KW687 : 'KW' '687'; +KW688 : 'KW' '688'; +KW689 : 'KW' '689'; +KW690 : 'KW' '690'; +KW691 : 'KW' '691'; +KW692 : 'KW' '692'; +KW693 : 'KW' '693'; +KW694 : 'KW' '694'; +KW695 : 'KW' '695'; +KW696 : 'KW' '696'; +KW697 : 'KW' '697'; +KW698 : 'KW' '698'; +KW699 : 'KW' '699'; +KW700 : 'KW' '700'; +KW701 : 'KW' '701'; +KW702 : 'KW' '702'; +KW703 : 'KW' '703'; +KW704 : 'KW' '704'; +KW705 : 'KW' '705'; +KW706 : 'KW' '706'; +KW707 : 'KW' '707'; +KW708 : 'KW' '708'; +KW709 : 'KW' '709'; +KW710 : 'KW' '710'; +KW711 : 'KW' '711'; +KW712 : 'KW' '712'; +KW713 : 'KW' '713'; +KW714 : 'KW' '714'; +KW715 : 'KW' '715'; +KW716 : 'KW' '716'; +KW717 : 'KW' '717'; +KW718 : 'KW' '718'; +KW719 : 'KW' '719'; +KW720 : 'KW' '720'; +KW721 : 'KW' '721'; +KW722 : 'KW' '722'; +KW723 : 'KW' '723'; +KW724 : 'KW' '724'; +KW725 : 'KW' '725'; +KW726 : 'KW' '726'; +KW727 : 'KW' '727'; +KW728 : 'KW' '728'; +KW729 : 'KW' '729'; +KW730 : 'KW' '730'; +KW731 : 'KW' '731'; +KW732 : 'KW' '732'; +KW733 : 'KW' '733'; +KW734 : 'KW' '734'; +KW735 : 'KW' '735'; +KW736 : 'KW' '736'; +KW737 : 'KW' '737'; +KW738 : 'KW' '738'; +KW739 : 'KW' '739'; +KW740 : 'KW' '740'; +KW741 : 'KW' '741'; +KW742 : 'KW' '742'; +KW743 : 'KW' '743'; +KW744 : 'KW' '744'; +KW745 : 'KW' '745'; +KW746 : 'KW' '746'; +KW747 : 'KW' '747'; +KW748 : 'KW' '748'; +KW749 : 'KW' '749'; +KW750 : 'KW' '750'; +KW751 : 'KW' '751'; +KW752 : 'KW' '752'; +KW753 : 'KW' '753'; +KW754 : 'KW' '754'; +KW755 : 'KW' '755'; +KW756 : 'KW' '756'; +KW757 : 'KW' '757'; +KW758 : 'KW' '758'; +KW759 : 'KW' '759'; +KW760 : 'KW' '760'; +KW761 : 'KW' '761'; +KW762 : 'KW' '762'; +KW763 : 'KW' '763'; +KW764 : 'KW' '764'; +KW765 : 'KW' '765'; +KW766 : 'KW' '766'; +KW767 : 'KW' '767'; +KW768 : 'KW' '768'; +KW769 : 'KW' '769'; +KW770 : 'KW' '770'; +KW771 : 'KW' '771'; +KW772 : 'KW' '772'; +KW773 : 'KW' '773'; +KW774 : 'KW' '774'; +KW775 : 'KW' '775'; +KW776 : 'KW' '776'; +KW777 : 'KW' '777'; +KW778 : 'KW' '778'; +KW779 : 'KW' '779'; +KW780 : 'KW' '780'; +KW781 : 'KW' '781'; +KW782 : 'KW' '782'; +KW783 : 'KW' '783'; +KW784 : 'KW' '784'; +KW785 : 'KW' '785'; +KW786 : 'KW' '786'; +KW787 : 'KW' '787'; +KW788 : 'KW' '788'; +KW789 : 'KW' '789'; +KW790 : 'KW' '790'; +KW791 : 'KW' '791'; +KW792 : 'KW' '792'; +KW793 : 'KW' '793'; +KW794 : 'KW' '794'; +KW795 : 'KW' '795'; +KW796 : 'KW' '796'; +KW797 : 'KW' '797'; +KW798 : 'KW' '798'; +KW799 : 'KW' '799'; +KW800 : 'KW' '800'; +KW801 : 'KW' '801'; +KW802 : 'KW' '802'; +KW803 : 'KW' '803'; +KW804 : 'KW' '804'; +KW805 : 'KW' '805'; +KW806 : 'KW' '806'; +KW807 : 'KW' '807'; +KW808 : 'KW' '808'; +KW809 : 'KW' '809'; +KW810 : 'KW' '810'; +KW811 : 'KW' '811'; +KW812 : 'KW' '812'; +KW813 : 'KW' '813'; +KW814 : 'KW' '814'; +KW815 : 'KW' '815'; +KW816 : 'KW' '816'; +KW817 : 'KW' '817'; +KW818 : 'KW' '818'; +KW819 : 'KW' '819'; +KW820 : 'KW' '820'; +KW821 : 'KW' '821'; +KW822 : 'KW' '822'; +KW823 : 'KW' '823'; +KW824 : 'KW' '824'; +KW825 : 'KW' '825'; +KW826 : 'KW' '826'; +KW827 : 'KW' '827'; +KW828 : 'KW' '828'; +KW829 : 'KW' '829'; +KW830 : 'KW' '830'; +KW831 : 'KW' '831'; +KW832 : 'KW' '832'; +KW833 : 'KW' '833'; +KW834 : 'KW' '834'; +KW835 : 'KW' '835'; +KW836 : 'KW' '836'; +KW837 : 'KW' '837'; +KW838 : 'KW' '838'; +KW839 : 'KW' '839'; +KW840 : 'KW' '840'; +KW841 : 'KW' '841'; +KW842 : 'KW' '842'; +KW843 : 'KW' '843'; +KW844 : 'KW' '844'; +KW845 : 'KW' '845'; +KW846 : 'KW' '846'; +KW847 : 'KW' '847'; +KW848 : 'KW' '848'; +KW849 : 'KW' '849'; +KW850 : 'KW' '850'; +KW851 : 'KW' '851'; +KW852 : 'KW' '852'; +KW853 : 'KW' '853'; +KW854 : 'KW' '854'; +KW855 : 'KW' '855'; +KW856 : 'KW' '856'; +KW857 : 'KW' '857'; +KW858 : 'KW' '858'; +KW859 : 'KW' '859'; +KW860 : 'KW' '860'; +KW861 : 'KW' '861'; +KW862 : 'KW' '862'; +KW863 : 'KW' '863'; +KW864 : 'KW' '864'; +KW865 : 'KW' '865'; +KW866 : 'KW' '866'; +KW867 : 'KW' '867'; +KW868 : 'KW' '868'; +KW869 : 'KW' '869'; +KW870 : 'KW' '870'; +KW871 : 'KW' '871'; +KW872 : 'KW' '872'; +KW873 : 'KW' '873'; +KW874 : 'KW' '874'; +KW875 : 'KW' '875'; +KW876 : 'KW' '876'; +KW877 : 'KW' '877'; +KW878 : 'KW' '878'; +KW879 : 'KW' '879'; +KW880 : 'KW' '880'; +KW881 : 'KW' '881'; +KW882 : 'KW' '882'; +KW883 : 'KW' '883'; +KW884 : 'KW' '884'; +KW885 : 'KW' '885'; +KW886 : 'KW' '886'; +KW887 : 'KW' '887'; +KW888 : 'KW' '888'; +KW889 : 'KW' '889'; +KW890 : 'KW' '890'; +KW891 : 'KW' '891'; +KW892 : 'KW' '892'; +KW893 : 'KW' '893'; +KW894 : 'KW' '894'; +KW895 : 'KW' '895'; +KW896 : 'KW' '896'; +KW897 : 'KW' '897'; +KW898 : 'KW' '898'; +KW899 : 'KW' '899'; +KW900 : 'KW' '900'; +KW901 : 'KW' '901'; +KW902 : 'KW' '902'; +KW903 : 'KW' '903'; +KW904 : 'KW' '904'; +KW905 : 'KW' '905'; +KW906 : 'KW' '906'; +KW907 : 'KW' '907'; +KW908 : 'KW' '908'; +KW909 : 'KW' '909'; +KW910 : 'KW' '910'; +KW911 : 'KW' '911'; +KW912 : 'KW' '912'; +KW913 : 'KW' '913'; +KW914 : 'KW' '914'; +KW915 : 'KW' '915'; +KW916 : 'KW' '916'; +KW917 : 'KW' '917'; +KW918 : 'KW' '918'; +KW919 : 'KW' '919'; +KW920 : 'KW' '920'; +KW921 : 'KW' '921'; +KW922 : 'KW' '922'; +KW923 : 'KW' '923'; +KW924 : 'KW' '924'; +KW925 : 'KW' '925'; +KW926 : 'KW' '926'; +KW927 : 'KW' '927'; +KW928 : 'KW' '928'; +KW929 : 'KW' '929'; +KW930 : 'KW' '930'; +KW931 : 'KW' '931'; +KW932 : 'KW' '932'; +KW933 : 'KW' '933'; +KW934 : 'KW' '934'; +KW935 : 'KW' '935'; +KW936 : 'KW' '936'; +KW937 : 'KW' '937'; +KW938 : 'KW' '938'; +KW939 : 'KW' '939'; +KW940 : 'KW' '940'; +KW941 : 'KW' '941'; +KW942 : 'KW' '942'; +KW943 : 'KW' '943'; +KW944 : 'KW' '944'; +KW945 : 'KW' '945'; +KW946 : 'KW' '946'; +KW947 : 'KW' '947'; +KW948 : 'KW' '948'; +KW949 : 'KW' '949'; +KW950 : 'KW' '950'; +KW951 : 'KW' '951'; +KW952 : 'KW' '952'; +KW953 : 'KW' '953'; +KW954 : 'KW' '954'; +KW955 : 'KW' '955'; +KW956 : 'KW' '956'; +KW957 : 'KW' '957'; +KW958 : 'KW' '958'; +KW959 : 'KW' '959'; +KW960 : 'KW' '960'; +KW961 : 'KW' '961'; +KW962 : 'KW' '962'; +KW963 : 'KW' '963'; +KW964 : 'KW' '964'; +KW965 : 'KW' '965'; +KW966 : 'KW' '966'; +KW967 : 'KW' '967'; +KW968 : 'KW' '968'; +KW969 : 'KW' '969'; +KW970 : 'KW' '970'; +KW971 : 'KW' '971'; +KW972 : 'KW' '972'; +KW973 : 'KW' '973'; +KW974 : 'KW' '974'; +KW975 : 'KW' '975'; +KW976 : 'KW' '976'; +KW977 : 'KW' '977'; +KW978 : 'KW' '978'; +KW979 : 'KW' '979'; +KW980 : 'KW' '980'; +KW981 : 'KW' '981'; +KW982 : 'KW' '982'; +KW983 : 'KW' '983'; +KW984 : 'KW' '984'; +KW985 : 'KW' '985'; +KW986 : 'KW' '986'; +KW987 : 'KW' '987'; +KW988 : 'KW' '988'; +KW989 : 'KW' '989'; +KW990 : 'KW' '990'; +KW991 : 'KW' '991'; +KW992 : 'KW' '992'; +KW993 : 'KW' '993'; +KW994 : 'KW' '994'; +KW995 : 'KW' '995'; +KW996 : 'KW' '996'; +KW997 : 'KW' '997'; +KW998 : 'KW' '998'; +KW999 : 'KW' '999'; +KW1000 : 'KW' '1000'; +KW1001 : 'KW' '1001'; +KW1002 : 'KW' '1002'; +KW1003 : 'KW' '1003'; +KW1004 : 'KW' '1004'; +KW1005 : 'KW' '1005'; +KW1006 : 'KW' '1006'; +KW1007 : 'KW' '1007'; +KW1008 : 'KW' '1008'; +KW1009 : 'KW' '1009'; +KW1010 : 'KW' '1010'; +KW1011 : 'KW' '1011'; +KW1012 : 'KW' '1012'; +KW1013 : 'KW' '1013'; +KW1014 : 'KW' '1014'; +KW1015 : 'KW' '1015'; +KW1016 : 'KW' '1016'; +KW1017 : 'KW' '1017'; +KW1018 : 'KW' '1018'; +KW1019 : 'KW' '1019'; +KW1020 : 'KW' '1020'; +KW1021 : 'KW' '1021'; +KW1022 : 'KW' '1022'; +KW1023 : 'KW' '1023'; +KW1024 : 'KW' '1024'; +KW1025 : 'KW' '1025'; +KW1026 : 'KW' '1026'; +KW1027 : 'KW' '1027'; +KW1028 : 'KW' '1028'; +KW1029 : 'KW' '1029'; +KW1030 : 'KW' '1030'; +KW1031 : 'KW' '1031'; +KW1032 : 'KW' '1032'; +KW1033 : 'KW' '1033'; +KW1034 : 'KW' '1034'; +KW1035 : 'KW' '1035'; +KW1036 : 'KW' '1036'; +KW1037 : 'KW' '1037'; +KW1038 : 'KW' '1038'; +KW1039 : 'KW' '1039'; +KW1040 : 'KW' '1040'; +KW1041 : 'KW' '1041'; +KW1042 : 'KW' '1042'; +KW1043 : 'KW' '1043'; +KW1044 : 'KW' '1044'; +KW1045 : 'KW' '1045'; +KW1046 : 'KW' '1046'; +KW1047 : 'KW' '1047'; +KW1048 : 'KW' '1048'; +KW1049 : 'KW' '1049'; +KW1050 : 'KW' '1050'; +KW1051 : 'KW' '1051'; +KW1052 : 'KW' '1052'; +KW1053 : 'KW' '1053'; +KW1054 : 'KW' '1054'; +KW1055 : 'KW' '1055'; +KW1056 : 'KW' '1056'; +KW1057 : 'KW' '1057'; +KW1058 : 'KW' '1058'; +KW1059 : 'KW' '1059'; +KW1060 : 'KW' '1060'; +KW1061 : 'KW' '1061'; +KW1062 : 'KW' '1062'; +KW1063 : 'KW' '1063'; +KW1064 : 'KW' '1064'; +KW1065 : 'KW' '1065'; +KW1066 : 'KW' '1066'; +KW1067 : 'KW' '1067'; +KW1068 : 'KW' '1068'; +KW1069 : 'KW' '1069'; +KW1070 : 'KW' '1070'; +KW1071 : 'KW' '1071'; +KW1072 : 'KW' '1072'; +KW1073 : 'KW' '1073'; +KW1074 : 'KW' '1074'; +KW1075 : 'KW' '1075'; +KW1076 : 'KW' '1076'; +KW1077 : 'KW' '1077'; +KW1078 : 'KW' '1078'; +KW1079 : 'KW' '1079'; +KW1080 : 'KW' '1080'; +KW1081 : 'KW' '1081'; +KW1082 : 'KW' '1082'; +KW1083 : 'KW' '1083'; +KW1084 : 'KW' '1084'; +KW1085 : 'KW' '1085'; +KW1086 : 'KW' '1086'; +KW1087 : 'KW' '1087'; +KW1088 : 'KW' '1088'; +KW1089 : 'KW' '1089'; +KW1090 : 'KW' '1090'; +KW1091 : 'KW' '1091'; +KW1092 : 'KW' '1092'; +KW1093 : 'KW' '1093'; +KW1094 : 'KW' '1094'; +KW1095 : 'KW' '1095'; +KW1096 : 'KW' '1096'; +KW1097 : 'KW' '1097'; +KW1098 : 'KW' '1098'; +KW1099 : 'KW' '1099'; +KW1100 : 'KW' '1100'; +KW1101 : 'KW' '1101'; +KW1102 : 'KW' '1102'; +KW1103 : 'KW' '1103'; +KW1104 : 'KW' '1104'; +KW1105 : 'KW' '1105'; +KW1106 : 'KW' '1106'; +KW1107 : 'KW' '1107'; +KW1108 : 'KW' '1108'; +KW1109 : 'KW' '1109'; +KW1110 : 'KW' '1110'; +KW1111 : 'KW' '1111'; +KW1112 : 'KW' '1112'; +KW1113 : 'KW' '1113'; +KW1114 : 'KW' '1114'; +KW1115 : 'KW' '1115'; +KW1116 : 'KW' '1116'; +KW1117 : 'KW' '1117'; +KW1118 : 'KW' '1118'; +KW1119 : 'KW' '1119'; +KW1120 : 'KW' '1120'; +KW1121 : 'KW' '1121'; +KW1122 : 'KW' '1122'; +KW1123 : 'KW' '1123'; +KW1124 : 'KW' '1124'; +KW1125 : 'KW' '1125'; +KW1126 : 'KW' '1126'; +KW1127 : 'KW' '1127'; +KW1128 : 'KW' '1128'; +KW1129 : 'KW' '1129'; +KW1130 : 'KW' '1130'; +KW1131 : 'KW' '1131'; +KW1132 : 'KW' '1132'; +KW1133 : 'KW' '1133'; +KW1134 : 'KW' '1134'; +KW1135 : 'KW' '1135'; +KW1136 : 'KW' '1136'; +KW1137 : 'KW' '1137'; +KW1138 : 'KW' '1138'; +KW1139 : 'KW' '1139'; +KW1140 : 'KW' '1140'; +KW1141 : 'KW' '1141'; +KW1142 : 'KW' '1142'; +KW1143 : 'KW' '1143'; +KW1144 : 'KW' '1144'; +KW1145 : 'KW' '1145'; +KW1146 : 'KW' '1146'; +KW1147 : 'KW' '1147'; +KW1148 : 'KW' '1148'; +KW1149 : 'KW' '1149'; +KW1150 : 'KW' '1150'; +KW1151 : 'KW' '1151'; +KW1152 : 'KW' '1152'; +KW1153 : 'KW' '1153'; +KW1154 : 'KW' '1154'; +KW1155 : 'KW' '1155'; +KW1156 : 'KW' '1156'; +KW1157 : 'KW' '1157'; +KW1158 : 'KW' '1158'; +KW1159 : 'KW' '1159'; +KW1160 : 'KW' '1160'; +KW1161 : 'KW' '1161'; +KW1162 : 'KW' '1162'; +KW1163 : 'KW' '1163'; +KW1164 : 'KW' '1164'; +KW1165 : 'KW' '1165'; +KW1166 : 'KW' '1166'; +KW1167 : 'KW' '1167'; +KW1168 : 'KW' '1168'; +KW1169 : 'KW' '1169'; +KW1170 : 'KW' '1170'; +KW1171 : 'KW' '1171'; +KW1172 : 'KW' '1172'; +KW1173 : 'KW' '1173'; +KW1174 : 'KW' '1174'; +KW1175 : 'KW' '1175'; +KW1176 : 'KW' '1176'; +KW1177 : 'KW' '1177'; +KW1178 : 'KW' '1178'; +KW1179 : 'KW' '1179'; +KW1180 : 'KW' '1180'; +KW1181 : 'KW' '1181'; +KW1182 : 'KW' '1182'; +KW1183 : 'KW' '1183'; +KW1184 : 'KW' '1184'; +KW1185 : 'KW' '1185'; +KW1186 : 'KW' '1186'; +KW1187 : 'KW' '1187'; +KW1188 : 'KW' '1188'; +KW1189 : 'KW' '1189'; +KW1190 : 'KW' '1190'; +KW1191 : 'KW' '1191'; +KW1192 : 'KW' '1192'; +KW1193 : 'KW' '1193'; +KW1194 : 'KW' '1194'; +KW1195 : 'KW' '1195'; +KW1196 : 'KW' '1196'; +KW1197 : 'KW' '1197'; +KW1198 : 'KW' '1198'; +KW1199 : 'KW' '1199'; +KW1200 : 'KW' '1200'; +KW1201 : 'KW' '1201'; +KW1202 : 'KW' '1202'; +KW1203 : 'KW' '1203'; +KW1204 : 'KW' '1204'; +KW1205 : 'KW' '1205'; +KW1206 : 'KW' '1206'; +KW1207 : 'KW' '1207'; +KW1208 : 'KW' '1208'; +KW1209 : 'KW' '1209'; +KW1210 : 'KW' '1210'; +KW1211 : 'KW' '1211'; +KW1212 : 'KW' '1212'; +KW1213 : 'KW' '1213'; +KW1214 : 'KW' '1214'; +KW1215 : 'KW' '1215'; +KW1216 : 'KW' '1216'; +KW1217 : 'KW' '1217'; +KW1218 : 'KW' '1218'; +KW1219 : 'KW' '1219'; +KW1220 : 'KW' '1220'; +KW1221 : 'KW' '1221'; +KW1222 : 'KW' '1222'; +KW1223 : 'KW' '1223'; +KW1224 : 'KW' '1224'; +KW1225 : 'KW' '1225'; +KW1226 : 'KW' '1226'; +KW1227 : 'KW' '1227'; +KW1228 : 'KW' '1228'; +KW1229 : 'KW' '1229'; +KW1230 : 'KW' '1230'; +KW1231 : 'KW' '1231'; +KW1232 : 'KW' '1232'; +KW1233 : 'KW' '1233'; +KW1234 : 'KW' '1234'; +KW1235 : 'KW' '1235'; +KW1236 : 'KW' '1236'; +KW1237 : 'KW' '1237'; +KW1238 : 'KW' '1238'; +KW1239 : 'KW' '1239'; +KW1240 : 'KW' '1240'; +KW1241 : 'KW' '1241'; +KW1242 : 'KW' '1242'; +KW1243 : 'KW' '1243'; +KW1244 : 'KW' '1244'; +KW1245 : 'KW' '1245'; +KW1246 : 'KW' '1246'; +KW1247 : 'KW' '1247'; +KW1248 : 'KW' '1248'; +KW1249 : 'KW' '1249'; +KW1250 : 'KW' '1250'; +KW1251 : 'KW' '1251'; +KW1252 : 'KW' '1252'; +KW1253 : 'KW' '1253'; +KW1254 : 'KW' '1254'; +KW1255 : 'KW' '1255'; +KW1256 : 'KW' '1256'; +KW1257 : 'KW' '1257'; +KW1258 : 'KW' '1258'; +KW1259 : 'KW' '1259'; +KW1260 : 'KW' '1260'; +KW1261 : 'KW' '1261'; +KW1262 : 'KW' '1262'; +KW1263 : 'KW' '1263'; +KW1264 : 'KW' '1264'; +KW1265 : 'KW' '1265'; +KW1266 : 'KW' '1266'; +KW1267 : 'KW' '1267'; +KW1268 : 'KW' '1268'; +KW1269 : 'KW' '1269'; +KW1270 : 'KW' '1270'; +KW1271 : 'KW' '1271'; +KW1272 : 'KW' '1272'; +KW1273 : 'KW' '1273'; +KW1274 : 'KW' '1274'; +KW1275 : 'KW' '1275'; +KW1276 : 'KW' '1276'; +KW1277 : 'KW' '1277'; +KW1278 : 'KW' '1278'; +KW1279 : 'KW' '1279'; +KW1280 : 'KW' '1280'; +KW1281 : 'KW' '1281'; +KW1282 : 'KW' '1282'; +KW1283 : 'KW' '1283'; +KW1284 : 'KW' '1284'; +KW1285 : 'KW' '1285'; +KW1286 : 'KW' '1286'; +KW1287 : 'KW' '1287'; +KW1288 : 'KW' '1288'; +KW1289 : 'KW' '1289'; +KW1290 : 'KW' '1290'; +KW1291 : 'KW' '1291'; +KW1292 : 'KW' '1292'; +KW1293 : 'KW' '1293'; +KW1294 : 'KW' '1294'; +KW1295 : 'KW' '1295'; +KW1296 : 'KW' '1296'; +KW1297 : 'KW' '1297'; +KW1298 : 'KW' '1298'; +KW1299 : 'KW' '1299'; +KW1300 : 'KW' '1300'; +KW1301 : 'KW' '1301'; +KW1302 : 'KW' '1302'; +KW1303 : 'KW' '1303'; +KW1304 : 'KW' '1304'; +KW1305 : 'KW' '1305'; +KW1306 : 'KW' '1306'; +KW1307 : 'KW' '1307'; +KW1308 : 'KW' '1308'; +KW1309 : 'KW' '1309'; +KW1310 : 'KW' '1310'; +KW1311 : 'KW' '1311'; +KW1312 : 'KW' '1312'; +KW1313 : 'KW' '1313'; +KW1314 : 'KW' '1314'; +KW1315 : 'KW' '1315'; +KW1316 : 'KW' '1316'; +KW1317 : 'KW' '1317'; +KW1318 : 'KW' '1318'; +KW1319 : 'KW' '1319'; +KW1320 : 'KW' '1320'; +KW1321 : 'KW' '1321'; +KW1322 : 'KW' '1322'; +KW1323 : 'KW' '1323'; +KW1324 : 'KW' '1324'; +KW1325 : 'KW' '1325'; +KW1326 : 'KW' '1326'; +KW1327 : 'KW' '1327'; +KW1328 : 'KW' '1328'; +KW1329 : 'KW' '1329'; +KW1330 : 'KW' '1330'; +KW1331 : 'KW' '1331'; +KW1332 : 'KW' '1332'; +KW1333 : 'KW' '1333'; +KW1334 : 'KW' '1334'; +KW1335 : 'KW' '1335'; +KW1336 : 'KW' '1336'; +KW1337 : 'KW' '1337'; +KW1338 : 'KW' '1338'; +KW1339 : 'KW' '1339'; +KW1340 : 'KW' '1340'; +KW1341 : 'KW' '1341'; +KW1342 : 'KW' '1342'; +KW1343 : 'KW' '1343'; +KW1344 : 'KW' '1344'; +KW1345 : 'KW' '1345'; +KW1346 : 'KW' '1346'; +KW1347 : 'KW' '1347'; +KW1348 : 'KW' '1348'; +KW1349 : 'KW' '1349'; +KW1350 : 'KW' '1350'; +KW1351 : 'KW' '1351'; +KW1352 : 'KW' '1352'; +KW1353 : 'KW' '1353'; +KW1354 : 'KW' '1354'; +KW1355 : 'KW' '1355'; +KW1356 : 'KW' '1356'; +KW1357 : 'KW' '1357'; +KW1358 : 'KW' '1358'; +KW1359 : 'KW' '1359'; +KW1360 : 'KW' '1360'; +KW1361 : 'KW' '1361'; +KW1362 : 'KW' '1362'; +KW1363 : 'KW' '1363'; +KW1364 : 'KW' '1364'; +KW1365 : 'KW' '1365'; +KW1366 : 'KW' '1366'; +KW1367 : 'KW' '1367'; +KW1368 : 'KW' '1368'; +KW1369 : 'KW' '1369'; +KW1370 : 'KW' '1370'; +KW1371 : 'KW' '1371'; +KW1372 : 'KW' '1372'; +KW1373 : 'KW' '1373'; +KW1374 : 'KW' '1374'; +KW1375 : 'KW' '1375'; +KW1376 : 'KW' '1376'; +KW1377 : 'KW' '1377'; +KW1378 : 'KW' '1378'; +KW1379 : 'KW' '1379'; +KW1380 : 'KW' '1380'; +KW1381 : 'KW' '1381'; +KW1382 : 'KW' '1382'; +KW1383 : 'KW' '1383'; +KW1384 : 'KW' '1384'; +KW1385 : 'KW' '1385'; +KW1386 : 'KW' '1386'; +KW1387 : 'KW' '1387'; +KW1388 : 'KW' '1388'; +KW1389 : 'KW' '1389'; +KW1390 : 'KW' '1390'; +KW1391 : 'KW' '1391'; +KW1392 : 'KW' '1392'; +KW1393 : 'KW' '1393'; +KW1394 : 'KW' '1394'; +KW1395 : 'KW' '1395'; +KW1396 : 'KW' '1396'; +KW1397 : 'KW' '1397'; +KW1398 : 'KW' '1398'; +KW1399 : 'KW' '1399'; +KW1400 : 'KW' '1400'; +KW1401 : 'KW' '1401'; +KW1402 : 'KW' '1402'; +KW1403 : 'KW' '1403'; +KW1404 : 'KW' '1404'; +KW1405 : 'KW' '1405'; +KW1406 : 'KW' '1406'; +KW1407 : 'KW' '1407'; +KW1408 : 'KW' '1408'; +KW1409 : 'KW' '1409'; +KW1410 : 'KW' '1410'; +KW1411 : 'KW' '1411'; +KW1412 : 'KW' '1412'; +KW1413 : 'KW' '1413'; +KW1414 : 'KW' '1414'; +KW1415 : 'KW' '1415'; +KW1416 : 'KW' '1416'; +KW1417 : 'KW' '1417'; +KW1418 : 'KW' '1418'; +KW1419 : 'KW' '1419'; +KW1420 : 'KW' '1420'; +KW1421 : 'KW' '1421'; +KW1422 : 'KW' '1422'; +KW1423 : 'KW' '1423'; +KW1424 : 'KW' '1424'; +KW1425 : 'KW' '1425'; +KW1426 : 'KW' '1426'; +KW1427 : 'KW' '1427'; +KW1428 : 'KW' '1428'; +KW1429 : 'KW' '1429'; +KW1430 : 'KW' '1430'; +KW1431 : 'KW' '1431'; +KW1432 : 'KW' '1432'; +KW1433 : 'KW' '1433'; +KW1434 : 'KW' '1434'; +KW1435 : 'KW' '1435'; +KW1436 : 'KW' '1436'; +KW1437 : 'KW' '1437'; +KW1438 : 'KW' '1438'; +KW1439 : 'KW' '1439'; +KW1440 : 'KW' '1440'; +KW1441 : 'KW' '1441'; +KW1442 : 'KW' '1442'; +KW1443 : 'KW' '1443'; +KW1444 : 'KW' '1444'; +KW1445 : 'KW' '1445'; +KW1446 : 'KW' '1446'; +KW1447 : 'KW' '1447'; +KW1448 : 'KW' '1448'; +KW1449 : 'KW' '1449'; +KW1450 : 'KW' '1450'; +KW1451 : 'KW' '1451'; +KW1452 : 'KW' '1452'; +KW1453 : 'KW' '1453'; +KW1454 : 'KW' '1454'; +KW1455 : 'KW' '1455'; +KW1456 : 'KW' '1456'; +KW1457 : 'KW' '1457'; +KW1458 : 'KW' '1458'; +KW1459 : 'KW' '1459'; +KW1460 : 'KW' '1460'; +KW1461 : 'KW' '1461'; +KW1462 : 'KW' '1462'; +KW1463 : 'KW' '1463'; +KW1464 : 'KW' '1464'; +KW1465 : 'KW' '1465'; +KW1466 : 'KW' '1466'; +KW1467 : 'KW' '1467'; +KW1468 : 'KW' '1468'; +KW1469 : 'KW' '1469'; +KW1470 : 'KW' '1470'; +KW1471 : 'KW' '1471'; +KW1472 : 'KW' '1472'; +KW1473 : 'KW' '1473'; +KW1474 : 'KW' '1474'; +KW1475 : 'KW' '1475'; +KW1476 : 'KW' '1476'; +KW1477 : 'KW' '1477'; +KW1478 : 'KW' '1478'; +KW1479 : 'KW' '1479'; +KW1480 : 'KW' '1480'; +KW1481 : 'KW' '1481'; +KW1482 : 'KW' '1482'; +KW1483 : 'KW' '1483'; +KW1484 : 'KW' '1484'; +KW1485 : 'KW' '1485'; +KW1486 : 'KW' '1486'; +KW1487 : 'KW' '1487'; +KW1488 : 'KW' '1488'; +KW1489 : 'KW' '1489'; +KW1490 : 'KW' '1490'; +KW1491 : 'KW' '1491'; +KW1492 : 'KW' '1492'; +KW1493 : 'KW' '1493'; +KW1494 : 'KW' '1494'; +KW1495 : 'KW' '1495'; +KW1496 : 'KW' '1496'; +KW1497 : 'KW' '1497'; +KW1498 : 'KW' '1498'; +KW1499 : 'KW' '1499'; +KW1500 : 'KW' '1500'; +KW1501 : 'KW' '1501'; +KW1502 : 'KW' '1502'; +KW1503 : 'KW' '1503'; +KW1504 : 'KW' '1504'; +KW1505 : 'KW' '1505'; +KW1506 : 'KW' '1506'; +KW1507 : 'KW' '1507'; +KW1508 : 'KW' '1508'; +KW1509 : 'KW' '1509'; +KW1510 : 'KW' '1510'; +KW1511 : 'KW' '1511'; +KW1512 : 'KW' '1512'; +KW1513 : 'KW' '1513'; +KW1514 : 'KW' '1514'; +KW1515 : 'KW' '1515'; +KW1516 : 'KW' '1516'; +KW1517 : 'KW' '1517'; +KW1518 : 'KW' '1518'; +KW1519 : 'KW' '1519'; +KW1520 : 'KW' '1520'; +KW1521 : 'KW' '1521'; +KW1522 : 'KW' '1522'; +KW1523 : 'KW' '1523'; +KW1524 : 'KW' '1524'; +KW1525 : 'KW' '1525'; +KW1526 : 'KW' '1526'; +KW1527 : 'KW' '1527'; +KW1528 : 'KW' '1528'; +KW1529 : 'KW' '1529'; +KW1530 : 'KW' '1530'; +KW1531 : 'KW' '1531'; +KW1532 : 'KW' '1532'; +KW1533 : 'KW' '1533'; +KW1534 : 'KW' '1534'; +KW1535 : 'KW' '1535'; +KW1536 : 'KW' '1536'; +KW1537 : 'KW' '1537'; +KW1538 : 'KW' '1538'; +KW1539 : 'KW' '1539'; +KW1540 : 'KW' '1540'; +KW1541 : 'KW' '1541'; +KW1542 : 'KW' '1542'; +KW1543 : 'KW' '1543'; +KW1544 : 'KW' '1544'; +KW1545 : 'KW' '1545'; +KW1546 : 'KW' '1546'; +KW1547 : 'KW' '1547'; +KW1548 : 'KW' '1548'; +KW1549 : 'KW' '1549'; +KW1550 : 'KW' '1550'; +KW1551 : 'KW' '1551'; +KW1552 : 'KW' '1552'; +KW1553 : 'KW' '1553'; +KW1554 : 'KW' '1554'; +KW1555 : 'KW' '1555'; +KW1556 : 'KW' '1556'; +KW1557 : 'KW' '1557'; +KW1558 : 'KW' '1558'; +KW1559 : 'KW' '1559'; +KW1560 : 'KW' '1560'; +KW1561 : 'KW' '1561'; +KW1562 : 'KW' '1562'; +KW1563 : 'KW' '1563'; +KW1564 : 'KW' '1564'; +KW1565 : 'KW' '1565'; +KW1566 : 'KW' '1566'; +KW1567 : 'KW' '1567'; +KW1568 : 'KW' '1568'; +KW1569 : 'KW' '1569'; +KW1570 : 'KW' '1570'; +KW1571 : 'KW' '1571'; +KW1572 : 'KW' '1572'; +KW1573 : 'KW' '1573'; +KW1574 : 'KW' '1574'; +KW1575 : 'KW' '1575'; +KW1576 : 'KW' '1576'; +KW1577 : 'KW' '1577'; +KW1578 : 'KW' '1578'; +KW1579 : 'KW' '1579'; +KW1580 : 'KW' '1580'; +KW1581 : 'KW' '1581'; +KW1582 : 'KW' '1582'; +KW1583 : 'KW' '1583'; +KW1584 : 'KW' '1584'; +KW1585 : 'KW' '1585'; +KW1586 : 'KW' '1586'; +KW1587 : 'KW' '1587'; +KW1588 : 'KW' '1588'; +KW1589 : 'KW' '1589'; +KW1590 : 'KW' '1590'; +KW1591 : 'KW' '1591'; +KW1592 : 'KW' '1592'; +KW1593 : 'KW' '1593'; +KW1594 : 'KW' '1594'; +KW1595 : 'KW' '1595'; +KW1596 : 'KW' '1596'; +KW1597 : 'KW' '1597'; +KW1598 : 'KW' '1598'; +KW1599 : 'KW' '1599'; +KW1600 : 'KW' '1600'; +KW1601 : 'KW' '1601'; +KW1602 : 'KW' '1602'; +KW1603 : 'KW' '1603'; +KW1604 : 'KW' '1604'; +KW1605 : 'KW' '1605'; +KW1606 : 'KW' '1606'; +KW1607 : 'KW' '1607'; +KW1608 : 'KW' '1608'; +KW1609 : 'KW' '1609'; +KW1610 : 'KW' '1610'; +KW1611 : 'KW' '1611'; +KW1612 : 'KW' '1612'; +KW1613 : 'KW' '1613'; +KW1614 : 'KW' '1614'; +KW1615 : 'KW' '1615'; +KW1616 : 'KW' '1616'; +KW1617 : 'KW' '1617'; +KW1618 : 'KW' '1618'; +KW1619 : 'KW' '1619'; +KW1620 : 'KW' '1620'; +KW1621 : 'KW' '1621'; +KW1622 : 'KW' '1622'; +KW1623 : 'KW' '1623'; +KW1624 : 'KW' '1624'; +KW1625 : 'KW' '1625'; +KW1626 : 'KW' '1626'; +KW1627 : 'KW' '1627'; +KW1628 : 'KW' '1628'; +KW1629 : 'KW' '1629'; +KW1630 : 'KW' '1630'; +KW1631 : 'KW' '1631'; +KW1632 : 'KW' '1632'; +KW1633 : 'KW' '1633'; +KW1634 : 'KW' '1634'; +KW1635 : 'KW' '1635'; +KW1636 : 'KW' '1636'; +KW1637 : 'KW' '1637'; +KW1638 : 'KW' '1638'; +KW1639 : 'KW' '1639'; +KW1640 : 'KW' '1640'; +KW1641 : 'KW' '1641'; +KW1642 : 'KW' '1642'; +KW1643 : 'KW' '1643'; +KW1644 : 'KW' '1644'; +KW1645 : 'KW' '1645'; +KW1646 : 'KW' '1646'; +KW1647 : 'KW' '1647'; +KW1648 : 'KW' '1648'; +KW1649 : 'KW' '1649'; +KW1650 : 'KW' '1650'; +KW1651 : 'KW' '1651'; +KW1652 : 'KW' '1652'; +KW1653 : 'KW' '1653'; +KW1654 : 'KW' '1654'; +KW1655 : 'KW' '1655'; +KW1656 : 'KW' '1656'; +KW1657 : 'KW' '1657'; +KW1658 : 'KW' '1658'; +KW1659 : 'KW' '1659'; +KW1660 : 'KW' '1660'; +KW1661 : 'KW' '1661'; +KW1662 : 'KW' '1662'; +KW1663 : 'KW' '1663'; +KW1664 : 'KW' '1664'; +KW1665 : 'KW' '1665'; +KW1666 : 'KW' '1666'; +KW1667 : 'KW' '1667'; +KW1668 : 'KW' '1668'; +KW1669 : 'KW' '1669'; +KW1670 : 'KW' '1670'; +KW1671 : 'KW' '1671'; +KW1672 : 'KW' '1672'; +KW1673 : 'KW' '1673'; +KW1674 : 'KW' '1674'; +KW1675 : 'KW' '1675'; +KW1676 : 'KW' '1676'; +KW1677 : 'KW' '1677'; +KW1678 : 'KW' '1678'; +KW1679 : 'KW' '1679'; +KW1680 : 'KW' '1680'; +KW1681 : 'KW' '1681'; +KW1682 : 'KW' '1682'; +KW1683 : 'KW' '1683'; +KW1684 : 'KW' '1684'; +KW1685 : 'KW' '1685'; +KW1686 : 'KW' '1686'; +KW1687 : 'KW' '1687'; +KW1688 : 'KW' '1688'; +KW1689 : 'KW' '1689'; +KW1690 : 'KW' '1690'; +KW1691 : 'KW' '1691'; +KW1692 : 'KW' '1692'; +KW1693 : 'KW' '1693'; +KW1694 : 'KW' '1694'; +KW1695 : 'KW' '1695'; +KW1696 : 'KW' '1696'; +KW1697 : 'KW' '1697'; +KW1698 : 'KW' '1698'; +KW1699 : 'KW' '1699'; +KW1700 : 'KW' '1700'; +KW1701 : 'KW' '1701'; +KW1702 : 'KW' '1702'; +KW1703 : 'KW' '1703'; +KW1704 : 'KW' '1704'; +KW1705 : 'KW' '1705'; +KW1706 : 'KW' '1706'; +KW1707 : 'KW' '1707'; +KW1708 : 'KW' '1708'; +KW1709 : 'KW' '1709'; +KW1710 : 'KW' '1710'; +KW1711 : 'KW' '1711'; +KW1712 : 'KW' '1712'; +KW1713 : 'KW' '1713'; +KW1714 : 'KW' '1714'; +KW1715 : 'KW' '1715'; +KW1716 : 'KW' '1716'; +KW1717 : 'KW' '1717'; +KW1718 : 'KW' '1718'; +KW1719 : 'KW' '1719'; +KW1720 : 'KW' '1720'; +KW1721 : 'KW' '1721'; +KW1722 : 'KW' '1722'; +KW1723 : 'KW' '1723'; +KW1724 : 'KW' '1724'; +KW1725 : 'KW' '1725'; +KW1726 : 'KW' '1726'; +KW1727 : 'KW' '1727'; +KW1728 : 'KW' '1728'; +KW1729 : 'KW' '1729'; +KW1730 : 'KW' '1730'; +KW1731 : 'KW' '1731'; +KW1732 : 'KW' '1732'; +KW1733 : 'KW' '1733'; +KW1734 : 'KW' '1734'; +KW1735 : 'KW' '1735'; +KW1736 : 'KW' '1736'; +KW1737 : 'KW' '1737'; +KW1738 : 'KW' '1738'; +KW1739 : 'KW' '1739'; +KW1740 : 'KW' '1740'; +KW1741 : 'KW' '1741'; +KW1742 : 'KW' '1742'; +KW1743 : 'KW' '1743'; +KW1744 : 'KW' '1744'; +KW1745 : 'KW' '1745'; +KW1746 : 'KW' '1746'; +KW1747 : 'KW' '1747'; +KW1748 : 'KW' '1748'; +KW1749 : 'KW' '1749'; +KW1750 : 'KW' '1750'; +KW1751 : 'KW' '1751'; +KW1752 : 'KW' '1752'; +KW1753 : 'KW' '1753'; +KW1754 : 'KW' '1754'; +KW1755 : 'KW' '1755'; +KW1756 : 'KW' '1756'; +KW1757 : 'KW' '1757'; +KW1758 : 'KW' '1758'; +KW1759 : 'KW' '1759'; +KW1760 : 'KW' '1760'; +KW1761 : 'KW' '1761'; +KW1762 : 'KW' '1762'; +KW1763 : 'KW' '1763'; +KW1764 : 'KW' '1764'; +KW1765 : 'KW' '1765'; +KW1766 : 'KW' '1766'; +KW1767 : 'KW' '1767'; +KW1768 : 'KW' '1768'; +KW1769 : 'KW' '1769'; +KW1770 : 'KW' '1770'; +KW1771 : 'KW' '1771'; +KW1772 : 'KW' '1772'; +KW1773 : 'KW' '1773'; +KW1774 : 'KW' '1774'; +KW1775 : 'KW' '1775'; +KW1776 : 'KW' '1776'; +KW1777 : 'KW' '1777'; +KW1778 : 'KW' '1778'; +KW1779 : 'KW' '1779'; +KW1780 : 'KW' '1780'; +KW1781 : 'KW' '1781'; +KW1782 : 'KW' '1782'; +KW1783 : 'KW' '1783'; +KW1784 : 'KW' '1784'; +KW1785 : 'KW' '1785'; +KW1786 : 'KW' '1786'; +KW1787 : 'KW' '1787'; +KW1788 : 'KW' '1788'; +KW1789 : 'KW' '1789'; +KW1790 : 'KW' '1790'; +KW1791 : 'KW' '1791'; +KW1792 : 'KW' '1792'; +KW1793 : 'KW' '1793'; +KW1794 : 'KW' '1794'; +KW1795 : 'KW' '1795'; +KW1796 : 'KW' '1796'; +KW1797 : 'KW' '1797'; +KW1798 : 'KW' '1798'; +KW1799 : 'KW' '1799'; +KW1800 : 'KW' '1800'; +KW1801 : 'KW' '1801'; +KW1802 : 'KW' '1802'; +KW1803 : 'KW' '1803'; +KW1804 : 'KW' '1804'; +KW1805 : 'KW' '1805'; +KW1806 : 'KW' '1806'; +KW1807 : 'KW' '1807'; +KW1808 : 'KW' '1808'; +KW1809 : 'KW' '1809'; +KW1810 : 'KW' '1810'; +KW1811 : 'KW' '1811'; +KW1812 : 'KW' '1812'; +KW1813 : 'KW' '1813'; +KW1814 : 'KW' '1814'; +KW1815 : 'KW' '1815'; +KW1816 : 'KW' '1816'; +KW1817 : 'KW' '1817'; +KW1818 : 'KW' '1818'; +KW1819 : 'KW' '1819'; +KW1820 : 'KW' '1820'; +KW1821 : 'KW' '1821'; +KW1822 : 'KW' '1822'; +KW1823 : 'KW' '1823'; +KW1824 : 'KW' '1824'; +KW1825 : 'KW' '1825'; +KW1826 : 'KW' '1826'; +KW1827 : 'KW' '1827'; +KW1828 : 'KW' '1828'; +KW1829 : 'KW' '1829'; +KW1830 : 'KW' '1830'; +KW1831 : 'KW' '1831'; +KW1832 : 'KW' '1832'; +KW1833 : 'KW' '1833'; +KW1834 : 'KW' '1834'; +KW1835 : 'KW' '1835'; +KW1836 : 'KW' '1836'; +KW1837 : 'KW' '1837'; +KW1838 : 'KW' '1838'; +KW1839 : 'KW' '1839'; +KW1840 : 'KW' '1840'; +KW1841 : 'KW' '1841'; +KW1842 : 'KW' '1842'; +KW1843 : 'KW' '1843'; +KW1844 : 'KW' '1844'; +KW1845 : 'KW' '1845'; +KW1846 : 'KW' '1846'; +KW1847 : 'KW' '1847'; +KW1848 : 'KW' '1848'; +KW1849 : 'KW' '1849'; +KW1850 : 'KW' '1850'; +KW1851 : 'KW' '1851'; +KW1852 : 'KW' '1852'; +KW1853 : 'KW' '1853'; +KW1854 : 'KW' '1854'; +KW1855 : 'KW' '1855'; +KW1856 : 'KW' '1856'; +KW1857 : 'KW' '1857'; +KW1858 : 'KW' '1858'; +KW1859 : 'KW' '1859'; +KW1860 : 'KW' '1860'; +KW1861 : 'KW' '1861'; +KW1862 : 'KW' '1862'; +KW1863 : 'KW' '1863'; +KW1864 : 'KW' '1864'; +KW1865 : 'KW' '1865'; +KW1866 : 'KW' '1866'; +KW1867 : 'KW' '1867'; +KW1868 : 'KW' '1868'; +KW1869 : 'KW' '1869'; +KW1870 : 'KW' '1870'; +KW1871 : 'KW' '1871'; +KW1872 : 'KW' '1872'; +KW1873 : 'KW' '1873'; +KW1874 : 'KW' '1874'; +KW1875 : 'KW' '1875'; +KW1876 : 'KW' '1876'; +KW1877 : 'KW' '1877'; +KW1878 : 'KW' '1878'; +KW1879 : 'KW' '1879'; +KW1880 : 'KW' '1880'; +KW1881 : 'KW' '1881'; +KW1882 : 'KW' '1882'; +KW1883 : 'KW' '1883'; +KW1884 : 'KW' '1884'; +KW1885 : 'KW' '1885'; +KW1886 : 'KW' '1886'; +KW1887 : 'KW' '1887'; +KW1888 : 'KW' '1888'; +KW1889 : 'KW' '1889'; +KW1890 : 'KW' '1890'; +KW1891 : 'KW' '1891'; +KW1892 : 'KW' '1892'; +KW1893 : 'KW' '1893'; +KW1894 : 'KW' '1894'; +KW1895 : 'KW' '1895'; +KW1896 : 'KW' '1896'; +KW1897 : 'KW' '1897'; +KW1898 : 'KW' '1898'; +KW1899 : 'KW' '1899'; +KW1900 : 'KW' '1900'; +KW1901 : 'KW' '1901'; +KW1902 : 'KW' '1902'; +KW1903 : 'KW' '1903'; +KW1904 : 'KW' '1904'; +KW1905 : 'KW' '1905'; +KW1906 : 'KW' '1906'; +KW1907 : 'KW' '1907'; +KW1908 : 'KW' '1908'; +KW1909 : 'KW' '1909'; +KW1910 : 'KW' '1910'; +KW1911 : 'KW' '1911'; +KW1912 : 'KW' '1912'; +KW1913 : 'KW' '1913'; +KW1914 : 'KW' '1914'; +KW1915 : 'KW' '1915'; +KW1916 : 'KW' '1916'; +KW1917 : 'KW' '1917'; +KW1918 : 'KW' '1918'; +KW1919 : 'KW' '1919'; +KW1920 : 'KW' '1920'; +KW1921 : 'KW' '1921'; +KW1922 : 'KW' '1922'; +KW1923 : 'KW' '1923'; +KW1924 : 'KW' '1924'; +KW1925 : 'KW' '1925'; +KW1926 : 'KW' '1926'; +KW1927 : 'KW' '1927'; +KW1928 : 'KW' '1928'; +KW1929 : 'KW' '1929'; +KW1930 : 'KW' '1930'; +KW1931 : 'KW' '1931'; +KW1932 : 'KW' '1932'; +KW1933 : 'KW' '1933'; +KW1934 : 'KW' '1934'; +KW1935 : 'KW' '1935'; +KW1936 : 'KW' '1936'; +KW1937 : 'KW' '1937'; +KW1938 : 'KW' '1938'; +KW1939 : 'KW' '1939'; +KW1940 : 'KW' '1940'; +KW1941 : 'KW' '1941'; +KW1942 : 'KW' '1942'; +KW1943 : 'KW' '1943'; +KW1944 : 'KW' '1944'; +KW1945 : 'KW' '1945'; +KW1946 : 'KW' '1946'; +KW1947 : 'KW' '1947'; +KW1948 : 'KW' '1948'; +KW1949 : 'KW' '1949'; +KW1950 : 'KW' '1950'; +KW1951 : 'KW' '1951'; +KW1952 : 'KW' '1952'; +KW1953 : 'KW' '1953'; +KW1954 : 'KW' '1954'; +KW1955 : 'KW' '1955'; +KW1956 : 'KW' '1956'; +KW1957 : 'KW' '1957'; +KW1958 : 'KW' '1958'; +KW1959 : 'KW' '1959'; +KW1960 : 'KW' '1960'; +KW1961 : 'KW' '1961'; +KW1962 : 'KW' '1962'; +KW1963 : 'KW' '1963'; +KW1964 : 'KW' '1964'; +KW1965 : 'KW' '1965'; +KW1966 : 'KW' '1966'; +KW1967 : 'KW' '1967'; +KW1968 : 'KW' '1968'; +KW1969 : 'KW' '1969'; +KW1970 : 'KW' '1970'; +KW1971 : 'KW' '1971'; +KW1972 : 'KW' '1972'; +KW1973 : 'KW' '1973'; +KW1974 : 'KW' '1974'; +KW1975 : 'KW' '1975'; +KW1976 : 'KW' '1976'; +KW1977 : 'KW' '1977'; +KW1978 : 'KW' '1978'; +KW1979 : 'KW' '1979'; +KW1980 : 'KW' '1980'; +KW1981 : 'KW' '1981'; +KW1982 : 'KW' '1982'; +KW1983 : 'KW' '1983'; +KW1984 : 'KW' '1984'; +KW1985 : 'KW' '1985'; +KW1986 : 'KW' '1986'; +KW1987 : 'KW' '1987'; +KW1988 : 'KW' '1988'; +KW1989 : 'KW' '1989'; +KW1990 : 'KW' '1990'; +KW1991 : 'KW' '1991'; +KW1992 : 'KW' '1992'; +KW1993 : 'KW' '1993'; +KW1994 : 'KW' '1994'; +KW1995 : 'KW' '1995'; +KW1996 : 'KW' '1996'; +KW1997 : 'KW' '1997'; +KW1998 : 'KW' '1998'; +KW1999 : 'KW' '1999'; +KW2000 : 'KW' '2000'; +KW2001 : 'KW' '2001'; +KW2002 : 'KW' '2002'; +KW2003 : 'KW' '2003'; +KW2004 : 'KW' '2004'; +KW2005 : 'KW' '2005'; +KW2006 : 'KW' '2006'; +KW2007 : 'KW' '2007'; +KW2008 : 'KW' '2008'; +KW2009 : 'KW' '2009'; +KW2010 : 'KW' '2010'; +KW2011 : 'KW' '2011'; +KW2012 : 'KW' '2012'; +KW2013 : 'KW' '2013'; +KW2014 : 'KW' '2014'; +KW2015 : 'KW' '2015'; +KW2016 : 'KW' '2016'; +KW2017 : 'KW' '2017'; +KW2018 : 'KW' '2018'; +KW2019 : 'KW' '2019'; +KW2020 : 'KW' '2020'; +KW2021 : 'KW' '2021'; +KW2022 : 'KW' '2022'; +KW2023 : 'KW' '2023'; +KW2024 : 'KW' '2024'; +KW2025 : 'KW' '2025'; +KW2026 : 'KW' '2026'; +KW2027 : 'KW' '2027'; +KW2028 : 'KW' '2028'; +KW2029 : 'KW' '2029'; +KW2030 : 'KW' '2030'; +KW2031 : 'KW' '2031'; +KW2032 : 'KW' '2032'; +KW2033 : 'KW' '2033'; +KW2034 : 'KW' '2034'; +KW2035 : 'KW' '2035'; +KW2036 : 'KW' '2036'; +KW2037 : 'KW' '2037'; +KW2038 : 'KW' '2038'; +KW2039 : 'KW' '2039'; +KW2040 : 'KW' '2040'; +KW2041 : 'KW' '2041'; +KW2042 : 'KW' '2042'; +KW2043 : 'KW' '2043'; +KW2044 : 'KW' '2044'; +KW2045 : 'KW' '2045'; +KW2046 : 'KW' '2046'; +KW2047 : 'KW' '2047'; +KW2048 : 'KW' '2048'; +KW2049 : 'KW' '2049'; +KW2050 : 'KW' '2050'; +KW2051 : 'KW' '2051'; +KW2052 : 'KW' '2052'; +KW2053 : 'KW' '2053'; +KW2054 : 'KW' '2054'; +KW2055 : 'KW' '2055'; +KW2056 : 'KW' '2056'; +KW2057 : 'KW' '2057'; +KW2058 : 'KW' '2058'; +KW2059 : 'KW' '2059'; +KW2060 : 'KW' '2060'; +KW2061 : 'KW' '2061'; +KW2062 : 'KW' '2062'; +KW2063 : 'KW' '2063'; +KW2064 : 'KW' '2064'; +KW2065 : 'KW' '2065'; +KW2066 : 'KW' '2066'; +KW2067 : 'KW' '2067'; +KW2068 : 'KW' '2068'; +KW2069 : 'KW' '2069'; +KW2070 : 'KW' '2070'; +KW2071 : 'KW' '2071'; +KW2072 : 'KW' '2072'; +KW2073 : 'KW' '2073'; +KW2074 : 'KW' '2074'; +KW2075 : 'KW' '2075'; +KW2076 : 'KW' '2076'; +KW2077 : 'KW' '2077'; +KW2078 : 'KW' '2078'; +KW2079 : 'KW' '2079'; +KW2080 : 'KW' '2080'; +KW2081 : 'KW' '2081'; +KW2082 : 'KW' '2082'; +KW2083 : 'KW' '2083'; +KW2084 : 'KW' '2084'; +KW2085 : 'KW' '2085'; +KW2086 : 'KW' '2086'; +KW2087 : 'KW' '2087'; +KW2088 : 'KW' '2088'; +KW2089 : 'KW' '2089'; +KW2090 : 'KW' '2090'; +KW2091 : 'KW' '2091'; +KW2092 : 'KW' '2092'; +KW2093 : 'KW' '2093'; +KW2094 : 'KW' '2094'; +KW2095 : 'KW' '2095'; +KW2096 : 'KW' '2096'; +KW2097 : 'KW' '2097'; +KW2098 : 'KW' '2098'; +KW2099 : 'KW' '2099'; +KW2100 : 'KW' '2100'; +KW2101 : 'KW' '2101'; +KW2102 : 'KW' '2102'; +KW2103 : 'KW' '2103'; +KW2104 : 'KW' '2104'; +KW2105 : 'KW' '2105'; +KW2106 : 'KW' '2106'; +KW2107 : 'KW' '2107'; +KW2108 : 'KW' '2108'; +KW2109 : 'KW' '2109'; +KW2110 : 'KW' '2110'; +KW2111 : 'KW' '2111'; +KW2112 : 'KW' '2112'; +KW2113 : 'KW' '2113'; +KW2114 : 'KW' '2114'; +KW2115 : 'KW' '2115'; +KW2116 : 'KW' '2116'; +KW2117 : 'KW' '2117'; +KW2118 : 'KW' '2118'; +KW2119 : 'KW' '2119'; +KW2120 : 'KW' '2120'; +KW2121 : 'KW' '2121'; +KW2122 : 'KW' '2122'; +KW2123 : 'KW' '2123'; +KW2124 : 'KW' '2124'; +KW2125 : 'KW' '2125'; +KW2126 : 'KW' '2126'; +KW2127 : 'KW' '2127'; +KW2128 : 'KW' '2128'; +KW2129 : 'KW' '2129'; +KW2130 : 'KW' '2130'; +KW2131 : 'KW' '2131'; +KW2132 : 'KW' '2132'; +KW2133 : 'KW' '2133'; +KW2134 : 'KW' '2134'; +KW2135 : 'KW' '2135'; +KW2136 : 'KW' '2136'; +KW2137 : 'KW' '2137'; +KW2138 : 'KW' '2138'; +KW2139 : 'KW' '2139'; +KW2140 : 'KW' '2140'; +KW2141 : 'KW' '2141'; +KW2142 : 'KW' '2142'; +KW2143 : 'KW' '2143'; +KW2144 : 'KW' '2144'; +KW2145 : 'KW' '2145'; +KW2146 : 'KW' '2146'; +KW2147 : 'KW' '2147'; +KW2148 : 'KW' '2148'; +KW2149 : 'KW' '2149'; +KW2150 : 'KW' '2150'; +KW2151 : 'KW' '2151'; +KW2152 : 'KW' '2152'; +KW2153 : 'KW' '2153'; +KW2154 : 'KW' '2154'; +KW2155 : 'KW' '2155'; +KW2156 : 'KW' '2156'; +KW2157 : 'KW' '2157'; +KW2158 : 'KW' '2158'; +KW2159 : 'KW' '2159'; +KW2160 : 'KW' '2160'; +KW2161 : 'KW' '2161'; +KW2162 : 'KW' '2162'; +KW2163 : 'KW' '2163'; +KW2164 : 'KW' '2164'; +KW2165 : 'KW' '2165'; +KW2166 : 'KW' '2166'; +KW2167 : 'KW' '2167'; +KW2168 : 'KW' '2168'; +KW2169 : 'KW' '2169'; +KW2170 : 'KW' '2170'; +KW2171 : 'KW' '2171'; +KW2172 : 'KW' '2172'; +KW2173 : 'KW' '2173'; +KW2174 : 'KW' '2174'; +KW2175 : 'KW' '2175'; +KW2176 : 'KW' '2176'; +KW2177 : 'KW' '2177'; +KW2178 : 'KW' '2178'; +KW2179 : 'KW' '2179'; +KW2180 : 'KW' '2180'; +KW2181 : 'KW' '2181'; +KW2182 : 'KW' '2182'; +KW2183 : 'KW' '2183'; +KW2184 : 'KW' '2184'; +KW2185 : 'KW' '2185'; +KW2186 : 'KW' '2186'; +KW2187 : 'KW' '2187'; +KW2188 : 'KW' '2188'; +KW2189 : 'KW' '2189'; +KW2190 : 'KW' '2190'; +KW2191 : 'KW' '2191'; +KW2192 : 'KW' '2192'; +KW2193 : 'KW' '2193'; +KW2194 : 'KW' '2194'; +KW2195 : 'KW' '2195'; +KW2196 : 'KW' '2196'; +KW2197 : 'KW' '2197'; +KW2198 : 'KW' '2198'; +KW2199 : 'KW' '2199'; +KW2200 : 'KW' '2200'; +KW2201 : 'KW' '2201'; +KW2202 : 'KW' '2202'; +KW2203 : 'KW' '2203'; +KW2204 : 'KW' '2204'; +KW2205 : 'KW' '2205'; +KW2206 : 'KW' '2206'; +KW2207 : 'KW' '2207'; +KW2208 : 'KW' '2208'; +KW2209 : 'KW' '2209'; +KW2210 : 'KW' '2210'; +KW2211 : 'KW' '2211'; +KW2212 : 'KW' '2212'; +KW2213 : 'KW' '2213'; +KW2214 : 'KW' '2214'; +KW2215 : 'KW' '2215'; +KW2216 : 'KW' '2216'; +KW2217 : 'KW' '2217'; +KW2218 : 'KW' '2218'; +KW2219 : 'KW' '2219'; +KW2220 : 'KW' '2220'; +KW2221 : 'KW' '2221'; +KW2222 : 'KW' '2222'; +KW2223 : 'KW' '2223'; +KW2224 : 'KW' '2224'; +KW2225 : 'KW' '2225'; +KW2226 : 'KW' '2226'; +KW2227 : 'KW' '2227'; +KW2228 : 'KW' '2228'; +KW2229 : 'KW' '2229'; +KW2230 : 'KW' '2230'; +KW2231 : 'KW' '2231'; +KW2232 : 'KW' '2232'; +KW2233 : 'KW' '2233'; +KW2234 : 'KW' '2234'; +KW2235 : 'KW' '2235'; +KW2236 : 'KW' '2236'; +KW2237 : 'KW' '2237'; +KW2238 : 'KW' '2238'; +KW2239 : 'KW' '2239'; +KW2240 : 'KW' '2240'; +KW2241 : 'KW' '2241'; +KW2242 : 'KW' '2242'; +KW2243 : 'KW' '2243'; +KW2244 : 'KW' '2244'; +KW2245 : 'KW' '2245'; +KW2246 : 'KW' '2246'; +KW2247 : 'KW' '2247'; +KW2248 : 'KW' '2248'; +KW2249 : 'KW' '2249'; +KW2250 : 'KW' '2250'; +KW2251 : 'KW' '2251'; +KW2252 : 'KW' '2252'; +KW2253 : 'KW' '2253'; +KW2254 : 'KW' '2254'; +KW2255 : 'KW' '2255'; +KW2256 : 'KW' '2256'; +KW2257 : 'KW' '2257'; +KW2258 : 'KW' '2258'; +KW2259 : 'KW' '2259'; +KW2260 : 'KW' '2260'; +KW2261 : 'KW' '2261'; +KW2262 : 'KW' '2262'; +KW2263 : 'KW' '2263'; +KW2264 : 'KW' '2264'; +KW2265 : 'KW' '2265'; +KW2266 : 'KW' '2266'; +KW2267 : 'KW' '2267'; +KW2268 : 'KW' '2268'; +KW2269 : 'KW' '2269'; +KW2270 : 'KW' '2270'; +KW2271 : 'KW' '2271'; +KW2272 : 'KW' '2272'; +KW2273 : 'KW' '2273'; +KW2274 : 'KW' '2274'; +KW2275 : 'KW' '2275'; +KW2276 : 'KW' '2276'; +KW2277 : 'KW' '2277'; +KW2278 : 'KW' '2278'; +KW2279 : 'KW' '2279'; +KW2280 : 'KW' '2280'; +KW2281 : 'KW' '2281'; +KW2282 : 'KW' '2282'; +KW2283 : 'KW' '2283'; +KW2284 : 'KW' '2284'; +KW2285 : 'KW' '2285'; +KW2286 : 'KW' '2286'; +KW2287 : 'KW' '2287'; +KW2288 : 'KW' '2288'; +KW2289 : 'KW' '2289'; +KW2290 : 'KW' '2290'; +KW2291 : 'KW' '2291'; +KW2292 : 'KW' '2292'; +KW2293 : 'KW' '2293'; +KW2294 : 'KW' '2294'; +KW2295 : 'KW' '2295'; +KW2296 : 'KW' '2296'; +KW2297 : 'KW' '2297'; +KW2298 : 'KW' '2298'; +KW2299 : 'KW' '2299'; +KW2300 : 'KW' '2300'; +KW2301 : 'KW' '2301'; +KW2302 : 'KW' '2302'; +KW2303 : 'KW' '2303'; +KW2304 : 'KW' '2304'; +KW2305 : 'KW' '2305'; +KW2306 : 'KW' '2306'; +KW2307 : 'KW' '2307'; +KW2308 : 'KW' '2308'; +KW2309 : 'KW' '2309'; +KW2310 : 'KW' '2310'; +KW2311 : 'KW' '2311'; +KW2312 : 'KW' '2312'; +KW2313 : 'KW' '2313'; +KW2314 : 'KW' '2314'; +KW2315 : 'KW' '2315'; +KW2316 : 'KW' '2316'; +KW2317 : 'KW' '2317'; +KW2318 : 'KW' '2318'; +KW2319 : 'KW' '2319'; +KW2320 : 'KW' '2320'; +KW2321 : 'KW' '2321'; +KW2322 : 'KW' '2322'; +KW2323 : 'KW' '2323'; +KW2324 : 'KW' '2324'; +KW2325 : 'KW' '2325'; +KW2326 : 'KW' '2326'; +KW2327 : 'KW' '2327'; +KW2328 : 'KW' '2328'; +KW2329 : 'KW' '2329'; +KW2330 : 'KW' '2330'; +KW2331 : 'KW' '2331'; +KW2332 : 'KW' '2332'; +KW2333 : 'KW' '2333'; +KW2334 : 'KW' '2334'; +KW2335 : 'KW' '2335'; +KW2336 : 'KW' '2336'; +KW2337 : 'KW' '2337'; +KW2338 : 'KW' '2338'; +KW2339 : 'KW' '2339'; +KW2340 : 'KW' '2340'; +KW2341 : 'KW' '2341'; +KW2342 : 'KW' '2342'; +KW2343 : 'KW' '2343'; +KW2344 : 'KW' '2344'; +KW2345 : 'KW' '2345'; +KW2346 : 'KW' '2346'; +KW2347 : 'KW' '2347'; +KW2348 : 'KW' '2348'; +KW2349 : 'KW' '2349'; +KW2350 : 'KW' '2350'; +KW2351 : 'KW' '2351'; +KW2352 : 'KW' '2352'; +KW2353 : 'KW' '2353'; +KW2354 : 'KW' '2354'; +KW2355 : 'KW' '2355'; +KW2356 : 'KW' '2356'; +KW2357 : 'KW' '2357'; +KW2358 : 'KW' '2358'; +KW2359 : 'KW' '2359'; +KW2360 : 'KW' '2360'; +KW2361 : 'KW' '2361'; +KW2362 : 'KW' '2362'; +KW2363 : 'KW' '2363'; +KW2364 : 'KW' '2364'; +KW2365 : 'KW' '2365'; +KW2366 : 'KW' '2366'; +KW2367 : 'KW' '2367'; +KW2368 : 'KW' '2368'; +KW2369 : 'KW' '2369'; +KW2370 : 'KW' '2370'; +KW2371 : 'KW' '2371'; +KW2372 : 'KW' '2372'; +KW2373 : 'KW' '2373'; +KW2374 : 'KW' '2374'; +KW2375 : 'KW' '2375'; +KW2376 : 'KW' '2376'; +KW2377 : 'KW' '2377'; +KW2378 : 'KW' '2378'; +KW2379 : 'KW' '2379'; +KW2380 : 'KW' '2380'; +KW2381 : 'KW' '2381'; +KW2382 : 'KW' '2382'; +KW2383 : 'KW' '2383'; +KW2384 : 'KW' '2384'; +KW2385 : 'KW' '2385'; +KW2386 : 'KW' '2386'; +KW2387 : 'KW' '2387'; +KW2388 : 'KW' '2388'; +KW2389 : 'KW' '2389'; +KW2390 : 'KW' '2390'; +KW2391 : 'KW' '2391'; +KW2392 : 'KW' '2392'; +KW2393 : 'KW' '2393'; +KW2394 : 'KW' '2394'; +KW2395 : 'KW' '2395'; +KW2396 : 'KW' '2396'; +KW2397 : 'KW' '2397'; +KW2398 : 'KW' '2398'; +KW2399 : 'KW' '2399'; +KW2400 : 'KW' '2400'; +KW2401 : 'KW' '2401'; +KW2402 : 'KW' '2402'; +KW2403 : 'KW' '2403'; +KW2404 : 'KW' '2404'; +KW2405 : 'KW' '2405'; +KW2406 : 'KW' '2406'; +KW2407 : 'KW' '2407'; +KW2408 : 'KW' '2408'; +KW2409 : 'KW' '2409'; +KW2410 : 'KW' '2410'; +KW2411 : 'KW' '2411'; +KW2412 : 'KW' '2412'; +KW2413 : 'KW' '2413'; +KW2414 : 'KW' '2414'; +KW2415 : 'KW' '2415'; +KW2416 : 'KW' '2416'; +KW2417 : 'KW' '2417'; +KW2418 : 'KW' '2418'; +KW2419 : 'KW' '2419'; +KW2420 : 'KW' '2420'; +KW2421 : 'KW' '2421'; +KW2422 : 'KW' '2422'; +KW2423 : 'KW' '2423'; +KW2424 : 'KW' '2424'; +KW2425 : 'KW' '2425'; +KW2426 : 'KW' '2426'; +KW2427 : 'KW' '2427'; +KW2428 : 'KW' '2428'; +KW2429 : 'KW' '2429'; +KW2430 : 'KW' '2430'; +KW2431 : 'KW' '2431'; +KW2432 : 'KW' '2432'; +KW2433 : 'KW' '2433'; +KW2434 : 'KW' '2434'; +KW2435 : 'KW' '2435'; +KW2436 : 'KW' '2436'; +KW2437 : 'KW' '2437'; +KW2438 : 'KW' '2438'; +KW2439 : 'KW' '2439'; +KW2440 : 'KW' '2440'; +KW2441 : 'KW' '2441'; +KW2442 : 'KW' '2442'; +KW2443 : 'KW' '2443'; +KW2444 : 'KW' '2444'; +KW2445 : 'KW' '2445'; +KW2446 : 'KW' '2446'; +KW2447 : 'KW' '2447'; +KW2448 : 'KW' '2448'; +KW2449 : 'KW' '2449'; +KW2450 : 'KW' '2450'; +KW2451 : 'KW' '2451'; +KW2452 : 'KW' '2452'; +KW2453 : 'KW' '2453'; +KW2454 : 'KW' '2454'; +KW2455 : 'KW' '2455'; +KW2456 : 'KW' '2456'; +KW2457 : 'KW' '2457'; +KW2458 : 'KW' '2458'; +KW2459 : 'KW' '2459'; +KW2460 : 'KW' '2460'; +KW2461 : 'KW' '2461'; +KW2462 : 'KW' '2462'; +KW2463 : 'KW' '2463'; +KW2464 : 'KW' '2464'; +KW2465 : 'KW' '2465'; +KW2466 : 'KW' '2466'; +KW2467 : 'KW' '2467'; +KW2468 : 'KW' '2468'; +KW2469 : 'KW' '2469'; +KW2470 : 'KW' '2470'; +KW2471 : 'KW' '2471'; +KW2472 : 'KW' '2472'; +KW2473 : 'KW' '2473'; +KW2474 : 'KW' '2474'; +KW2475 : 'KW' '2475'; +KW2476 : 'KW' '2476'; +KW2477 : 'KW' '2477'; +KW2478 : 'KW' '2478'; +KW2479 : 'KW' '2479'; +KW2480 : 'KW' '2480'; +KW2481 : 'KW' '2481'; +KW2482 : 'KW' '2482'; +KW2483 : 'KW' '2483'; +KW2484 : 'KW' '2484'; +KW2485 : 'KW' '2485'; +KW2486 : 'KW' '2486'; +KW2487 : 'KW' '2487'; +KW2488 : 'KW' '2488'; +KW2489 : 'KW' '2489'; +KW2490 : 'KW' '2490'; +KW2491 : 'KW' '2491'; +KW2492 : 'KW' '2492'; +KW2493 : 'KW' '2493'; +KW2494 : 'KW' '2494'; +KW2495 : 'KW' '2495'; +KW2496 : 'KW' '2496'; +KW2497 : 'KW' '2497'; +KW2498 : 'KW' '2498'; +KW2499 : 'KW' '2499'; +KW2500 : 'KW' '2500'; +KW2501 : 'KW' '2501'; +KW2502 : 'KW' '2502'; +KW2503 : 'KW' '2503'; +KW2504 : 'KW' '2504'; +KW2505 : 'KW' '2505'; +KW2506 : 'KW' '2506'; +KW2507 : 'KW' '2507'; +KW2508 : 'KW' '2508'; +KW2509 : 'KW' '2509'; +KW2510 : 'KW' '2510'; +KW2511 : 'KW' '2511'; +KW2512 : 'KW' '2512'; +KW2513 : 'KW' '2513'; +KW2514 : 'KW' '2514'; +KW2515 : 'KW' '2515'; +KW2516 : 'KW' '2516'; +KW2517 : 'KW' '2517'; +KW2518 : 'KW' '2518'; +KW2519 : 'KW' '2519'; +KW2520 : 'KW' '2520'; +KW2521 : 'KW' '2521'; +KW2522 : 'KW' '2522'; +KW2523 : 'KW' '2523'; +KW2524 : 'KW' '2524'; +KW2525 : 'KW' '2525'; +KW2526 : 'KW' '2526'; +KW2527 : 'KW' '2527'; +KW2528 : 'KW' '2528'; +KW2529 : 'KW' '2529'; +KW2530 : 'KW' '2530'; +KW2531 : 'KW' '2531'; +KW2532 : 'KW' '2532'; +KW2533 : 'KW' '2533'; +KW2534 : 'KW' '2534'; +KW2535 : 'KW' '2535'; +KW2536 : 'KW' '2536'; +KW2537 : 'KW' '2537'; +KW2538 : 'KW' '2538'; +KW2539 : 'KW' '2539'; +KW2540 : 'KW' '2540'; +KW2541 : 'KW' '2541'; +KW2542 : 'KW' '2542'; +KW2543 : 'KW' '2543'; +KW2544 : 'KW' '2544'; +KW2545 : 'KW' '2545'; +KW2546 : 'KW' '2546'; +KW2547 : 'KW' '2547'; +KW2548 : 'KW' '2548'; +KW2549 : 'KW' '2549'; +KW2550 : 'KW' '2550'; +KW2551 : 'KW' '2551'; +KW2552 : 'KW' '2552'; +KW2553 : 'KW' '2553'; +KW2554 : 'KW' '2554'; +KW2555 : 'KW' '2555'; +KW2556 : 'KW' '2556'; +KW2557 : 'KW' '2557'; +KW2558 : 'KW' '2558'; +KW2559 : 'KW' '2559'; +KW2560 : 'KW' '2560'; +KW2561 : 'KW' '2561'; +KW2562 : 'KW' '2562'; +KW2563 : 'KW' '2563'; +KW2564 : 'KW' '2564'; +KW2565 : 'KW' '2565'; +KW2566 : 'KW' '2566'; +KW2567 : 'KW' '2567'; +KW2568 : 'KW' '2568'; +KW2569 : 'KW' '2569'; +KW2570 : 'KW' '2570'; +KW2571 : 'KW' '2571'; +KW2572 : 'KW' '2572'; +KW2573 : 'KW' '2573'; +KW2574 : 'KW' '2574'; +KW2575 : 'KW' '2575'; +KW2576 : 'KW' '2576'; +KW2577 : 'KW' '2577'; +KW2578 : 'KW' '2578'; +KW2579 : 'KW' '2579'; +KW2580 : 'KW' '2580'; +KW2581 : 'KW' '2581'; +KW2582 : 'KW' '2582'; +KW2583 : 'KW' '2583'; +KW2584 : 'KW' '2584'; +KW2585 : 'KW' '2585'; +KW2586 : 'KW' '2586'; +KW2587 : 'KW' '2587'; +KW2588 : 'KW' '2588'; +KW2589 : 'KW' '2589'; +KW2590 : 'KW' '2590'; +KW2591 : 'KW' '2591'; +KW2592 : 'KW' '2592'; +KW2593 : 'KW' '2593'; +KW2594 : 'KW' '2594'; +KW2595 : 'KW' '2595'; +KW2596 : 'KW' '2596'; +KW2597 : 'KW' '2597'; +KW2598 : 'KW' '2598'; +KW2599 : 'KW' '2599'; +KW2600 : 'KW' '2600'; +KW2601 : 'KW' '2601'; +KW2602 : 'KW' '2602'; +KW2603 : 'KW' '2603'; +KW2604 : 'KW' '2604'; +KW2605 : 'KW' '2605'; +KW2606 : 'KW' '2606'; +KW2607 : 'KW' '2607'; +KW2608 : 'KW' '2608'; +KW2609 : 'KW' '2609'; +KW2610 : 'KW' '2610'; +KW2611 : 'KW' '2611'; +KW2612 : 'KW' '2612'; +KW2613 : 'KW' '2613'; +KW2614 : 'KW' '2614'; +KW2615 : 'KW' '2615'; +KW2616 : 'KW' '2616'; +KW2617 : 'KW' '2617'; +KW2618 : 'KW' '2618'; +KW2619 : 'KW' '2619'; +KW2620 : 'KW' '2620'; +KW2621 : 'KW' '2621'; +KW2622 : 'KW' '2622'; +KW2623 : 'KW' '2623'; +KW2624 : 'KW' '2624'; +KW2625 : 'KW' '2625'; +KW2626 : 'KW' '2626'; +KW2627 : 'KW' '2627'; +KW2628 : 'KW' '2628'; +KW2629 : 'KW' '2629'; +KW2630 : 'KW' '2630'; +KW2631 : 'KW' '2631'; +KW2632 : 'KW' '2632'; +KW2633 : 'KW' '2633'; +KW2634 : 'KW' '2634'; +KW2635 : 'KW' '2635'; +KW2636 : 'KW' '2636'; +KW2637 : 'KW' '2637'; +KW2638 : 'KW' '2638'; +KW2639 : 'KW' '2639'; +KW2640 : 'KW' '2640'; +KW2641 : 'KW' '2641'; +KW2642 : 'KW' '2642'; +KW2643 : 'KW' '2643'; +KW2644 : 'KW' '2644'; +KW2645 : 'KW' '2645'; +KW2646 : 'KW' '2646'; +KW2647 : 'KW' '2647'; +KW2648 : 'KW' '2648'; +KW2649 : 'KW' '2649'; +KW2650 : 'KW' '2650'; +KW2651 : 'KW' '2651'; +KW2652 : 'KW' '2652'; +KW2653 : 'KW' '2653'; +KW2654 : 'KW' '2654'; +KW2655 : 'KW' '2655'; +KW2656 : 'KW' '2656'; +KW2657 : 'KW' '2657'; +KW2658 : 'KW' '2658'; +KW2659 : 'KW' '2659'; +KW2660 : 'KW' '2660'; +KW2661 : 'KW' '2661'; +KW2662 : 'KW' '2662'; +KW2663 : 'KW' '2663'; +KW2664 : 'KW' '2664'; +KW2665 : 'KW' '2665'; +KW2666 : 'KW' '2666'; +KW2667 : 'KW' '2667'; +KW2668 : 'KW' '2668'; +KW2669 : 'KW' '2669'; +KW2670 : 'KW' '2670'; +KW2671 : 'KW' '2671'; +KW2672 : 'KW' '2672'; +KW2673 : 'KW' '2673'; +KW2674 : 'KW' '2674'; +KW2675 : 'KW' '2675'; +KW2676 : 'KW' '2676'; +KW2677 : 'KW' '2677'; +KW2678 : 'KW' '2678'; +KW2679 : 'KW' '2679'; +KW2680 : 'KW' '2680'; +KW2681 : 'KW' '2681'; +KW2682 : 'KW' '2682'; +KW2683 : 'KW' '2683'; +KW2684 : 'KW' '2684'; +KW2685 : 'KW' '2685'; +KW2686 : 'KW' '2686'; +KW2687 : 'KW' '2687'; +KW2688 : 'KW' '2688'; +KW2689 : 'KW' '2689'; +KW2690 : 'KW' '2690'; +KW2691 : 'KW' '2691'; +KW2692 : 'KW' '2692'; +KW2693 : 'KW' '2693'; +KW2694 : 'KW' '2694'; +KW2695 : 'KW' '2695'; +KW2696 : 'KW' '2696'; +KW2697 : 'KW' '2697'; +KW2698 : 'KW' '2698'; +KW2699 : 'KW' '2699'; +KW2700 : 'KW' '2700'; +KW2701 : 'KW' '2701'; +KW2702 : 'KW' '2702'; +KW2703 : 'KW' '2703'; +KW2704 : 'KW' '2704'; +KW2705 : 'KW' '2705'; +KW2706 : 'KW' '2706'; +KW2707 : 'KW' '2707'; +KW2708 : 'KW' '2708'; +KW2709 : 'KW' '2709'; +KW2710 : 'KW' '2710'; +KW2711 : 'KW' '2711'; +KW2712 : 'KW' '2712'; +KW2713 : 'KW' '2713'; +KW2714 : 'KW' '2714'; +KW2715 : 'KW' '2715'; +KW2716 : 'KW' '2716'; +KW2717 : 'KW' '2717'; +KW2718 : 'KW' '2718'; +KW2719 : 'KW' '2719'; +KW2720 : 'KW' '2720'; +KW2721 : 'KW' '2721'; +KW2722 : 'KW' '2722'; +KW2723 : 'KW' '2723'; +KW2724 : 'KW' '2724'; +KW2725 : 'KW' '2725'; +KW2726 : 'KW' '2726'; +KW2727 : 'KW' '2727'; +KW2728 : 'KW' '2728'; +KW2729 : 'KW' '2729'; +KW2730 : 'KW' '2730'; +KW2731 : 'KW' '2731'; +KW2732 : 'KW' '2732'; +KW2733 : 'KW' '2733'; +KW2734 : 'KW' '2734'; +KW2735 : 'KW' '2735'; +KW2736 : 'KW' '2736'; +KW2737 : 'KW' '2737'; +KW2738 : 'KW' '2738'; +KW2739 : 'KW' '2739'; +KW2740 : 'KW' '2740'; +KW2741 : 'KW' '2741'; +KW2742 : 'KW' '2742'; +KW2743 : 'KW' '2743'; +KW2744 : 'KW' '2744'; +KW2745 : 'KW' '2745'; +KW2746 : 'KW' '2746'; +KW2747 : 'KW' '2747'; +KW2748 : 'KW' '2748'; +KW2749 : 'KW' '2749'; +KW2750 : 'KW' '2750'; +KW2751 : 'KW' '2751'; +KW2752 : 'KW' '2752'; +KW2753 : 'KW' '2753'; +KW2754 : 'KW' '2754'; +KW2755 : 'KW' '2755'; +KW2756 : 'KW' '2756'; +KW2757 : 'KW' '2757'; +KW2758 : 'KW' '2758'; +KW2759 : 'KW' '2759'; +KW2760 : 'KW' '2760'; +KW2761 : 'KW' '2761'; +KW2762 : 'KW' '2762'; +KW2763 : 'KW' '2763'; +KW2764 : 'KW' '2764'; +KW2765 : 'KW' '2765'; +KW2766 : 'KW' '2766'; +KW2767 : 'KW' '2767'; +KW2768 : 'KW' '2768'; +KW2769 : 'KW' '2769'; +KW2770 : 'KW' '2770'; +KW2771 : 'KW' '2771'; +KW2772 : 'KW' '2772'; +KW2773 : 'KW' '2773'; +KW2774 : 'KW' '2774'; +KW2775 : 'KW' '2775'; +KW2776 : 'KW' '2776'; +KW2777 : 'KW' '2777'; +KW2778 : 'KW' '2778'; +KW2779 : 'KW' '2779'; +KW2780 : 'KW' '2780'; +KW2781 : 'KW' '2781'; +KW2782 : 'KW' '2782'; +KW2783 : 'KW' '2783'; +KW2784 : 'KW' '2784'; +KW2785 : 'KW' '2785'; +KW2786 : 'KW' '2786'; +KW2787 : 'KW' '2787'; +KW2788 : 'KW' '2788'; +KW2789 : 'KW' '2789'; +KW2790 : 'KW' '2790'; +KW2791 : 'KW' '2791'; +KW2792 : 'KW' '2792'; +KW2793 : 'KW' '2793'; +KW2794 : 'KW' '2794'; +KW2795 : 'KW' '2795'; +KW2796 : 'KW' '2796'; +KW2797 : 'KW' '2797'; +KW2798 : 'KW' '2798'; +KW2799 : 'KW' '2799'; +KW2800 : 'KW' '2800'; +KW2801 : 'KW' '2801'; +KW2802 : 'KW' '2802'; +KW2803 : 'KW' '2803'; +KW2804 : 'KW' '2804'; +KW2805 : 'KW' '2805'; +KW2806 : 'KW' '2806'; +KW2807 : 'KW' '2807'; +KW2808 : 'KW' '2808'; +KW2809 : 'KW' '2809'; +KW2810 : 'KW' '2810'; +KW2811 : 'KW' '2811'; +KW2812 : 'KW' '2812'; +KW2813 : 'KW' '2813'; +KW2814 : 'KW' '2814'; +KW2815 : 'KW' '2815'; +KW2816 : 'KW' '2816'; +KW2817 : 'KW' '2817'; +KW2818 : 'KW' '2818'; +KW2819 : 'KW' '2819'; +KW2820 : 'KW' '2820'; +KW2821 : 'KW' '2821'; +KW2822 : 'KW' '2822'; +KW2823 : 'KW' '2823'; +KW2824 : 'KW' '2824'; +KW2825 : 'KW' '2825'; +KW2826 : 'KW' '2826'; +KW2827 : 'KW' '2827'; +KW2828 : 'KW' '2828'; +KW2829 : 'KW' '2829'; +KW2830 : 'KW' '2830'; +KW2831 : 'KW' '2831'; +KW2832 : 'KW' '2832'; +KW2833 : 'KW' '2833'; +KW2834 : 'KW' '2834'; +KW2835 : 'KW' '2835'; +KW2836 : 'KW' '2836'; +KW2837 : 'KW' '2837'; +KW2838 : 'KW' '2838'; +KW2839 : 'KW' '2839'; +KW2840 : 'KW' '2840'; +KW2841 : 'KW' '2841'; +KW2842 : 'KW' '2842'; +KW2843 : 'KW' '2843'; +KW2844 : 'KW' '2844'; +KW2845 : 'KW' '2845'; +KW2846 : 'KW' '2846'; +KW2847 : 'KW' '2847'; +KW2848 : 'KW' '2848'; +KW2849 : 'KW' '2849'; +KW2850 : 'KW' '2850'; +KW2851 : 'KW' '2851'; +KW2852 : 'KW' '2852'; +KW2853 : 'KW' '2853'; +KW2854 : 'KW' '2854'; +KW2855 : 'KW' '2855'; +KW2856 : 'KW' '2856'; +KW2857 : 'KW' '2857'; +KW2858 : 'KW' '2858'; +KW2859 : 'KW' '2859'; +KW2860 : 'KW' '2860'; +KW2861 : 'KW' '2861'; +KW2862 : 'KW' '2862'; +KW2863 : 'KW' '2863'; +KW2864 : 'KW' '2864'; +KW2865 : 'KW' '2865'; +KW2866 : 'KW' '2866'; +KW2867 : 'KW' '2867'; +KW2868 : 'KW' '2868'; +KW2869 : 'KW' '2869'; +KW2870 : 'KW' '2870'; +KW2871 : 'KW' '2871'; +KW2872 : 'KW' '2872'; +KW2873 : 'KW' '2873'; +KW2874 : 'KW' '2874'; +KW2875 : 'KW' '2875'; +KW2876 : 'KW' '2876'; +KW2877 : 'KW' '2877'; +KW2878 : 'KW' '2878'; +KW2879 : 'KW' '2879'; +KW2880 : 'KW' '2880'; +KW2881 : 'KW' '2881'; +KW2882 : 'KW' '2882'; +KW2883 : 'KW' '2883'; +KW2884 : 'KW' '2884'; +KW2885 : 'KW' '2885'; +KW2886 : 'KW' '2886'; +KW2887 : 'KW' '2887'; +KW2888 : 'KW' '2888'; +KW2889 : 'KW' '2889'; +KW2890 : 'KW' '2890'; +KW2891 : 'KW' '2891'; +KW2892 : 'KW' '2892'; +KW2893 : 'KW' '2893'; +KW2894 : 'KW' '2894'; +KW2895 : 'KW' '2895'; +KW2896 : 'KW' '2896'; +KW2897 : 'KW' '2897'; +KW2898 : 'KW' '2898'; +KW2899 : 'KW' '2899'; +KW2900 : 'KW' '2900'; +KW2901 : 'KW' '2901'; +KW2902 : 'KW' '2902'; +KW2903 : 'KW' '2903'; +KW2904 : 'KW' '2904'; +KW2905 : 'KW' '2905'; +KW2906 : 'KW' '2906'; +KW2907 : 'KW' '2907'; +KW2908 : 'KW' '2908'; +KW2909 : 'KW' '2909'; +KW2910 : 'KW' '2910'; +KW2911 : 'KW' '2911'; +KW2912 : 'KW' '2912'; +KW2913 : 'KW' '2913'; +KW2914 : 'KW' '2914'; +KW2915 : 'KW' '2915'; +KW2916 : 'KW' '2916'; +KW2917 : 'KW' '2917'; +KW2918 : 'KW' '2918'; +KW2919 : 'KW' '2919'; +KW2920 : 'KW' '2920'; +KW2921 : 'KW' '2921'; +KW2922 : 'KW' '2922'; +KW2923 : 'KW' '2923'; +KW2924 : 'KW' '2924'; +KW2925 : 'KW' '2925'; +KW2926 : 'KW' '2926'; +KW2927 : 'KW' '2927'; +KW2928 : 'KW' '2928'; +KW2929 : 'KW' '2929'; +KW2930 : 'KW' '2930'; +KW2931 : 'KW' '2931'; +KW2932 : 'KW' '2932'; +KW2933 : 'KW' '2933'; +KW2934 : 'KW' '2934'; +KW2935 : 'KW' '2935'; +KW2936 : 'KW' '2936'; +KW2937 : 'KW' '2937'; +KW2938 : 'KW' '2938'; +KW2939 : 'KW' '2939'; +KW2940 : 'KW' '2940'; +KW2941 : 'KW' '2941'; +KW2942 : 'KW' '2942'; +KW2943 : 'KW' '2943'; +KW2944 : 'KW' '2944'; +KW2945 : 'KW' '2945'; +KW2946 : 'KW' '2946'; +KW2947 : 'KW' '2947'; +KW2948 : 'KW' '2948'; +KW2949 : 'KW' '2949'; +KW2950 : 'KW' '2950'; +KW2951 : 'KW' '2951'; +KW2952 : 'KW' '2952'; +KW2953 : 'KW' '2953'; +KW2954 : 'KW' '2954'; +KW2955 : 'KW' '2955'; +KW2956 : 'KW' '2956'; +KW2957 : 'KW' '2957'; +KW2958 : 'KW' '2958'; +KW2959 : 'KW' '2959'; +KW2960 : 'KW' '2960'; +KW2961 : 'KW' '2961'; +KW2962 : 'KW' '2962'; +KW2963 : 'KW' '2963'; +KW2964 : 'KW' '2964'; +KW2965 : 'KW' '2965'; +KW2966 : 'KW' '2966'; +KW2967 : 'KW' '2967'; +KW2968 : 'KW' '2968'; +KW2969 : 'KW' '2969'; +KW2970 : 'KW' '2970'; +KW2971 : 'KW' '2971'; +KW2972 : 'KW' '2972'; +KW2973 : 'KW' '2973'; +KW2974 : 'KW' '2974'; +KW2975 : 'KW' '2975'; +KW2976 : 'KW' '2976'; +KW2977 : 'KW' '2977'; +KW2978 : 'KW' '2978'; +KW2979 : 'KW' '2979'; +KW2980 : 'KW' '2980'; +KW2981 : 'KW' '2981'; +KW2982 : 'KW' '2982'; +KW2983 : 'KW' '2983'; +KW2984 : 'KW' '2984'; +KW2985 : 'KW' '2985'; +KW2986 : 'KW' '2986'; +KW2987 : 'KW' '2987'; +KW2988 : 'KW' '2988'; +KW2989 : 'KW' '2989'; +KW2990 : 'KW' '2990'; +KW2991 : 'KW' '2991'; +KW2992 : 'KW' '2992'; +KW2993 : 'KW' '2993'; +KW2994 : 'KW' '2994'; +KW2995 : 'KW' '2995'; +KW2996 : 'KW' '2996'; +KW2997 : 'KW' '2997'; +KW2998 : 'KW' '2998'; +KW2999 : 'KW' '2999'; +KW3000 : 'KW' '3000'; +KW3001 : 'KW' '3001'; +KW3002 : 'KW' '3002'; +KW3003 : 'KW' '3003'; +KW3004 : 'KW' '3004'; +KW3005 : 'KW' '3005'; +KW3006 : 'KW' '3006'; +KW3007 : 'KW' '3007'; +KW3008 : 'KW' '3008'; +KW3009 : 'KW' '3009'; +KW3010 : 'KW' '3010'; +KW3011 : 'KW' '3011'; +KW3012 : 'KW' '3012'; +KW3013 : 'KW' '3013'; +KW3014 : 'KW' '3014'; +KW3015 : 'KW' '3015'; +KW3016 : 'KW' '3016'; +KW3017 : 'KW' '3017'; +KW3018 : 'KW' '3018'; +KW3019 : 'KW' '3019'; +KW3020 : 'KW' '3020'; +KW3021 : 'KW' '3021'; +KW3022 : 'KW' '3022'; +KW3023 : 'KW' '3023'; +KW3024 : 'KW' '3024'; +KW3025 : 'KW' '3025'; +KW3026 : 'KW' '3026'; +KW3027 : 'KW' '3027'; +KW3028 : 'KW' '3028'; +KW3029 : 'KW' '3029'; +KW3030 : 'KW' '3030'; +KW3031 : 'KW' '3031'; +KW3032 : 'KW' '3032'; +KW3033 : 'KW' '3033'; +KW3034 : 'KW' '3034'; +KW3035 : 'KW' '3035'; +KW3036 : 'KW' '3036'; +KW3037 : 'KW' '3037'; +KW3038 : 'KW' '3038'; +KW3039 : 'KW' '3039'; +KW3040 : 'KW' '3040'; +KW3041 : 'KW' '3041'; +KW3042 : 'KW' '3042'; +KW3043 : 'KW' '3043'; +KW3044 : 'KW' '3044'; +KW3045 : 'KW' '3045'; +KW3046 : 'KW' '3046'; +KW3047 : 'KW' '3047'; +KW3048 : 'KW' '3048'; +KW3049 : 'KW' '3049'; +KW3050 : 'KW' '3050'; +KW3051 : 'KW' '3051'; +KW3052 : 'KW' '3052'; +KW3053 : 'KW' '3053'; +KW3054 : 'KW' '3054'; +KW3055 : 'KW' '3055'; +KW3056 : 'KW' '3056'; +KW3057 : 'KW' '3057'; +KW3058 : 'KW' '3058'; +KW3059 : 'KW' '3059'; +KW3060 : 'KW' '3060'; +KW3061 : 'KW' '3061'; +KW3062 : 'KW' '3062'; +KW3063 : 'KW' '3063'; +KW3064 : 'KW' '3064'; +KW3065 : 'KW' '3065'; +KW3066 : 'KW' '3066'; +KW3067 : 'KW' '3067'; +KW3068 : 'KW' '3068'; +KW3069 : 'KW' '3069'; +KW3070 : 'KW' '3070'; +KW3071 : 'KW' '3071'; +KW3072 : 'KW' '3072'; +KW3073 : 'KW' '3073'; +KW3074 : 'KW' '3074'; +KW3075 : 'KW' '3075'; +KW3076 : 'KW' '3076'; +KW3077 : 'KW' '3077'; +KW3078 : 'KW' '3078'; +KW3079 : 'KW' '3079'; +KW3080 : 'KW' '3080'; +KW3081 : 'KW' '3081'; +KW3082 : 'KW' '3082'; +KW3083 : 'KW' '3083'; +KW3084 : 'KW' '3084'; +KW3085 : 'KW' '3085'; +KW3086 : 'KW' '3086'; +KW3087 : 'KW' '3087'; +KW3088 : 'KW' '3088'; +KW3089 : 'KW' '3089'; +KW3090 : 'KW' '3090'; +KW3091 : 'KW' '3091'; +KW3092 : 'KW' '3092'; +KW3093 : 'KW' '3093'; +KW3094 : 'KW' '3094'; +KW3095 : 'KW' '3095'; +KW3096 : 'KW' '3096'; +KW3097 : 'KW' '3097'; +KW3098 : 'KW' '3098'; +KW3099 : 'KW' '3099'; +KW3100 : 'KW' '3100'; +KW3101 : 'KW' '3101'; +KW3102 : 'KW' '3102'; +KW3103 : 'KW' '3103'; +KW3104 : 'KW' '3104'; +KW3105 : 'KW' '3105'; +KW3106 : 'KW' '3106'; +KW3107 : 'KW' '3107'; +KW3108 : 'KW' '3108'; +KW3109 : 'KW' '3109'; +KW3110 : 'KW' '3110'; +KW3111 : 'KW' '3111'; +KW3112 : 'KW' '3112'; +KW3113 : 'KW' '3113'; +KW3114 : 'KW' '3114'; +KW3115 : 'KW' '3115'; +KW3116 : 'KW' '3116'; +KW3117 : 'KW' '3117'; +KW3118 : 'KW' '3118'; +KW3119 : 'KW' '3119'; +KW3120 : 'KW' '3120'; +KW3121 : 'KW' '3121'; +KW3122 : 'KW' '3122'; +KW3123 : 'KW' '3123'; +KW3124 : 'KW' '3124'; +KW3125 : 'KW' '3125'; +KW3126 : 'KW' '3126'; +KW3127 : 'KW' '3127'; +KW3128 : 'KW' '3128'; +KW3129 : 'KW' '3129'; +KW3130 : 'KW' '3130'; +KW3131 : 'KW' '3131'; +KW3132 : 'KW' '3132'; +KW3133 : 'KW' '3133'; +KW3134 : 'KW' '3134'; +KW3135 : 'KW' '3135'; +KW3136 : 'KW' '3136'; +KW3137 : 'KW' '3137'; +KW3138 : 'KW' '3138'; +KW3139 : 'KW' '3139'; +KW3140 : 'KW' '3140'; +KW3141 : 'KW' '3141'; +KW3142 : 'KW' '3142'; +KW3143 : 'KW' '3143'; +KW3144 : 'KW' '3144'; +KW3145 : 'KW' '3145'; +KW3146 : 'KW' '3146'; +KW3147 : 'KW' '3147'; +KW3148 : 'KW' '3148'; +KW3149 : 'KW' '3149'; +KW3150 : 'KW' '3150'; +KW3151 : 'KW' '3151'; +KW3152 : 'KW' '3152'; +KW3153 : 'KW' '3153'; +KW3154 : 'KW' '3154'; +KW3155 : 'KW' '3155'; +KW3156 : 'KW' '3156'; +KW3157 : 'KW' '3157'; +KW3158 : 'KW' '3158'; +KW3159 : 'KW' '3159'; +KW3160 : 'KW' '3160'; +KW3161 : 'KW' '3161'; +KW3162 : 'KW' '3162'; +KW3163 : 'KW' '3163'; +KW3164 : 'KW' '3164'; +KW3165 : 'KW' '3165'; +KW3166 : 'KW' '3166'; +KW3167 : 'KW' '3167'; +KW3168 : 'KW' '3168'; +KW3169 : 'KW' '3169'; +KW3170 : 'KW' '3170'; +KW3171 : 'KW' '3171'; +KW3172 : 'KW' '3172'; +KW3173 : 'KW' '3173'; +KW3174 : 'KW' '3174'; +KW3175 : 'KW' '3175'; +KW3176 : 'KW' '3176'; +KW3177 : 'KW' '3177'; +KW3178 : 'KW' '3178'; +KW3179 : 'KW' '3179'; +KW3180 : 'KW' '3180'; +KW3181 : 'KW' '3181'; +KW3182 : 'KW' '3182'; +KW3183 : 'KW' '3183'; +KW3184 : 'KW' '3184'; +KW3185 : 'KW' '3185'; +KW3186 : 'KW' '3186'; +KW3187 : 'KW' '3187'; +KW3188 : 'KW' '3188'; +KW3189 : 'KW' '3189'; +KW3190 : 'KW' '3190'; +KW3191 : 'KW' '3191'; +KW3192 : 'KW' '3192'; +KW3193 : 'KW' '3193'; +KW3194 : 'KW' '3194'; +KW3195 : 'KW' '3195'; +KW3196 : 'KW' '3196'; +KW3197 : 'KW' '3197'; +KW3198 : 'KW' '3198'; +KW3199 : 'KW' '3199'; +KW3200 : 'KW' '3200'; +KW3201 : 'KW' '3201'; +KW3202 : 'KW' '3202'; +KW3203 : 'KW' '3203'; +KW3204 : 'KW' '3204'; +KW3205 : 'KW' '3205'; +KW3206 : 'KW' '3206'; +KW3207 : 'KW' '3207'; +KW3208 : 'KW' '3208'; +KW3209 : 'KW' '3209'; +KW3210 : 'KW' '3210'; +KW3211 : 'KW' '3211'; +KW3212 : 'KW' '3212'; +KW3213 : 'KW' '3213'; +KW3214 : 'KW' '3214'; +KW3215 : 'KW' '3215'; +KW3216 : 'KW' '3216'; +KW3217 : 'KW' '3217'; +KW3218 : 'KW' '3218'; +KW3219 : 'KW' '3219'; +KW3220 : 'KW' '3220'; +KW3221 : 'KW' '3221'; +KW3222 : 'KW' '3222'; +KW3223 : 'KW' '3223'; +KW3224 : 'KW' '3224'; +KW3225 : 'KW' '3225'; +KW3226 : 'KW' '3226'; +KW3227 : 'KW' '3227'; +KW3228 : 'KW' '3228'; +KW3229 : 'KW' '3229'; +KW3230 : 'KW' '3230'; +KW3231 : 'KW' '3231'; +KW3232 : 'KW' '3232'; +KW3233 : 'KW' '3233'; +KW3234 : 'KW' '3234'; +KW3235 : 'KW' '3235'; +KW3236 : 'KW' '3236'; +KW3237 : 'KW' '3237'; +KW3238 : 'KW' '3238'; +KW3239 : 'KW' '3239'; +KW3240 : 'KW' '3240'; +KW3241 : 'KW' '3241'; +KW3242 : 'KW' '3242'; +KW3243 : 'KW' '3243'; +KW3244 : 'KW' '3244'; +KW3245 : 'KW' '3245'; +KW3246 : 'KW' '3246'; +KW3247 : 'KW' '3247'; +KW3248 : 'KW' '3248'; +KW3249 : 'KW' '3249'; +KW3250 : 'KW' '3250'; +KW3251 : 'KW' '3251'; +KW3252 : 'KW' '3252'; +KW3253 : 'KW' '3253'; +KW3254 : 'KW' '3254'; +KW3255 : 'KW' '3255'; +KW3256 : 'KW' '3256'; +KW3257 : 'KW' '3257'; +KW3258 : 'KW' '3258'; +KW3259 : 'KW' '3259'; +KW3260 : 'KW' '3260'; +KW3261 : 'KW' '3261'; +KW3262 : 'KW' '3262'; +KW3263 : 'KW' '3263'; +KW3264 : 'KW' '3264'; +KW3265 : 'KW' '3265'; +KW3266 : 'KW' '3266'; +KW3267 : 'KW' '3267'; +KW3268 : 'KW' '3268'; +KW3269 : 'KW' '3269'; +KW3270 : 'KW' '3270'; +KW3271 : 'KW' '3271'; +KW3272 : 'KW' '3272'; +KW3273 : 'KW' '3273'; +KW3274 : 'KW' '3274'; +KW3275 : 'KW' '3275'; +KW3276 : 'KW' '3276'; +KW3277 : 'KW' '3277'; +KW3278 : 'KW' '3278'; +KW3279 : 'KW' '3279'; +KW3280 : 'KW' '3280'; +KW3281 : 'KW' '3281'; +KW3282 : 'KW' '3282'; +KW3283 : 'KW' '3283'; +KW3284 : 'KW' '3284'; +KW3285 : 'KW' '3285'; +KW3286 : 'KW' '3286'; +KW3287 : 'KW' '3287'; +KW3288 : 'KW' '3288'; +KW3289 : 'KW' '3289'; +KW3290 : 'KW' '3290'; +KW3291 : 'KW' '3291'; +KW3292 : 'KW' '3292'; +KW3293 : 'KW' '3293'; +KW3294 : 'KW' '3294'; +KW3295 : 'KW' '3295'; +KW3296 : 'KW' '3296'; +KW3297 : 'KW' '3297'; +KW3298 : 'KW' '3298'; +KW3299 : 'KW' '3299'; +KW3300 : 'KW' '3300'; +KW3301 : 'KW' '3301'; +KW3302 : 'KW' '3302'; +KW3303 : 'KW' '3303'; +KW3304 : 'KW' '3304'; +KW3305 : 'KW' '3305'; +KW3306 : 'KW' '3306'; +KW3307 : 'KW' '3307'; +KW3308 : 'KW' '3308'; +KW3309 : 'KW' '3309'; +KW3310 : 'KW' '3310'; +KW3311 : 'KW' '3311'; +KW3312 : 'KW' '3312'; +KW3313 : 'KW' '3313'; +KW3314 : 'KW' '3314'; +KW3315 : 'KW' '3315'; +KW3316 : 'KW' '3316'; +KW3317 : 'KW' '3317'; +KW3318 : 'KW' '3318'; +KW3319 : 'KW' '3319'; +KW3320 : 'KW' '3320'; +KW3321 : 'KW' '3321'; +KW3322 : 'KW' '3322'; +KW3323 : 'KW' '3323'; +KW3324 : 'KW' '3324'; +KW3325 : 'KW' '3325'; +KW3326 : 'KW' '3326'; +KW3327 : 'KW' '3327'; +KW3328 : 'KW' '3328'; +KW3329 : 'KW' '3329'; +KW3330 : 'KW' '3330'; +KW3331 : 'KW' '3331'; +KW3332 : 'KW' '3332'; +KW3333 : 'KW' '3333'; +KW3334 : 'KW' '3334'; +KW3335 : 'KW' '3335'; +KW3336 : 'KW' '3336'; +KW3337 : 'KW' '3337'; +KW3338 : 'KW' '3338'; +KW3339 : 'KW' '3339'; +KW3340 : 'KW' '3340'; +KW3341 : 'KW' '3341'; +KW3342 : 'KW' '3342'; +KW3343 : 'KW' '3343'; +KW3344 : 'KW' '3344'; +KW3345 : 'KW' '3345'; +KW3346 : 'KW' '3346'; +KW3347 : 'KW' '3347'; +KW3348 : 'KW' '3348'; +KW3349 : 'KW' '3349'; +KW3350 : 'KW' '3350'; +KW3351 : 'KW' '3351'; +KW3352 : 'KW' '3352'; +KW3353 : 'KW' '3353'; +KW3354 : 'KW' '3354'; +KW3355 : 'KW' '3355'; +KW3356 : 'KW' '3356'; +KW3357 : 'KW' '3357'; +KW3358 : 'KW' '3358'; +KW3359 : 'KW' '3359'; +KW3360 : 'KW' '3360'; +KW3361 : 'KW' '3361'; +KW3362 : 'KW' '3362'; +KW3363 : 'KW' '3363'; +KW3364 : 'KW' '3364'; +KW3365 : 'KW' '3365'; +KW3366 : 'KW' '3366'; +KW3367 : 'KW' '3367'; +KW3368 : 'KW' '3368'; +KW3369 : 'KW' '3369'; +KW3370 : 'KW' '3370'; +KW3371 : 'KW' '3371'; +KW3372 : 'KW' '3372'; +KW3373 : 'KW' '3373'; +KW3374 : 'KW' '3374'; +KW3375 : 'KW' '3375'; +KW3376 : 'KW' '3376'; +KW3377 : 'KW' '3377'; +KW3378 : 'KW' '3378'; +KW3379 : 'KW' '3379'; +KW3380 : 'KW' '3380'; +KW3381 : 'KW' '3381'; +KW3382 : 'KW' '3382'; +KW3383 : 'KW' '3383'; +KW3384 : 'KW' '3384'; +KW3385 : 'KW' '3385'; +KW3386 : 'KW' '3386'; +KW3387 : 'KW' '3387'; +KW3388 : 'KW' '3388'; +KW3389 : 'KW' '3389'; +KW3390 : 'KW' '3390'; +KW3391 : 'KW' '3391'; +KW3392 : 'KW' '3392'; +KW3393 : 'KW' '3393'; +KW3394 : 'KW' '3394'; +KW3395 : 'KW' '3395'; +KW3396 : 'KW' '3396'; +KW3397 : 'KW' '3397'; +KW3398 : 'KW' '3398'; +KW3399 : 'KW' '3399'; +KW3400 : 'KW' '3400'; +KW3401 : 'KW' '3401'; +KW3402 : 'KW' '3402'; +KW3403 : 'KW' '3403'; +KW3404 : 'KW' '3404'; +KW3405 : 'KW' '3405'; +KW3406 : 'KW' '3406'; +KW3407 : 'KW' '3407'; +KW3408 : 'KW' '3408'; +KW3409 : 'KW' '3409'; +KW3410 : 'KW' '3410'; +KW3411 : 'KW' '3411'; +KW3412 : 'KW' '3412'; +KW3413 : 'KW' '3413'; +KW3414 : 'KW' '3414'; +KW3415 : 'KW' '3415'; +KW3416 : 'KW' '3416'; +KW3417 : 'KW' '3417'; +KW3418 : 'KW' '3418'; +KW3419 : 'KW' '3419'; +KW3420 : 'KW' '3420'; +KW3421 : 'KW' '3421'; +KW3422 : 'KW' '3422'; +KW3423 : 'KW' '3423'; +KW3424 : 'KW' '3424'; +KW3425 : 'KW' '3425'; +KW3426 : 'KW' '3426'; +KW3427 : 'KW' '3427'; +KW3428 : 'KW' '3428'; +KW3429 : 'KW' '3429'; +KW3430 : 'KW' '3430'; +KW3431 : 'KW' '3431'; +KW3432 : 'KW' '3432'; +KW3433 : 'KW' '3433'; +KW3434 : 'KW' '3434'; +KW3435 : 'KW' '3435'; +KW3436 : 'KW' '3436'; +KW3437 : 'KW' '3437'; +KW3438 : 'KW' '3438'; +KW3439 : 'KW' '3439'; +KW3440 : 'KW' '3440'; +KW3441 : 'KW' '3441'; +KW3442 : 'KW' '3442'; +KW3443 : 'KW' '3443'; +KW3444 : 'KW' '3444'; +KW3445 : 'KW' '3445'; +KW3446 : 'KW' '3446'; +KW3447 : 'KW' '3447'; +KW3448 : 'KW' '3448'; +KW3449 : 'KW' '3449'; +KW3450 : 'KW' '3450'; +KW3451 : 'KW' '3451'; +KW3452 : 'KW' '3452'; +KW3453 : 'KW' '3453'; +KW3454 : 'KW' '3454'; +KW3455 : 'KW' '3455'; +KW3456 : 'KW' '3456'; +KW3457 : 'KW' '3457'; +KW3458 : 'KW' '3458'; +KW3459 : 'KW' '3459'; +KW3460 : 'KW' '3460'; +KW3461 : 'KW' '3461'; +KW3462 : 'KW' '3462'; +KW3463 : 'KW' '3463'; +KW3464 : 'KW' '3464'; +KW3465 : 'KW' '3465'; +KW3466 : 'KW' '3466'; +KW3467 : 'KW' '3467'; +KW3468 : 'KW' '3468'; +KW3469 : 'KW' '3469'; +KW3470 : 'KW' '3470'; +KW3471 : 'KW' '3471'; +KW3472 : 'KW' '3472'; +KW3473 : 'KW' '3473'; +KW3474 : 'KW' '3474'; +KW3475 : 'KW' '3475'; +KW3476 : 'KW' '3476'; +KW3477 : 'KW' '3477'; +KW3478 : 'KW' '3478'; +KW3479 : 'KW' '3479'; +KW3480 : 'KW' '3480'; +KW3481 : 'KW' '3481'; +KW3482 : 'KW' '3482'; +KW3483 : 'KW' '3483'; +KW3484 : 'KW' '3484'; +KW3485 : 'KW' '3485'; +KW3486 : 'KW' '3486'; +KW3487 : 'KW' '3487'; +KW3488 : 'KW' '3488'; +KW3489 : 'KW' '3489'; +KW3490 : 'KW' '3490'; +KW3491 : 'KW' '3491'; +KW3492 : 'KW' '3492'; +KW3493 : 'KW' '3493'; +KW3494 : 'KW' '3494'; +KW3495 : 'KW' '3495'; +KW3496 : 'KW' '3496'; +KW3497 : 'KW' '3497'; +KW3498 : 'KW' '3498'; +KW3499 : 'KW' '3499'; +KW3500 : 'KW' '3500'; +KW3501 : 'KW' '3501'; +KW3502 : 'KW' '3502'; +KW3503 : 'KW' '3503'; +KW3504 : 'KW' '3504'; +KW3505 : 'KW' '3505'; +KW3506 : 'KW' '3506'; +KW3507 : 'KW' '3507'; +KW3508 : 'KW' '3508'; +KW3509 : 'KW' '3509'; +KW3510 : 'KW' '3510'; +KW3511 : 'KW' '3511'; +KW3512 : 'KW' '3512'; +KW3513 : 'KW' '3513'; +KW3514 : 'KW' '3514'; +KW3515 : 'KW' '3515'; +KW3516 : 'KW' '3516'; +KW3517 : 'KW' '3517'; +KW3518 : 'KW' '3518'; +KW3519 : 'KW' '3519'; +KW3520 : 'KW' '3520'; +KW3521 : 'KW' '3521'; +KW3522 : 'KW' '3522'; +KW3523 : 'KW' '3523'; +KW3524 : 'KW' '3524'; +KW3525 : 'KW' '3525'; +KW3526 : 'KW' '3526'; +KW3527 : 'KW' '3527'; +KW3528 : 'KW' '3528'; +KW3529 : 'KW' '3529'; +KW3530 : 'KW' '3530'; +KW3531 : 'KW' '3531'; +KW3532 : 'KW' '3532'; +KW3533 : 'KW' '3533'; +KW3534 : 'KW' '3534'; +KW3535 : 'KW' '3535'; +KW3536 : 'KW' '3536'; +KW3537 : 'KW' '3537'; +KW3538 : 'KW' '3538'; +KW3539 : 'KW' '3539'; +KW3540 : 'KW' '3540'; +KW3541 : 'KW' '3541'; +KW3542 : 'KW' '3542'; +KW3543 : 'KW' '3543'; +KW3544 : 'KW' '3544'; +KW3545 : 'KW' '3545'; +KW3546 : 'KW' '3546'; +KW3547 : 'KW' '3547'; +KW3548 : 'KW' '3548'; +KW3549 : 'KW' '3549'; +KW3550 : 'KW' '3550'; +KW3551 : 'KW' '3551'; +KW3552 : 'KW' '3552'; +KW3553 : 'KW' '3553'; +KW3554 : 'KW' '3554'; +KW3555 : 'KW' '3555'; +KW3556 : 'KW' '3556'; +KW3557 : 'KW' '3557'; +KW3558 : 'KW' '3558'; +KW3559 : 'KW' '3559'; +KW3560 : 'KW' '3560'; +KW3561 : 'KW' '3561'; +KW3562 : 'KW' '3562'; +KW3563 : 'KW' '3563'; +KW3564 : 'KW' '3564'; +KW3565 : 'KW' '3565'; +KW3566 : 'KW' '3566'; +KW3567 : 'KW' '3567'; +KW3568 : 'KW' '3568'; +KW3569 : 'KW' '3569'; +KW3570 : 'KW' '3570'; +KW3571 : 'KW' '3571'; +KW3572 : 'KW' '3572'; +KW3573 : 'KW' '3573'; +KW3574 : 'KW' '3574'; +KW3575 : 'KW' '3575'; +KW3576 : 'KW' '3576'; +KW3577 : 'KW' '3577'; +KW3578 : 'KW' '3578'; +KW3579 : 'KW' '3579'; +KW3580 : 'KW' '3580'; +KW3581 : 'KW' '3581'; +KW3582 : 'KW' '3582'; +KW3583 : 'KW' '3583'; +KW3584 : 'KW' '3584'; +KW3585 : 'KW' '3585'; +KW3586 : 'KW' '3586'; +KW3587 : 'KW' '3587'; +KW3588 : 'KW' '3588'; +KW3589 : 'KW' '3589'; +KW3590 : 'KW' '3590'; +KW3591 : 'KW' '3591'; +KW3592 : 'KW' '3592'; +KW3593 : 'KW' '3593'; +KW3594 : 'KW' '3594'; +KW3595 : 'KW' '3595'; +KW3596 : 'KW' '3596'; +KW3597 : 'KW' '3597'; +KW3598 : 'KW' '3598'; +KW3599 : 'KW' '3599'; +KW3600 : 'KW' '3600'; +KW3601 : 'KW' '3601'; +KW3602 : 'KW' '3602'; +KW3603 : 'KW' '3603'; +KW3604 : 'KW' '3604'; +KW3605 : 'KW' '3605'; +KW3606 : 'KW' '3606'; +KW3607 : 'KW' '3607'; +KW3608 : 'KW' '3608'; +KW3609 : 'KW' '3609'; +KW3610 : 'KW' '3610'; +KW3611 : 'KW' '3611'; +KW3612 : 'KW' '3612'; +KW3613 : 'KW' '3613'; +KW3614 : 'KW' '3614'; +KW3615 : 'KW' '3615'; +KW3616 : 'KW' '3616'; +KW3617 : 'KW' '3617'; +KW3618 : 'KW' '3618'; +KW3619 : 'KW' '3619'; +KW3620 : 'KW' '3620'; +KW3621 : 'KW' '3621'; +KW3622 : 'KW' '3622'; +KW3623 : 'KW' '3623'; +KW3624 : 'KW' '3624'; +KW3625 : 'KW' '3625'; +KW3626 : 'KW' '3626'; +KW3627 : 'KW' '3627'; +KW3628 : 'KW' '3628'; +KW3629 : 'KW' '3629'; +KW3630 : 'KW' '3630'; +KW3631 : 'KW' '3631'; +KW3632 : 'KW' '3632'; +KW3633 : 'KW' '3633'; +KW3634 : 'KW' '3634'; +KW3635 : 'KW' '3635'; +KW3636 : 'KW' '3636'; +KW3637 : 'KW' '3637'; +KW3638 : 'KW' '3638'; +KW3639 : 'KW' '3639'; +KW3640 : 'KW' '3640'; +KW3641 : 'KW' '3641'; +KW3642 : 'KW' '3642'; +KW3643 : 'KW' '3643'; +KW3644 : 'KW' '3644'; +KW3645 : 'KW' '3645'; +KW3646 : 'KW' '3646'; +KW3647 : 'KW' '3647'; +KW3648 : 'KW' '3648'; +KW3649 : 'KW' '3649'; +KW3650 : 'KW' '3650'; +KW3651 : 'KW' '3651'; +KW3652 : 'KW' '3652'; +KW3653 : 'KW' '3653'; +KW3654 : 'KW' '3654'; +KW3655 : 'KW' '3655'; +KW3656 : 'KW' '3656'; +KW3657 : 'KW' '3657'; +KW3658 : 'KW' '3658'; +KW3659 : 'KW' '3659'; +KW3660 : 'KW' '3660'; +KW3661 : 'KW' '3661'; +KW3662 : 'KW' '3662'; +KW3663 : 'KW' '3663'; +KW3664 : 'KW' '3664'; +KW3665 : 'KW' '3665'; +KW3666 : 'KW' '3666'; +KW3667 : 'KW' '3667'; +KW3668 : 'KW' '3668'; +KW3669 : 'KW' '3669'; +KW3670 : 'KW' '3670'; +KW3671 : 'KW' '3671'; +KW3672 : 'KW' '3672'; +KW3673 : 'KW' '3673'; +KW3674 : 'KW' '3674'; +KW3675 : 'KW' '3675'; +KW3676 : 'KW' '3676'; +KW3677 : 'KW' '3677'; +KW3678 : 'KW' '3678'; +KW3679 : 'KW' '3679'; +KW3680 : 'KW' '3680'; +KW3681 : 'KW' '3681'; +KW3682 : 'KW' '3682'; +KW3683 : 'KW' '3683'; +KW3684 : 'KW' '3684'; +KW3685 : 'KW' '3685'; +KW3686 : 'KW' '3686'; +KW3687 : 'KW' '3687'; +KW3688 : 'KW' '3688'; +KW3689 : 'KW' '3689'; +KW3690 : 'KW' '3690'; +KW3691 : 'KW' '3691'; +KW3692 : 'KW' '3692'; +KW3693 : 'KW' '3693'; +KW3694 : 'KW' '3694'; +KW3695 : 'KW' '3695'; +KW3696 : 'KW' '3696'; +KW3697 : 'KW' '3697'; +KW3698 : 'KW' '3698'; +KW3699 : 'KW' '3699'; +KW3700 : 'KW' '3700'; +KW3701 : 'KW' '3701'; +KW3702 : 'KW' '3702'; +KW3703 : 'KW' '3703'; +KW3704 : 'KW' '3704'; +KW3705 : 'KW' '3705'; +KW3706 : 'KW' '3706'; +KW3707 : 'KW' '3707'; +KW3708 : 'KW' '3708'; +KW3709 : 'KW' '3709'; +KW3710 : 'KW' '3710'; +KW3711 : 'KW' '3711'; +KW3712 : 'KW' '3712'; +KW3713 : 'KW' '3713'; +KW3714 : 'KW' '3714'; +KW3715 : 'KW' '3715'; +KW3716 : 'KW' '3716'; +KW3717 : 'KW' '3717'; +KW3718 : 'KW' '3718'; +KW3719 : 'KW' '3719'; +KW3720 : 'KW' '3720'; +KW3721 : 'KW' '3721'; +KW3722 : 'KW' '3722'; +KW3723 : 'KW' '3723'; +KW3724 : 'KW' '3724'; +KW3725 : 'KW' '3725'; +KW3726 : 'KW' '3726'; +KW3727 : 'KW' '3727'; +KW3728 : 'KW' '3728'; +KW3729 : 'KW' '3729'; +KW3730 : 'KW' '3730'; +KW3731 : 'KW' '3731'; +KW3732 : 'KW' '3732'; +KW3733 : 'KW' '3733'; +KW3734 : 'KW' '3734'; +KW3735 : 'KW' '3735'; +KW3736 : 'KW' '3736'; +KW3737 : 'KW' '3737'; +KW3738 : 'KW' '3738'; +KW3739 : 'KW' '3739'; +KW3740 : 'KW' '3740'; +KW3741 : 'KW' '3741'; +KW3742 : 'KW' '3742'; +KW3743 : 'KW' '3743'; +KW3744 : 'KW' '3744'; +KW3745 : 'KW' '3745'; +KW3746 : 'KW' '3746'; +KW3747 : 'KW' '3747'; +KW3748 : 'KW' '3748'; +KW3749 : 'KW' '3749'; +KW3750 : 'KW' '3750'; +KW3751 : 'KW' '3751'; +KW3752 : 'KW' '3752'; +KW3753 : 'KW' '3753'; +KW3754 : 'KW' '3754'; +KW3755 : 'KW' '3755'; +KW3756 : 'KW' '3756'; +KW3757 : 'KW' '3757'; +KW3758 : 'KW' '3758'; +KW3759 : 'KW' '3759'; +KW3760 : 'KW' '3760'; +KW3761 : 'KW' '3761'; +KW3762 : 'KW' '3762'; +KW3763 : 'KW' '3763'; +KW3764 : 'KW' '3764'; +KW3765 : 'KW' '3765'; +KW3766 : 'KW' '3766'; +KW3767 : 'KW' '3767'; +KW3768 : 'KW' '3768'; +KW3769 : 'KW' '3769'; +KW3770 : 'KW' '3770'; +KW3771 : 'KW' '3771'; +KW3772 : 'KW' '3772'; +KW3773 : 'KW' '3773'; +KW3774 : 'KW' '3774'; +KW3775 : 'KW' '3775'; +KW3776 : 'KW' '3776'; +KW3777 : 'KW' '3777'; +KW3778 : 'KW' '3778'; +KW3779 : 'KW' '3779'; +KW3780 : 'KW' '3780'; +KW3781 : 'KW' '3781'; +KW3782 : 'KW' '3782'; +KW3783 : 'KW' '3783'; +KW3784 : 'KW' '3784'; +KW3785 : 'KW' '3785'; +KW3786 : 'KW' '3786'; +KW3787 : 'KW' '3787'; +KW3788 : 'KW' '3788'; +KW3789 : 'KW' '3789'; +KW3790 : 'KW' '3790'; +KW3791 : 'KW' '3791'; +KW3792 : 'KW' '3792'; +KW3793 : 'KW' '3793'; +KW3794 : 'KW' '3794'; +KW3795 : 'KW' '3795'; +KW3796 : 'KW' '3796'; +KW3797 : 'KW' '3797'; +KW3798 : 'KW' '3798'; +KW3799 : 'KW' '3799'; +KW3800 : 'KW' '3800'; +KW3801 : 'KW' '3801'; +KW3802 : 'KW' '3802'; +KW3803 : 'KW' '3803'; +KW3804 : 'KW' '3804'; +KW3805 : 'KW' '3805'; +KW3806 : 'KW' '3806'; +KW3807 : 'KW' '3807'; +KW3808 : 'KW' '3808'; +KW3809 : 'KW' '3809'; +KW3810 : 'KW' '3810'; +KW3811 : 'KW' '3811'; +KW3812 : 'KW' '3812'; +KW3813 : 'KW' '3813'; +KW3814 : 'KW' '3814'; +KW3815 : 'KW' '3815'; +KW3816 : 'KW' '3816'; +KW3817 : 'KW' '3817'; +KW3818 : 'KW' '3818'; +KW3819 : 'KW' '3819'; +KW3820 : 'KW' '3820'; +KW3821 : 'KW' '3821'; +KW3822 : 'KW' '3822'; +KW3823 : 'KW' '3823'; +KW3824 : 'KW' '3824'; +KW3825 : 'KW' '3825'; +KW3826 : 'KW' '3826'; +KW3827 : 'KW' '3827'; +KW3828 : 'KW' '3828'; +KW3829 : 'KW' '3829'; +KW3830 : 'KW' '3830'; +KW3831 : 'KW' '3831'; +KW3832 : 'KW' '3832'; +KW3833 : 'KW' '3833'; +KW3834 : 'KW' '3834'; +KW3835 : 'KW' '3835'; +KW3836 : 'KW' '3836'; +KW3837 : 'KW' '3837'; +KW3838 : 'KW' '3838'; +KW3839 : 'KW' '3839'; +KW3840 : 'KW' '3840'; +KW3841 : 'KW' '3841'; +KW3842 : 'KW' '3842'; +KW3843 : 'KW' '3843'; +KW3844 : 'KW' '3844'; +KW3845 : 'KW' '3845'; +KW3846 : 'KW' '3846'; +KW3847 : 'KW' '3847'; +KW3848 : 'KW' '3848'; +KW3849 : 'KW' '3849'; +KW3850 : 'KW' '3850'; +KW3851 : 'KW' '3851'; +KW3852 : 'KW' '3852'; +KW3853 : 'KW' '3853'; +KW3854 : 'KW' '3854'; +KW3855 : 'KW' '3855'; +KW3856 : 'KW' '3856'; +KW3857 : 'KW' '3857'; +KW3858 : 'KW' '3858'; +KW3859 : 'KW' '3859'; +KW3860 : 'KW' '3860'; +KW3861 : 'KW' '3861'; +KW3862 : 'KW' '3862'; +KW3863 : 'KW' '3863'; +KW3864 : 'KW' '3864'; +KW3865 : 'KW' '3865'; +KW3866 : 'KW' '3866'; +KW3867 : 'KW' '3867'; +KW3868 : 'KW' '3868'; +KW3869 : 'KW' '3869'; +KW3870 : 'KW' '3870'; +KW3871 : 'KW' '3871'; +KW3872 : 'KW' '3872'; +KW3873 : 'KW' '3873'; +KW3874 : 'KW' '3874'; +KW3875 : 'KW' '3875'; +KW3876 : 'KW' '3876'; +KW3877 : 'KW' '3877'; +KW3878 : 'KW' '3878'; +KW3879 : 'KW' '3879'; +KW3880 : 'KW' '3880'; +KW3881 : 'KW' '3881'; +KW3882 : 'KW' '3882'; +KW3883 : 'KW' '3883'; +KW3884 : 'KW' '3884'; +KW3885 : 'KW' '3885'; +KW3886 : 'KW' '3886'; +KW3887 : 'KW' '3887'; +KW3888 : 'KW' '3888'; +KW3889 : 'KW' '3889'; +KW3890 : 'KW' '3890'; +KW3891 : 'KW' '3891'; +KW3892 : 'KW' '3892'; +KW3893 : 'KW' '3893'; +KW3894 : 'KW' '3894'; +KW3895 : 'KW' '3895'; +KW3896 : 'KW' '3896'; +KW3897 : 'KW' '3897'; +KW3898 : 'KW' '3898'; +KW3899 : 'KW' '3899'; +KW3900 : 'KW' '3900'; +KW3901 : 'KW' '3901'; +KW3902 : 'KW' '3902'; +KW3903 : 'KW' '3903'; +KW3904 : 'KW' '3904'; +KW3905 : 'KW' '3905'; +KW3906 : 'KW' '3906'; +KW3907 : 'KW' '3907'; +KW3908 : 'KW' '3908'; +KW3909 : 'KW' '3909'; +KW3910 : 'KW' '3910'; +KW3911 : 'KW' '3911'; +KW3912 : 'KW' '3912'; +KW3913 : 'KW' '3913'; +KW3914 : 'KW' '3914'; +KW3915 : 'KW' '3915'; +KW3916 : 'KW' '3916'; +KW3917 : 'KW' '3917'; +KW3918 : 'KW' '3918'; +KW3919 : 'KW' '3919'; +KW3920 : 'KW' '3920'; +KW3921 : 'KW' '3921'; +KW3922 : 'KW' '3922'; +KW3923 : 'KW' '3923'; +KW3924 : 'KW' '3924'; +KW3925 : 'KW' '3925'; +KW3926 : 'KW' '3926'; +KW3927 : 'KW' '3927'; +KW3928 : 'KW' '3928'; +KW3929 : 'KW' '3929'; +KW3930 : 'KW' '3930'; +KW3931 : 'KW' '3931'; +KW3932 : 'KW' '3932'; +KW3933 : 'KW' '3933'; +KW3934 : 'KW' '3934'; +KW3935 : 'KW' '3935'; +KW3936 : 'KW' '3936'; +KW3937 : 'KW' '3937'; +KW3938 : 'KW' '3938'; +KW3939 : 'KW' '3939'; +KW3940 : 'KW' '3940'; +KW3941 : 'KW' '3941'; +KW3942 : 'KW' '3942'; +KW3943 : 'KW' '3943'; +KW3944 : 'KW' '3944'; +KW3945 : 'KW' '3945'; +KW3946 : 'KW' '3946'; +KW3947 : 'KW' '3947'; +KW3948 : 'KW' '3948'; +KW3949 : 'KW' '3949'; +KW3950 : 'KW' '3950'; +KW3951 : 'KW' '3951'; +KW3952 : 'KW' '3952'; +KW3953 : 'KW' '3953'; +KW3954 : 'KW' '3954'; +KW3955 : 'KW' '3955'; +KW3956 : 'KW' '3956'; +KW3957 : 'KW' '3957'; +KW3958 : 'KW' '3958'; +KW3959 : 'KW' '3959'; +KW3960 : 'KW' '3960'; +KW3961 : 'KW' '3961'; +KW3962 : 'KW' '3962'; +KW3963 : 'KW' '3963'; +KW3964 : 'KW' '3964'; +KW3965 : 'KW' '3965'; +KW3966 : 'KW' '3966'; +KW3967 : 'KW' '3967'; +KW3968 : 'KW' '3968'; +KW3969 : 'KW' '3969'; +KW3970 : 'KW' '3970'; +KW3971 : 'KW' '3971'; +KW3972 : 'KW' '3972'; +KW3973 : 'KW' '3973'; +KW3974 : 'KW' '3974'; +KW3975 : 'KW' '3975'; +KW3976 : 'KW' '3976'; +KW3977 : 'KW' '3977'; +KW3978 : 'KW' '3978'; +KW3979 : 'KW' '3979'; +KW3980 : 'KW' '3980'; +KW3981 : 'KW' '3981'; +KW3982 : 'KW' '3982'; +KW3983 : 'KW' '3983'; +KW3984 : 'KW' '3984'; +KW3985 : 'KW' '3985'; +KW3986 : 'KW' '3986'; +KW3987 : 'KW' '3987'; +KW3988 : 'KW' '3988'; +KW3989 : 'KW' '3989'; +KW3990 : 'KW' '3990'; +KW3991 : 'KW' '3991'; +KW3992 : 'KW' '3992'; +KW3993 : 'KW' '3993'; +KW3994 : 'KW' '3994'; +KW3995 : 'KW' '3995'; +KW3996 : 'KW' '3996'; +KW3997 : 'KW' '3997'; +KW3998 : 'KW' '3998'; +KW3999 : 'KW' '3999'; \ No newline at end of file diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CSharp.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CSharp.test.stg new file mode 100644 index 000000000..3de3b50a7 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CSharp.test.stg @@ -0,0 +1,299 @@ +writeln(s) ::= <);>> +write(s) ::= <);>> +writeList(s) ::= <);>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= <);>> + +Cast(t,v) ::= "(())" + +Append(a,b) ::= "
+ " + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= "Object = ;" + +AssertIsList(v) ::= "System.Collections.IList __ttt__ = ;" // just use static type system + +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= <%int = ;%> + +InitBooleanMember(n,v) ::= <%bool = ;%> + +GetMember(n) ::= <%this.%> + +SetMember(n,v) ::= <%this. = ;%> + +AddMember(n,v) ::= <%this. += ;%> + +PlusMember(v,n) ::= <% + this.%> + +MemberEquals(n,v) ::= <%this. == %> + +ModMemberEquals(n,m,v) ::= <%this. % == %> + +ModMemberNotEquals(n,m,v) ::= <%this. % != %> + +DumpDFA() ::= "this.DumpDFA();" + +Pass() ::= "" + +StringList() ::= "List\" + +BuildParseTrees() ::= "this.BuildParseTree = true;" + +BailErrorStrategy() ::= <%ErrorHandler = new BailErrorStrategy();%> + +ToStringTree(s) ::= <%.ToStringTree(this)%> + +Column() ::= "this.Column" + +Text() ::= "this.Text" + +ValEquals(a,b) ::= <%==%> + +TextEquals(a) ::= <%this.Text.Equals("")%> + +PlusText(a) ::= <%"" + this.Text%> + +InputText() ::= "this.TokenStream.GetText()" + +LTEquals(i, v) ::= <%this.TokenStream.Lt().Text.Equals()%> + +LANotEquals(i, v) ::= <%this.InputStream.La()!=%> + +TokenStartColumnEquals(i) ::= <%this.TokenStartColumn==%> + +ImportListener(X) ::= "" + +GetExpectedTokenNames() ::= "this.GetExpectedTokens().ToString(this.Vocabulary)" + +RuleInvocationStack() ::= "GetRuleInvocationStackAsString()" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +bool Property() { + return true; +} +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +public override IToken NextToken() { + if (!(Interpreter is PositionAdjustingLexerATNSimulator)) { + Interpreter = new PositionAdjustingLexerATNSimulator(this, _ATN); + } + + return base.NextToken(); +} + +public override IToken Emit() { + switch (Type) { + case TOKENS: + HandleAcceptPositionForKeyword("tokens"); + break; + + case LABEL: + HandleAcceptPositionForIdentifier(); + break; + + default: + break; + } + + return base.Emit(); +} + +private bool HandleAcceptPositionForIdentifier() { + string tokenText = this.Text; + int identifierLength = 0; + while (identifierLength \< tokenText.Length && IsIdentifierChar(tokenText[identifierLength])) { + identifierLength++; + } + + if (InputStream.Index > TokenStartCharIndex + identifierLength) { + int offset = identifierLength - 1; + getInterpreter().ResetAcceptPosition((ICharStream)InputStream, TokenStartCharIndex + offset, TokenStartLine, TokenStartColumn + offset); + return true; + } + + return false; +} + +private bool HandleAcceptPositionForKeyword(string keyword) { + if (InputStream.Index > TokenStartCharIndex + keyword.Length) { + int offset = keyword.Length - 1; + getInterpreter().ResetAcceptPosition((ICharStream)InputStream, TokenStartCharIndex + offset, TokenStartLine, TokenStartColumn + offset); + return true; + } + + return false; +} + +public PositionAdjustingLexerATNSimulator getInterpreter() { + return (PositionAdjustingLexerATNSimulator)base.Interpreter; +} + +private static bool IsIdentifierChar(char c) { + return Char.IsLetterOrDigit(c) || c == '_'; +} + +public class PositionAdjustingLexerATNSimulator : LexerATNSimulator { + + public PositionAdjustingLexerATNSimulator(Lexer recog, ATN atn) + : base(recog, atn) + { + } + + public void ResetAcceptPosition(ICharStream input, int index, int line, int column) { + input.Seek(index); + this.Line = line; + this.Column = column; + Consume(input); + } + +} + +>> + +BasicListener(X) ::= << +@parser::members { +public class LeafListener : TBaseListener { + public override void VisitTerminal(ITerminalNode node) { + Console.WriteLine(node.Symbol.Text); + } +} +} +>> + +WalkListener(s) ::= << +ParseTreeWalker walker = new ParseTreeWalker(); +walker.Walk(new LeafListener(), ); +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::members { +public class MyRuleNode : ParserRuleContext { + public int altNum; + public MyRuleNode(ParserRuleContext parent, int invokingStateNumber): base(parent, invokingStateNumber) + { + } + public override int getAltNumber() { return altNum; } + public override void setAltNumber(int altNum) { this.altNum = altNum; } +} +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +public class LeafListener : TBaseListener { + public override void ExitA(TParser.AContext ctx) { + if (ctx.ChildCount==2) + { + StringBuilder sb = new StringBuilder ("["); + foreach (ITerminalNode node in ctx.INT ()) { + sb.Append (node.ToString ()); + sb.Append (", "); + } + sb.Length = sb.Length - 2; + sb.Append ("]"); + Console.Write ("{0} {1} {2}", ctx.INT (0).Symbol.Text, + ctx.INT (1).Symbol.Text, sb.ToString()); + } + else + Console.WriteLine(ctx.ID().Symbol); + } +} +} +>> + +RuleGetterListener(X) ::= << +@parser::members { +public class LeafListener : TBaseListener { + public override void ExitA(TParser.AContext ctx) { + if (ctx.ChildCount==2) { + Console.Write("{0} {1} {2}",ctx.b(0).Start.Text, + ctx.b(1).Start.Text,ctx.b()[0].Start.Text); + } else + Console.WriteLine(ctx.b(0).Start.Text); + } +} +} +>> + + +LRListener(X) ::= << +@parser::members { +public class LeafListener : TBaseListener { + public override void ExitE(TParser.EContext ctx) { + if (ctx.ChildCount==3) { + Console.Write("{0} {1} {2}\n",ctx.e(0).Start.Text, + ctx.e(1).Start.Text, ctx.e()[0].Start.Text); + } else + Console.WriteLine(ctx.INT().Symbol.Text); + } +} +} +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +public class LeafListener : TBaseListener { + public override void ExitCall(TParser.CallContext ctx) { + Console.Write("{0} {1}",ctx.e().Start.Text,ctx.eList()); + } + public override void ExitInt(TParser.IntContext ctx) { + Console.WriteLine(ctx.INT().Symbol.Text); + } +} +} +>> + +ImportVisitor(X) ::= "" +BasicVisitor(X) ::= "" +WalkVisitor(s) ::= "" +LRWithLabelsVisitor(X) ::= "" +RuleGetterVisitor(X) ::= "" +LRVisitor(x) ::= "" +TokenGetterVisitor(x) ::= "" + +DeclareContextListGettersFunction() ::= << +void foo() { + SContext s = null; + AContext[] a = s.a(); + BContext[] b = s.b(); +} +>> + +Declare_foo() ::= <> + +Invoke_foo() ::= "this.foo();" + +Declare_pred() ::= <" +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Chrome.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Chrome.test.stg new file mode 100644 index 000000000..e5c87b8e6 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Chrome.test.stg @@ -0,0 +1,285 @@ +writeln(s) ::= < + '\\n';>> + +write(s) ::= <;>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= "" + +Cast(t,v) ::= "" + +Append(a,b) ::= " + " + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= "var = ;" + +AssertIsList(v) ::= <> + +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= <%this. = ;%> + +InitBooleanMember(n,v) ::= <%this. = ;%> + +GetMember(n) ::= <%this.%> + +SetMember(n,v) ::= <%this. = ;%> + +AddMember(n,v) ::= <%this. += ;%> + +PlusMember(v,n) ::= <% + this.%> + +MemberEquals(n,v) ::= <%this. === %> + +ModMemberEquals(n,m,v) ::= <%this. % === %> + +ModMemberNotEquals(n,m,v) ::= <%this. % != %> + +DumpDFA() ::= "this.dumpDFA();" + +Pass() ::= "" + +StringList() ::= "list" + +BuildParseTrees() ::= "this.buildParseTrees = true;" + +BailErrorStrategy() ::= <%this._errHandler = new antlr4.error.BailErrorStrategy();%> + +ToStringTree(s) ::= <%.toStringTree(null, this)%> + +Column() ::= "this.column" + +Text() ::= "this.text" + +ValEquals(a,b) ::= <%===%> + +TextEquals(a) ::= <%this.text===""%> + +PlusText(a) ::= <%"" + this.text%> + +InputText() ::= "this._input.getText()" + +LTEquals(i, v) ::= <%this._input.LT().text===%> + +LANotEquals(i, v) ::= <%this._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%this._tokenStartColumn===%> + +ImportListener(X) ::= <Listener = require('./Listener').Listener;>> + +GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.literalNames)" + +RuleInvocationStack() ::= "antlr4.Utils.arrayToString(this.getRuleInvocationStack())" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +this.Property = function() { + return true; +} +} +>> + +PositionAdjustingLexer() ::= << + +PositionAdjustingLexer.prototype.resetAcceptPosition = function(index, line, column) { + this._input.seek(index); + this.line = line; + this.column = column; + this._interp.consume(this._input); +}; + +PositionAdjustingLexer.prototype.nextToken = function() { + if (!("resetAcceptPosition" in this._interp)) { + var lexer = this; + this._interp.resetAcceptPosition = function(index, line, column) { lexer.resetAcceptPosition(index, line, column); }; + } + return antlr4.Lexer.prototype.nextToken.call(this); +}; + +PositionAdjustingLexer.prototype.emit = function() { + switch(this._type) { + case PositionAdjustingLexer.TOKENS: + this.handleAcceptPositionForKeyword("tokens"); + break; + case PositionAdjustingLexer.LABEL: + this.handleAcceptPositionForIdentifier(); + break; + } + return antlr4.Lexer.prototype.emit.call(this); +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForIdentifier = function() { + var tokenText = this.text; + var identifierLength = 0; + while (identifierLength \< tokenText.length && + PositionAdjustingLexer.isIdentifierChar(tokenText[identifierLength]) + ) { + identifierLength += 1; + } + if (this._input.index > this._tokenStartCharIndex + identifierLength) { + var offset = identifierLength - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForKeyword = function(keyword) { + if (this._input.index > this._tokenStartCharIndex + keyword.length) { + var offset = keyword.length - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.isIdentifierChar = function(c) { + return c.match(/^[0-9a-zA-Z_]+$/); +} + +>> + +BasicListener(X) ::= << +this.LeafListener = function() { + this.visitTerminal = function(node) { + document.getElementById('output').value += node.symbol.text + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; + +>> + +WalkListener(s) ::= << +var walker = new antlr4.tree.ParseTreeWalker(); +walker.walk(new this.LeafListener(), ); +>> + +TreeNodeWithAltNumField(X) ::= << + +@parser::header { +MyRuleNode = function(parent, invokingState) { + antlr4.ParserRuleContext.call(this, parent, invokingState); + this.altNum = 0; + return this; +}; + +MyRuleNode.prototype = Object.create(antlr4.ParserRuleContext.prototype); +MyRuleNode.prototype.constructor = MyRuleNode; +} +>> + +TokenGetterListener(X) ::= << +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT()); + } else { + str = ctx.ID().symbol.toString(); + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; + +>> + +RuleGetterListener(X) ::= << +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text; + } else { + str = ctx.b(0).start.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; + +>> + + +LRListener(X) ::= << +this.LeafListener = function() { + this.exitE = function(ctx) { + var str; + if(ctx.getChildCount()===3) { + str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text; + } else { + str = ctx.INT().symbol.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; + +>> + +LRWithLabelsListener(X) ::= << +this.LeafListener = function() { + this.exitCall = function(ctx) { + var str = ctx.e().start.text + ' ' + ctx.eList(); + document.getElementById('output').value += str + '\\n'; + }; + this.exitInt = function(ctx) { + var str = ctx.INT().symbol.text; + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; + +>> + +DeclareContextListGettersFunction() ::= << + function foo() { + var s = new SContext(); + var a = s.a(); + var b = s.b(); + }; +>> + +Declare_foo() ::= "this.foo = function() {document.getElementById('output').value += 'foo' + '\\n';};" + +Invoke_foo() ::= "this.foo();" + +Declare_pred() ::= <> + +Invoke_pred(v) ::= <)>> + +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." +ParserPropertyCall(p, call) ::= "

." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/Index.stg deleted file mode 100644 index 8ddd3cf74..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeLexers/Index.stg +++ /dev/null @@ -1,4 +0,0 @@ -TestTemplates ::= [ - "LexerDelegatorInvokesDelegateRule": [], - "LexerDelegatorRuleOverridesDelegate": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/Index.stg deleted file mode 100644 index f098106ca..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/CompositeParsers/Index.stg +++ /dev/null @@ -1,22 +0,0 @@ -TestTemplates ::= [ - "DelegatorInvokesDelegateRule": [], - "BringInLiteralsFromDelegate": [], - "DelegatorInvokesDelegateRuleWithArgs": [], - "DelegatorInvokesDelegateRuleWithReturnStruct": [], - "DelegatorAccessesDelegateMembers": [], - "DelegatorInvokesFirstVersionOfDelegateRule": [], - "DelegatesSeeSameTokenType": [], - "CombinedImportsCombined": [], - "DelegatorRuleOverridesDelegate": [], - "DelegatorRuleOverridesLookaheadInDelegate": [], - "DelegatorRuleOverridesDelegates": [], - "KeywordVSIDOrder": [], - "ImportedRuleWithAction": [], - "ImportedGrammarWithEmptyOptions": [], - "ImportLexerWithOnlyFragmentRules": [] -] - -Options ::= [ - "ImportErrorQueue": true, - "ImportGrammar": true -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Cpp.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Cpp.test.stg new file mode 100644 index 000000000..c28f8ca2c --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Cpp.test.stg @@ -0,0 +1,280 @@ +writeln(s) ::= "std::cout \<\< \<\< std::endl;" +write(s) ::= "std::cout \<\< ;" +writeList(s) ::= << std::cout \<\< \<\< std::endl;>> + +False() ::= "false" +True() ::= "true" +Not(v) ::= "!" +Assert(s) ::= "" +Cast(t,v) ::= "dynamic_cast\< *>()" // Should actually use a more specific name. We may have to use other casts as well. +Append(a,b) ::= " + ->toString()" +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= " = " + +AssertIsList(v) ::= "assert(.size() >= 0);" // Use a method that exists only on a list (vector actually). +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= "int = ;" +InitBooleanMember(n,v) ::= "bool = ;" + +GetMember(n) ::= "" +SetMember(n,v) ::= " = ;" +AddMember(n,v) ::= " += ;" +PlusMember(v,n) ::= " + " +MemberEquals(n,v) ::= " == " +ModMemberEquals(n,m,v) ::= " % == " +ModMemberNotEquals(n,m,v) ::= " % != " + +DumpDFA() ::= "dumpDFA();" +Pass() ::= "/* do nothing */" + +StringList() ::= "std::vector\" +BuildParseTrees() ::= "setBuildParseTree(true);" +BailErrorStrategy() ::= "_errHandler = std::make_shared\();" + +ToStringTree(s) ::= "->toStringTree(this)" +Column() ::= "getCharPositionInLine()" +Text() ::= "getText()" +ValEquals(a,b) ::= " == " +TextEquals(a) ::= "getText() == \"\"" +PlusText(a) ::="\"\" + getText()" +InputText() ::= "_input->getText()" +LTEquals(i, v) ::= "_input->LT()->getText() == " +LANotEquals(i, v) ::= "_input->LA() != " +TokenStartColumnEquals(i) ::= "tokenStartCharPositionInLine == " + +ImportListener(X) ::= "" + +GetExpectedTokenNames() ::= "getExpectedTokens().toString(_tokenNames)" + +RuleInvocationStack() ::= "Arrays::listToString(getRuleInvocationStack(), \", \")" + +LL_EXACT_AMBIG_DETECTION() ::= <()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);>> + +ParserToken(parser, token) ::= <%::%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +bool Property() { + return true; +} +} +>> + +ParserPropertyCall(p, call) ::= "" + +PositionAdjustingLexer() ::= << +protected: + class PositionAdjustingLexerATNSimulator : public atn::LexerATNSimulator { + public: + PositionAdjustingLexerATNSimulator(Lexer *recog, const atn::ATN &atn, std::vector\ &decisionToDFA, + atn::PredictionContextCache &sharedContextCache) + : atn::LexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache) { + } + + void resetAcceptPosition(CharStream *input, int index, int line, int charPositionInLine) { + input->seek(index); + _line = line; + _charPositionInLine = charPositionInLine; + consume(input); + } + + }; + +public: + virtual std::unique_ptr\ nextToken() override { + if (dynamic_cast\(_interpreter) == nullptr) { + delete _interpreter; + _interpreter = new PositionAdjustingLexerATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache); + } + + return Lexer::nextToken(); + } + + virtual Token* emit() override { + switch (type) { + case TOKENS: + handleAcceptPositionForKeyword("tokens"); + break; + + case LABEL: + handleAcceptPositionForIdentifier(); + break; + + default: + break; + } + return Lexer::emit(); + } + +private: + bool handleAcceptPositionForIdentifier() { + std::string tokenText = getText(); + int identifierLength = 0; + while (identifierLength \< tokenText.length() && isIdentifierChar(tokenText[identifierLength])) { + identifierLength++; + } + + if (getInputStream()->index() > tokenStartCharIndex + identifierLength) { + int offset = identifierLength - 1; + getInterpreter\()->resetAcceptPosition(getInputStream(), + tokenStartCharIndex + offset, tokenStartLine, tokenStartCharPositionInLine + offset); + return true; + } + + return false; + } + + bool handleAcceptPositionForKeyword(const std::string &keyword) { + if (getInputStream()->index() > tokenStartCharIndex + keyword.length()) { + long offset = keyword.size() - 1; + getInterpreter\()->resetAcceptPosition(getInputStream(), + tokenStartCharIndex + offset, tokenStartLine, tokenStartCharPositionInLine + offset); + return true; + } + + return false; + } + + static bool isIdentifierChar(char c) { + return std::isalnum(c) || c == '_'; + } + +public: +>> + +BasicListener(X) ::= << +@parser::definitions { +#include "TBaseListener.h" +class LeafListener : public TBaseListener { +public: + virtual void visitTerminal(tree::TerminalNode *node) override { + std::cout \<\< node->getSymbol()->getText() \<\< std::endl; + } +}; +} +>> + +WalkListener(s) ::= << +LeafListener listener; +tree::ParseTreeWalker::DEFAULT.walk(&listener, ); +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::members { +class MyRuleNode : public ParserRuleContext { +public: + size_t altNum; + MyRuleNode(ParserRuleContext *parent, int invokingStateNumber) + : ParserRuleContext(parent, invokingStateNumber) { + } + virtual size_t getAltNumber() const override { return altNum; } + virtual void setAltNumber(size_t altNum) override { this->altNum = altNum; } +}; +} +>> + +TokenGetterListener(X) ::= << +@parser::definitions { +#include "TBaseListener.h" +class LeafListener : public TBaseListener { +public: + virtual void exitA(TParser::AContext *ctx) override { + if (ctx->children.size() == 2) + std::cout \<\< ctx->INT(0)->getSymbol()->getText() \<\< " " \<\< ctx->INT(1)->getSymbol()->getText() + \<\< " " \<\< Arrays::toString(ctx->INT()) \<\< std::endl; + else + std::cout \<\< ctx->ID()->getSymbol()->toString() \<\< std::endl; + } +}; +} +>> + +RuleGetterListener(X) ::= << +@parser::definitions { +#include "TBaseListener.h" +class LeafListener : public TBaseListener { +public: + virtual void exitA(TParser::AContext *ctx) override { + if (ctx->children.size() == 2) { + std::cout \<\< ctx->b(0)->start->getText() \<\< " " \<\< ctx->b(1)->start->getText() \<\< " " \<\< ctx->b()[0]->start->getText() \<\< std::endl; + } else { + std::cout \<\< ctx->b(0)->start->getText() \<\< std::endl; + } + } +}; +} +>> + + +LRListener(X) ::= << +@parser::definitions { +#include "TBaseListener.h" +class LeafListener : public TBaseListener { +public: + virtual void exitE(TParser::EContext *ctx) override { + if (ctx->children.size() == 3) { + std::cout \<\< ctx->e(0)->start->getText() \<\< " " \<\< ctx->e(1)->start->getText() \<\< " " \<\< ctx->e()[0]->start->getText() \<\< std::endl; + } else { + std::cout \<\< ctx->INT()->getSymbol()->getText() \<\< std::endl; + } + } +}; +} +>> + +LRWithLabelsListener(X) ::= << +@parser::definitions { +#include "TBaseListener.h" +class LeafListener : public TBaseListener { +public: + virtual void exitCall(TParser::CallContext *ctx) override { + std::cout \<\< ctx->e()->start->getText() \<\< " " \<\< ctx->eList()->toString() \<\< std::endl; + } + virtual void exitInt(TParser::IntContext *ctx) override { + std::cout \<\< ctx->INT()->getSymbol()->getText() \<\< std::endl; + } +}; +} +>> + +ImportVisitor(X) ::= "" +BasicVisitor(X) ::= "" +WalkVisitor(s) ::= "" +LRWithLabelsVisitor(X) ::= "" +RuleGetterVisitor(X) ::= "" +LRVisitor(x) ::= "" +TokenGetterVisitor(x) ::= "" + +DeclareContextListGettersFunction() ::= << +void foo() { + SContext *s; + std::vector\ a = s->a(); + std::vector\ b = s->b(); +} +>> + +Declare_foo() ::= <> + +Invoke_foo() ::= "foo();" + +Declare_pred() ::= << +bool pred(bool v) { + std::cout \<\< "eval=" \<\< std::boolalpha \<\< v \<\< std::endl; + return v; +} +>> + +Invoke_pred(v) ::= <)>> + +ContextRuleFunction(ctx, rule) ::= "->" +StringType() ::= "std::string" +ContextMember(ctx, subctx, member) ::= "->->" diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Explorer.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Explorer.test.stg new file mode 100644 index 000000000..6cfe9ba27 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Explorer.test.stg @@ -0,0 +1,294 @@ +writeln(s) ::= < + '\\n';>> +write(s) ::= <;>> +writeList(s) ::= <;>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= "" + +Cast(t,v) ::= "" + +Append(a,b) ::= " + " + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= "var = ;" + +AssertIsList(v) ::= <> + +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= <%this. = ;%> + +InitBooleanMember(n,v) ::= <%this. = ;%> + +GetMember(n) ::= <%this.%> + +SetMember(n,v) ::= <%this. = ;%> + +AddMember(n,v) ::= <%this. += ;%> + +PlusMember(v,n) ::= <% + this.%> + +MemberEquals(n,v) ::= <%this. === %> + +ModMemberEquals(n,m,v) ::= <%this. % === %> + +ModMemberNotEquals(n,m,v) ::= <%this. % != %> + +DumpDFA() ::= "this.dumpDFA();" + +Pass() ::= "" + +StringList() ::= "list" + +BuildParseTrees() ::= "this.buildParseTrees = true;" + +BailErrorStrategy() ::= <%this._errHandler = new antlr4.error.BailErrorStrategy();%> + +ToStringTree(s) ::= <%.toStringTree(null, this)%> + +Column() ::= "this.column" + +Text() ::= "this.text" + +ValEquals(a,b) ::= <%===%> + +TextEquals(a) ::= <%this.text===""%> + +PlusText(a) ::= <%"" + this.text%> + +InputText() ::= "this._input.getText()" + +LTEquals(i, v) ::= <%this._input.LT().text===%> + +LANotEquals(i, v) ::= <%this._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%this._tokenStartColumn===%> + +ImportListener(X) ::= << +@parser::header { +var Listener = require('./Listener').Listener; +} +>> + +GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.literalNames)" + +RuleInvocationStack() ::= "antlr4.Utils.arrayToString(this.getRuleInvocationStack())" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +this.Property = function() { + return true; +} +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +PositionAdjustingLexer.prototype.resetAcceptPosition = function(index, line, column) { + this._input.seek(index); + this.line = line; + this.column = column; + this._interp.consume(this._input); +}; + +PositionAdjustingLexer.prototype.nextToken = function() { + if (!("resetAcceptPosition" in this._interp)) { + var lexer = this; + this._interp.resetAcceptPosition = function(index, line, column) { lexer.resetAcceptPosition(index, line, column); }; + } + return antlr4.Lexer.prototype.nextToken.call(this); +}; + +PositionAdjustingLexer.prototype.emit = function() { + switch(this._type) { + case PositionAdjustingLexer.TOKENS: + this.handleAcceptPositionForKeyword("tokens"); + break; + case PositionAdjustingLexer.LABEL: + this.handleAcceptPositionForIdentifier(); + break; + } + return antlr4.Lexer.prototype.emit.call(this); +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForIdentifier = function() { + var tokenText = this.text; + var identifierLength = 0; + while (identifierLength \< tokenText.length && + PositionAdjustingLexer.isIdentifierChar(tokenText[identifierLength]) + ) { + identifierLength += 1; + } + if (this._input.index > this._tokenStartCharIndex + identifierLength) { + var offset = identifierLength - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForKeyword = function(keyword) { + if (this._input.index > this._tokenStartCharIndex + keyword.length) { + var offset = keyword.length - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.isIdentifierChar = function(c) { + return c.match(/^[0-9a-zA-Z_]+$/); +} + +>> + +BasicListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.visitTerminal = function(node) { + document.getElementById('output').value += node.symbol.text + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +WalkListener(s) ::= << +var walker = new antlr4.tree.ParseTreeWalker(); +walker.walk(new this.LeafListener(), ); +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::header { +MyRuleNode = function(parent, invokingState) { + antlr4.ParserRuleContext.call(this, parent, invokingState); + this.altNum = 0; + return this; +}; + +MyRuleNode.prototype = Object.create(antlr4.ParserRuleContext.prototype); +MyRuleNode.prototype.constructor = MyRuleNode; +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT()); + } else { + str = ctx.ID().symbol.toString(); + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +RuleGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text; + } else { + str = ctx.b(0).start.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + + +LRListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitE = function(ctx) { + var str; + if(ctx.getChildCount()===3) { + str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text; + } else { + str = ctx.INT().symbol.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitCall = function(ctx) { + var str = ctx.e().start.text + ' ' + ctx.eList(); + document.getElementById('output').value += str + '\\n'; + }; + this.exitInt = function(ctx) { + var str = ctx.INT().symbol.text; + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +DeclareContextListGettersFunction() ::= << + function foo() { + var s = new SContext(); + var a = s.a(); + var b = s.b(); + }; +>> + +Declare_foo() ::= "this.foo = function() {document.getElementById('output').value += 'foo' + '\\n';};" + +Invoke_foo() ::= "this.foo();" + +Declare_pred() ::= <> + +Invoke_pred(v) ::= <)>> +ParserTokenType(t) ::= "Parser." +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Firefox.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Firefox.test.stg new file mode 100644 index 000000000..c94be90e8 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Firefox.test.stg @@ -0,0 +1,296 @@ +writeln(s) ::= < + '\\n';>> +write(s) ::= <;>> +writeList(s) ::= <;>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= "" + +Cast(t,v) ::= "" + +Append(a,b) ::= " + " + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= "var = ;" + +AssertIsList(v) ::= <> + +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= <%this. = ;%> + +InitBooleanMember(n,v) ::= <%this. = ;%> + +GetMember(n) ::= <%this.%> + +SetMember(n,v) ::= <%this. = ;%> + +AddMember(n,v) ::= <%this. += ;%> + +PlusMember(v,n) ::= <% + this.%> + +MemberEquals(n,v) ::= <%this. === %> + +ModMemberEquals(n,m,v) ::= <%this. % === %> + +ModMemberNotEquals(n,m,v) ::= <%this. % != %> + +CheckVectorContext(s,v) ::= " = [].concat();" + +DumpDFA() ::= "this.dumpDFA();" + +Pass() ::= "" + +StringList() ::= "list" + +BuildParseTrees() ::= "this.buildParseTrees = true;" + +BailErrorStrategy() ::= <%this._errHandler = new antlr4.error.BailErrorStrategy();%> + +ToStringTree(s) ::= <%.toStringTree(null, this)%> + +Column() ::= "this.column" + +Text() ::= "this.text" + +ValEquals(a,b) ::= <%===%> + +TextEquals(a) ::= <%this.text===""%> + +PlusText(a) ::= <%"" + this.text%> + +InputText() ::= "this._input.getText()" + +LTEquals(i, v) ::= <%this._input.LT().text===%> + +LANotEquals(i, v) ::= <%this._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%this._tokenStartColumn===%> + +ImportListener(X) ::= << +@parser::header { +var Listener = require('./Listener').Listener; +} +>> + +GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.literalNames)" + +RuleInvocationStack() ::= "antlr4.Utils.arrayToString(this.getRuleInvocationStack())" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +this.Property = function() { + return true; +} +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +PositionAdjustingLexer.prototype.resetAcceptPosition = function(index, line, column) { + this._input.seek(index); + this.line = line; + this.column = column; + this._interp.consume(this._input); +}; + +PositionAdjustingLexer.prototype.nextToken = function() { + if (!("resetAcceptPosition" in this._interp)) { + var lexer = this; + this._interp.resetAcceptPosition = function(index, line, column) { lexer.resetAcceptPosition(index, line, column); }; + } + return antlr4.Lexer.prototype.nextToken.call(this); +}; + +PositionAdjustingLexer.prototype.emit = function() { + switch(this._type) { + case PositionAdjustingLexer.TOKENS: + this.handleAcceptPositionForKeyword("tokens"); + break; + case PositionAdjustingLexer.LABEL: + this.handleAcceptPositionForIdentifier(); + break; + } + return antlr4.Lexer.prototype.emit.call(this); +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForIdentifier = function() { + var tokenText = this.text; + var identifierLength = 0; + while (identifierLength \< tokenText.length && + PositionAdjustingLexer.isIdentifierChar(tokenText[identifierLength]) + ) { + identifierLength += 1; + } + if (this._input.index > this._tokenStartCharIndex + identifierLength) { + var offset = identifierLength - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForKeyword = function(keyword) { + if (this._input.index > this._tokenStartCharIndex + keyword.length) { + var offset = keyword.length - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.isIdentifierChar = function(c) { + return c.match(/^[0-9a-zA-Z_]+$/); +} + +>> + +BasicListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.visitTerminal = function(node) { + document.getElementById('output').value += node.symbol.text + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +WalkListener(s) ::= << +var walker = new antlr4.tree.ParseTreeWalker(); +walker.walk(new this.LeafListener(), ); +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::header { +MyRuleNode = function(parent, invokingState) { + antlr4.ParserRuleContext.call(this, parent, invokingState); + this.altNum = 0; + return this; +}; + +MyRuleNode.prototype = Object.create(antlr4.ParserRuleContext.prototype); +MyRuleNode.prototype.constructor = MyRuleNode; +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT()); + } else { + str = ctx.ID().symbol.toString(); + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +RuleGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text; + } else { + str = ctx.b(0).start.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + + +LRListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitE = function(ctx) { + var str; + if(ctx.getChildCount()===3) { + str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text; + } else { + str = ctx.INT().symbol.text; + } + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitCall = function(ctx) { + var str = ctx.e().start.text + ' ' + ctx.eList(); + document.getElementById('output').value += str + '\\n'; + }; + this.exitInt = function(ctx) { + var str = ctx.INT().symbol.text; + document.getElementById('output').value += str + '\\n'; + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +DeclareContextListGettersFunction() ::= << + function foo() { + var s = new SContext(); + var a = s.a(); + var b = s.b(); + }; +>> + +Declare_foo() ::= "this.foo = function() {document.getElementById('output').value += 'foo' + '\\n';};" + +Invoke_foo() ::= "this.foo();" + +Declare_pred() ::= <> + +Invoke_pred(v) ::= <)>> +ParserTokenType(t) ::= "Parser." +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/Index.stg deleted file mode 100644 index 6e7c43827..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/FullContextParsing/Index.stg +++ /dev/null @@ -1,17 +0,0 @@ -TestTemplates ::= [ - "AmbigYieldsCtxSensitiveDFA": [], - "CtxSensitiveDFA_1": [], - "CtxSensitiveDFA_2": [], - "CtxSensitiveDFATwoDiffInput": [], - "SLLSeesEOFInLLGrammar": [], - "FullContextIF_THEN_ELSEParse_1": [], - "FullContextIF_THEN_ELSEParse_2": [], - "FullContextIF_THEN_ELSEParse_3": [], - "FullContextIF_THEN_ELSEParse_4": [], - "FullContextIF_THEN_ELSEParse_5": [], - "FullContextIF_THEN_ELSEParse_6": [], - "LoopsSimulateTailRecursion": [], - "AmbiguityNoLoop": [], - "ExprAmbiguity_1": [], - "ExprAmbiguity_2": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Go.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Go.test.stg new file mode 100644 index 000000000..410f20881 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Go.test.stg @@ -0,0 +1,338 @@ +writeln(s) ::= <)>> +write(s) ::= <)>> +writeList(s) ::= <);>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= "" + +Cast(t,v) ::= "()" + +Append(a,b) ::= " + fmt.Sprint()" + +Concat(a,b) ::= "" + +DeclareLocal(s, v) ::= "var = " + +AssertIsList(v) ::= "" + +AssignLocal(s, v) ::= " = ;" + +InitIntMember(n, v) ::= <%var int = ; var _ int = ; %> + +InitBooleanMember(n, v) ::= <%var bool = ; var _ bool = ; %> + +GetMember(n) ::= <%%> + +SetMember(n, v) ::= <% = ;%> + +AddMember(n, v) ::= <% += ;%> + +PlusMember(v, n) ::= <% + fmt.Sprint()%> + +MemberEquals(n, v) ::= <% == %> + +ModMemberEquals(n, m, v) ::= <% % == %> + +ModMemberNotEquals(n, m, v) ::= <% % != %> + +DumpDFA() ::= "p.DumpDFA()" + +Pass() ::= "" + +StringList() ::= "[]string" + +BuildParseTrees() ::= "p.BuildParseTrees = true" + +BailErrorStrategy() ::= <%p.SetErrorHandler(antlr.NewBailErrorStrategy())%> + +ToStringTree(s) ::= <%.ToStringTree(nil, p)%> + +Column() ::= "p.GetCharPositionInLine()" + +Text() ::= "l.GetText()" + +ValEquals(a, b) ::= <% == %> + +TextEquals(a) ::= <%p.GetText() == ""%> + +PlusText(a) ::= <%"" + l.GetText()%> + +InputText() ::= "p.GetTokenStream().GetAllText()" + +LTEquals(i, v) ::= <%p.GetTokenStream().LT().GetText() == %> + +LANotEquals(i, v) ::= <%p.GetTokenStream().LA() != %> + +TokenStartColumnEquals(i) ::= <%p.TokenStartColumn == %> + +ImportListener(X) ::= "" + +GetExpectedTokenNames() ::= "p.GetExpectedTokens().StringVerbose(p.GetTokenNames(), nil, false)" + +RuleInvocationStack() ::= "antlr.PrintArrayJavaStyle(p.GetRuleInvocationStack(nil))" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%%> + +Production(p) ::= <%%> + +Result(r) ::= <%Get()%> + +ParserPropertyMember() ::= << +@parser::members { +func (p *TParser) Property() bool { + return true +} +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << +func (p *PositionAdjustingLexer) NextToken() antlr.Token { + if _, ok := p.Interpreter.(*PositionAdjustingLexerATNSimulator); !ok { + p.Interpreter = NewPositionAdjustingLexerATNSimulator(p, lexerAtn, p.Interpreter.DecisionToDFA(), p.Interpreter.SharedContextCache()) + p.Virt = p + } + + return p.BaseLexer.NextToken() +} + +func (p *PositionAdjustingLexer) Emit() antlr.Token { + switch p.GetType() { + case PositionAdjustingLexerTOKENS: + p.HandleAcceptPositionForKeyword("tokens") + + case PositionAdjustingLexerLABEL: + p.HandleAcceptPositionForIdentifier() + } + + return p.BaseLexer.Emit() +} + +func isIdentifierChar(c rune) bool { + return unicode.IsLetter(c) || unicode.IsDigit(c) || c == '_' +} + +func (p *PositionAdjustingLexer) HandleAcceptPositionForIdentifier() bool { + var tokenText = p.GetText() + var identifierLength int + + for identifierLength \< len(tokenText) && isIdentifierChar([]rune(tokenText)[identifierLength]) { + identifierLength++ + } + + if p.GetInputStream().Index() \<= p.TokenStartCharIndex + identifierLength { + return false + } + + var offset = identifierLength - 1 + + p.GetInterpreter().(*PositionAdjustingLexerATNSimulator).ResetAcceptPosition(p.GetInputStream(), p.TokenStartCharIndex + offset, p.TokenStartLine, p.TokenStartColumn + offset) + + return true +} + +func (p *PositionAdjustingLexer) HandleAcceptPositionForKeyword(keyword string) bool { + if p.GetInputStream().Index() \<= p.TokenStartCharIndex + len(keyword) { + return false + } + + var offset = len(keyword) - 1 + + p.GetInterpreter().(*PositionAdjustingLexerATNSimulator).ResetAcceptPosition(p.GetInputStream(), p.TokenStartCharIndex + offset, p.TokenStartLine, p.TokenStartColumn + offset) + + return true +} + +type PositionAdjustingLexerATNSimulator struct { + *antlr.LexerATNSimulator +} + +func NewPositionAdjustingLexerATNSimulator(recog antlr.Lexer, atn *antlr.ATN, decisionToDFA []*antlr.DFA, sharedContextCache *antlr.PredictionContextCache) *PositionAdjustingLexerATNSimulator { + return &PositionAdjustingLexerATNSimulator{ + LexerATNSimulator: antlr.NewLexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache), + } +} + +func (p *PositionAdjustingLexerATNSimulator) ResetAcceptPosition(input antlr.CharStream, index, line, charPositionInLine int) { + input.Seek(index) + p.Line = line + p.CharPositionInLine = charPositionInLine + p.Consume(input) +} + +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::members { + +type MyRuleNode struct { + *antlr.BaseParserRuleContext + + altNum int +} + +func NewMyRuleNode(parent antlr.ParserRuleContext, invokingStateNumber int) *MyRuleNode { + return &MyRuleNode{ + BaseParserRuleContext : antlr.NewBaseParserRuleContext(parent, invokingStateNumber), + } +} + +func (m *MyRuleNode) GetAltNumber() int { + return m.altNum +} + +func (m *MyRuleNode) SetAltNumber(altNum int) { + m.altNum = altNum +} + +} +>> + +BasicListener(notused) ::= << +@parser::members { +type LeafListener struct { + *BaseTListener +} + +func NewLeafListener() *LeafListener { + return &LeafListener{BaseTListener: &BaseTListener{}} +} + +func (*LeafListener) VisitTerminal(node antlr.TerminalNode) { + fmt.Println(node.GetSymbol().GetText()) +} +} +>> + +WalkListener(s) ::= << +var walker = antlr.NewParseTreeWalker() + +walker.Walk(NewLeafListener(), ) +>> + +TokenGetterListener(notused) ::= << +@parser::members { +type LeafListener struct { + *BaseTListener +} + +func NewLeafListener() *LeafListener { + return &LeafListener{BaseTListener: &BaseTListener{}} +} + +func (*LeafListener) ExitA(ctx *AContext) { + if ctx.GetChildCount() == 2 { + fmt.Printf("%s %s %s", ctx.INT(0).GetSymbol().GetText(), ctx.INT(1).GetSymbol().GetText(), antlr.PrintArrayJavaStyle(antlr.TerminalNodeToStringArray(ctx.AllINT()))) + } else { + fmt.Println(ctx.ID().GetSymbol()) + } +} +} +>> + +RuleGetterListener(notused) ::= << +@parser::members { +type LeafListener struct { + *BaseTListener +} + +func NewLeafListener() *LeafListener { + return &LeafListener{BaseTListener: &BaseTListener{}} +} + +func (*LeafListener) ExitA(ctx *AContext) { + if ctx.GetChildCount() == 2 { + fmt.Printf("%s %s %s", ctx.B(0).GetStart().GetText(), ctx.B(1).GetStart().GetText(), ctx.AllB()[0].GetStart().GetText()) + } else { + fmt.Println(ctx.B(0).GetStart().GetText()) + } +} +} +>> + +LRListener(notused) ::= << +@parser::members { +type LeafListener struct { + *BaseTListener +} + +func NewLeafListener() *LeafListener { + return &LeafListener{BaseTListener: &BaseTListener{}} +} + +func (*LeafListener) ExitE(ctx *EContext) { + if ctx.GetChildCount() == 3 { + fmt.Printf("%s %s %s\n", ctx.E(0).GetStart().GetText(), ctx.E(1).GetStart().GetText(), ctx.AllE()[0].GetStart().GetText()) + } else { + fmt.Println(ctx.INT().GetSymbol().GetText()) + } +} +} +>> + +LRWithLabelsListener(notused) ::= << +@parser::members { +type LeafListener struct { + *BaseTListener +} + +func NewLeafListener() *LeafListener { + return &LeafListener{BaseTListener: &BaseTListener{}} +} + +func (*LeafListener) ExitCall(ctx *CallContext) { + fmt.Printf("%s %s", ctx.E().GetStart().GetText(), ctx.EList().String(nil, nil)) +} + +func (*LeafListener) ExitInt(ctx *IntContext) { + fmt.Println(ctx.INT().GetSymbol().GetText()) +} +} +>> + +ImportVisitor(X) ::= "" +BasicVisitor(X) ::= "" +WalkVisitor(s) ::= "" +LRWithLabelsVisitor(X) ::= "" +RuleGetterVisitor(X) ::= "" +LRVisitor(x) ::= "" +TokenGetterVisitor(x) ::= "" + +DeclareContextListGettersFunction() ::= << +func foo() { + // TODO + // var s SContext + // var a = s.A() + // var b = s.B() +} +>> + +Declare_foo() ::= << +func foo() { + fmt.Println("foo") +} +>> + +Invoke_foo() ::= "foo()" + +Declare_pred() ::= << +func pred(v bool) bool { + fmt.Println("eval=" + fmt.Sprint(v)) + + return v +} +>> + +Invoke_pred(v) ::= <)>> + +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Index.stg deleted file mode 100644 index 711d31ef4..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Index.stg +++ /dev/null @@ -1,17 +0,0 @@ -TestFolders ::= [ - "CompositeLexers": [], - "CompositeParsers": [], - "FullContextParsing": [], - "LeftRecursion": [], - "LexerErrors": [], - "LexerExec": [], - "Listeners": [], - "ParserErrors": [], - "ParserExec": [], - "ParseTrees": [], - "Performance": [], - "SemPredEvalLexer": [], - "SemPredEvalParser": [], - "Sets": [], - "Visitors": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Java.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Java.test.stg new file mode 100644 index 000000000..b781e5efe --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Java.test.stg @@ -0,0 +1,298 @@ +writeln(s) ::= <);>> +write(s) ::= <);>> +writeList(s) ::= <);>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= <);>> + +Cast(t,v) ::= "(())" + +Append(a,b) ::= " + " + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= "Object = ;" + +AssertIsList(v) ::= "List\ __ttt__ = ;" // just use static type system + +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= <%int = ;%> + +InitBooleanMember(n,v) ::= <%boolean = ;%> + +GetMember(n) ::= <%this.%> + +SetMember(n,v) ::= <%this. = ;%> + +AddMember(n,v) ::= <%this. += ;%> + +PlusMember(v,n) ::= <% + this.%> + +MemberEquals(n,v) ::= <%this. == %> + +ModMemberEquals(n,m,v) ::= <%this. % == %> + +ModMemberNotEquals(n,m,v) ::= <%this. % != %> + +DumpDFA() ::= "this.dumpDFA();" + +Pass() ::= "" + +StringList() ::= "List\" + +BuildParseTrees() ::= "setBuildParseTree(true);" + +BailErrorStrategy() ::= <%setErrorHandler(new BailErrorStrategy());%> + +ToStringTree(s) ::= <%.toStringTree(this)%> + +Column() ::= "this.getCharPositionInLine()" + +Text() ::= "this.getText()" + +ValEquals(a,b) ::= <%==%> + +TextEquals(a) ::= <%this.getText().equals("")%> + +PlusText(a) ::= <%"" + this.getText()%> + +InputText() ::= "this._input.getText()" + +LTEquals(i, v) ::= <%this._input.LT().getText().equals()%> + +LANotEquals(i, v) ::= <%this._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%this._tokenStartCharPositionInLine==%> + +ImportListener(X) ::= "" + +GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.tokenNames)" + +RuleInvocationStack() ::= "getRuleInvocationStack()" + +LL_EXACT_AMBIG_DETECTION() ::= <<_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);>> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +boolean Property() { + return true; +} +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +@Override +public Token nextToken() { + if (!(_interp instanceof PositionAdjustingLexerATNSimulator)) { + _interp = new PositionAdjustingLexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache); + } + + return super.nextToken(); +} + +@Override +public Token emit() { + switch (_type) { + case TOKENS: + handleAcceptPositionForKeyword("tokens"); + break; + + case LABEL: + handleAcceptPositionForIdentifier(); + break; + + default: + break; + } + + return super.emit(); +} + +private boolean handleAcceptPositionForIdentifier() { + String tokenText = getText(); + int identifierLength = 0; + while (identifierLength \< tokenText.length() && isIdentifierChar(tokenText.charAt(identifierLength))) { + identifierLength++; + } + + if (getInputStream().index() > _tokenStartCharIndex + identifierLength) { + int offset = identifierLength - 1; + getInterpreter().resetAcceptPosition(getInputStream(), _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset); + return true; + } + + return false; +} + +private boolean handleAcceptPositionForKeyword(String keyword) { + if (getInputStream().index() > _tokenStartCharIndex + keyword.length()) { + int offset = keyword.length() - 1; + getInterpreter().resetAcceptPosition(getInputStream(), _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset); + return true; + } + + return false; +} + +@Override +public PositionAdjustingLexerATNSimulator getInterpreter() { + return (PositionAdjustingLexerATNSimulator)super.getInterpreter(); +} + +private static boolean isIdentifierChar(char c) { + return Character.isLetterOrDigit(c) || c == '_'; +} + +protected static class PositionAdjustingLexerATNSimulator extends LexerATNSimulator { + + public PositionAdjustingLexerATNSimulator(Lexer recog, ATN atn, + DFA[] decisionToDFA, + PredictionContextCache sharedContextCache) + { + super(recog, atn, decisionToDFA, sharedContextCache); + } + + protected void resetAcceptPosition(CharStream input, int index, int line, int charPositionInLine) { + input.seek(index); + this.line = line; + this.charPositionInLine = charPositionInLine; + consume(input); + } + +} + +>> + +BasicListener(X) ::= << +@parser::members { +public static class LeafListener extends TBaseListener { + public void visitTerminal(TerminalNode node) { + System.out.println(node.getSymbol().getText()); + } +} +} +>> + +WalkListener(s) ::= << +ParseTreeWalker walker = new ParseTreeWalker(); +walker.walk(new LeafListener(), ); +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::members { +public static class MyRuleNode extends ParserRuleContext { + public int altNum; + public MyRuleNode(ParserRuleContext parent, int invokingStateNumber) { + super(parent, invokingStateNumber); + } + @Override public int getAltNumber() { return altNum; } + @Override public void setAltNumber(int altNum) { this.altNum = altNum; } +} +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +public static class LeafListener extends TBaseListener { + public void exitA(TParser.AContext ctx) { + if (ctx.getChildCount()==2) + System.out.printf("%s %s %s",ctx.INT(0).getSymbol().getText(), + ctx.INT(1).getSymbol().getText(),ctx.INT()); + else + System.out.println(ctx.ID().getSymbol()); + } +} +} +>> + +RuleGetterListener(X) ::= << +@parser::members { +public static class LeafListener extends TBaseListener { + public void exitA(TParser.AContext ctx) { + if (ctx.getChildCount()==2) { + System.out.printf("%s %s %s",ctx.b(0).start.getText(), + ctx.b(1).start.getText(),ctx.b().get(0).start.getText()); + } else + System.out.println(ctx.b(0).start.getText()); + } +} +} +>> + + +LRListener(X) ::= << +@parser::members { +public static class LeafListener extends TBaseListener { + public void exitE(TParser.EContext ctx) { + if (ctx.getChildCount()==3) { + System.out.printf("%s %s %s\n",ctx.e(0).start.getText(), + ctx.e(1).start.getText(), ctx.e().get(0).start.getText()); + } else + System.out.println(ctx.INT().getSymbol().getText()); + } +} +} +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +public static class LeafListener extends TBaseListener { + public void exitCall(TParser.CallContext ctx) { + System.out.printf("%s %s",ctx.e().start.getText(),ctx.eList()); + } + public void exitInt(TParser.IntContext ctx) { + System.out.println(ctx.INT().getSymbol().getText()); + } +} +} +>> + +ImportVisitor(X) ::= "" +BasicVisitor(X) ::= "" +WalkVisitor(s) ::= "" +LRWithLabelsVisitor(X) ::= "" +RuleGetterVisitor(X) ::= "" +LRVisitor(x) ::= "" +TokenGetterVisitor(x) ::= "" + +DeclareContextListGettersFunction() ::= << +void foo() { + SContext s = null; + List\ a = s.a(); + List\ b = s.b(); +} +>> + +Declare_foo() ::= << + public void foo() {System.out.println("foo");} +>> + +Invoke_foo() ::= "foo();" + +Declare_pred() ::= <" +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Index.stg deleted file mode 100644 index 617914d9d..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LeftRecursion/Index.stg +++ /dev/null @@ -1,99 +0,0 @@ -TestTemplates ::= [ - "Simple_1": [], - "Simple_2": [], - "Simple_3": [], - "DirectCallToLeftRecursiveRule_1": [], - "DirectCallToLeftRecursiveRule_2": [], - "DirectCallToLeftRecursiveRule_3": [], - "SemPred": [], - "TernaryExpr_1": [], - "TernaryExpr_2": [], - "TernaryExpr_3": [], - "TernaryExpr_4": [], - "TernaryExpr_5": [], - "TernaryExpr_6": [], - "TernaryExpr_7": [], - "TernaryExpr_8": [], - "TernaryExpr_9": [], - "Expressions_1": [], - "Expressions_2": [], - "Expressions_3": [], - "Expressions_4": [], - "Expressions_5": [], - "Expressions_6": [], - "Expressions_7": [], - "JavaExpressions_1": [], - "JavaExpressions_2": [], - "JavaExpressions_3": [], - "JavaExpressions_4": [], - "JavaExpressions_5": [], - "JavaExpressions_6": [], - "JavaExpressions_7": [], - "JavaExpressions_8": [], - "JavaExpressions_9": [], - "JavaExpressions_10": [], - "JavaExpressions_11": [], - "JavaExpressions_12": [], - "Declarations_1": [], - "Declarations_2": [], - "Declarations_3": [], - "Declarations_4": [], - "Declarations_5": [], - "Declarations_6": [], - "Declarations_7": [], - "Declarations_8": [], - "Declarations_9": [], - "Declarations_10": [], - "ReturnValueAndActions_1": [], - "ReturnValueAndActions_2": [], - "ReturnValueAndActions_3": [], - "ReturnValueAndActions_4": [], - "LabelsOnOpSubrule_1": [], - "LabelsOnOpSubrule_2": [], - "LabelsOnOpSubrule_3": [], - "ReturnValueAndActionsAndLabels_1": [], - "ReturnValueAndActionsAndLabels_2": [], - "ReturnValueAndActionsAndLabels_3": [], - "ReturnValueAndActionsAndLabels_4": [], - "MultipleAlternativesWithCommonLabel_1": [], - "MultipleAlternativesWithCommonLabel_2": [], - "MultipleAlternativesWithCommonLabel_3": [], - "MultipleAlternativesWithCommonLabel_4": [], - "PrefixAndOtherAlt_1": [], - "PrefixAndOtherAlt_2": [], - "PrefixOpWithActionAndLabel_1": [], - "PrefixOpWithActionAndLabel_2": [], - "PrefixOpWithActionAndLabel_3": [], - "AmbigLR_1": [], - "AmbigLR_2": [], - "AmbigLR_3": [], - "AmbigLR_4": [], - "AmbigLR_5": [], - "WhitespaceInfluence_1": [], - "WhitespaceInfluence_2": [], - "PrecedenceFilterConsidersContext": [], - "MultipleActions_1": [], - "MultipleActions_2": [], - "MultipleActions_3": [], - "MultipleActionsPredicatesOptions_1": [], - "MultipleActionsPredicatesOptions_2": [], - "MultipleActionsPredicatesOptions_3": [], - "SemPredFailOption": [], - "TernaryExprExplicitAssociativity_1": [], - "TernaryExprExplicitAssociativity_2": [], - "TernaryExprExplicitAssociativity_3": [], - "TernaryExprExplicitAssociativity_4": [], - "TernaryExprExplicitAssociativity_5": [], - "TernaryExprExplicitAssociativity_6": [], - "TernaryExprExplicitAssociativity_7": [], - "TernaryExprExplicitAssociativity_8": [], - "TernaryExprExplicitAssociativity_9": [], - "ReturnValueAndActionsList1_1": [], - "ReturnValueAndActionsList1_2": [], - "ReturnValueAndActionsList1_3": [], - "ReturnValueAndActionsList1_4": [], - "ReturnValueAndActionsList2_1": [], - "ReturnValueAndActionsList2_2": [], - "ReturnValueAndActionsList2_3": [], - "ReturnValueAndActionsList2_4": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/Index.stg deleted file mode 100644 index e4195a38a..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerErrors/Index.stg +++ /dev/null @@ -1,14 +0,0 @@ -TestTemplates ::= [ - "InvalidCharAtStart": [], - "StringsEmbeddedInActions_1": [], - "StringsEmbeddedInActions_2": [], - "EnforcedGreedyNestedBrances_1": [], - "EnforcedGreedyNestedBrances_2": [], - "InvalidCharAtStartAfterDFACache": [], - "InvalidCharInToken": [], - "InvalidCharInTokenAfterDFACache": [], - "DFAToATNThatFailsBackToDFA": [], - "DFAToATNThatMatchesThenFailsInATN": [], - "ErrorInMiddle": [], - "LexerExecDFA": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Index.stg deleted file mode 100644 index d6477c881..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/LexerExec/Index.stg +++ /dev/null @@ -1,40 +0,0 @@ -TestTemplates ::= [ - "QuoteTranslation": [], - "RefToRuleDoesNotSetTokenNorEmitAnother": [], - "Slashes": [], - "Parentheses": [], - "NonGreedyTermination1": [], - "NonGreedyTermination2": [], - "GreedyOptional": [], - "NonGreedyOptional": [], - "GreedyClosure": [], - "NonGreedyClosure": [], - "GreedyPositiveClosure": [], - "NonGreedyPositiveClosure": [], - "RecursiveLexerRuleRefWithWildcardStar_1": [], - "RecursiveLexerRuleRefWithWildcardStar_2": [], - "RecursiveLexerRuleRefWithWildcardPlus_1": [], - "RecursiveLexerRuleRefWithWildcardPlus_2": [], - "ActionPlacement": [], - "GreedyConfigs": [], - "NonGreedyConfigs": [], - "KeywordID": [], - "HexVsID": [], - "EOFByItself": [], - "EOFSuffixInFirstRule_1": [], - "EOFSuffixInFirstRule_2": [], - "CharSet": [], - "CharSetPlus": [], - "CharSetNot": [], - "CharSetInSet": [], - "CharSetRange": [], - "CharSetWithMissingEndRange": [], - "CharSetWithMissingEscapeChar": [], - "CharSetWithEscapedChar": [], - "CharSetWithReversedRange": [], - "CharSetWithQuote1": [], - "CharSetWithQuote2": [], - "PositionAdjustingLexer": [], - "LargeLexer": [], - "ZeroLengthToken": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/Index.stg deleted file mode 100644 index 6d405b3ea..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Listeners/Index.stg +++ /dev/null @@ -1,9 +0,0 @@ -TestTemplates ::= [ - "Basic": [], - "TokenGetters_1": [], - "TokenGetters_2": [], - "RuleGetters_1": [], - "RuleGetters_2": [], - "LR": [], - "LRWithLabels": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Node.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Node.test.stg new file mode 100644 index 000000000..174c79610 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Node.test.stg @@ -0,0 +1,389 @@ +writeln(s) ::= <);>> +write(s) ::= <);>> +writeList(s) ::= <);>> + +False() ::= "false" + +True() ::= "true" + +Not(v) ::= "!" + +Assert(s) ::= <);>> + +Cast(t,v) ::= "" + +Append(a,b) ::= " + " + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= "var = ;" + +AssertIsList(v) ::= <> + +AssignLocal(s,v) ::= " = ;" + +InitIntMember(n,v) ::= <%this. = ;%> + +InitBooleanMember(n,v) ::= <%this. = ;%> + +GetMember(n) ::= <%this.%> + +SetMember(n,v) ::= <%this. = ;%> + +AddMember(n,v) ::= <%this. += ;%> + +PlusMember(v,n) ::= <% + this.%> + +MemberEquals(n,v) ::= <%this. === %> + +ModMemberEquals(n,m,v) ::= <%this. % === %> + +ModMemberNotEquals(n,m,v) ::= <%this. % != %> + +DumpDFA() ::= "this.dumpDFA();" + +Pass() ::= "" + +StringList() ::= "list" + +BuildParseTrees() ::= "this.buildParseTrees = true;" + +BailErrorStrategy() ::= <%this._errHandler = new antlr4.error.BailErrorStrategy();%> + +ToStringTree(s) ::= <%.toStringTree(null, this)%> + +Column() ::= "this.column" + +Text() ::= "this.text" + +ValEquals(a,b) ::= <%===%> + +TextEquals(a) ::= <%this.text===""%> + +PlusText(a) ::= <%"" + this.text%> + +InputText() ::= "this._input.getText()" + +LTEquals(i, v) ::= <%this._input.LT().text===%> + +LANotEquals(i, v) ::= <%this._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%this._tokenStartColumn===%> + +ImportListener(X) ::= << +@parser::header { +var Listener = require('./Listener').Listener; +} +>> + +ImportVisitor(X) ::= <Visitor = require('./Visitor').Visitor;>> + +GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.literalNames)" + +RuleInvocationStack() ::= "antlr4.Utils.arrayToString(this.getRuleInvocationStack())" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +this.Property = function() { + return true; +} +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +PositionAdjustingLexer.prototype.resetAcceptPosition = function(index, line, column) { + this._input.seek(index); + this.line = line; + this.column = column; + this._interp.consume(this._input); +}; + +PositionAdjustingLexer.prototype.nextToken = function() { + if (!("resetAcceptPosition" in this._interp)) { + var lexer = this; + this._interp.resetAcceptPosition = function(index, line, column) { lexer.resetAcceptPosition(index, line, column); }; + } + return antlr4.Lexer.prototype.nextToken.call(this); +}; + +PositionAdjustingLexer.prototype.emit = function() { + switch(this._type) { + case PositionAdjustingLexer.TOKENS: + this.handleAcceptPositionForKeyword("tokens"); + break; + case PositionAdjustingLexer.LABEL: + this.handleAcceptPositionForIdentifier(); + break; + } + return antlr4.Lexer.prototype.emit.call(this); +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForIdentifier = function() { + var tokenText = this.text; + var identifierLength = 0; + while (identifierLength \< tokenText.length && + PositionAdjustingLexer.isIdentifierChar(tokenText[identifierLength]) + ) { + identifierLength += 1; + } + if (this._input.index > this._tokenStartCharIndex + identifierLength) { + var offset = identifierLength - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.prototype.handleAcceptPositionForKeyword = function(keyword) { + if (this._input.index > this._tokenStartCharIndex + keyword.length) { + var offset = keyword.length - 1; + this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset, + this._tokenStartLine, this._tokenStartColumn + offset); + return true; + } else { + return false; + } +}; + +PositionAdjustingLexer.isIdentifierChar = function(c) { + return c.match(/^[0-9a-zA-Z_]+$/); +} + +>> + +BasicListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.visitTerminal = function(node) { + console.log(node.symbol.text); + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +WalkListener(s) ::= << +var walker = new antlr4.tree.ParseTreeWalker(); +walker.walk(new this.LeafListener(), ); +>> + +BasicVisitor(X) ::= << +this.LeafVisitor = function() { + this.visitTerminal = function(node) { + return node.symbol.text; + }; + return this; +}; +this.LeafVisitor.prototype = Object.create(Visitor.prototype); +this.LeafVisitor.prototype.constructor = this.LeafVisitor; + +>> + +WalkVisitor(s) ::= << +var visitor = new this.LeafVisitor(); +console.log(.accept(visitor)); +>> + + +TreeNodeWithAltNumField(X) ::= << +@parser::header { +MyRuleNode = function(parent, invokingState) { + antlr4.ParserRuleContext.call(this, parent, invokingState); + + this.altNum = 0; + return this; +}; + +MyRuleNode.prototype = Object.create(antlr4.ParserRuleContext.prototype); +MyRuleNode.prototype.constructor = MyRuleNode; +MyRuleNode.prototype.getAltNumber = function() { return this.altNum; } +MyRuleNode.prototype.setAltNumber = function(altNumber) { this.altNum = altNumber; } + +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT()); + } else { + str = ctx.ID().symbol.toString(); + } + console.log(str); + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +TokenGetterVisitor(X) ::= << +this.LeafVisitor = function() { + this.visitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT()); + } else { + str = ctx.ID().symbol.toString(); + } + return this.visitChildren(ctx) + str; + }; + return this; +}; +this.LeafVisitor.prototype = Object.create(Visitor.prototype); +this.LeafVisitor.prototype.constructor = this.LeafVisitor; + +>> + +RuleGetterListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text; + } else { + str = ctx.b(0).start.text; + } + console.log(str); + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +RuleGetterVisitor(X) ::= << +this.LeafVisitor = function() { + this.visitA = function(ctx) { + var str; + if(ctx.getChildCount()===2) { + str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text; + } else { + str = ctx.b(0).start.text; + } + return this.visitChildren(ctx) + str; + }; + return this; +}; +this.LeafVisitor.prototype = Object.create(Visitor.prototype); +this.LeafVisitor.prototype.constructor = this.LeafVisitor; + +>> + + +LRListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitE = function(ctx) { + var str; + if(ctx.getChildCount()===3) { + str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text; + } else { + str = ctx.INT().symbol.text; + } + console.log(str); + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +LRVisitor(X) ::= << +this.LeafVisitor = function() { + this.visitE = function(ctx) { + var str; + if(ctx.getChildCount()===3) { + str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text; + } else { + str = ctx.INT().symbol.text; + } + return this.visitChildren(ctx) + str; + }; + return this; +}; +this.LeafVisitor.prototype = Object.create(Visitor.prototype); +this.LeafVisitor.prototype.constructor = this.LeafVisitor; + +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +this.LeafListener = function() { + this.exitCall = function(ctx) { + var str = ctx.e().start.text + ' ' + ctx.eList(); + console.log(str); + }; + this.exitInt = function(ctx) { + var str = ctx.INT().symbol.text; + console.log(str); + }; + return this; +}; +this.LeafListener.prototype = Object.create(Listener.prototype); +this.LeafListener.prototype.constructor = this.LeafListener; +} +>> + +LRWithLabelsVisitor(X) ::= << +this.LeafVisitor = function() { + this.visitCall = function(ctx) { + var str = ctx.e().start.text + ' ' + ctx.eList(); + return this.visitChildren(ctx) + str; + }; + this.visitInt = function(ctx) { + var str = ctx.INT().symbol.text; + return this.visitChildren(ctx) + str; + }; + return this; +}; +this.LeafVisitor.prototype = Object.create(Visitor.prototype); +this.LeafVisitor.prototype.constructor = this.LeafVisitor; + +>> + +DeclareContextListGettersFunction() ::= << + function foo() { + var s = new SContext(); + var a = s.a(); + var b = s.b(); + }; +>> + +Declare_foo() ::= "this.foo = function() {console.log('foo');};" + +Invoke_foo() ::= "this.foo();" + +Declare_pred() ::= <" +ContextRuleFunction(ctx, rule) ::= "." +StringType() ::= "String" +ContextMember(ctx, subctx, member) ::= ".." diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Index.stg deleted file mode 100644 index a8bc31d2d..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParseTrees/Index.stg +++ /dev/null @@ -1,11 +0,0 @@ -TestTemplates ::= [ - "TokenAndRuleContextString": [], - "Token2": [], - "2Alts": [], - "2AltLoop": [], - "RuleRef": [], - "ExtraToken": [], - "NoViableAlt": [], - "Sync": [], - "AltNum": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/Index.stg deleted file mode 100644 index 537a7e2c1..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserErrors/Index.stg +++ /dev/null @@ -1,34 +0,0 @@ -TestTemplates ::= [ - "TokenMismatch": [], - "SingleTokenDeletion": [], - "SingleTokenDeletionConsumption": [], - "SingleTokenDeletionExpectingSet": [], - "SingleTokenInsertion": [], - "SingleSetInsertionConsumption": [], - "ConjuringUpToken": [], - "SingleSetInsertion": [], - "ConjuringUpTokenFromSet": [], - "LL2": [], - "LL3": [], - "LLStar": [], - "SingleTokenDeletionBeforeAlt": [], - "SingleTokenDeletionBeforePredict": [], - "SingleTokenDeletionBeforeLoop": [], - "MultiTokenDeletionBeforeLoop": [], - "SingleTokenDeletionDuringLoop": [], - "MultiTokenDeletionDuringLoop": [], - "SingleTokenDeletionBeforeLoop2": [], - "MultiTokenDeletionBeforeLoop2": [], - "SingleTokenDeletionDuringLoop2": [], - "MultiTokenDeletionDuringLoop2": [], - "LL1ErrorInfo": [], - "InvalidEmptyInput": [], - "ContextListGetters": [], - "DuplicatedLeftRecursiveCall_1": [], - "DuplicatedLeftRecursiveCall_2": [], - "DuplicatedLeftRecursiveCall_3": [], - "DuplicatedLeftRecursiveCall_4": [], - "InvalidATNStateRemoval": [], - "NoViableAltAvoidance": [], - "TokenMismatch2": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AlternateQuotes.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AlternateQuotes.stg deleted file mode 100644 index bb3b24b2a..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/AlternateQuotes.stg +++ /dev/null @@ -1,42 +0,0 @@ -TestType() ::= "CompositeParser" - -Options ::= [ - "SlaveIsLexer": true, - "Debug": false -] - -Grammar ::= [ - "ModeTagsParser": {} -] - -SlaveGrammars ::= [ - "ModeTagsLexer": {} -] - -Input() ::= "" - -Rule() ::= "file_" - -Output() ::= "" - -Errors() ::= "" - -grammar(grammarName, slaveGrammarName) ::= << -parser grammar ; -options { tokenVocab=; } // use tokens from .g4 -file_: (tag | TEXT)* ; -tag : '«' ID '»' - | '«' '/' ID '»' - ; ->> - -slaveGrammar(grammarName) ::= << -lexer grammar ; -// Default mode rules (the SEA) -OPEN : '«' -> mode(ISLAND) ; // switch to ISLAND mode -TEXT : ~'«'+ ; // clump all text together -mode ISLAND; -CLOSE : '»' -> mode(DEFAULT_MODE) ; // back to SEA mode -SLASH : '/' ; -ID : [a-zA-Z]+ ; // match/send ID in tag to parser ->> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Index.stg deleted file mode 100644 index e41b91159..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/Index.stg +++ /dev/null @@ -1,36 +0,0 @@ -TestTemplates ::= [ - "Labels": [], - "ListLabelsOnSet": [], - "AorB": [], - "Basic": [], - "APlus": [], - "AorAPlus": [], - "IfIfElseGreedyBinding1": [], - "IfIfElseGreedyBinding2": [], - "IfIfElseNonGreedyBinding1": [], - "IfIfElseNonGreedyBinding2": [], - "AStar_1": [], - "AStar_2": [], - "LL1OptionalBlock_1": [], - "LL1OptionalBlock_2": [], - "AorAStar_1": [], - "AorAStar_2": [], - "AorBPlus": [], - "AorBStar_1": [], - "AorBStar_2": [], - "Optional_1": [], - "Optional_2": [], - "Optional_3": [], - "Optional_4": [], - "PredicatedIfIfElse": [], - //"StartRuleWithoutEOF": [], - "LabelAliasingAcrossLabeledAlternatives": [], - "ParserProperty": [], - "PredictionIssue334": [], - "ListLabelForClosureContext": [], - "MultipleEOFHandling": [], - "EOFInClosure": [], - "ReferenceToATN_1": [], - "ReferenceToATN_2": [] - //"AlternateQuotes": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/StartRuleWithoutEOF.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/StartRuleWithoutEOF.stg deleted file mode 100644 index 4821cfe79..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/ParserExec/StartRuleWithoutEOF.stg +++ /dev/null @@ -1,31 +0,0 @@ -TestType() ::= "Parser" - -Options ::= [ - "Debug": true -] - -Grammar ::= [ - "T": {} -] - -Input() ::= "abc 34" - -Rule() ::= "s" - -Output() ::= << -Decision 0: -s0-ID->s1 -s1-INT->s2 -s2-EOF->:s3=>1<\n> ->> - -Errors() ::= "" - -grammar(grammarName) ::= << -grammar ; -s @after { } - : ID | ID INT ID ; -ID : 'a'..'z'+ ; -INT : '0'..'9'+; -WS : (' '|'\t'|'\n') -> skip; ->> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg deleted file mode 100644 index b5dc2288e..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_1.stg +++ /dev/null @@ -1,5 +0,0 @@ -import "ExpressionGrammar.stg" - -Input() ::= << - ->> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg deleted file mode 100644 index d7dda0b5a..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/ExpressionGrammar_2.stg +++ /dev/null @@ -1,14 +0,0 @@ -import "ExpressionGrammar.stg" - -Input() ::= << - or - or - or - or - or - or - or - or - or - ->> diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/Index.stg deleted file mode 100644 index c1cf3d8cf..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Performance/Index.stg +++ /dev/null @@ -1,4 +0,0 @@ -TestTemplates ::= [ - "ExpressionGrammar_1": [], - "ExpressionGrammar_2": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Python2.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Python2.test.stg new file mode 100644 index 000000000..09a77f486 --- /dev/null +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Python2.test.stg @@ -0,0 +1,273 @@ +writeln(s) ::= <)>> +write(s) ::= <,end='')>> +writeList(s) ::= <)}; separator="+">)>> + +False() ::= "False" + +True() ::= "True" + +Not(v) ::= "not " + +Assert(s) ::= "" + +Cast(t,v) ::= "" + +Append(a,b) ::= " + str()" + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= " = " + +AssertIsList(v) ::= "assert isinstance(v, (list, tuple))" + +AssignLocal(s,v) ::= " = " + +InitIntMember(n,v) ::= <% = %> + +InitBooleanMember(n,v) ::= <% = %> + +GetMember(n) ::= <%self.%> + +SetMember(n,v) ::= <%self. = %> + +AddMember(n,v) ::= <%self. += %> + +PlusMember(v,n) ::= <% + str(self.)%> + +MemberEquals(n,v) ::= <%self. == %> + +ModMemberEquals(n,m,v) ::= <%self. % == %> + +ModMemberNotEquals(n,m,v) ::= <%self. % != %> + +DumpDFA() ::= "self.dumpDFA()" + +Pass() ::= "pass" + +StringList() ::= "" + +BuildParseTrees() ::= "self._buildParseTrees = True" + +BailErrorStrategy() ::= <%self._errHandler = BailErrorStrategy()%> + +ToStringTree(s) ::= <%.toStringTree(recog=self)%> + +Column() ::= "self.column" + +Text() ::= "self.text" + +ValEquals(a,b) ::= <%==%> + +TextEquals(a) ::= <%self.text==""%> + +PlusText(a) ::= <%"" + self.text%> + +InputText() ::= "self._input.getText()" + +LTEquals(i, v) ::= <%self._input.LT().text==%> + +LANotEquals(i, v) ::= <%self._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%self._tokenStartColumn==%> + +ImportListener(X) ::= "" + +GetExpectedTokenNames() ::= "self.getExpectedTokens().toString(self.literalNames, self.symbolicNames)" + +RuleInvocationStack() ::= "str_list(self.getRuleInvocationStack())" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +def Property(self): + return True + +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +def resetAcceptPosition(self, index, line, column): + self._input.seek(index) + self.line = line + self.column = column + self._interp.consume(self._input) + +def nextToken(self): + if self._interp.__dict__.get("resetAcceptPosition", None) is None: + self._interp.__dict__["resetAcceptPosition"] = self.resetAcceptPosition + return super(type(self),self).nextToken() + +def emit(self): + if self._type==PositionAdjustingLexer.TOKENS: + self.handleAcceptPositionForKeyword("tokens") + elif self._type==PositionAdjustingLexer.LABEL: + self.handleAcceptPositionForIdentifier() + return super(type(self),self).emit() + +def handleAcceptPositionForIdentifier(self): + tokenText = self.text + identifierLength = 0 + while identifierLength \< len(tokenText) and self.isIdentifierChar(tokenText[identifierLength]): + identifierLength += 1 + + if self._input.index > self._tokenStartCharIndex + identifierLength: + offset = identifierLength - 1 + self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset, + self._tokenStartLine, self._tokenStartColumn + offset) + return True + else: + return False + + +def handleAcceptPositionForKeyword(self, keyword): + if self._input.index > self._tokenStartCharIndex + len(keyword): + offset = len(keyword) - 1 + self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset, + self._tokenStartLine, self._tokenStartColumn + offset) + return True + else: + return False + +@staticmethod +def isIdentifierChar(c): + return c.isalnum() or c == '_' + +>> + +BasicListener(X) ::= << +@parser::members { +if __name__ is not None and "." in __name__: + from .Listener import Listener +else: + from Listener import Listener + +class LeafListener(TListener): + def visitTerminal(self, node): + print(node.symbol.text) +} +>> + +WalkListener(s) ::= << +walker = ParseTreeWalker() +walker.walk(TParser.LeafListener(), ) +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::members { +class MyRuleNode(ParserRuleContext): + def __init__(self, parent = None, invokingStateNumber = None ): + super(Parser.MyRuleNode, self).__init__(parent, invokingStateNumber) + self.altNum = 0; + def getAltNumber(self): + return self.altNum + def setAltNumber(self, altNum): + self.altNum = altNum +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +if __name__ is not None and "." in __name__: + from .Listener import Listener +else: + from Listener import Listener + +class LeafListener(TListener): + def exitA(self, ctx): + if ctx.getChildCount()==2: + print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT())) + else: + print(str(ctx.ID().symbol)) +} +>> + +RuleGetterListener(X) ::= << +@parser::members { +if __name__ is not None and "." in __name__: + from .Listener import Listener +else: + from Listener import Listener + +class LeafListener(TListener): + def exitA(self, ctx): + if ctx.getChildCount()==2: + print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text) + else: + print(ctx.b(0).start.text) +} +>> + + +LRListener(X) ::= << +@parser::members { +if __name__ is not None and "." in __name__: + from .Listener import Listener +else: + from Listener import Listener + +class LeafListener(TListener): + def exitE(self, ctx): + if ctx.getChildCount()==3: + print(ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text) + else: + print(ctx.INT().symbol.text) +} +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +if __name__ is not None and "." in __name__: + from .Listener import Listener +else: + from Listener import Listener + +class LeafListener(TListener): + def exitCall(self, ctx): + print(ctx.e().start.text + ' ' + str(ctx.eList())) + def exitInt(self, ctx): + print(ctx.INT().symbol.text) +} +>> + +ImportVisitor(X) ::= "" +BasicVisitor(X) ::= "" +WalkVisitor(s) ::= "" +LRWithLabelsVisitor(X) ::= "" +RuleGetterVisitor(X) ::= "" +LRVisitor(x) ::= "" +TokenGetterVisitor(x) ::= "" + +DeclareContextListGettersFunction() ::= << +def foo(): + s = SContext() + a = s.a() + b = s.b() +>> + +Declare_foo() ::= <> + +Invoke_foo() ::= "self.foo()" + +Declare_pred() ::= <> +writeList(s) ::= <)}; separator="+">)>> + +False() ::= "False" + +True() ::= "True" + +Not(v) ::= "not " + +Assert(s) ::= "" + +Cast(t,v) ::= "" + +Append(a,b) ::= " + str()" + +Concat(a,b) ::= "" + +DeclareLocal(s,v) ::= " = " + +AssertIsList(v) ::= "assert isinstance(v, (list, tuple))" + +AssignLocal(s,v) ::= " = " + +InitIntMember(n,v) ::= <% = %> + +InitBooleanMember(n,v) ::= <% = %> + +GetMember(n) ::= <%self.%> + +SetMember(n,v) ::= <%self. = %> + +AddMember(n,v) ::= <%self. += %> + +PlusMember(v,n) ::= <% + str(self.)%> + +MemberEquals(n,v) ::= <%self. == %> + +ModMemberEquals(n,m,v) ::= <%self. % == %> + +ModMemberNotEquals(n,m,v) ::= <%self. % != %> + +DumpDFA() ::= "self.dumpDFA()" + +Pass() ::= "pass" + +StringList() ::= "" + +BuildParseTrees() ::= "self._buildParseTrees = True" + +BailErrorStrategy() ::= <%self._errHandler = BailErrorStrategy()%> + +ToStringTree(s) ::= <%.toStringTree(recog=self)%> + +Column() ::= "self.column" + +Text() ::= "self.text" + +ValEquals(a,b) ::= <%==%> + +TextEquals(a) ::= <%self.text==""%> + +PlusText(a) ::= <%"" + self.text%> + +InputText() ::= "self._input.getText()" + +LTEquals(i, v) ::= <%self._input.LT().text==%> + +LANotEquals(i, v) ::= <%self._input.LA()!=%> + +TokenStartColumnEquals(i) ::= <%self._tokenStartColumn==%> + +ImportListener(X) ::= << +@parser::header { +class MockListener: + pass +} +>> + +GetExpectedTokenNames() ::= "self.getExpectedTokens().toString(self.literalNames, self.symbolicNames)" + +RuleInvocationStack() ::= "str_list(self.getRuleInvocationStack())" + +LL_EXACT_AMBIG_DETECTION() ::= <> + +ParserToken(parser, token) ::= <%.%> + +Production(p) ::= <%

%> + +Result(r) ::= <%%> + +ParserPropertyMember() ::= << +@members { +def Property(self): + return True + +} +>> + +ParserPropertyCall(p, call) ::= "

." + +PositionAdjustingLexer() ::= << + +def resetAcceptPosition(self, index, line, column): + self._input.seek(index) + self.line = line + self.column = column + self._interp.consume(self._input) + +def nextToken(self): + if self._interp.__dict__.get("resetAcceptPosition", None) is None: + self._interp.__dict__["resetAcceptPosition"] = self.resetAcceptPosition + return super(type(self),self).nextToken() + +def emit(self): + if self._type==PositionAdjustingLexer.TOKENS: + self.handleAcceptPositionForKeyword("tokens") + elif self._type==PositionAdjustingLexer.LABEL: + self.handleAcceptPositionForIdentifier() + return super(type(self),self).emit() + +def handleAcceptPositionForIdentifier(self): + tokenText = self.text + identifierLength = 0 + while identifierLength \< len(tokenText) and self.isIdentifierChar(tokenText[identifierLength]): + identifierLength += 1 + + if self._input.index > self._tokenStartCharIndex + identifierLength: + offset = identifierLength - 1 + self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset, + self._tokenStartLine, self._tokenStartColumn + offset) + return True + else: + return False + + +def handleAcceptPositionForKeyword(self, keyword): + if self._input.index > self._tokenStartCharIndex + len(keyword): + offset = len(keyword) - 1 + self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset, + self._tokenStartLine, self._tokenStartColumn + offset) + return True + else: + return False + +@staticmethod +def isIdentifierChar(c): + return c.isalnum() or c == '_' + +>> + +BasicListener(X) ::= << +@parser::members { +class LeafListener(MockListener): + def visitTerminal(self, node): + print(node.symbol.text) +} +>> + +WalkListener(s) ::= << +if __name__ is not None and "." in __name__: + from .TListener import TListener +else: + from TListener import TListener +TParser.LeafListener.__bases__ = (TListener,) +walker = ParseTreeWalker() +walker.walk(TParser.LeafListener(), ) +>> + +TreeNodeWithAltNumField(X) ::= << +@parser::members { +class MyRuleNode(ParserRuleContext): + def __init__(self, parent:ParserRuleContext = None, invokingStateNumber:int = None ): + super(Parser.MyRuleNode, self).__init__(parent, invokingStateNumber) + self.altNum = 0; + def getAltNumber(self): + return self.altNum + def setAltNumber(self, altNum): + self.altNum = altNum +} +>> + +TokenGetterListener(X) ::= << +@parser::members { +class LeafListener(MockListener): + def exitA(self, ctx): + if ctx.getChildCount()==2: + print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT())) + else: + print(str(ctx.ID().symbol)) +} +>> + +RuleGetterListener(X) ::= << +@parser::members { +class LeafListener(MockListener): + def exitA(self, ctx): + if ctx.getChildCount()==2: + print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text) + else: + print(ctx.b(0).start.text) +} +>> + + +LRListener(X) ::= << +@parser::members { +class LeafListener(MockListener): + def exitE(self, ctx): + if ctx.getChildCount()==3: + print(ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text) + else: + print(ctx.INT().symbol.text) +} +>> + +LRWithLabelsListener(X) ::= << +@parser::members { +class LeafListener(MockListener): + def exitCall(self, ctx): + print(ctx.e().start.text + ' ' + str(ctx.eList())) + def exitInt(self, ctx): + print(ctx.INT().symbol.text) +} +>> + +ImportVisitor(X) ::= "" +BasicVisitor(X) ::= "" +WalkVisitor(s) ::= "" +LRWithLabelsVisitor(X) ::= "" +RuleGetterVisitor(X) ::= "" +LRVisitor(x) ::= "" +TokenGetterVisitor(x) ::= "" + +DeclareContextListGettersFunction() ::= << +def foo(): + s = SContext() + a = s.a() + b = s.b() +>> + +Declare_foo() ::= <> + +Invoke_foo() ::= "self.foo()" + +Declare_pred() ::= < + '\\n';>> write(s) ::= <;>> writeList(s) ::= <;>> @@ -348,6 +193,7 @@ MyRuleNode.prototype.constructor = MyRuleNode; } >> + TokenGetterListener(X) ::= << @parser::members { this.LeafListener = function() { @@ -447,8 +293,3 @@ ParserTokenType(t) ::= "Parser." ContextRuleFunction(ctx, rule) ::= "." StringType() ::= "String" ContextMember(ctx, subctx, member) ::= ".." - -isEmpty ::= [ - "": true, - default: false -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Index.stg deleted file mode 100644 index b6a907d6f..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalLexer/Index.stg +++ /dev/null @@ -1,9 +0,0 @@ -TestTemplates ::= [ - "DisableRule": [], - "IDvsEnum": [], - "IDnotEnum": [], - "EnumNotID": [], - "Indent": [], - "LexerInputPositionSensitivePredicates": [], - "PredicatedKeywords": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Index.stg deleted file mode 100644 index 13af0390d..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/SemPredEvalParser/Index.stg +++ /dev/null @@ -1,28 +0,0 @@ -TestTemplates ::= [ - "SimpleValidate": [], - "SimpleValidate2": [], - "AtomWithClosureInTranslatedLRRule": [], - "ValidateInDFA": [], - "Simple": [], - "Order": [], - "2UnpredicatedAlts": [], - "2UnpredicatedAltsAndOneOrthogonalAlt": [], - "RewindBeforePredEval": [], - "NoTruePredsThrowsNoViableAlt": [], - "ToLeft": [], - "UnpredicatedPathsInAlt": [], - "ActionHidesPreds": [], - "ToLeftWithVaryingPredicate": [], - "PredicateDependentOnArg": [], - "PredicateDependentOnArg2": [], - "DependentPredNotInOuterCtxShouldBeIgnored": [], - "IndependentPredNotPassedOuterCtxToAvoidCastException": [], - "PredsInGlobalFOLLOW": [], - "DepedentPredsInGlobalFOLLOW": [], - "ActionsHidePredsInGlobalFOLLOW": [], - "PredTestedEvenWhenUnAmbig_1": [], - "PredTestedEvenWhenUnAmbig_2": [], - "DisabledAlternative": [], - "PredFromAltTestedInLoopBack_1": [], - "PredFromAltTestedInLoopBack_2": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/Index.stg deleted file mode 100644 index 57bf5008c..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Sets/Index.stg +++ /dev/null @@ -1,25 +0,0 @@ -TestTemplates ::= [ - "SeqDoesNotBecomeSet": [], - "ParserSet": [], - "ParserNotSet": [], - "ParserNotToken": [], - "ParserNotTokenWithLabel": [], - "RuleAsSet": [], - "NotChar": [], - "OptionalSingleElement": [], - "OptionalLexerSingleElement": [], - "StarLexerSingleElement_1": [], - "StarLexerSingleElement_2": [], - "PlusLexerSingleElement": [], - "OptionalSet": [], - "StarSet": [], - "PlusSet": [], - "LexerOptionalSet": [], - "LexerStarSet": [], - "LexerPlusSet": [], - "NotCharSet": [], - "NotCharSetWithLabel": [], - "NotCharSetWithRuleRef3": [], - "CharSetLiteral": [], - "ComplementSet": [] -] diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/Index.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/Index.stg deleted file mode 100644 index 6d405b3ea..000000000 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Visitors/Index.stg +++ /dev/null @@ -1,9 +0,0 @@ -TestTemplates ::= [ - "Basic": [], - "TokenGetters_1": [], - "TokenGetters_2": [], - "RuleGetters_1": [], - "RuleGetters_2": [], - "LR": [], - "LRWithLabels": [] -] diff --git a/runtime-testsuite/src/org/antlr/v4/testgen/TestGenerator.java b/runtime-testsuite/src/org/antlr/v4/testgen/TestGenerator.java deleted file mode 100644 index 68c3a1084..000000000 --- a/runtime-testsuite/src/org/antlr/v4/testgen/TestGenerator.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * [The "BSD license"] - * Copyright (c) 2015 Terence Parr - * Copyright (c) 2015 Sam Harwell - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.antlr.v4.testgen; - -import org.stringtemplate.v4.ST; -import org.stringtemplate.v4.STGroup; -import org.stringtemplate.v4.STGroupFile; -import org.stringtemplate.v4.StringRenderer; -import org.stringtemplate.v4.gui.STViz; -import org.stringtemplate.v4.misc.ErrorBuffer; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -public class TestGenerator { - public final static String[] targets = { - "Cpp", "Java", "Go", "CSharp", "Python2", "Python3", - "JavaScript/Node", "JavaScript/Safari", "JavaScript/Firefox", - "JavaScript/Explorer", "JavaScript/Chrome" - }; - - /** Execute from antlr4 root dir: - * * - * $ java TestGenerator -o output-root-dir -templates -viz - * - * Example: - * - * $ java org.antlr.v4.testgen.TestGenerator -root /Users/parrt/antlr/code/antlr4 - */ - public static void main(String[] args) { - String rootDir = null; - String outDir = null; - String templatesRoot = null; - String target = "ALL"; - boolean browsers = false; - boolean viz = false; - - int i = 0; - while (args != null && i < args.length) { - String arg = args[i]; - if (arg.startsWith("-root")) { - i++; - rootDir = args[i]; - } - else if (arg.startsWith("-outdir")) { - i++; - outDir = args[i]; - } - else if (arg.startsWith("-templates")) { - i++; - templatesRoot = args[i]; - } - else if (arg.startsWith("-target")) { - i++; - target = args[i]; - } - else if (arg.startsWith("-browsers")) { - browsers = true; - } - else if (arg.startsWith("-viz")) { - viz = true; - } - i++; - } - - System.out.println("rootDir = " + rootDir); - System.out.println("outputDir = " + outDir); - System.out.println("templates = " + templatesRoot); - System.out.println("target = " + target); - System.out.println("browsers = " + browsers); - System.out.println("viz = " + viz); - - if(rootDir==null) { - System.out.println("rootDir is mandatory!" + rootDir); - return; - } - if(outDir==null) - outDir = rootDir + "/test"; - - if(templatesRoot==null) - templatesRoot = rootDir + "/resources/org/antlr/v4/test/runtime/templates"; - - if ( "ALL".equalsIgnoreCase(target)) { - genAllTargets(rootDir, outDir, templatesRoot, browsers, viz); - } - else { - genTarget(rootDir, outDir, target, templatesRoot, viz); - } - } - - public static void genAllTargets(String rootDir, String outDirRoot, String templatesRoot, boolean browsers, boolean viz) { - for(String target : targets) { - if(!browsers && "JavaScript/Safari".equals(target)) { - return; - } - genTarget(rootDir, outDirRoot, target, templatesRoot, viz); - } - } - - public static void genTarget(final String rootDir, final String outDir, final String fullTarget, final String templatesDir, boolean viz) { - String[] parts = fullTarget.split("/"); - String target = parts[0]; - String subTarget = parts.length>1 ? parts[1] : target; - String targetPackage = rootDir + "/resources/org/antlr/v4/test/runtime/" + fullTarget.toLowerCase(); - String targetTemplate = targetPackage + "/" + subTarget + ".test.stg"; - TestGenerator gen = new TestGenerator("UTF-8", - fullTarget, - rootDir, - new File(outDir), - new File(templatesDir), - new File(targetTemplate), - viz); - gen.info("Generating target " + gen.getTargetName()); - gen.execute(); - } - - // This project uses UTF-8, but the plugin might be used in another project - // which is not. Always load templates with UTF-8, but write using the - // specified encoding. - protected final String encoding; - protected final String targetName; - protected final String rootDir; - protected final File outputDir; - protected final File testTemplates; - protected final File runtimeTemplate; - protected final boolean visualize; - - public TestGenerator(String encoding, String targetName, String rootDir, File outputDir, File testTemplates, File runtimeTemplate, boolean visualize) { - this.encoding = encoding; - this.targetName = targetName; - this.rootDir = rootDir; - this.outputDir = outputDir; - this.testTemplates = testTemplates; - this.runtimeTemplate = runtimeTemplate; - this.visualize = visualize; - } - - private String getTargetName() { - return targetName; - } - - - public void execute() { - STGroup targetGroup = new STGroupFile(runtimeTemplate.getPath()); - targetGroup.registerModelAdaptor(STGroup.class, new STGroupModelAdaptor()); - targetGroup.registerRenderer(String.class, new StringRenderer(), true); - targetGroup.defineDictionary("escape", new JavaEscapeStringMap()); - targetGroup.defineDictionary("lines", new LinesStringMap()); - targetGroup.defineDictionary("strlen", new StrlenStringMap()); - generateCodeForFoldersInIndex(targetGroup); - } - - protected void generateCodeForFoldersInIndex(STGroup targetGroup) { - File targetFolder = getOutputDir(testTemplates+""); - STGroup index = new STGroupFile(testTemplates+"/Index.stg"); - index.load(); // make sure the index group is loaded since we call rawGetDictionary - Map folders = index.rawGetDictionary("TestFolders"); - if (folders != null) { - for (String key : folders.keySet()) { - final String testDir = testTemplates + "/" + key; - STGroup testIndex = new STGroupFile(testDir + "/Index.stg"); - testIndex.load(); - Map templateNames = testIndex.rawGetDictionary("TestTemplates"); - if ( templateNames != null && !templateNames.isEmpty() ) { - final ArrayList sortedTemplateNames = new ArrayList(templateNames.keySet()); - Collections.sort(sortedTemplateNames); - generateTestFile(testIndex, targetGroup, testDir, sortedTemplateNames, targetFolder); - } - } - } - } - - protected void generateTestFile(STGroup index, - STGroup targetGroup, - String testDir, - Collection testTemplates, - File targetFolder) - { - ErrorBuffer errors = new ErrorBuffer(); - targetGroup.setListener(errors); - - String testName = testDir.substring(testDir.lastIndexOf('/') + 1); - File targetFile = new File(targetFolder, "Test" + testName + ".java"); -// System.out.println("Generating file "+targetFile.getAbsolutePath()); - List templates = new ArrayList(); - for (String template : testTemplates) { - STGroup testGroup = new STGroupFile(testDir + "/" + template + STGroup.GROUP_FILE_EXTENSION); - importLanguageTemplates(testGroup, targetGroup); - ST testType = testGroup.getInstanceOf("TestType"); - if (testType == null) { - warn(String.format("Unable to generate tests for %s: no TestType specified.", template)); - continue; - } - - ST testMethodTemplate = targetGroup.getInstanceOf(testType.render() + "TestMethod"); - if (testMethodTemplate == null) { - warn(String.format("Unable to generate tests for %s: TestType '%s' is not supported by the current runtime.", template, testType.render())); - continue; - } - - testMethodTemplate.add(testMethodTemplate.impl.formalArguments.keySet().iterator().next(), testGroup); - templates.add(testMethodTemplate); - } - - ST testFileTemplate = targetGroup.getInstanceOf("TestFile"); - testFileTemplate.addAggr("file.{Options,name,tests}", - index.rawGetDictionary("Options"), - testName, - templates); - - if (visualize) { - STViz viz = testFileTemplate.inspect(); - try { - viz.waitForClose(); - } - catch (InterruptedException ex) { } - } - - try { - String output = testFileTemplate.render(); - if ( errors.errors.size()>0 ) { - System.err.println("errors in "+targetName+": "+errors); - } - writeFile(targetFile, output); - } - catch (IOException ex) { - error(String.format("Failed to write output file: %s", targetFile), ex); - } - } - - private void importLanguageTemplates(STGroup testGroup, STGroup languageGroup) { - // make sure the test group is loaded - testGroup.load(); - - if (testGroup == languageGroup) { - assert false : "Attempted to import the language group into itself."; - return; - } - - if (testGroup.getImportedGroups().isEmpty()) { - testGroup.importTemplates(languageGroup); - return; - } - - if (testGroup.getImportedGroups().contains(languageGroup)) { - return; - } - - for (STGroup importedGroup : testGroup.getImportedGroups()) { - importLanguageTemplates(importedGroup, languageGroup); - } - } - - public void writeFile(File file, String content) throws IOException { - file.getParentFile().mkdirs(); - - FileOutputStream fos = new FileOutputStream(file); - OutputStreamWriter osw = new OutputStreamWriter(fos, encoding != null ? encoding : "UTF-8"); - try { - osw.write(content); - } - finally { - osw.close(); - } - } - - public File getOutputDir(String templateFolder) { - if(templateFolder.startsWith(rootDir)) { - templateFolder = templateFolder.substring(rootDir.length()); - } - if(templateFolder.startsWith("/resources")) { - templateFolder = templateFolder.substring("/resources".length()); - } - templateFolder = templateFolder.substring(0, templateFolder.indexOf("/templates")); - templateFolder += "/" + targetName.toLowerCase(); - return new File(outputDir, templateFolder); - } - - protected void info(String message) { - System.out.println("INFO: " + message); - } - - protected void warn(String message) { - System.err.println("WARNING: " + message); - } - - protected void error(String message, Throwable throwable) { - System.err.println("ERROR: " + message); - } -} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeLexerTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeLexerTestDescriptor.java new file mode 100644 index 000000000..d5b90b3ae --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeLexerTestDescriptor.java @@ -0,0 +1,8 @@ +package org.antlr.v4.test.runtime; + +public class BaseCompositeLexerTestDescriptor extends BaseRuntimeTestDescriptor { + @Override + public String getTestType() { + return "CompositeLexer"; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeParserTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeParserTestDescriptor.java new file mode 100644 index 000000000..42e57570d --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseCompositeParserTestDescriptor.java @@ -0,0 +1,8 @@ +package org.antlr.v4.test.runtime; + +public class BaseCompositeParserTestDescriptor extends BaseRuntimeTestDescriptor { + @Override + public String getTestType() { + return "CompositeParser"; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseDebugParserTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseDebugParserTestDescriptor.java new file mode 100644 index 000000000..e8c83ac1d --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseDebugParserTestDescriptor.java @@ -0,0 +1,8 @@ +package org.antlr.v4.test.runtime; + +public abstract class BaseDebugParserTestDescriptor extends BaseParserTestDescriptor { + @Override + public boolean showDiagnosticErrors() { + return true; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseLexerTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseLexerTestDescriptor.java new file mode 100644 index 000000000..7e0028e7e --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseLexerTestDescriptor.java @@ -0,0 +1,8 @@ +package org.antlr.v4.test.runtime; + +public class BaseLexerTestDescriptor extends BaseRuntimeTestDescriptor { + @Override + public String getTestType() { + return "Lexer"; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseParserTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseParserTestDescriptor.java new file mode 100644 index 000000000..27f625b6b --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseParserTestDescriptor.java @@ -0,0 +1,8 @@ +package org.antlr.v4.test.runtime; + +public class BaseParserTestDescriptor extends BaseRuntimeTestDescriptor { + @Override + public String getTestType() { + return "Parser"; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTest.java new file mode 100644 index 000000000..93bb837b0 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTest.java @@ -0,0 +1,195 @@ +package org.antlr.v4.test.runtime; + +import org.antlr.v4.runtime.misc.Pair; +import org.antlr.v4.runtime.misc.Utils; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupFile; +import org.stringtemplate.v4.StringRenderer; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Modifier; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import static junit.framework.TestCase.assertEquals; +import static org.junit.Assume.assumeFalse; + +public abstract class BaseRuntimeTest { + public final static String[] Targets = { + "Cpp", + "Java", + "Go", + "CSharp", + "Python2", "Python3", + "Node", "Safari", "Firefox", "Explorer", "Chrome" + }; + public final static String[] JavaScriptTargets = { + "Node", "Safari", "Firefox", "Explorer", "Chrome" + }; + + protected SingleTest delegate; + protected RuntimeTestDescriptor descriptor; + + public BaseRuntimeTest(RuntimeTestDescriptor descriptor, SingleTest delegate) { + this.descriptor = descriptor; + this.delegate = delegate; + } + +// @org.junit.Rule +// public final Timeout eachTimeout = new Timeout(60000); + + @Before + public void setUp() throws Exception { + // From http://junit.sourceforge.net/javadoc/org/junit/Assume.html + // "The default JUnit runner treats tests with failing assumptions as ignored" + assumeFalse(descriptor.ignore(descriptor.getTarget())); + delegate.testSetUp(); + } + + @Rule + public final TestRule testWatcher = new TestWatcher() { + @Override + protected void succeeded(Description description) { + // remove tmpdir if no error. + delegate.eraseTempDir(); + } + }; + + @Test + public void testOne() throws Exception { + if ( descriptor.ignore(descriptor.getTarget()) ) { + System.out.printf("Ignore "+descriptor); + return; + } + if ( descriptor.getTestType().contains("Parser") ) { + testParser(descriptor); + } + else { + testLexer(descriptor); + } + } + + public void testParser(RuntimeTestDescriptor descriptor) throws Exception { + mkdir(delegate.getTmpDir()); + + Pair pair = descriptor.getGrammar(); + + ClassLoader cloader = getClass().getClassLoader(); + URL templates = cloader.getResource("org/antlr/v4/test/runtime/templates/"+descriptor.getTarget()+".test.stg"); + STGroupFile targetTemplates = new STGroupFile(templates, "UTF-8", '<', '>'); + targetTemplates.registerRenderer(String.class, new StringRenderer()); + + // write out any slave grammars + List> slaveGrammars = descriptor.getSlaveGrammars(); + if ( slaveGrammars!=null ) { + for (Pair spair : slaveGrammars) { + STGroup g = new STGroup('<', '>'); + g.registerRenderer(String.class, new StringRenderer()); + g.importTemplates(targetTemplates); + ST grammarST = new ST(g, spair.b); + writeFile(delegate.getTmpDir(), spair.a+".g4", grammarST.render()); + } + } + + String grammarName = pair.a; + String grammar = pair.b; + STGroup g = new STGroup('<', '>'); + g.importTemplates(targetTemplates); + g.registerRenderer(String.class, new StringRenderer()); + ST grammarST = new ST(g, grammar); + grammar = grammarST.render(); + + String found = delegate.execParser(grammarName+".g4", grammar, + grammarName+"Parser", + grammarName+"Lexer", + grammarName+"Listener", + grammarName+"Visitor", + descriptor.getStartRule(), + descriptor.getInput(), + descriptor.showDiagnosticErrors() + ); + + assertEquals(descriptor.getOutput(), found); + assertEquals(descriptor.getErrors(), delegate.getParseErrors()); + } + + public void testLexer(RuntimeTestDescriptor descriptor) throws Exception { + mkdir(delegate.getTmpDir()); + + Pair pair = descriptor.getGrammar(); + + ClassLoader cloader = getClass().getClassLoader(); + URL templates = cloader.getResource("org/antlr/v4/test/runtime/templates/"+descriptor.getTarget()+".test.stg"); + STGroupFile targetTemplates = new STGroupFile(templates, "UTF-8", '<', '>'); + targetTemplates.registerRenderer(String.class, new StringRenderer()); + + // write out any slave grammars + List> slaveGrammars = descriptor.getSlaveGrammars(); + if ( slaveGrammars!=null ) { + for (Pair spair : slaveGrammars) { + STGroup g = new STGroup('<', '>'); + g.registerRenderer(String.class, new StringRenderer()); + g.importTemplates(targetTemplates); + ST grammarST = new ST(g, spair.b); + writeFile(delegate.getTmpDir(), spair.a+".g4", grammarST.render()); + } + } + + String grammarName = pair.a; + String grammar = pair.b; + STGroup g = new STGroup('<', '>'); + g.registerRenderer(String.class, new StringRenderer()); + g.importTemplates(targetTemplates); + ST grammarST = new ST(g, grammar); + grammar = grammarST.render(); + + String found = delegate.execLexer(grammarName+".g4", grammar, grammarName, descriptor.getInput(), descriptor.showDFA()); + assertEquals(descriptor.getOutput(), found); + assertEquals(descriptor.getANTLRToolErrors(), delegate.getANTLRToolErrors()); + assertEquals(descriptor.getErrors(), delegate.getParseErrors()); + } + + // ---- support ---- + + public static RuntimeTestDescriptor[] getRuntimeTestDescriptors(Class clazz, String targetName) { + Class[] nestedClasses = clazz.getClasses(); + List descriptors = new ArrayList(); + for (Class nestedClass : nestedClasses) { + int modifiers = nestedClass.getModifiers(); + if ( RuntimeTestDescriptor.class.isAssignableFrom(nestedClass) && !Modifier.isAbstract(modifiers) ) { + try { + RuntimeTestDescriptor d = (RuntimeTestDescriptor) nestedClass.newInstance(); + d.setTarget(targetName); + descriptors.add(d); + } catch (Exception e) { + e.printStackTrace(System.err); + } + } + } + return descriptors.toArray(new RuntimeTestDescriptor[0]); + } + + protected void mkdir(String dir) { + File f = new File(dir); + f.mkdirs(); + } + + public static void writeFile(String dir, String fileName, String content) { + try { + Utils.writeFile(dir+"/"+fileName, content, "UTF-8"); + } + catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTestDescriptor.java new file mode 100644 index 000000000..6d55a038e --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/BaseRuntimeTestDescriptor.java @@ -0,0 +1,177 @@ +package org.antlr.v4.test.runtime; + +import org.antlr.v4.runtime.misc.Pair; +import org.antlr.v4.runtime.misc.Utils; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public abstract class BaseRuntimeTestDescriptor implements RuntimeTestDescriptor { + protected String targetName; + + @Override + public String getTestName() { + return this.getClass().getSimpleName(); + } + + @Override + public String getInput() { + try { + Field f = this.getClass().getField("input"); + return stringIndentation((String)f.get(this)); + } + catch (Exception nsfe) { + ; // we are optional + } + return ""; + } + + @Override + public String getOutput() { + try { + Field f = this.getClass().getField("output"); + String s = stringIndentation((String)f.get(this)); + if ( s.length()==0 ) return null; + return s; + } + catch (Exception nsfe) { + ; // we are optional + } + return null; + } + + @Override + public String getErrors() { + try { + Field f = this.getClass().getField("errors"); + String s = stringIndentation((String)f.get(this)); + if ( s.length()==0 ) return null; + return s; + } + catch (Exception nsfe) { + ; // we are optional + } + return null; + } + + @Override + public String getANTLRToolErrors() { + try { + Field f = this.getClass().getField("toolErrors"); + String s = stringIndentation((String)f.get(this)); + if ( s.length()==0 ) return null; + return s; + } + catch (Exception nsfe) { + ; // we are optional + } + return null; + } + + @Override + public String getStartRule() { + try { + Field f = this.getClass().getField("startRule"); + return (String)f.get(this); + } + catch (Exception nsfe) { + System.err.println("No start rule specified for test "+getTestName()); + } + return null; + } + + @Override + public String getAfterGrammar() { + try { + Field f = this.getClass().getField("afterGrammar"); + String s = stringIndentation((String)f.get(this)); + if ( s.length()==0 ) return null; + return s; + } + catch (Exception nsfe) { + ; // we are optional + } + return null; + } + + @Override + public Pair getGrammar() { + String grammarName = null; + try { + Field f = this.getClass().getField("grammarName"); + grammarName = (String)f.get(this); + } + catch (Exception nsfe) { + System.err.println("No grammar name specified for test "+getTestName()); + } + String grammar = rawGetGrammar(); + return new Pair(grammarName,grammar); + } + + private String rawGetGrammar() { + String grammar = null; + try { + Field f = this.getClass().getField("grammar"); + grammar = (String)f.get(this); + } + catch (Exception nsfe) { + System.err.println("No start rule specified for test "+getTestName()); + } + grammar = stringIndentation(grammar); + return grammar; + } + + /** strip indentation; use first line's indent as prefix to strip */ + public static String stringIndentation(String s) { + if ( s==null ) return ""; + if ( s.equals("\n") ) return s; + s = Utils.expandTabs(s, 4); + String lines[] = s.split("\\r?\\n"); + String first = lines[0]; + Pattern wspat = Pattern.compile("^\\s+"); + Matcher matcher = wspat.matcher(first); + if ( matcher.find() ) { + String indent = matcher.group(0); + s = s.replace(indent, ""); // wack first indent + s = s.replaceAll("\\n"+indent, "\n"); // wack the others + } + return s; + } + + @Override + public List> getSlaveGrammars() { + return null; + } + + @Override + public String getTarget() { + return targetName; + } + + @Override + public void setTarget(String targetName) { + this.targetName = targetName; + } + + @Override + public boolean showDFA() { + return false; + } + + @Override + public boolean showDiagnosticErrors() { + return false; + } + + @Override + public boolean ignore(String targetName) { + return false; + } + + @Override + public String toString() { + return getTarget()+":"+getTestName(); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/ErrorQueue.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/ErrorQueue.java similarity index 98% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/java/ErrorQueue.java rename to runtime-testsuite/test/org/antlr/v4/test/runtime/ErrorQueue.java index 3736c6bde..35bc004e5 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/ErrorQueue.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/ErrorQueue.java @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.antlr.v4.test.runtime.java; +package org.antlr.v4.test.runtime; import org.antlr.v4.Tool; import org.antlr.v4.runtime.misc.Utils; diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java new file mode 100644 index 000000000..72523e48c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/RuntimeTestDescriptor.java @@ -0,0 +1,26 @@ +package org.antlr.v4.test.runtime; + +import org.antlr.v4.runtime.misc.Pair; + +import java.util.List; + +public interface RuntimeTestDescriptor { + String getTestName(); + String getTestType(); + String getInput(); + String getOutput(); + String getErrors(); + String getANTLRToolErrors(); + String getStartRule(); // TODO: alter tests to use same default start rule? + String getAfterGrammar(); // TODO: only a few use. make part of testrig or rename? + boolean showDFA(); + boolean showDiagnosticErrors(); + + Pair getGrammar(); // Associates name of grammar like M in M.g4 to string (template) of grammar + List> getSlaveGrammars(); + + String getTarget(); + void setTarget(String targetName); + + boolean ignore(String targetName); +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/SingleTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/SingleTest.java new file mode 100644 index 000000000..ea73caf9f --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/SingleTest.java @@ -0,0 +1,29 @@ +package org.antlr.v4.test.runtime; + +public interface SingleTest { + void testSetUp() throws Exception; + void testTearDown() throws Exception; + void eraseTempDir(); + + String getTmpDir(); + + String getStdout(); + String getParseErrors(); + String getANTLRToolErrors(); + + String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, + boolean showDFA); + + String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean showDiagnosticErrors); +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/TestRunner.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/TestRunner.java new file mode 100644 index 000000000..59a1e24ea --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/TestRunner.java @@ -0,0 +1,18 @@ +package org.antlr.v4.test.runtime; + +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +public class TestRunner { + public static void main(String[] args) { + Result result = JUnitCore.runClasses(ParserExecDescriptors.class); + + for (Failure failure : result.getFailures()) { + System.out.println(failure.toString()); + } + + System.out.println(result.wasSuccessful()); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java index 1b1dab719..a0701c627 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java @@ -56,9 +56,11 @@ import org.antlr.v4.runtime.atn.LexerATNSimulator; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntegerList; import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.misc.Utils; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.semantics.SemanticPipeline; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.SingleTest; import org.antlr.v4.tool.ANTLRMessage; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.DefaultToolListener; @@ -66,10 +68,6 @@ import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.GrammarSemanticsMessage; import org.antlr.v4.tool.LexerGrammar; import org.antlr.v4.tool.Rule; -import org.junit.Before; -import org.junit.rules.TestRule; -import org.junit.rules.TestWatcher; -import org.junit.runner.Description; import org.stringtemplate.v4.ST; import org.stringtemplate.v4.STGroup; import org.stringtemplate.v4.STGroupString; @@ -90,6 +88,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -100,7 +99,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public abstract class BaseCppTest { +public class BaseCppTest implements SingleTest { // -J-Dorg.antlr.v4.test.BaseTest.level=FINE // private static final Logger LOGGER = Logger.getLogger(BaseTest.class.getName()); public static final String newline = System.getProperty("line.separator"); @@ -109,40 +108,57 @@ public abstract class BaseCppTest { public String tmpdir = null; /** If error during parser execution, store stderr here; can't return - * stdout and stderr. This doesn't trap errors from running antlr. - */ + * stdout and stderr. This doesn't trap errors from running antlr. + */ protected String stderrDuringParse; - @org.junit.Rule - public final TestRule testWatcher = new TestWatcher() { - - @Override - protected void succeeded(Description description) { - // remove tmpdir if no error. - eraseTempDir(); - } - - protected void starting(Description description) { - System.out.println("\n>>>>> Running test: " + description.getMethodName()); - } - }; + /** Errors found while running antlr */ + protected StringBuilder antlrToolErrors; private String getPropertyPrefix() { return "antlr-" + getLanguage().toLowerCase(); } - @Before - public void setUp() throws Exception { - // new output dir for each test - String propName = getPropertyPrefix() + "-test-dir"; - String prop = System.getProperty(propName); - if(prop!=null && prop.length()>0) - tmpdir = prop; - else - tmpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); - } + @Override + public void testSetUp() throws Exception { + // new output dir for each test + String propName = getPropertyPrefix() + "-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + tmpdir = prop; + else + tmpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); + antlrToolErrors = new StringBuilder(); + } - protected org.antlr.v4.Tool newTool(String[] args) { + @Override + public void testTearDown() throws Exception { + } + + @Override + public String getTmpDir() { + return tmpdir; + } + + @Override + public String getStdout() { + return null; + } + + @Override + public String getParseErrors() { + return stderrDuringParse; + } + + @Override + public String getANTLRToolErrors() { + if ( antlrToolErrors.length()==0 ) { + return null; + } + return antlrToolErrors.toString(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { Tool tool = new Tool(args); return tool; } @@ -229,8 +245,8 @@ public abstract class BaseCppTest { } public List getTokenTypes(LexerGrammar lg, - ATN atn, - CharStream input) + ATN atn, + CharStream input) { LexerATNSimulator interp = new LexerATNSimulator(atn,new DFA[] { new DFA(atn.modeToStartState.get(Lexer.DEFAULT_MODE)) },null); List tokenTypes = new ArrayList(); @@ -328,7 +344,6 @@ public abstract class BaseCppTest { /** Return true if all is ok, no errors */ protected ErrorQueue antlr(String fileName, String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { - System.out.println("dir "+tmpdir); mkdir(tmpdir); writeFile(tmpdir, fileName, grammarStr); final List options = new ArrayList(); @@ -351,20 +366,21 @@ public abstract class BaseCppTest { antlr.processGrammarsOnCommandLine(); if ( !defaultListener && !equeue.errors.isEmpty() ) { - System.err.println("antlr reports errors from "+options); for (int i = 0; i < equeue.errors.size(); i++) { ANTLRMessage msg = equeue.errors.get(i); - System.err.println(msg); + antlrToolErrors.append(msg.toString()); + } + try { + antlrToolErrors.append(new String(Utils.readFile(tmpdir+"/"+grammarFileName))); + } + catch (IOException ioe) { + antlrToolErrors.append(ioe.toString()); } - System.out.println("!!!\ngrammar:"); - System.out.println(grammarStr); - System.out.println("###"); } if ( !defaultListener && !equeue.warnings.isEmpty() ) { - System.err.println("antlr reports warnings from "+options); for (int i = 0; i < equeue.warnings.size(); i++) { ANTLRMessage msg = equeue.warnings.get(i); - System.err.println(msg); + // antlrToolErrors.append(msg); warnings are hushed } } @@ -372,36 +388,34 @@ public abstract class BaseCppTest { } protected String execLexer(String grammarFileName, - String grammarStr, - String lexerName, - String input) + String grammarStr, + String lexerName, + String input) { return execLexer(grammarFileName, grammarStr, lexerName, input, false); } - protected String execLexer(String grammarFileName, - String grammarStr, - String lexerName, - String input, - boolean showDFA) + @Override + public String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, + boolean showDFA) { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, - grammarStr, - null, - lexerName,"-no-listener"); + grammarStr, + null, + lexerName,"-no-listener"); assertTrue(success); writeFile(tmpdir, "input", input); writeLexerTestFile(lexerName, showDFA); String output = execModule("Test.cpp"); - if ( stderrDuringParse!=null && stderrDuringParse.length()>0 ) { - System.err.println(stderrDuringParse); - } return output; } public ParseTree execStartRule(String startRuleName, Parser parser) throws IllegalAccessException, InvocationTargetException, - NoSuchMethodException + NoSuchMethodException { Method startRule = null; Object[] args = null; @@ -418,64 +432,64 @@ public abstract class BaseCppTest { return result; } - protected String execParser(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String listenerName, - String visitorName, - String startRuleName, - String input, - boolean debug) { - return execParser(grammarFileName, grammarStr, parserName, lexerName, - listenerName, visitorName, startRuleName, input, debug, false); - } - - protected String execParser(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String listenerName, - String visitorName, - String startRuleName, - String input, - boolean debug, - boolean trace) +// protected String execParser(String grammarFileName, +// String grammarStr, +// String parserName, +// String lexerName, +// String listenerName, +// String visitorName, +// String startRuleName, +// String input, +// boolean debug) { +// return execParser(grammarFileName, grammarStr, parserName, lexerName, +// listenerName, visitorName, startRuleName, input, debug); +// } +// + @Override + public String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean showDiagnosticErrors) { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, - grammarStr, - parserName, - lexerName, - "-visitor"); + grammarStr, + parserName, + lexerName, + "-visitor"); assertTrue(success); writeFile(tmpdir, "input", input); rawBuildRecognizerTestFile(parserName, - lexerName, - listenerName, - visitorName, - startRuleName, - debug, - trace); + lexerName, + listenerName, + visitorName, + startRuleName, + showDiagnosticErrors, + false); return execRecognizer(); } /** Return true if all is well */ protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String... extraOptions) + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) { return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); } /** Return true if all is well */ protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - boolean defaultListener, - String... extraOptions) + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) { ErrorQueue equeue = antlr(grammarFileName, grammarFileName, grammarStr, defaultListener, extraOptions); @@ -505,24 +519,24 @@ public abstract class BaseCppTest { } protected void rawBuildRecognizerTestFile(String parserName, - String lexerName, - String listenerName, - String visitorName, - String parserStartRuleName, - boolean debug, - boolean trace) + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, + boolean debug, + boolean trace) { - this.stderrDuringParse = null; + this.stderrDuringParse = null; if ( parserName==null ) { writeLexerTestFile(lexerName, false); } else { writeParserTestFile(parserName, - lexerName, - listenerName, - visitorName, - parserStartRuleName, - debug, trace); + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, trace); } } @@ -530,11 +544,29 @@ public abstract class BaseCppTest { return execModule("Test.cpp"); } + + private static String detectedOS; + public static String getOS() { + if (detectedOS == null) { + String os = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH); + if ((os.indexOf("mac") >= 0) || (os.indexOf("darwin") >= 0)) { + detectedOS = "mac"; + } else if (os.indexOf("win") >= 0) { + detectedOS = "windows"; + } else if (os.indexOf("nux") >= 0) { + detectedOS = "linux"; + } else { + detectedOS = "unknown"; + } + } + return detectedOS; + } + public List allCppFiles(String path) { ArrayList files = new ArrayList(); File folder = new File(path); File[] listOfFiles = folder.listFiles(); - for (int i = 0; i < listOfFiles.length; i++) { + for (int i = 0; i < listOfFiles.length; i++) { String file = listOfFiles[i].getAbsolutePath(); if (file.endsWith(".cpp")) { files.add(file); @@ -543,7 +575,7 @@ public abstract class BaseCppTest { return files; } - private String runProcess(ProcessBuilder builder, String description) throws Exception { + private String runProcess(ProcessBuilder builder, String description) throws Exception { Process process = builder.start(); StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); @@ -553,151 +585,142 @@ public abstract class BaseCppTest { stdoutVacuum.join(); stderrVacuum.join(); String output = stdoutVacuum.toString(); - if (stderrVacuum.toString().length() > 0) { + if ( stderrVacuum.toString().length()>0 ) { this.stderrDuringParse = stderrVacuum.toString(); - System.err.println("exec stderrVacuum: "+ stderrVacuum); } if (errcode != 0) { - this.stderrDuringParse = "execution failed with error code: " + errcode; - System.err.println(description + " exited with error code: " + errcode); + String err = "execution failed with error code: "+errcode; + if ( this.stderrDuringParse!=null ) { + this.stderrDuringParse += err; + } + else { + this.stderrDuringParse = err; + } } - + return output; - } - - // TODO: add a buildRuntimeOnWindows variant. - private boolean buildRuntime() { - String runtimePath = locateRuntime(); - System.out.println("Building ANTLR4 C++ runtime (if necessary) at "+ runtimePath); - - try { - ArrayList args = new ArrayList(); - args.add("cmake"); - args.add("."); - args.add("-DCMAKE_BUILD_TYPE=release"); - ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); - builder.directory(new File(runtimePath)); - if (runProcess(builder, "antlr runtime cmake") == null) - return false; + } + + private String runCommand(String command[], String workPath, String description) throws Exception { + ProcessBuilder builder = new ProcessBuilder(command); + builder.directory(new File(workPath)); + + return runProcess(builder, description); + } + + // TODO: add a buildRuntimeOnWindows variant. + private boolean buildRuntime() { + String runtimePath = locateRuntime(); + System.out.println("Building ANTLR4 C++ runtime (if necessary) at "+ runtimePath); + + try { + String command[] = { "cmake", ".", "-DCMAKE_BUILD_TYPE=release" }; + if (runCommand(command, runtimePath, "antlr runtime cmake") == null) + return false; } catch (Exception e) { System.err.println("can't configure antlr cpp runtime cmake file"); - e.printStackTrace(System.err); } - - try { - ArrayList args = new ArrayList(); - args.add("make"); - args.add("-j"); - args.add("8"); // Assuming a reasonable amount of available CPU cores. - ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); - builder.directory(new File(runtimePath)); - if (runProcess(builder, "building antlr runtime") == null) - return false; + + try { + String command[] = { "make", "-j", "8" }; // Assuming a reasonable amount of available CPU cores. + if (runCommand(command, runtimePath, "building antlr runtime") == null) + return false; } catch (Exception e) { System.err.println("can't compile antlr cpp runtime"); - //e.printStackTrace(System.err); } - + +/* for debugging + try { + String command[] = { "ls", "-la" }; + String output = runCommand(command, runtimePath + "/dist/", "printing library folder content"); + System.out.println(output); + } + catch (Exception e) { + System.err.println("can't print folder content"); + } +*/ + return true; - } - - static boolean runtimeBuiltOnce = false; - + } + + static boolean runtimeBuiltOnce = false; + public String execModule(String fileName) { - String compilerPath = locateCompiler(); String runtimePath = locateRuntime(); String includePath = runtimePath + "/runtime/src"; String binPath = new File(new File(tmpdir), "a.out").getAbsolutePath(); String inputPath = new File(new File(tmpdir), "input").getAbsolutePath(); - - // Build runtime using cmake once. - if (!runtimeBuiltOnce) { - runtimeBuiltOnce = true; - if (!buildRuntime()) { - return null; - } - } - - // Create symlink to the runtime. - // TODO: make this platform neutral. + + // Build runtime using cmake once. + if (!runtimeBuiltOnce) { + try { + String command[] = { "clang++", "--version" }; + String output = runCommand(command, tmpdir, "printing compiler version"); + System.out.println("Compiler version is: " + output); + } + catch (Exception e) { + System.err.println("Can't get compiler version"); + } + + runtimeBuiltOnce = true; + if (!buildRuntime()) { + System.out.println("C++ runtime build failed\n"); + return null; + } + System.out.println("C++ runtime build succeeded\n"); + } + + // Create symlink to the runtime. Currently only used on OSX. + String libExtension = (getOS().equals("mac")) ? "dylib" : "so"; try { - ArrayList args = new ArrayList(); - args.add("ln"); - args.add("-s"); - args.add(runtimePath + "/dist/libantlr4-runtime.dylib"); // TODO: make this platform neutral - ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); - builder.directory(new File(tmpdir)); - String output = runProcess(builder, "sym linking C++ runtime"); - if (output == null) - return null; + String command[] = { "ln", "-s", runtimePath + "/dist/libantlr4-runtime." + libExtension }; + if (runCommand(command, tmpdir, "sym linking C++ runtime") == null) + return null; } catch (Exception e) { System.err.println("can't exec module: " + fileName); - //e.printStackTrace(System.err); } - - // Compile the test code. + try { - ArrayList args = new ArrayList(); - args.add(compilerPath); - args.add("-std=c++11"); - args.add("-I"); - args.add(includePath); - args.add("-L"); - args.add("."); - args.add("-lantlr4-runtime"); - args.addAll(allCppFiles(tmpdir)); - ProcessBuilder builder = new ProcessBuilder(args.toArray(new String[0])); - builder.directory(new File(tmpdir)); - String output = runProcess(builder, "building test binary"); - if (output == null) { + List command2 = new ArrayList(Arrays.asList("clang++", "-std=c++11", "-I", includePath, "-L.", "-lantlr4-runtime")); + command2.addAll(allCppFiles(tmpdir)); + if (runCommand(command2.toArray(new String[0]), tmpdir, "building test binary") == null) { return null; } } catch (Exception e) { - System.err.println("can't compile module: " + fileName); - //e.printStackTrace(System.err); + System.err.println("can't compile test module: " + e.getMessage()); return null; } - // Now run the newly minted binary. + // Now run the newly minted binary. Reset the error output, as we could have got compiler warnings which are not relevant here. + this.stderrDuringParse = null; try { ProcessBuilder builder = new ProcessBuilder(binPath, inputPath); builder.directory(new File(tmpdir)); + Map env = builder.environment(); + env.put("LD_PRELOAD", runtimePath + "/dist/libantlr4-runtime.so"); // For linux. String output = runProcess(builder, "running test binary"); - + if ( output.length()==0 ) { + output = null; + } + + /* for debugging + System.out.println("========================================================="); + System.out.println(output); + System.out.println("========================================================="); + */ return output; } catch (Exception e) { - System.err.println("can't exec module: " + fileName); - //e.printStackTrace(System.err); + System.err.println("can't exec module: " + fileName + "\nerror is: "+ e.getMessage()); } - + return null; } - private String locateTool(String tool) { - String[] roots = { "/usr/bin/", "/usr/local/bin/" }; - for(String root : roots) { - if(new File(root + tool).exists()) - return root + tool; - } - throw new RuntimeException("Could not locate " + tool); - } - - protected String locateCompiler() { - String propName = getPropertyPrefix() + "-compiler"; - String prop = System.getProperty(propName); - if(prop==null || prop.length()==0) - prop = locateTool("g++"); // Also try cc - File file = new File(prop); - if(!file.exists()) - throw new RuntimeException("Missing system property:" + propName); - return file.getAbsolutePath(); - } - protected String locateRuntime() { final ClassLoader loader = Thread.currentThread().getContextClassLoader(); final URL runtimeSrc = loader.getResource("Cpp"); @@ -708,9 +731,9 @@ public abstract class BaseCppTest { } public void testErrors(String[] pairs, boolean printTree) { - for (int i = 0; i < pairs.length; i+=2) { - String input = pairs[i]; - String expect = pairs[i+1]; + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; String[] lines = input.split("\n"); String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); @@ -724,9 +747,9 @@ public abstract class BaseCppTest { msg = msg.replace("\r","\\r"); msg = msg.replace("\t","\\t"); - assertEquals("error in: "+msg,expect,actual); - } - } + assertEquals("error in: "+msg,expect,actual); + } + } public String getFilenameFromFirstLineOfGrammar(String line) { String fileName = "A" + Tool.GRAMMAR_EXTENSION; @@ -833,7 +856,7 @@ public abstract class BaseCppTest { } protected void checkGrammarSemanticsError(ErrorQueue equeue, - GrammarSemanticsMessage expectedMessage) + GrammarSemanticsMessage expectedMessage) throws Exception { ANTLRMessage foundMsg = null; @@ -845,7 +868,7 @@ public abstract class BaseCppTest { } assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", - foundMsg instanceof GrammarSemanticsMessage); + foundMsg instanceof GrammarSemanticsMessage); assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); if ( equeue.size()!=1 ) { System.err.println(equeue); @@ -853,7 +876,7 @@ public abstract class BaseCppTest { } protected void checkGrammarSemanticsWarning(ErrorQueue equeue, - GrammarSemanticsMessage expectedMessage) + GrammarSemanticsMessage expectedMessage) throws Exception { ANTLRMessage foundMsg = null; @@ -865,7 +888,7 @@ public abstract class BaseCppTest { } assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", - foundMsg instanceof GrammarSemanticsMessage); + foundMsg instanceof GrammarSemanticsMessage); assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); if ( equeue.size()!=1 ) { System.err.println(equeue); @@ -873,7 +896,7 @@ public abstract class BaseCppTest { } protected void checkError(ErrorQueue equeue, - ANTLRMessage expectedMessage) + ANTLRMessage expectedMessage) throws Exception { //System.out.println("errors="+equeue); @@ -894,12 +917,12 @@ public abstract class BaseCppTest { assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); } - public static class FilteringTokenStream extends CommonTokenStream { - public FilteringTokenStream(TokenSource src) { super(src); } - Set hide = new HashSet(); - @Override - protected boolean sync(int i) { - if (!super.sync(i)) { + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { return false; } @@ -909,11 +932,11 @@ public abstract class BaseCppTest { } return true; - } - public void setTokenTypeChannel(int ttype, int channel) { - hide.add(ttype); - } - } + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } public static void writeFile(String dir, String fileName, String content) { try { @@ -936,49 +959,49 @@ public abstract class BaseCppTest { } protected void writeParserTestFile(String parserName, String lexerName, - String listenerName, String visitorName, - String parserStartRuleName, boolean debug, boolean trace) { + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { if(!parserStartRuleName.endsWith(")")) parserStartRuleName += "()"; ST outputFileST = new ST( - "#include \\\n" - + "\n" - + "#include \"antlr4-runtime.h\"\n" - + "#include \".h\"\n" - + "#include \".h\"\n" - + "\n" - + "using namespace antlr4;\n" - + "\n" - + "class TreeShapeListener : public tree::ParseTreeListener {\n" - + "public:\n" - + " void visitTerminal(tree::TerminalNode *) override {}\n" - + " void visitErrorNode(tree::ErrorNode *) override {}\n" - + " void exitEveryRule(ParserRuleContext *) override {}\n" - + " void enterEveryRule(ParserRuleContext *ctx) override {\n" - + " for (auto child : ctx->children) {\n" - + " tree::ParseTree *parent = child->parent;\n" - + " ParserRuleContext *rule = dynamic_cast\\(parent);\n" - + " if (rule != ctx) {\n" - + " throw \"Invalid parse tree shape detected.\";\n" - + " }\n" + "#include \\\n" + + "\n" + + "#include \"antlr4-runtime.h\"\n" + + "#include \".h\"\n" + + "#include \".h\"\n" + + "\n" + + "using namespace antlr4;\n" + + "\n" + + "class TreeShapeListener : public tree::ParseTreeListener {\n" + + "public:\n" + + " void visitTerminal(tree::TerminalNode *) override {}\n" + + " void visitErrorNode(tree::ErrorNode *) override {}\n" + + " void exitEveryRule(ParserRuleContext *) override {}\n" + + " void enterEveryRule(ParserRuleContext *ctx) override {\n" + + " for (auto child : ctx->children) {\n" + + " tree::ParseTree *parent = child->parent;\n" + + " ParserRuleContext *rule = dynamic_cast\\(parent);\n" + + " if (rule != ctx) {\n" + + " throw \"Invalid parse tree shape detected.\";\n" + + " }\n" - + " }\n" - + " }\n" - + "};\n" - + "\n" - + "\n" - + "int main(int argc, const char* argv[]) {\n" - + " ANTLRFileStream input(argv[1]);\n" - + " lexer(&input);\n" - + " CommonTokenStream tokens(&lexer);\n" - + "" - + "\n" - + " tree::ParseTree *tree = parser.;\n" - + " TreeShapeListener listener;\n" - + " tree::ParseTreeWalker::DEFAULT.walk(&listener, tree);\n" - + "\n" - + " return 0;\n" - + "}\n" + + " }\n" + + " }\n" + + "};\n" + + "\n" + + "\n" + + "int main(int argc, const char* argv[]) {\n" + + " ANTLRFileStream input(argv[1]);\n" + + " lexer(&input);\n" + + " CommonTokenStream tokens(&lexer);\n" + + "" + + "\n" + + " tree::ParseTree *tree = parser.;\n" + + " TreeShapeListener listener;\n" + + " tree::ParseTreeWalker::DEFAULT.walk(&listener, tree);\n" + + "\n" + + " return 0;\n" + + "}\n" ); String stSource = " parser(&tokens);\n"; @@ -1001,79 +1024,80 @@ public abstract class BaseCppTest { protected void writeLexerTestFile(String lexerName, boolean showDFA) { ST outputFileST = new ST( "#include \\\n" - + "\n" - + "#include \"antlr4-runtime.h\"\n" - + "#include \".h\"\n" - + "\n" - + "#include \"support/StringUtils.h\"\n" - + "\n" - + "using namespace antlr4;\n" - + "\n" - + "int main(int argc, const char* argv[]) {\n" - + " ANTLRFileStream input(argv[1]);\n" - + " lexer(&input);\n" - + " CommonTokenStream tokens(&lexer);\n" - + " tokens.fill();\n" - + " for (auto token : tokens.getTokens())\n" - + " std::cout \\<\\< token->toString() \\<\\< std::endl;\n" - + (showDFA ? " std::cout \\<\\< lexer.getInterpreter\\()->getDFA(Lexer::DEFAULT_MODE).toLexerString();\n" : "\n") - + " return 0;\n" - + "}\n"); + + "\n" + + "#include \"antlr4-runtime.h\"\n" + + "#include \".h\"\n" + + "\n" + + "#include \"support/StringUtils.h\"\n" + + "\n" + + "using namespace antlr4;\n" + + "\n" + + "int main(int argc, const char* argv[]) {\n" + + " ANTLRFileStream input(argv[1]);\n" + + " lexer(&input);\n" + + " CommonTokenStream tokens(&lexer);\n" + + " tokens.fill();\n" + + " for (auto token : tokens.getTokens())\n" + + " std::cout \\<\\< token->toString() \\<\\< std::endl;\n" + + (showDFA ? " std::cout \\<\\< lexer.getInterpreter\\()->getDFA(Lexer::DEFAULT_MODE).toLexerString();\n" : "\n") + + " return 0;\n" + + "}\n"); outputFileST.add("lexerName", lexerName); writeFile(tmpdir, "Test.cpp", outputFileST.render()); } public void writeRecognizer(String parserName, String lexerName, - String listenerName, String visitorName, - String parserStartRuleName, boolean debug, boolean trace) { + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { if ( parserName==null ) { writeLexerTestFile(lexerName, debug); } else { writeParserTestFile(parserName, - lexerName, - listenerName, - visitorName, - parserStartRuleName, - debug, - trace); + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, + trace); } } - protected void eraseFiles(final String filesEndingWith) { - File tmpdirF = new File(tmpdir); - String[] files = tmpdirF.list(); - for(int i = 0; files!=null && i < files.length; i++) { - if ( files[i].endsWith(filesEndingWith) ) { - new File(tmpdir+"/"+files[i]).delete(); - } - } - } + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(tmpdir+"/"+files[i]).delete(); + } + } + } - protected void eraseFiles(File dir) { - String[] files = dir.list(); - for(int i = 0; files!=null && i < files.length; i++) { - new File(dir,files[i]).delete(); - } - } + protected void eraseFiles(File dir) { + String[] files = dir.list(); + for(int i = 0; files!=null && i < files.length; i++) { + new File(dir,files[i]).delete(); + } + } - protected void eraseTempDir() { - boolean doErase = true; - String propName = getPropertyPrefix() + "-erase-test-dir"; - String prop = System.getProperty(propName); - if(prop!=null && prop.length()>0) - doErase = Boolean.getBoolean(prop); - if(doErase) { - File tmpdirF = new File(tmpdir); - if ( tmpdirF.exists() ) { - eraseFiles(tmpdirF); - tmpdirF.delete(); - } - } - } + @Override + public void eraseTempDir() { + boolean doErase = true; + String propName = getPropertyPrefix() + "-erase-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + doErase = Boolean.getBoolean(prop); + if(doErase) { + File tmpdirF = new File(tmpdir); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + } - public String getFirstLineOfException() { + public String getFirstLineOfException() { if ( this.stderrDuringParse ==null ) { return null; } @@ -1082,33 +1106,33 @@ public abstract class BaseCppTest { return lines[0].substring(prefix.length(),lines[0].length()); } - /** - * When looking at a result set that consists of a Map/HashTable - * we cannot rely on the output order, as the hashing algorithm or other aspects - * of the implementation may be different on different JDKs or platforms. Hence - * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a - * bit of a hack, but guarantees that we get the same order on all systems. We assume that - * the keys are strings. - * - * @param m The Map that contains keys we wish to return in sorted order - * @return A string that represents all the keys in sorted order. - */ - public String sortMapToString(Map m) { - // Pass in crap, and get nothing back - // - if (m == null) { - return null; - } + /** + * When looking at a result set that consists of a Map/HashTable + * we cannot rely on the output order, as the hashing algorithm or other aspects + * of the implementation may be different on different JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a + * bit of a hack, but guarantees that we get the same order on all systems. We assume that + * the keys are strings. + * + * @param m The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } - System.out.println("Map toString looks like: " + m.toString()); + System.out.println("Map toString looks like: " + m.toString()); - // Sort the keys in the Map - // - TreeMap nset = new TreeMap(m); + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); - System.out.println("Tree map looks like: " + nset.toString()); - return nset.toString(); - } + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } public List realElements(List elements) { return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeLexers.java index f3f8bff7e..7a79f00c8 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeLexers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeLexers.java @@ -1,71 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeLexers extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {std::cout << \"S.A\" << std::endl;};\n" + - "C : 'c' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="abc"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "S.A\n" + - "[@0,0:0='a',<3>,1:0]\n" + - "[@1,1:1='b',<1>,1:1]\n" + - "[@2,2:2='c',<4>,1:2]\n" + - "[@3,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {std::cout << \"S.A\" << std::endl;} ;\n" + - "B : 'b' {std::cout << \"S.B\" << std::endl;} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(99); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("A : 'a' B {std::cout << \"M.A\" << std::endl;} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "M.A\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Cpp"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeParsers.java index 22f46256d..a8b62b8ee 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestCompositeParsers.java @@ -1,489 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.antlr.v4.test.runtime.java.ErrorQueue; -import org.antlr.v4.tool.Grammar; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeParsers extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBringInLiteralsFromDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : '=' 'a' {std::cout << \"S.a\";};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="=a"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCombinedImportsCombined() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : 'x' INT {std::cout << \"S.x\" << std::endl;};\n" + - "INT : '0'..'9'+ ;\n" + - "WS : (' '|'\\n') -> skip ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(31); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : x INT;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - new Grammar(tmpdir+"/M.g4", grammar, equeue); - assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); - - - String input ="x 34 9"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.x\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatesSeeSameTokenType() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : A {std::cout << \"S.x\" << std::endl;};"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { C, B, A } // reverse order\n" + - "y : A {std::cout << \"T.y\" << std::endl;};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(598); - grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); - grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); - grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); - grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); - grammarBuilder.append("// mapping in each parser:\n"); - grammarBuilder.append("// public static final int C=6;\n"); - grammarBuilder.append("// public static final int EOF=-1;\n"); - grammarBuilder.append("// public static final int B=5;\n"); - grammarBuilder.append("// public static final int WS=7;\n"); - grammarBuilder.append("// public static final int A=4;\n"); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); - grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); - grammarBuilder.append("A : 'a' ; \n"); - grammarBuilder.append("C : 'c' ; \n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); - String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; - String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; - String expectedTypeToTokenList = "[B, A, C, WS]"; - assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); - assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); - assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); - assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); - - - String input ="aa"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals( - "S.x\n" + - "T.y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorAccessesDelegateMembers() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "@parser::members {\n" + - "void foo() {\n" + - " std::cout << \"foo\";\n" + - "}\n" + - "}\n" + - "a : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(122); - grammarBuilder.append("grammar M; // uses no rules from the import\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : 'b' {foo();} ; // gS is import pointer\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("foo\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {std::cout << \"S.a\" << std::endl;};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a[int x] returns [int y] : B {std::cout << \"S.a\";} {$y=1000;} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(151); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : label=a[3] {std::cout << $label.y << std::endl;} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a1000\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {std::cout << \"S.a\";} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(128); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a {std::cout << $a.text;} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.ab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {std::cout << \"S.a\" << std::endl;};\n" + - "b : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "a : B {std::cout << \"T.a\" << std::endl;};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {std::cout << \"S.a\";};\n" + - "b : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("b : 'b'|'c';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegates() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {std::cout << \"S.a\" << std::endl;};\n" + - "b : 'b' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { A }\n" + - "b : 'b' {std::cout << \"T.b\" << std::endl;};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(101); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S, T;\n"); - grammarBuilder.append("b : 'b'|'c' {std::cout << \"M.b\" << std::endl;}|B|A;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals( - "M.b\n" + - "S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "type_ : 'int' ;\n" + - "decl : type_ ID ';'\n" + - " | type_ ID init ';' {std::cout << \"JavaDecl: \" + $text;};\n" + - "init : '=' INT;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("prog : decl ;\n"); - grammarBuilder.append("type_ : 'int' | 'float' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="float x = 3;"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); - - assertEquals("JavaDecl: floatx=3;\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportLexerWithOnlyFragmentRules() throws Exception { - mkdir(tmpdir); - - String slave_Unicode = - "lexer grammar Unicode;\n" + - "\n" + - "fragment\n" + - "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + - " | '\\u2000'..'\\u200A'\n" + - " | '\\u202F' | '\\u205F' | '\\u3000'\n" + - " ;\n"; - writeFile(tmpdir, "Unicode.g4", slave_Unicode); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar Test;\n"); - grammarBuilder.append("import Unicode;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program : 'test' 'test';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="test test"; - String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedGrammarWithEmptyOptions() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "options {}\n" + - "a : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedRuleWithAction() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a @after {int x = 0;} : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordVSIDOrder() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "ID : 'a'..'z'+;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(153); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("a : A {std::cout << \"M.a: \" + $A->toString() << std::endl;};\n"); - grammarBuilder.append("A : 'abc' {std::cout << \"M.A\" << std::endl;};\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals( - "M.A\n" + - "M.a: [@0,0:2='abc',<1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestFullContextParsing.java index 5c25fbb1f..c4a5d1df4 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestFullContextParsing.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestFullContextParsing.java @@ -1,507 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestFullContextParsing extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigYieldsCtxSensitiveDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(96); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {dumpDFA();}\n"); - grammarBuilder.append(" : ID | ID {} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 0:\n" + - "s0-ID->:s1^=>1\n", found); - - assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbiguityNoLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(264); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(" : expr expr {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: '@'\n"); - grammarBuilder.append(" | ID '@'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a@"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); - - assertEquals("alt 1\n", found); - - assertEquals( - "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + - "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + - "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFATwoDiffInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(160); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {dumpDFA();}\n"); - grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc @ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 2:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + - "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {dumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {dumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="@ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(339); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(": expr[0] {std::cout << $expr.ctx->toStringTree(this) << std::endl;};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("(expr a + (expr b))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(339); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(": expr[0] {std::cout << $expr.ctx->toStringTree(this) << std::endl;};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("(expr a + (expr b * (expr c)))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + - "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + - "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(274); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s1=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(274); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(274); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(274); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo else bar }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + - "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(274); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(274); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLoopsSimulateTailRecursion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(377); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(" : expr_or_assign*;\n"); - grammarBuilder.append("expr_or_assign\n"); - grammarBuilder.append(" : expr '++' {std::cout << \"fail.\" << std::endl;}\n"); - grammarBuilder.append(" | expr {std::cout << \"pass: \"+$expr.text << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); - grammarBuilder.append("expr_primary\n"); - grammarBuilder.append(" : '(' ID ')'\n"); - grammarBuilder.append(" | ID '(' ID ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a(i)<-x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); - - assertEquals("pass: a(i)<-x\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + - "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSLLSeesEOFInLLGrammar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(144); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {dumpDFA();}\n"); - grammarBuilder.append(" : a;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 0:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + - "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLeftRecursion.java index b11c08d9e..a28cf4044 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLeftRecursion.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLeftRecursion.java @@ -1,3405 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLeftRecursion extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="1\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a = 5\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="b = 6\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*2\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(*a)[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="**a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[3]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator b) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator ( (declarator a) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[]()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[][]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(406); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a (a x) y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a (a (a x) y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 1) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) - (e 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.this"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) . this) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e - (e a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a|b&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f(x)==T.c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_11() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f().g(x,1)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_12() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new T[((n-1) * x) + 1]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a|b)&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a > b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) > (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a >> b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) >> (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a^b^c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new A().b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1262); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)t.f()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(253); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(253); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(253); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(713); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(713); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(713); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(713); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = dynamic_cast($ctx)->e(0)->v * dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = dynamic_cast($ctx)->e(0)->v + dynamic_cast($ctx)->e(1)->v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrecedenceFilterConsidersContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog \n"); - grammarBuilder.append("@after {std::cout << $ctx->toStringTree(this) << std::endl;}\n"); - grammarBuilder.append(": statement* EOF {};\n"); - grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); - grammarBuilder.append("letterA: 'a';"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (literal - 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1 + -1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(354); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.result << std::endl;} ;\n"); - grammarBuilder.append("e returns [std::string result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(354); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.result << std::endl;} ;\n"); - grammarBuilder.append("e returns [std::string result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a+b)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(354); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.result << std::endl;} ;\n"); - grammarBuilder.append("e returns [std::string result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b+c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("((a=b)+c)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(467); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(467); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(467); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(467); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(315); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(315); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(315); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(315); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(332); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(332); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(332); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(332); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(279); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v, std::vector ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(279); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v, std::vector ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(279); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v, std::vector ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(279); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {std::cout << $e.v << std::endl;}; \n"); - grammarBuilder.append("e returns [int v, std::vector ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("9\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPred() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); - grammarBuilder.append("a : a {true}? ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPredFailOption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(174); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); - grammarBuilder.append("a : a ID {false}?\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a x) y z))\n", found); - - assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a x))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a x) y))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(298); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {std::cout << $ctx->toStringTree(this) << std::endl;} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1,3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1, 3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Cpp"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerErrors.java index 79d6ed88b..1411a2a3e 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerErrors.java @@ -1,259 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerErrors extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatFailsBackToDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(39); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:3='ab',<1>,1:2]\n" + - "[@2,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;\n"); - grammarBuilder.append("C : 'abcd' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababcx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:4='abc',<2>,1:2]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { } }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='{ { } }',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testErrorInMiddle() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStart() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,1:0='',<-1>,1:1]\n", found); - - assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStartAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,2:1='',<-1>,1:2]\n", found); - - assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInTokenAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - - assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerExecDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar L;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - String input ="x : x"; - String found = execLexer("L.g4", grammar, "LLexer", input, false); - assertEquals( - "[@0,0:0='x',<3>,1:0]\n" + - "[@1,2:2=':',<1>,1:2]\n" + - "[@2,4:4='x',<3>,1:4]\n" + - "[@3,5:4='',<-1>,1:5]\n", found); - - assertEquals( - "line 1:1 token recognition error at: ' '\n" + - "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo\"]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerExec.java index 76a5a8c41..b7ffd20b5 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestLexerExec.java @@ -1,5028 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerExec extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionPlacement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(328); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ({std::cout << \"stuff fail: \" + getText() << std::endl;} 'a'\n"); - grammarBuilder.append("| {std::cout << \"stuff0: \" + getText() << std::endl;}\n"); - grammarBuilder.append(" 'a' {std::cout << \"stuff1: \" + getText() << std::endl;}\n"); - grammarBuilder.append(" 'b' {std::cout << \"stuff2: \" + getText() << std::endl;})\n"); - grammarBuilder.append(" {std::cout << getText() << std::endl;} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "stuff0: \n" + - "stuff1: a\n" + - "stuff2: ab\n" + - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(92); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {std::cout << \"I\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetInSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(99); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : (~[ab \\n]|'a') {std::cout << \"I\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="a x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:2='x',<1>,1:2]\n" + - "[@2,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetNot() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(102); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {std::cout << \"I\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="xaf"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:2='xaf',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(93); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {std::cout << \"I\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(155); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {std::cout << \"I\" << std::endl;} ;\n"); - grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {std::cout << \"ID\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34 a2 abc \n" + - " "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "ID\n" + - "ID\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,7:8='a2',<2>,2:4]\n" + - "[@3,10:12='abc',<2>,2:7]\n" + - "[@4,18:17='',<-1>,3:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithEscapedChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(101); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DASHBRACK : [\\-\\]]+ {std::cout << \"DASHBRACK\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="- ] "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "DASHBRACK\n" + - "DASHBRACK\n" + - "[@0,0:0='-',<1>,1:0]\n" + - "[@1,2:2=']',<1>,1:2]\n" + - "[@2,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEndRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(89); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-]+ {std::cout << \"I\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="00\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='00',<1>,1:0]\n" + - "[@1,3:2='',<-1>,2:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEscapeChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {std::cout << \"I\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(87); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"a-z]+ {std::cout << \"A\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:2='b\"a',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"\\\\ab]+ {std::cout << \"A\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"\\a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:3='b\"\\a',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithReversedRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [z-a9]+ {std::cout << \"A\" << std::endl;} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="9"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:0='9',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFByItself() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DONE : EOF ;\n"); - grammarBuilder.append("A : 'a';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:-1='',<1>,1:0]\n" + - "[@1,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input ="a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(107); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ('a' | 'ab') {std::cout << getText() << std::endl;} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testHexVsID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); - grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); - grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="x 0 1 a.b a.l"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='x',<5>,1:0]\n" + - "[@1,1:1=' ',<6>,1:1]\n" + - "[@2,2:2='0',<2>,1:2]\n" + - "[@3,3:3=' ',<6>,1:3]\n" + - "[@4,4:4='1',<2>,1:4]\n" + - "[@5,5:5=' ',<6>,1:5]\n" + - "[@6,6:6='a',<5>,1:6]\n" + - "[@7,7:7='.',<4>,1:7]\n" + - "[@8,8:8='b',<5>,1:8]\n" + - "[@9,9:9=' ',<6>,1:9]\n" + - "[@10,10:10='a',<5>,1:10]\n" + - "[@11,11:11='.',<4>,1:11]\n" + - "[@12,12:12='l',<5>,1:12]\n" + - "[@13,13:12='',<-1>,1:13]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("KEND : 'end' ; // has priority\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="end eend ending a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:2='end',<1>,1:0]\n" + - "[@1,3:3=' ',<3>,1:3]\n" + - "[@2,4:7='eend',<2>,1:4]\n" + - "[@3,8:8=' ',<3>,1:8]\n" + - "[@4,9:14='ending',<2>,1:9]\n" + - "[@5,15:15=' ',<3>,1:15]\n" + - "[@6,16:16='a',<2>,1:16]\n" + - "[@7,17:16='',<-1>,1:17]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLargeLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85821); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); - grammarBuilder.append("KW0 : 'KW' '0';\n"); - grammarBuilder.append("KW1 : 'KW' '1';\n"); - grammarBuilder.append("KW2 : 'KW' '2';\n"); - grammarBuilder.append("KW3 : 'KW' '3';\n"); - grammarBuilder.append("KW4 : 'KW' '4';\n"); - grammarBuilder.append("KW5 : 'KW' '5';\n"); - grammarBuilder.append("KW6 : 'KW' '6';\n"); - grammarBuilder.append("KW7 : 'KW' '7';\n"); - grammarBuilder.append("KW8 : 'KW' '8';\n"); - grammarBuilder.append("KW9 : 'KW' '9';\n"); - grammarBuilder.append("KW10 : 'KW' '10';\n"); - grammarBuilder.append("KW11 : 'KW' '11';\n"); - grammarBuilder.append("KW12 : 'KW' '12';\n"); - grammarBuilder.append("KW13 : 'KW' '13';\n"); - grammarBuilder.append("KW14 : 'KW' '14';\n"); - grammarBuilder.append("KW15 : 'KW' '15';\n"); - grammarBuilder.append("KW16 : 'KW' '16';\n"); - grammarBuilder.append("KW17 : 'KW' '17';\n"); - grammarBuilder.append("KW18 : 'KW' '18';\n"); - grammarBuilder.append("KW19 : 'KW' '19';\n"); - grammarBuilder.append("KW20 : 'KW' '20';\n"); - grammarBuilder.append("KW21 : 'KW' '21';\n"); - grammarBuilder.append("KW22 : 'KW' '22';\n"); - grammarBuilder.append("KW23 : 'KW' '23';\n"); - grammarBuilder.append("KW24 : 'KW' '24';\n"); - grammarBuilder.append("KW25 : 'KW' '25';\n"); - grammarBuilder.append("KW26 : 'KW' '26';\n"); - grammarBuilder.append("KW27 : 'KW' '27';\n"); - grammarBuilder.append("KW28 : 'KW' '28';\n"); - grammarBuilder.append("KW29 : 'KW' '29';\n"); - grammarBuilder.append("KW30 : 'KW' '30';\n"); - grammarBuilder.append("KW31 : 'KW' '31';\n"); - grammarBuilder.append("KW32 : 'KW' '32';\n"); - grammarBuilder.append("KW33 : 'KW' '33';\n"); - grammarBuilder.append("KW34 : 'KW' '34';\n"); - grammarBuilder.append("KW35 : 'KW' '35';\n"); - grammarBuilder.append("KW36 : 'KW' '36';\n"); - grammarBuilder.append("KW37 : 'KW' '37';\n"); - grammarBuilder.append("KW38 : 'KW' '38';\n"); - grammarBuilder.append("KW39 : 'KW' '39';\n"); - grammarBuilder.append("KW40 : 'KW' '40';\n"); - grammarBuilder.append("KW41 : 'KW' '41';\n"); - grammarBuilder.append("KW42 : 'KW' '42';\n"); - grammarBuilder.append("KW43 : 'KW' '43';\n"); - grammarBuilder.append("KW44 : 'KW' '44';\n"); - grammarBuilder.append("KW45 : 'KW' '45';\n"); - grammarBuilder.append("KW46 : 'KW' '46';\n"); - grammarBuilder.append("KW47 : 'KW' '47';\n"); - grammarBuilder.append("KW48 : 'KW' '48';\n"); - grammarBuilder.append("KW49 : 'KW' '49';\n"); - grammarBuilder.append("KW50 : 'KW' '50';\n"); - grammarBuilder.append("KW51 : 'KW' '51';\n"); - grammarBuilder.append("KW52 : 'KW' '52';\n"); - grammarBuilder.append("KW53 : 'KW' '53';\n"); - grammarBuilder.append("KW54 : 'KW' '54';\n"); - grammarBuilder.append("KW55 : 'KW' '55';\n"); - grammarBuilder.append("KW56 : 'KW' '56';\n"); - grammarBuilder.append("KW57 : 'KW' '57';\n"); - grammarBuilder.append("KW58 : 'KW' '58';\n"); - grammarBuilder.append("KW59 : 'KW' '59';\n"); - grammarBuilder.append("KW60 : 'KW' '60';\n"); - grammarBuilder.append("KW61 : 'KW' '61';\n"); - grammarBuilder.append("KW62 : 'KW' '62';\n"); - grammarBuilder.append("KW63 : 'KW' '63';\n"); - grammarBuilder.append("KW64 : 'KW' '64';\n"); - grammarBuilder.append("KW65 : 'KW' '65';\n"); - grammarBuilder.append("KW66 : 'KW' '66';\n"); - grammarBuilder.append("KW67 : 'KW' '67';\n"); - grammarBuilder.append("KW68 : 'KW' '68';\n"); - grammarBuilder.append("KW69 : 'KW' '69';\n"); - grammarBuilder.append("KW70 : 'KW' '70';\n"); - grammarBuilder.append("KW71 : 'KW' '71';\n"); - grammarBuilder.append("KW72 : 'KW' '72';\n"); - grammarBuilder.append("KW73 : 'KW' '73';\n"); - grammarBuilder.append("KW74 : 'KW' '74';\n"); - grammarBuilder.append("KW75 : 'KW' '75';\n"); - grammarBuilder.append("KW76 : 'KW' '76';\n"); - grammarBuilder.append("KW77 : 'KW' '77';\n"); - grammarBuilder.append("KW78 : 'KW' '78';\n"); - grammarBuilder.append("KW79 : 'KW' '79';\n"); - grammarBuilder.append("KW80 : 'KW' '80';\n"); - grammarBuilder.append("KW81 : 'KW' '81';\n"); - grammarBuilder.append("KW82 : 'KW' '82';\n"); - grammarBuilder.append("KW83 : 'KW' '83';\n"); - grammarBuilder.append("KW84 : 'KW' '84';\n"); - grammarBuilder.append("KW85 : 'KW' '85';\n"); - grammarBuilder.append("KW86 : 'KW' '86';\n"); - grammarBuilder.append("KW87 : 'KW' '87';\n"); - grammarBuilder.append("KW88 : 'KW' '88';\n"); - grammarBuilder.append("KW89 : 'KW' '89';\n"); - grammarBuilder.append("KW90 : 'KW' '90';\n"); - grammarBuilder.append("KW91 : 'KW' '91';\n"); - grammarBuilder.append("KW92 : 'KW' '92';\n"); - grammarBuilder.append("KW93 : 'KW' '93';\n"); - grammarBuilder.append("KW94 : 'KW' '94';\n"); - grammarBuilder.append("KW95 : 'KW' '95';\n"); - grammarBuilder.append("KW96 : 'KW' '96';\n"); - grammarBuilder.append("KW97 : 'KW' '97';\n"); - grammarBuilder.append("KW98 : 'KW' '98';\n"); - grammarBuilder.append("KW99 : 'KW' '99';\n"); - grammarBuilder.append("KW100 : 'KW' '100';\n"); - grammarBuilder.append("KW101 : 'KW' '101';\n"); - grammarBuilder.append("KW102 : 'KW' '102';\n"); - grammarBuilder.append("KW103 : 'KW' '103';\n"); - grammarBuilder.append("KW104 : 'KW' '104';\n"); - grammarBuilder.append("KW105 : 'KW' '105';\n"); - grammarBuilder.append("KW106 : 'KW' '106';\n"); - grammarBuilder.append("KW107 : 'KW' '107';\n"); - grammarBuilder.append("KW108 : 'KW' '108';\n"); - grammarBuilder.append("KW109 : 'KW' '109';\n"); - grammarBuilder.append("KW110 : 'KW' '110';\n"); - grammarBuilder.append("KW111 : 'KW' '111';\n"); - grammarBuilder.append("KW112 : 'KW' '112';\n"); - grammarBuilder.append("KW113 : 'KW' '113';\n"); - grammarBuilder.append("KW114 : 'KW' '114';\n"); - grammarBuilder.append("KW115 : 'KW' '115';\n"); - grammarBuilder.append("KW116 : 'KW' '116';\n"); - grammarBuilder.append("KW117 : 'KW' '117';\n"); - grammarBuilder.append("KW118 : 'KW' '118';\n"); - grammarBuilder.append("KW119 : 'KW' '119';\n"); - grammarBuilder.append("KW120 : 'KW' '120';\n"); - grammarBuilder.append("KW121 : 'KW' '121';\n"); - grammarBuilder.append("KW122 : 'KW' '122';\n"); - grammarBuilder.append("KW123 : 'KW' '123';\n"); - grammarBuilder.append("KW124 : 'KW' '124';\n"); - grammarBuilder.append("KW125 : 'KW' '125';\n"); - grammarBuilder.append("KW126 : 'KW' '126';\n"); - grammarBuilder.append("KW127 : 'KW' '127';\n"); - grammarBuilder.append("KW128 : 'KW' '128';\n"); - grammarBuilder.append("KW129 : 'KW' '129';\n"); - grammarBuilder.append("KW130 : 'KW' '130';\n"); - grammarBuilder.append("KW131 : 'KW' '131';\n"); - grammarBuilder.append("KW132 : 'KW' '132';\n"); - grammarBuilder.append("KW133 : 'KW' '133';\n"); - grammarBuilder.append("KW134 : 'KW' '134';\n"); - grammarBuilder.append("KW135 : 'KW' '135';\n"); - grammarBuilder.append("KW136 : 'KW' '136';\n"); - grammarBuilder.append("KW137 : 'KW' '137';\n"); - grammarBuilder.append("KW138 : 'KW' '138';\n"); - grammarBuilder.append("KW139 : 'KW' '139';\n"); - grammarBuilder.append("KW140 : 'KW' '140';\n"); - grammarBuilder.append("KW141 : 'KW' '141';\n"); - grammarBuilder.append("KW142 : 'KW' '142';\n"); - grammarBuilder.append("KW143 : 'KW' '143';\n"); - grammarBuilder.append("KW144 : 'KW' '144';\n"); - grammarBuilder.append("KW145 : 'KW' '145';\n"); - grammarBuilder.append("KW146 : 'KW' '146';\n"); - grammarBuilder.append("KW147 : 'KW' '147';\n"); - grammarBuilder.append("KW148 : 'KW' '148';\n"); - grammarBuilder.append("KW149 : 'KW' '149';\n"); - grammarBuilder.append("KW150 : 'KW' '150';\n"); - grammarBuilder.append("KW151 : 'KW' '151';\n"); - grammarBuilder.append("KW152 : 'KW' '152';\n"); - grammarBuilder.append("KW153 : 'KW' '153';\n"); - grammarBuilder.append("KW154 : 'KW' '154';\n"); - grammarBuilder.append("KW155 : 'KW' '155';\n"); - grammarBuilder.append("KW156 : 'KW' '156';\n"); - grammarBuilder.append("KW157 : 'KW' '157';\n"); - grammarBuilder.append("KW158 : 'KW' '158';\n"); - grammarBuilder.append("KW159 : 'KW' '159';\n"); - grammarBuilder.append("KW160 : 'KW' '160';\n"); - grammarBuilder.append("KW161 : 'KW' '161';\n"); - grammarBuilder.append("KW162 : 'KW' '162';\n"); - grammarBuilder.append("KW163 : 'KW' '163';\n"); - grammarBuilder.append("KW164 : 'KW' '164';\n"); - grammarBuilder.append("KW165 : 'KW' '165';\n"); - grammarBuilder.append("KW166 : 'KW' '166';\n"); - grammarBuilder.append("KW167 : 'KW' '167';\n"); - grammarBuilder.append("KW168 : 'KW' '168';\n"); - grammarBuilder.append("KW169 : 'KW' '169';\n"); - grammarBuilder.append("KW170 : 'KW' '170';\n"); - grammarBuilder.append("KW171 : 'KW' '171';\n"); - grammarBuilder.append("KW172 : 'KW' '172';\n"); - grammarBuilder.append("KW173 : 'KW' '173';\n"); - grammarBuilder.append("KW174 : 'KW' '174';\n"); - grammarBuilder.append("KW175 : 'KW' '175';\n"); - grammarBuilder.append("KW176 : 'KW' '176';\n"); - grammarBuilder.append("KW177 : 'KW' '177';\n"); - grammarBuilder.append("KW178 : 'KW' '178';\n"); - grammarBuilder.append("KW179 : 'KW' '179';\n"); - grammarBuilder.append("KW180 : 'KW' '180';\n"); - grammarBuilder.append("KW181 : 'KW' '181';\n"); - grammarBuilder.append("KW182 : 'KW' '182';\n"); - grammarBuilder.append("KW183 : 'KW' '183';\n"); - grammarBuilder.append("KW184 : 'KW' '184';\n"); - grammarBuilder.append("KW185 : 'KW' '185';\n"); - grammarBuilder.append("KW186 : 'KW' '186';\n"); - grammarBuilder.append("KW187 : 'KW' '187';\n"); - grammarBuilder.append("KW188 : 'KW' '188';\n"); - grammarBuilder.append("KW189 : 'KW' '189';\n"); - grammarBuilder.append("KW190 : 'KW' '190';\n"); - grammarBuilder.append("KW191 : 'KW' '191';\n"); - grammarBuilder.append("KW192 : 'KW' '192';\n"); - grammarBuilder.append("KW193 : 'KW' '193';\n"); - grammarBuilder.append("KW194 : 'KW' '194';\n"); - grammarBuilder.append("KW195 : 'KW' '195';\n"); - grammarBuilder.append("KW196 : 'KW' '196';\n"); - grammarBuilder.append("KW197 : 'KW' '197';\n"); - grammarBuilder.append("KW198 : 'KW' '198';\n"); - grammarBuilder.append("KW199 : 'KW' '199';\n"); - grammarBuilder.append("KW200 : 'KW' '200';\n"); - grammarBuilder.append("KW201 : 'KW' '201';\n"); - grammarBuilder.append("KW202 : 'KW' '202';\n"); - grammarBuilder.append("KW203 : 'KW' '203';\n"); - grammarBuilder.append("KW204 : 'KW' '204';\n"); - grammarBuilder.append("KW205 : 'KW' '205';\n"); - grammarBuilder.append("KW206 : 'KW' '206';\n"); - grammarBuilder.append("KW207 : 'KW' '207';\n"); - grammarBuilder.append("KW208 : 'KW' '208';\n"); - grammarBuilder.append("KW209 : 'KW' '209';\n"); - grammarBuilder.append("KW210 : 'KW' '210';\n"); - grammarBuilder.append("KW211 : 'KW' '211';\n"); - grammarBuilder.append("KW212 : 'KW' '212';\n"); - grammarBuilder.append("KW213 : 'KW' '213';\n"); - grammarBuilder.append("KW214 : 'KW' '214';\n"); - grammarBuilder.append("KW215 : 'KW' '215';\n"); - grammarBuilder.append("KW216 : 'KW' '216';\n"); - grammarBuilder.append("KW217 : 'KW' '217';\n"); - grammarBuilder.append("KW218 : 'KW' '218';\n"); - grammarBuilder.append("KW219 : 'KW' '219';\n"); - grammarBuilder.append("KW220 : 'KW' '220';\n"); - grammarBuilder.append("KW221 : 'KW' '221';\n"); - grammarBuilder.append("KW222 : 'KW' '222';\n"); - grammarBuilder.append("KW223 : 'KW' '223';\n"); - grammarBuilder.append("KW224 : 'KW' '224';\n"); - grammarBuilder.append("KW225 : 'KW' '225';\n"); - grammarBuilder.append("KW226 : 'KW' '226';\n"); - grammarBuilder.append("KW227 : 'KW' '227';\n"); - grammarBuilder.append("KW228 : 'KW' '228';\n"); - grammarBuilder.append("KW229 : 'KW' '229';\n"); - grammarBuilder.append("KW230 : 'KW' '230';\n"); - grammarBuilder.append("KW231 : 'KW' '231';\n"); - grammarBuilder.append("KW232 : 'KW' '232';\n"); - grammarBuilder.append("KW233 : 'KW' '233';\n"); - grammarBuilder.append("KW234 : 'KW' '234';\n"); - grammarBuilder.append("KW235 : 'KW' '235';\n"); - grammarBuilder.append("KW236 : 'KW' '236';\n"); - grammarBuilder.append("KW237 : 'KW' '237';\n"); - grammarBuilder.append("KW238 : 'KW' '238';\n"); - grammarBuilder.append("KW239 : 'KW' '239';\n"); - grammarBuilder.append("KW240 : 'KW' '240';\n"); - grammarBuilder.append("KW241 : 'KW' '241';\n"); - grammarBuilder.append("KW242 : 'KW' '242';\n"); - grammarBuilder.append("KW243 : 'KW' '243';\n"); - grammarBuilder.append("KW244 : 'KW' '244';\n"); - grammarBuilder.append("KW245 : 'KW' '245';\n"); - grammarBuilder.append("KW246 : 'KW' '246';\n"); - grammarBuilder.append("KW247 : 'KW' '247';\n"); - grammarBuilder.append("KW248 : 'KW' '248';\n"); - grammarBuilder.append("KW249 : 'KW' '249';\n"); - grammarBuilder.append("KW250 : 'KW' '250';\n"); - grammarBuilder.append("KW251 : 'KW' '251';\n"); - grammarBuilder.append("KW252 : 'KW' '252';\n"); - grammarBuilder.append("KW253 : 'KW' '253';\n"); - grammarBuilder.append("KW254 : 'KW' '254';\n"); - grammarBuilder.append("KW255 : 'KW' '255';\n"); - grammarBuilder.append("KW256 : 'KW' '256';\n"); - grammarBuilder.append("KW257 : 'KW' '257';\n"); - grammarBuilder.append("KW258 : 'KW' '258';\n"); - grammarBuilder.append("KW259 : 'KW' '259';\n"); - grammarBuilder.append("KW260 : 'KW' '260';\n"); - grammarBuilder.append("KW261 : 'KW' '261';\n"); - grammarBuilder.append("KW262 : 'KW' '262';\n"); - grammarBuilder.append("KW263 : 'KW' '263';\n"); - grammarBuilder.append("KW264 : 'KW' '264';\n"); - grammarBuilder.append("KW265 : 'KW' '265';\n"); - grammarBuilder.append("KW266 : 'KW' '266';\n"); - grammarBuilder.append("KW267 : 'KW' '267';\n"); - grammarBuilder.append("KW268 : 'KW' '268';\n"); - grammarBuilder.append("KW269 : 'KW' '269';\n"); - grammarBuilder.append("KW270 : 'KW' '270';\n"); - grammarBuilder.append("KW271 : 'KW' '271';\n"); - grammarBuilder.append("KW272 : 'KW' '272';\n"); - grammarBuilder.append("KW273 : 'KW' '273';\n"); - grammarBuilder.append("KW274 : 'KW' '274';\n"); - grammarBuilder.append("KW275 : 'KW' '275';\n"); - grammarBuilder.append("KW276 : 'KW' '276';\n"); - grammarBuilder.append("KW277 : 'KW' '277';\n"); - grammarBuilder.append("KW278 : 'KW' '278';\n"); - grammarBuilder.append("KW279 : 'KW' '279';\n"); - grammarBuilder.append("KW280 : 'KW' '280';\n"); - grammarBuilder.append("KW281 : 'KW' '281';\n"); - grammarBuilder.append("KW282 : 'KW' '282';\n"); - grammarBuilder.append("KW283 : 'KW' '283';\n"); - grammarBuilder.append("KW284 : 'KW' '284';\n"); - grammarBuilder.append("KW285 : 'KW' '285';\n"); - grammarBuilder.append("KW286 : 'KW' '286';\n"); - grammarBuilder.append("KW287 : 'KW' '287';\n"); - grammarBuilder.append("KW288 : 'KW' '288';\n"); - grammarBuilder.append("KW289 : 'KW' '289';\n"); - grammarBuilder.append("KW290 : 'KW' '290';\n"); - grammarBuilder.append("KW291 : 'KW' '291';\n"); - grammarBuilder.append("KW292 : 'KW' '292';\n"); - grammarBuilder.append("KW293 : 'KW' '293';\n"); - grammarBuilder.append("KW294 : 'KW' '294';\n"); - grammarBuilder.append("KW295 : 'KW' '295';\n"); - grammarBuilder.append("KW296 : 'KW' '296';\n"); - grammarBuilder.append("KW297 : 'KW' '297';\n"); - grammarBuilder.append("KW298 : 'KW' '298';\n"); - grammarBuilder.append("KW299 : 'KW' '299';\n"); - grammarBuilder.append("KW300 : 'KW' '300';\n"); - grammarBuilder.append("KW301 : 'KW' '301';\n"); - grammarBuilder.append("KW302 : 'KW' '302';\n"); - grammarBuilder.append("KW303 : 'KW' '303';\n"); - grammarBuilder.append("KW304 : 'KW' '304';\n"); - grammarBuilder.append("KW305 : 'KW' '305';\n"); - grammarBuilder.append("KW306 : 'KW' '306';\n"); - grammarBuilder.append("KW307 : 'KW' '307';\n"); - grammarBuilder.append("KW308 : 'KW' '308';\n"); - grammarBuilder.append("KW309 : 'KW' '309';\n"); - grammarBuilder.append("KW310 : 'KW' '310';\n"); - grammarBuilder.append("KW311 : 'KW' '311';\n"); - grammarBuilder.append("KW312 : 'KW' '312';\n"); - grammarBuilder.append("KW313 : 'KW' '313';\n"); - grammarBuilder.append("KW314 : 'KW' '314';\n"); - grammarBuilder.append("KW315 : 'KW' '315';\n"); - grammarBuilder.append("KW316 : 'KW' '316';\n"); - grammarBuilder.append("KW317 : 'KW' '317';\n"); - grammarBuilder.append("KW318 : 'KW' '318';\n"); - grammarBuilder.append("KW319 : 'KW' '319';\n"); - grammarBuilder.append("KW320 : 'KW' '320';\n"); - grammarBuilder.append("KW321 : 'KW' '321';\n"); - grammarBuilder.append("KW322 : 'KW' '322';\n"); - grammarBuilder.append("KW323 : 'KW' '323';\n"); - grammarBuilder.append("KW324 : 'KW' '324';\n"); - grammarBuilder.append("KW325 : 'KW' '325';\n"); - grammarBuilder.append("KW326 : 'KW' '326';\n"); - grammarBuilder.append("KW327 : 'KW' '327';\n"); - grammarBuilder.append("KW328 : 'KW' '328';\n"); - grammarBuilder.append("KW329 : 'KW' '329';\n"); - grammarBuilder.append("KW330 : 'KW' '330';\n"); - grammarBuilder.append("KW331 : 'KW' '331';\n"); - grammarBuilder.append("KW332 : 'KW' '332';\n"); - grammarBuilder.append("KW333 : 'KW' '333';\n"); - grammarBuilder.append("KW334 : 'KW' '334';\n"); - grammarBuilder.append("KW335 : 'KW' '335';\n"); - grammarBuilder.append("KW336 : 'KW' '336';\n"); - grammarBuilder.append("KW337 : 'KW' '337';\n"); - grammarBuilder.append("KW338 : 'KW' '338';\n"); - grammarBuilder.append("KW339 : 'KW' '339';\n"); - grammarBuilder.append("KW340 : 'KW' '340';\n"); - grammarBuilder.append("KW341 : 'KW' '341';\n"); - grammarBuilder.append("KW342 : 'KW' '342';\n"); - grammarBuilder.append("KW343 : 'KW' '343';\n"); - grammarBuilder.append("KW344 : 'KW' '344';\n"); - grammarBuilder.append("KW345 : 'KW' '345';\n"); - grammarBuilder.append("KW346 : 'KW' '346';\n"); - grammarBuilder.append("KW347 : 'KW' '347';\n"); - grammarBuilder.append("KW348 : 'KW' '348';\n"); - grammarBuilder.append("KW349 : 'KW' '349';\n"); - grammarBuilder.append("KW350 : 'KW' '350';\n"); - grammarBuilder.append("KW351 : 'KW' '351';\n"); - grammarBuilder.append("KW352 : 'KW' '352';\n"); - grammarBuilder.append("KW353 : 'KW' '353';\n"); - grammarBuilder.append("KW354 : 'KW' '354';\n"); - grammarBuilder.append("KW355 : 'KW' '355';\n"); - grammarBuilder.append("KW356 : 'KW' '356';\n"); - grammarBuilder.append("KW357 : 'KW' '357';\n"); - grammarBuilder.append("KW358 : 'KW' '358';\n"); - grammarBuilder.append("KW359 : 'KW' '359';\n"); - grammarBuilder.append("KW360 : 'KW' '360';\n"); - grammarBuilder.append("KW361 : 'KW' '361';\n"); - grammarBuilder.append("KW362 : 'KW' '362';\n"); - grammarBuilder.append("KW363 : 'KW' '363';\n"); - grammarBuilder.append("KW364 : 'KW' '364';\n"); - grammarBuilder.append("KW365 : 'KW' '365';\n"); - grammarBuilder.append("KW366 : 'KW' '366';\n"); - grammarBuilder.append("KW367 : 'KW' '367';\n"); - grammarBuilder.append("KW368 : 'KW' '368';\n"); - grammarBuilder.append("KW369 : 'KW' '369';\n"); - grammarBuilder.append("KW370 : 'KW' '370';\n"); - grammarBuilder.append("KW371 : 'KW' '371';\n"); - grammarBuilder.append("KW372 : 'KW' '372';\n"); - grammarBuilder.append("KW373 : 'KW' '373';\n"); - grammarBuilder.append("KW374 : 'KW' '374';\n"); - grammarBuilder.append("KW375 : 'KW' '375';\n"); - grammarBuilder.append("KW376 : 'KW' '376';\n"); - grammarBuilder.append("KW377 : 'KW' '377';\n"); - grammarBuilder.append("KW378 : 'KW' '378';\n"); - grammarBuilder.append("KW379 : 'KW' '379';\n"); - grammarBuilder.append("KW380 : 'KW' '380';\n"); - grammarBuilder.append("KW381 : 'KW' '381';\n"); - grammarBuilder.append("KW382 : 'KW' '382';\n"); - grammarBuilder.append("KW383 : 'KW' '383';\n"); - grammarBuilder.append("KW384 : 'KW' '384';\n"); - grammarBuilder.append("KW385 : 'KW' '385';\n"); - grammarBuilder.append("KW386 : 'KW' '386';\n"); - grammarBuilder.append("KW387 : 'KW' '387';\n"); - grammarBuilder.append("KW388 : 'KW' '388';\n"); - grammarBuilder.append("KW389 : 'KW' '389';\n"); - grammarBuilder.append("KW390 : 'KW' '390';\n"); - grammarBuilder.append("KW391 : 'KW' '391';\n"); - grammarBuilder.append("KW392 : 'KW' '392';\n"); - grammarBuilder.append("KW393 : 'KW' '393';\n"); - grammarBuilder.append("KW394 : 'KW' '394';\n"); - grammarBuilder.append("KW395 : 'KW' '395';\n"); - grammarBuilder.append("KW396 : 'KW' '396';\n"); - grammarBuilder.append("KW397 : 'KW' '397';\n"); - grammarBuilder.append("KW398 : 'KW' '398';\n"); - grammarBuilder.append("KW399 : 'KW' '399';\n"); - grammarBuilder.append("KW400 : 'KW' '400';\n"); - grammarBuilder.append("KW401 : 'KW' '401';\n"); - grammarBuilder.append("KW402 : 'KW' '402';\n"); - grammarBuilder.append("KW403 : 'KW' '403';\n"); - grammarBuilder.append("KW404 : 'KW' '404';\n"); - grammarBuilder.append("KW405 : 'KW' '405';\n"); - grammarBuilder.append("KW406 : 'KW' '406';\n"); - grammarBuilder.append("KW407 : 'KW' '407';\n"); - grammarBuilder.append("KW408 : 'KW' '408';\n"); - grammarBuilder.append("KW409 : 'KW' '409';\n"); - grammarBuilder.append("KW410 : 'KW' '410';\n"); - grammarBuilder.append("KW411 : 'KW' '411';\n"); - grammarBuilder.append("KW412 : 'KW' '412';\n"); - grammarBuilder.append("KW413 : 'KW' '413';\n"); - grammarBuilder.append("KW414 : 'KW' '414';\n"); - grammarBuilder.append("KW415 : 'KW' '415';\n"); - grammarBuilder.append("KW416 : 'KW' '416';\n"); - grammarBuilder.append("KW417 : 'KW' '417';\n"); - grammarBuilder.append("KW418 : 'KW' '418';\n"); - grammarBuilder.append("KW419 : 'KW' '419';\n"); - grammarBuilder.append("KW420 : 'KW' '420';\n"); - grammarBuilder.append("KW421 : 'KW' '421';\n"); - grammarBuilder.append("KW422 : 'KW' '422';\n"); - grammarBuilder.append("KW423 : 'KW' '423';\n"); - grammarBuilder.append("KW424 : 'KW' '424';\n"); - grammarBuilder.append("KW425 : 'KW' '425';\n"); - grammarBuilder.append("KW426 : 'KW' '426';\n"); - grammarBuilder.append("KW427 : 'KW' '427';\n"); - grammarBuilder.append("KW428 : 'KW' '428';\n"); - grammarBuilder.append("KW429 : 'KW' '429';\n"); - grammarBuilder.append("KW430 : 'KW' '430';\n"); - grammarBuilder.append("KW431 : 'KW' '431';\n"); - grammarBuilder.append("KW432 : 'KW' '432';\n"); - grammarBuilder.append("KW433 : 'KW' '433';\n"); - grammarBuilder.append("KW434 : 'KW' '434';\n"); - grammarBuilder.append("KW435 : 'KW' '435';\n"); - grammarBuilder.append("KW436 : 'KW' '436';\n"); - grammarBuilder.append("KW437 : 'KW' '437';\n"); - grammarBuilder.append("KW438 : 'KW' '438';\n"); - grammarBuilder.append("KW439 : 'KW' '439';\n"); - grammarBuilder.append("KW440 : 'KW' '440';\n"); - grammarBuilder.append("KW441 : 'KW' '441';\n"); - grammarBuilder.append("KW442 : 'KW' '442';\n"); - grammarBuilder.append("KW443 : 'KW' '443';\n"); - grammarBuilder.append("KW444 : 'KW' '444';\n"); - grammarBuilder.append("KW445 : 'KW' '445';\n"); - grammarBuilder.append("KW446 : 'KW' '446';\n"); - grammarBuilder.append("KW447 : 'KW' '447';\n"); - grammarBuilder.append("KW448 : 'KW' '448';\n"); - grammarBuilder.append("KW449 : 'KW' '449';\n"); - grammarBuilder.append("KW450 : 'KW' '450';\n"); - grammarBuilder.append("KW451 : 'KW' '451';\n"); - grammarBuilder.append("KW452 : 'KW' '452';\n"); - grammarBuilder.append("KW453 : 'KW' '453';\n"); - grammarBuilder.append("KW454 : 'KW' '454';\n"); - grammarBuilder.append("KW455 : 'KW' '455';\n"); - grammarBuilder.append("KW456 : 'KW' '456';\n"); - grammarBuilder.append("KW457 : 'KW' '457';\n"); - grammarBuilder.append("KW458 : 'KW' '458';\n"); - grammarBuilder.append("KW459 : 'KW' '459';\n"); - grammarBuilder.append("KW460 : 'KW' '460';\n"); - grammarBuilder.append("KW461 : 'KW' '461';\n"); - grammarBuilder.append("KW462 : 'KW' '462';\n"); - grammarBuilder.append("KW463 : 'KW' '463';\n"); - grammarBuilder.append("KW464 : 'KW' '464';\n"); - grammarBuilder.append("KW465 : 'KW' '465';\n"); - grammarBuilder.append("KW466 : 'KW' '466';\n"); - grammarBuilder.append("KW467 : 'KW' '467';\n"); - grammarBuilder.append("KW468 : 'KW' '468';\n"); - grammarBuilder.append("KW469 : 'KW' '469';\n"); - grammarBuilder.append("KW470 : 'KW' '470';\n"); - grammarBuilder.append("KW471 : 'KW' '471';\n"); - grammarBuilder.append("KW472 : 'KW' '472';\n"); - grammarBuilder.append("KW473 : 'KW' '473';\n"); - grammarBuilder.append("KW474 : 'KW' '474';\n"); - grammarBuilder.append("KW475 : 'KW' '475';\n"); - grammarBuilder.append("KW476 : 'KW' '476';\n"); - grammarBuilder.append("KW477 : 'KW' '477';\n"); - grammarBuilder.append("KW478 : 'KW' '478';\n"); - grammarBuilder.append("KW479 : 'KW' '479';\n"); - grammarBuilder.append("KW480 : 'KW' '480';\n"); - grammarBuilder.append("KW481 : 'KW' '481';\n"); - grammarBuilder.append("KW482 : 'KW' '482';\n"); - grammarBuilder.append("KW483 : 'KW' '483';\n"); - grammarBuilder.append("KW484 : 'KW' '484';\n"); - grammarBuilder.append("KW485 : 'KW' '485';\n"); - grammarBuilder.append("KW486 : 'KW' '486';\n"); - grammarBuilder.append("KW487 : 'KW' '487';\n"); - grammarBuilder.append("KW488 : 'KW' '488';\n"); - grammarBuilder.append("KW489 : 'KW' '489';\n"); - grammarBuilder.append("KW490 : 'KW' '490';\n"); - grammarBuilder.append("KW491 : 'KW' '491';\n"); - grammarBuilder.append("KW492 : 'KW' '492';\n"); - grammarBuilder.append("KW493 : 'KW' '493';\n"); - grammarBuilder.append("KW494 : 'KW' '494';\n"); - grammarBuilder.append("KW495 : 'KW' '495';\n"); - grammarBuilder.append("KW496 : 'KW' '496';\n"); - grammarBuilder.append("KW497 : 'KW' '497';\n"); - grammarBuilder.append("KW498 : 'KW' '498';\n"); - grammarBuilder.append("KW499 : 'KW' '499';\n"); - grammarBuilder.append("KW500 : 'KW' '500';\n"); - grammarBuilder.append("KW501 : 'KW' '501';\n"); - grammarBuilder.append("KW502 : 'KW' '502';\n"); - grammarBuilder.append("KW503 : 'KW' '503';\n"); - grammarBuilder.append("KW504 : 'KW' '504';\n"); - grammarBuilder.append("KW505 : 'KW' '505';\n"); - grammarBuilder.append("KW506 : 'KW' '506';\n"); - grammarBuilder.append("KW507 : 'KW' '507';\n"); - grammarBuilder.append("KW508 : 'KW' '508';\n"); - grammarBuilder.append("KW509 : 'KW' '509';\n"); - grammarBuilder.append("KW510 : 'KW' '510';\n"); - grammarBuilder.append("KW511 : 'KW' '511';\n"); - grammarBuilder.append("KW512 : 'KW' '512';\n"); - grammarBuilder.append("KW513 : 'KW' '513';\n"); - grammarBuilder.append("KW514 : 'KW' '514';\n"); - grammarBuilder.append("KW515 : 'KW' '515';\n"); - grammarBuilder.append("KW516 : 'KW' '516';\n"); - grammarBuilder.append("KW517 : 'KW' '517';\n"); - grammarBuilder.append("KW518 : 'KW' '518';\n"); - grammarBuilder.append("KW519 : 'KW' '519';\n"); - grammarBuilder.append("KW520 : 'KW' '520';\n"); - grammarBuilder.append("KW521 : 'KW' '521';\n"); - grammarBuilder.append("KW522 : 'KW' '522';\n"); - grammarBuilder.append("KW523 : 'KW' '523';\n"); - grammarBuilder.append("KW524 : 'KW' '524';\n"); - grammarBuilder.append("KW525 : 'KW' '525';\n"); - grammarBuilder.append("KW526 : 'KW' '526';\n"); - grammarBuilder.append("KW527 : 'KW' '527';\n"); - grammarBuilder.append("KW528 : 'KW' '528';\n"); - grammarBuilder.append("KW529 : 'KW' '529';\n"); - grammarBuilder.append("KW530 : 'KW' '530';\n"); - grammarBuilder.append("KW531 : 'KW' '531';\n"); - grammarBuilder.append("KW532 : 'KW' '532';\n"); - grammarBuilder.append("KW533 : 'KW' '533';\n"); - grammarBuilder.append("KW534 : 'KW' '534';\n"); - grammarBuilder.append("KW535 : 'KW' '535';\n"); - grammarBuilder.append("KW536 : 'KW' '536';\n"); - grammarBuilder.append("KW537 : 'KW' '537';\n"); - grammarBuilder.append("KW538 : 'KW' '538';\n"); - grammarBuilder.append("KW539 : 'KW' '539';\n"); - grammarBuilder.append("KW540 : 'KW' '540';\n"); - grammarBuilder.append("KW541 : 'KW' '541';\n"); - grammarBuilder.append("KW542 : 'KW' '542';\n"); - grammarBuilder.append("KW543 : 'KW' '543';\n"); - grammarBuilder.append("KW544 : 'KW' '544';\n"); - grammarBuilder.append("KW545 : 'KW' '545';\n"); - grammarBuilder.append("KW546 : 'KW' '546';\n"); - grammarBuilder.append("KW547 : 'KW' '547';\n"); - grammarBuilder.append("KW548 : 'KW' '548';\n"); - grammarBuilder.append("KW549 : 'KW' '549';\n"); - grammarBuilder.append("KW550 : 'KW' '550';\n"); - grammarBuilder.append("KW551 : 'KW' '551';\n"); - grammarBuilder.append("KW552 : 'KW' '552';\n"); - grammarBuilder.append("KW553 : 'KW' '553';\n"); - grammarBuilder.append("KW554 : 'KW' '554';\n"); - grammarBuilder.append("KW555 : 'KW' '555';\n"); - grammarBuilder.append("KW556 : 'KW' '556';\n"); - grammarBuilder.append("KW557 : 'KW' '557';\n"); - grammarBuilder.append("KW558 : 'KW' '558';\n"); - grammarBuilder.append("KW559 : 'KW' '559';\n"); - grammarBuilder.append("KW560 : 'KW' '560';\n"); - grammarBuilder.append("KW561 : 'KW' '561';\n"); - grammarBuilder.append("KW562 : 'KW' '562';\n"); - grammarBuilder.append("KW563 : 'KW' '563';\n"); - grammarBuilder.append("KW564 : 'KW' '564';\n"); - grammarBuilder.append("KW565 : 'KW' '565';\n"); - grammarBuilder.append("KW566 : 'KW' '566';\n"); - grammarBuilder.append("KW567 : 'KW' '567';\n"); - grammarBuilder.append("KW568 : 'KW' '568';\n"); - grammarBuilder.append("KW569 : 'KW' '569';\n"); - grammarBuilder.append("KW570 : 'KW' '570';\n"); - grammarBuilder.append("KW571 : 'KW' '571';\n"); - grammarBuilder.append("KW572 : 'KW' '572';\n"); - grammarBuilder.append("KW573 : 'KW' '573';\n"); - grammarBuilder.append("KW574 : 'KW' '574';\n"); - grammarBuilder.append("KW575 : 'KW' '575';\n"); - grammarBuilder.append("KW576 : 'KW' '576';\n"); - grammarBuilder.append("KW577 : 'KW' '577';\n"); - grammarBuilder.append("KW578 : 'KW' '578';\n"); - grammarBuilder.append("KW579 : 'KW' '579';\n"); - grammarBuilder.append("KW580 : 'KW' '580';\n"); - grammarBuilder.append("KW581 : 'KW' '581';\n"); - grammarBuilder.append("KW582 : 'KW' '582';\n"); - grammarBuilder.append("KW583 : 'KW' '583';\n"); - grammarBuilder.append("KW584 : 'KW' '584';\n"); - grammarBuilder.append("KW585 : 'KW' '585';\n"); - grammarBuilder.append("KW586 : 'KW' '586';\n"); - grammarBuilder.append("KW587 : 'KW' '587';\n"); - grammarBuilder.append("KW588 : 'KW' '588';\n"); - grammarBuilder.append("KW589 : 'KW' '589';\n"); - grammarBuilder.append("KW590 : 'KW' '590';\n"); - grammarBuilder.append("KW591 : 'KW' '591';\n"); - grammarBuilder.append("KW592 : 'KW' '592';\n"); - grammarBuilder.append("KW593 : 'KW' '593';\n"); - grammarBuilder.append("KW594 : 'KW' '594';\n"); - grammarBuilder.append("KW595 : 'KW' '595';\n"); - grammarBuilder.append("KW596 : 'KW' '596';\n"); - grammarBuilder.append("KW597 : 'KW' '597';\n"); - grammarBuilder.append("KW598 : 'KW' '598';\n"); - grammarBuilder.append("KW599 : 'KW' '599';\n"); - grammarBuilder.append("KW600 : 'KW' '600';\n"); - grammarBuilder.append("KW601 : 'KW' '601';\n"); - grammarBuilder.append("KW602 : 'KW' '602';\n"); - grammarBuilder.append("KW603 : 'KW' '603';\n"); - grammarBuilder.append("KW604 : 'KW' '604';\n"); - grammarBuilder.append("KW605 : 'KW' '605';\n"); - grammarBuilder.append("KW606 : 'KW' '606';\n"); - grammarBuilder.append("KW607 : 'KW' '607';\n"); - grammarBuilder.append("KW608 : 'KW' '608';\n"); - grammarBuilder.append("KW609 : 'KW' '609';\n"); - grammarBuilder.append("KW610 : 'KW' '610';\n"); - grammarBuilder.append("KW611 : 'KW' '611';\n"); - grammarBuilder.append("KW612 : 'KW' '612';\n"); - grammarBuilder.append("KW613 : 'KW' '613';\n"); - grammarBuilder.append("KW614 : 'KW' '614';\n"); - grammarBuilder.append("KW615 : 'KW' '615';\n"); - grammarBuilder.append("KW616 : 'KW' '616';\n"); - grammarBuilder.append("KW617 : 'KW' '617';\n"); - grammarBuilder.append("KW618 : 'KW' '618';\n"); - grammarBuilder.append("KW619 : 'KW' '619';\n"); - grammarBuilder.append("KW620 : 'KW' '620';\n"); - grammarBuilder.append("KW621 : 'KW' '621';\n"); - grammarBuilder.append("KW622 : 'KW' '622';\n"); - grammarBuilder.append("KW623 : 'KW' '623';\n"); - grammarBuilder.append("KW624 : 'KW' '624';\n"); - grammarBuilder.append("KW625 : 'KW' '625';\n"); - grammarBuilder.append("KW626 : 'KW' '626';\n"); - grammarBuilder.append("KW627 : 'KW' '627';\n"); - grammarBuilder.append("KW628 : 'KW' '628';\n"); - grammarBuilder.append("KW629 : 'KW' '629';\n"); - grammarBuilder.append("KW630 : 'KW' '630';\n"); - grammarBuilder.append("KW631 : 'KW' '631';\n"); - grammarBuilder.append("KW632 : 'KW' '632';\n"); - grammarBuilder.append("KW633 : 'KW' '633';\n"); - grammarBuilder.append("KW634 : 'KW' '634';\n"); - grammarBuilder.append("KW635 : 'KW' '635';\n"); - grammarBuilder.append("KW636 : 'KW' '636';\n"); - grammarBuilder.append("KW637 : 'KW' '637';\n"); - grammarBuilder.append("KW638 : 'KW' '638';\n"); - grammarBuilder.append("KW639 : 'KW' '639';\n"); - grammarBuilder.append("KW640 : 'KW' '640';\n"); - grammarBuilder.append("KW641 : 'KW' '641';\n"); - grammarBuilder.append("KW642 : 'KW' '642';\n"); - grammarBuilder.append("KW643 : 'KW' '643';\n"); - grammarBuilder.append("KW644 : 'KW' '644';\n"); - grammarBuilder.append("KW645 : 'KW' '645';\n"); - grammarBuilder.append("KW646 : 'KW' '646';\n"); - grammarBuilder.append("KW647 : 'KW' '647';\n"); - grammarBuilder.append("KW648 : 'KW' '648';\n"); - grammarBuilder.append("KW649 : 'KW' '649';\n"); - grammarBuilder.append("KW650 : 'KW' '650';\n"); - grammarBuilder.append("KW651 : 'KW' '651';\n"); - grammarBuilder.append("KW652 : 'KW' '652';\n"); - grammarBuilder.append("KW653 : 'KW' '653';\n"); - grammarBuilder.append("KW654 : 'KW' '654';\n"); - grammarBuilder.append("KW655 : 'KW' '655';\n"); - grammarBuilder.append("KW656 : 'KW' '656';\n"); - grammarBuilder.append("KW657 : 'KW' '657';\n"); - grammarBuilder.append("KW658 : 'KW' '658';\n"); - grammarBuilder.append("KW659 : 'KW' '659';\n"); - grammarBuilder.append("KW660 : 'KW' '660';\n"); - grammarBuilder.append("KW661 : 'KW' '661';\n"); - grammarBuilder.append("KW662 : 'KW' '662';\n"); - grammarBuilder.append("KW663 : 'KW' '663';\n"); - grammarBuilder.append("KW664 : 'KW' '664';\n"); - grammarBuilder.append("KW665 : 'KW' '665';\n"); - grammarBuilder.append("KW666 : 'KW' '666';\n"); - grammarBuilder.append("KW667 : 'KW' '667';\n"); - grammarBuilder.append("KW668 : 'KW' '668';\n"); - grammarBuilder.append("KW669 : 'KW' '669';\n"); - grammarBuilder.append("KW670 : 'KW' '670';\n"); - grammarBuilder.append("KW671 : 'KW' '671';\n"); - grammarBuilder.append("KW672 : 'KW' '672';\n"); - grammarBuilder.append("KW673 : 'KW' '673';\n"); - grammarBuilder.append("KW674 : 'KW' '674';\n"); - grammarBuilder.append("KW675 : 'KW' '675';\n"); - grammarBuilder.append("KW676 : 'KW' '676';\n"); - grammarBuilder.append("KW677 : 'KW' '677';\n"); - grammarBuilder.append("KW678 : 'KW' '678';\n"); - grammarBuilder.append("KW679 : 'KW' '679';\n"); - grammarBuilder.append("KW680 : 'KW' '680';\n"); - grammarBuilder.append("KW681 : 'KW' '681';\n"); - grammarBuilder.append("KW682 : 'KW' '682';\n"); - grammarBuilder.append("KW683 : 'KW' '683';\n"); - grammarBuilder.append("KW684 : 'KW' '684';\n"); - grammarBuilder.append("KW685 : 'KW' '685';\n"); - grammarBuilder.append("KW686 : 'KW' '686';\n"); - grammarBuilder.append("KW687 : 'KW' '687';\n"); - grammarBuilder.append("KW688 : 'KW' '688';\n"); - grammarBuilder.append("KW689 : 'KW' '689';\n"); - grammarBuilder.append("KW690 : 'KW' '690';\n"); - grammarBuilder.append("KW691 : 'KW' '691';\n"); - grammarBuilder.append("KW692 : 'KW' '692';\n"); - grammarBuilder.append("KW693 : 'KW' '693';\n"); - grammarBuilder.append("KW694 : 'KW' '694';\n"); - grammarBuilder.append("KW695 : 'KW' '695';\n"); - grammarBuilder.append("KW696 : 'KW' '696';\n"); - grammarBuilder.append("KW697 : 'KW' '697';\n"); - grammarBuilder.append("KW698 : 'KW' '698';\n"); - grammarBuilder.append("KW699 : 'KW' '699';\n"); - grammarBuilder.append("KW700 : 'KW' '700';\n"); - grammarBuilder.append("KW701 : 'KW' '701';\n"); - grammarBuilder.append("KW702 : 'KW' '702';\n"); - grammarBuilder.append("KW703 : 'KW' '703';\n"); - grammarBuilder.append("KW704 : 'KW' '704';\n"); - grammarBuilder.append("KW705 : 'KW' '705';\n"); - grammarBuilder.append("KW706 : 'KW' '706';\n"); - grammarBuilder.append("KW707 : 'KW' '707';\n"); - grammarBuilder.append("KW708 : 'KW' '708';\n"); - grammarBuilder.append("KW709 : 'KW' '709';\n"); - grammarBuilder.append("KW710 : 'KW' '710';\n"); - grammarBuilder.append("KW711 : 'KW' '711';\n"); - grammarBuilder.append("KW712 : 'KW' '712';\n"); - grammarBuilder.append("KW713 : 'KW' '713';\n"); - grammarBuilder.append("KW714 : 'KW' '714';\n"); - grammarBuilder.append("KW715 : 'KW' '715';\n"); - grammarBuilder.append("KW716 : 'KW' '716';\n"); - grammarBuilder.append("KW717 : 'KW' '717';\n"); - grammarBuilder.append("KW718 : 'KW' '718';\n"); - grammarBuilder.append("KW719 : 'KW' '719';\n"); - grammarBuilder.append("KW720 : 'KW' '720';\n"); - grammarBuilder.append("KW721 : 'KW' '721';\n"); - grammarBuilder.append("KW722 : 'KW' '722';\n"); - grammarBuilder.append("KW723 : 'KW' '723';\n"); - grammarBuilder.append("KW724 : 'KW' '724';\n"); - grammarBuilder.append("KW725 : 'KW' '725';\n"); - grammarBuilder.append("KW726 : 'KW' '726';\n"); - grammarBuilder.append("KW727 : 'KW' '727';\n"); - grammarBuilder.append("KW728 : 'KW' '728';\n"); - grammarBuilder.append("KW729 : 'KW' '729';\n"); - grammarBuilder.append("KW730 : 'KW' '730';\n"); - grammarBuilder.append("KW731 : 'KW' '731';\n"); - grammarBuilder.append("KW732 : 'KW' '732';\n"); - grammarBuilder.append("KW733 : 'KW' '733';\n"); - grammarBuilder.append("KW734 : 'KW' '734';\n"); - grammarBuilder.append("KW735 : 'KW' '735';\n"); - grammarBuilder.append("KW736 : 'KW' '736';\n"); - grammarBuilder.append("KW737 : 'KW' '737';\n"); - grammarBuilder.append("KW738 : 'KW' '738';\n"); - grammarBuilder.append("KW739 : 'KW' '739';\n"); - grammarBuilder.append("KW740 : 'KW' '740';\n"); - grammarBuilder.append("KW741 : 'KW' '741';\n"); - grammarBuilder.append("KW742 : 'KW' '742';\n"); - grammarBuilder.append("KW743 : 'KW' '743';\n"); - grammarBuilder.append("KW744 : 'KW' '744';\n"); - grammarBuilder.append("KW745 : 'KW' '745';\n"); - grammarBuilder.append("KW746 : 'KW' '746';\n"); - grammarBuilder.append("KW747 : 'KW' '747';\n"); - grammarBuilder.append("KW748 : 'KW' '748';\n"); - grammarBuilder.append("KW749 : 'KW' '749';\n"); - grammarBuilder.append("KW750 : 'KW' '750';\n"); - grammarBuilder.append("KW751 : 'KW' '751';\n"); - grammarBuilder.append("KW752 : 'KW' '752';\n"); - grammarBuilder.append("KW753 : 'KW' '753';\n"); - grammarBuilder.append("KW754 : 'KW' '754';\n"); - grammarBuilder.append("KW755 : 'KW' '755';\n"); - grammarBuilder.append("KW756 : 'KW' '756';\n"); - grammarBuilder.append("KW757 : 'KW' '757';\n"); - grammarBuilder.append("KW758 : 'KW' '758';\n"); - grammarBuilder.append("KW759 : 'KW' '759';\n"); - grammarBuilder.append("KW760 : 'KW' '760';\n"); - grammarBuilder.append("KW761 : 'KW' '761';\n"); - grammarBuilder.append("KW762 : 'KW' '762';\n"); - grammarBuilder.append("KW763 : 'KW' '763';\n"); - grammarBuilder.append("KW764 : 'KW' '764';\n"); - grammarBuilder.append("KW765 : 'KW' '765';\n"); - grammarBuilder.append("KW766 : 'KW' '766';\n"); - grammarBuilder.append("KW767 : 'KW' '767';\n"); - grammarBuilder.append("KW768 : 'KW' '768';\n"); - grammarBuilder.append("KW769 : 'KW' '769';\n"); - grammarBuilder.append("KW770 : 'KW' '770';\n"); - grammarBuilder.append("KW771 : 'KW' '771';\n"); - grammarBuilder.append("KW772 : 'KW' '772';\n"); - grammarBuilder.append("KW773 : 'KW' '773';\n"); - grammarBuilder.append("KW774 : 'KW' '774';\n"); - grammarBuilder.append("KW775 : 'KW' '775';\n"); - grammarBuilder.append("KW776 : 'KW' '776';\n"); - grammarBuilder.append("KW777 : 'KW' '777';\n"); - grammarBuilder.append("KW778 : 'KW' '778';\n"); - grammarBuilder.append("KW779 : 'KW' '779';\n"); - grammarBuilder.append("KW780 : 'KW' '780';\n"); - grammarBuilder.append("KW781 : 'KW' '781';\n"); - grammarBuilder.append("KW782 : 'KW' '782';\n"); - grammarBuilder.append("KW783 : 'KW' '783';\n"); - grammarBuilder.append("KW784 : 'KW' '784';\n"); - grammarBuilder.append("KW785 : 'KW' '785';\n"); - grammarBuilder.append("KW786 : 'KW' '786';\n"); - grammarBuilder.append("KW787 : 'KW' '787';\n"); - grammarBuilder.append("KW788 : 'KW' '788';\n"); - grammarBuilder.append("KW789 : 'KW' '789';\n"); - grammarBuilder.append("KW790 : 'KW' '790';\n"); - grammarBuilder.append("KW791 : 'KW' '791';\n"); - grammarBuilder.append("KW792 : 'KW' '792';\n"); - grammarBuilder.append("KW793 : 'KW' '793';\n"); - grammarBuilder.append("KW794 : 'KW' '794';\n"); - grammarBuilder.append("KW795 : 'KW' '795';\n"); - grammarBuilder.append("KW796 : 'KW' '796';\n"); - grammarBuilder.append("KW797 : 'KW' '797';\n"); - grammarBuilder.append("KW798 : 'KW' '798';\n"); - grammarBuilder.append("KW799 : 'KW' '799';\n"); - grammarBuilder.append("KW800 : 'KW' '800';\n"); - grammarBuilder.append("KW801 : 'KW' '801';\n"); - grammarBuilder.append("KW802 : 'KW' '802';\n"); - grammarBuilder.append("KW803 : 'KW' '803';\n"); - grammarBuilder.append("KW804 : 'KW' '804';\n"); - grammarBuilder.append("KW805 : 'KW' '805';\n"); - grammarBuilder.append("KW806 : 'KW' '806';\n"); - grammarBuilder.append("KW807 : 'KW' '807';\n"); - grammarBuilder.append("KW808 : 'KW' '808';\n"); - grammarBuilder.append("KW809 : 'KW' '809';\n"); - grammarBuilder.append("KW810 : 'KW' '810';\n"); - grammarBuilder.append("KW811 : 'KW' '811';\n"); - grammarBuilder.append("KW812 : 'KW' '812';\n"); - grammarBuilder.append("KW813 : 'KW' '813';\n"); - grammarBuilder.append("KW814 : 'KW' '814';\n"); - grammarBuilder.append("KW815 : 'KW' '815';\n"); - grammarBuilder.append("KW816 : 'KW' '816';\n"); - grammarBuilder.append("KW817 : 'KW' '817';\n"); - grammarBuilder.append("KW818 : 'KW' '818';\n"); - grammarBuilder.append("KW819 : 'KW' '819';\n"); - grammarBuilder.append("KW820 : 'KW' '820';\n"); - grammarBuilder.append("KW821 : 'KW' '821';\n"); - grammarBuilder.append("KW822 : 'KW' '822';\n"); - grammarBuilder.append("KW823 : 'KW' '823';\n"); - grammarBuilder.append("KW824 : 'KW' '824';\n"); - grammarBuilder.append("KW825 : 'KW' '825';\n"); - grammarBuilder.append("KW826 : 'KW' '826';\n"); - grammarBuilder.append("KW827 : 'KW' '827';\n"); - grammarBuilder.append("KW828 : 'KW' '828';\n"); - grammarBuilder.append("KW829 : 'KW' '829';\n"); - grammarBuilder.append("KW830 : 'KW' '830';\n"); - grammarBuilder.append("KW831 : 'KW' '831';\n"); - grammarBuilder.append("KW832 : 'KW' '832';\n"); - grammarBuilder.append("KW833 : 'KW' '833';\n"); - grammarBuilder.append("KW834 : 'KW' '834';\n"); - grammarBuilder.append("KW835 : 'KW' '835';\n"); - grammarBuilder.append("KW836 : 'KW' '836';\n"); - grammarBuilder.append("KW837 : 'KW' '837';\n"); - grammarBuilder.append("KW838 : 'KW' '838';\n"); - grammarBuilder.append("KW839 : 'KW' '839';\n"); - grammarBuilder.append("KW840 : 'KW' '840';\n"); - grammarBuilder.append("KW841 : 'KW' '841';\n"); - grammarBuilder.append("KW842 : 'KW' '842';\n"); - grammarBuilder.append("KW843 : 'KW' '843';\n"); - grammarBuilder.append("KW844 : 'KW' '844';\n"); - grammarBuilder.append("KW845 : 'KW' '845';\n"); - grammarBuilder.append("KW846 : 'KW' '846';\n"); - grammarBuilder.append("KW847 : 'KW' '847';\n"); - grammarBuilder.append("KW848 : 'KW' '848';\n"); - grammarBuilder.append("KW849 : 'KW' '849';\n"); - grammarBuilder.append("KW850 : 'KW' '850';\n"); - grammarBuilder.append("KW851 : 'KW' '851';\n"); - grammarBuilder.append("KW852 : 'KW' '852';\n"); - grammarBuilder.append("KW853 : 'KW' '853';\n"); - grammarBuilder.append("KW854 : 'KW' '854';\n"); - grammarBuilder.append("KW855 : 'KW' '855';\n"); - grammarBuilder.append("KW856 : 'KW' '856';\n"); - grammarBuilder.append("KW857 : 'KW' '857';\n"); - grammarBuilder.append("KW858 : 'KW' '858';\n"); - grammarBuilder.append("KW859 : 'KW' '859';\n"); - grammarBuilder.append("KW860 : 'KW' '860';\n"); - grammarBuilder.append("KW861 : 'KW' '861';\n"); - grammarBuilder.append("KW862 : 'KW' '862';\n"); - grammarBuilder.append("KW863 : 'KW' '863';\n"); - grammarBuilder.append("KW864 : 'KW' '864';\n"); - grammarBuilder.append("KW865 : 'KW' '865';\n"); - grammarBuilder.append("KW866 : 'KW' '866';\n"); - grammarBuilder.append("KW867 : 'KW' '867';\n"); - grammarBuilder.append("KW868 : 'KW' '868';\n"); - grammarBuilder.append("KW869 : 'KW' '869';\n"); - grammarBuilder.append("KW870 : 'KW' '870';\n"); - grammarBuilder.append("KW871 : 'KW' '871';\n"); - grammarBuilder.append("KW872 : 'KW' '872';\n"); - grammarBuilder.append("KW873 : 'KW' '873';\n"); - grammarBuilder.append("KW874 : 'KW' '874';\n"); - grammarBuilder.append("KW875 : 'KW' '875';\n"); - grammarBuilder.append("KW876 : 'KW' '876';\n"); - grammarBuilder.append("KW877 : 'KW' '877';\n"); - grammarBuilder.append("KW878 : 'KW' '878';\n"); - grammarBuilder.append("KW879 : 'KW' '879';\n"); - grammarBuilder.append("KW880 : 'KW' '880';\n"); - grammarBuilder.append("KW881 : 'KW' '881';\n"); - grammarBuilder.append("KW882 : 'KW' '882';\n"); - grammarBuilder.append("KW883 : 'KW' '883';\n"); - grammarBuilder.append("KW884 : 'KW' '884';\n"); - grammarBuilder.append("KW885 : 'KW' '885';\n"); - grammarBuilder.append("KW886 : 'KW' '886';\n"); - grammarBuilder.append("KW887 : 'KW' '887';\n"); - grammarBuilder.append("KW888 : 'KW' '888';\n"); - grammarBuilder.append("KW889 : 'KW' '889';\n"); - grammarBuilder.append("KW890 : 'KW' '890';\n"); - grammarBuilder.append("KW891 : 'KW' '891';\n"); - grammarBuilder.append("KW892 : 'KW' '892';\n"); - grammarBuilder.append("KW893 : 'KW' '893';\n"); - grammarBuilder.append("KW894 : 'KW' '894';\n"); - grammarBuilder.append("KW895 : 'KW' '895';\n"); - grammarBuilder.append("KW896 : 'KW' '896';\n"); - grammarBuilder.append("KW897 : 'KW' '897';\n"); - grammarBuilder.append("KW898 : 'KW' '898';\n"); - grammarBuilder.append("KW899 : 'KW' '899';\n"); - grammarBuilder.append("KW900 : 'KW' '900';\n"); - grammarBuilder.append("KW901 : 'KW' '901';\n"); - grammarBuilder.append("KW902 : 'KW' '902';\n"); - grammarBuilder.append("KW903 : 'KW' '903';\n"); - grammarBuilder.append("KW904 : 'KW' '904';\n"); - grammarBuilder.append("KW905 : 'KW' '905';\n"); - grammarBuilder.append("KW906 : 'KW' '906';\n"); - grammarBuilder.append("KW907 : 'KW' '907';\n"); - grammarBuilder.append("KW908 : 'KW' '908';\n"); - grammarBuilder.append("KW909 : 'KW' '909';\n"); - grammarBuilder.append("KW910 : 'KW' '910';\n"); - grammarBuilder.append("KW911 : 'KW' '911';\n"); - grammarBuilder.append("KW912 : 'KW' '912';\n"); - grammarBuilder.append("KW913 : 'KW' '913';\n"); - grammarBuilder.append("KW914 : 'KW' '914';\n"); - grammarBuilder.append("KW915 : 'KW' '915';\n"); - grammarBuilder.append("KW916 : 'KW' '916';\n"); - grammarBuilder.append("KW917 : 'KW' '917';\n"); - grammarBuilder.append("KW918 : 'KW' '918';\n"); - grammarBuilder.append("KW919 : 'KW' '919';\n"); - grammarBuilder.append("KW920 : 'KW' '920';\n"); - grammarBuilder.append("KW921 : 'KW' '921';\n"); - grammarBuilder.append("KW922 : 'KW' '922';\n"); - grammarBuilder.append("KW923 : 'KW' '923';\n"); - grammarBuilder.append("KW924 : 'KW' '924';\n"); - grammarBuilder.append("KW925 : 'KW' '925';\n"); - grammarBuilder.append("KW926 : 'KW' '926';\n"); - grammarBuilder.append("KW927 : 'KW' '927';\n"); - grammarBuilder.append("KW928 : 'KW' '928';\n"); - grammarBuilder.append("KW929 : 'KW' '929';\n"); - grammarBuilder.append("KW930 : 'KW' '930';\n"); - grammarBuilder.append("KW931 : 'KW' '931';\n"); - grammarBuilder.append("KW932 : 'KW' '932';\n"); - grammarBuilder.append("KW933 : 'KW' '933';\n"); - grammarBuilder.append("KW934 : 'KW' '934';\n"); - grammarBuilder.append("KW935 : 'KW' '935';\n"); - grammarBuilder.append("KW936 : 'KW' '936';\n"); - grammarBuilder.append("KW937 : 'KW' '937';\n"); - grammarBuilder.append("KW938 : 'KW' '938';\n"); - grammarBuilder.append("KW939 : 'KW' '939';\n"); - grammarBuilder.append("KW940 : 'KW' '940';\n"); - grammarBuilder.append("KW941 : 'KW' '941';\n"); - grammarBuilder.append("KW942 : 'KW' '942';\n"); - grammarBuilder.append("KW943 : 'KW' '943';\n"); - grammarBuilder.append("KW944 : 'KW' '944';\n"); - grammarBuilder.append("KW945 : 'KW' '945';\n"); - grammarBuilder.append("KW946 : 'KW' '946';\n"); - grammarBuilder.append("KW947 : 'KW' '947';\n"); - grammarBuilder.append("KW948 : 'KW' '948';\n"); - grammarBuilder.append("KW949 : 'KW' '949';\n"); - grammarBuilder.append("KW950 : 'KW' '950';\n"); - grammarBuilder.append("KW951 : 'KW' '951';\n"); - grammarBuilder.append("KW952 : 'KW' '952';\n"); - grammarBuilder.append("KW953 : 'KW' '953';\n"); - grammarBuilder.append("KW954 : 'KW' '954';\n"); - grammarBuilder.append("KW955 : 'KW' '955';\n"); - grammarBuilder.append("KW956 : 'KW' '956';\n"); - grammarBuilder.append("KW957 : 'KW' '957';\n"); - grammarBuilder.append("KW958 : 'KW' '958';\n"); - grammarBuilder.append("KW959 : 'KW' '959';\n"); - grammarBuilder.append("KW960 : 'KW' '960';\n"); - grammarBuilder.append("KW961 : 'KW' '961';\n"); - grammarBuilder.append("KW962 : 'KW' '962';\n"); - grammarBuilder.append("KW963 : 'KW' '963';\n"); - grammarBuilder.append("KW964 : 'KW' '964';\n"); - grammarBuilder.append("KW965 : 'KW' '965';\n"); - grammarBuilder.append("KW966 : 'KW' '966';\n"); - grammarBuilder.append("KW967 : 'KW' '967';\n"); - grammarBuilder.append("KW968 : 'KW' '968';\n"); - grammarBuilder.append("KW969 : 'KW' '969';\n"); - grammarBuilder.append("KW970 : 'KW' '970';\n"); - grammarBuilder.append("KW971 : 'KW' '971';\n"); - grammarBuilder.append("KW972 : 'KW' '972';\n"); - grammarBuilder.append("KW973 : 'KW' '973';\n"); - grammarBuilder.append("KW974 : 'KW' '974';\n"); - grammarBuilder.append("KW975 : 'KW' '975';\n"); - grammarBuilder.append("KW976 : 'KW' '976';\n"); - grammarBuilder.append("KW977 : 'KW' '977';\n"); - grammarBuilder.append("KW978 : 'KW' '978';\n"); - grammarBuilder.append("KW979 : 'KW' '979';\n"); - grammarBuilder.append("KW980 : 'KW' '980';\n"); - grammarBuilder.append("KW981 : 'KW' '981';\n"); - grammarBuilder.append("KW982 : 'KW' '982';\n"); - grammarBuilder.append("KW983 : 'KW' '983';\n"); - grammarBuilder.append("KW984 : 'KW' '984';\n"); - grammarBuilder.append("KW985 : 'KW' '985';\n"); - grammarBuilder.append("KW986 : 'KW' '986';\n"); - grammarBuilder.append("KW987 : 'KW' '987';\n"); - grammarBuilder.append("KW988 : 'KW' '988';\n"); - grammarBuilder.append("KW989 : 'KW' '989';\n"); - grammarBuilder.append("KW990 : 'KW' '990';\n"); - grammarBuilder.append("KW991 : 'KW' '991';\n"); - grammarBuilder.append("KW992 : 'KW' '992';\n"); - grammarBuilder.append("KW993 : 'KW' '993';\n"); - grammarBuilder.append("KW994 : 'KW' '994';\n"); - grammarBuilder.append("KW995 : 'KW' '995';\n"); - grammarBuilder.append("KW996 : 'KW' '996';\n"); - grammarBuilder.append("KW997 : 'KW' '997';\n"); - grammarBuilder.append("KW998 : 'KW' '998';\n"); - grammarBuilder.append("KW999 : 'KW' '999';\n"); - grammarBuilder.append("KW1000 : 'KW' '1000';\n"); - grammarBuilder.append("KW1001 : 'KW' '1001';\n"); - grammarBuilder.append("KW1002 : 'KW' '1002';\n"); - grammarBuilder.append("KW1003 : 'KW' '1003';\n"); - grammarBuilder.append("KW1004 : 'KW' '1004';\n"); - grammarBuilder.append("KW1005 : 'KW' '1005';\n"); - grammarBuilder.append("KW1006 : 'KW' '1006';\n"); - grammarBuilder.append("KW1007 : 'KW' '1007';\n"); - grammarBuilder.append("KW1008 : 'KW' '1008';\n"); - grammarBuilder.append("KW1009 : 'KW' '1009';\n"); - grammarBuilder.append("KW1010 : 'KW' '1010';\n"); - grammarBuilder.append("KW1011 : 'KW' '1011';\n"); - grammarBuilder.append("KW1012 : 'KW' '1012';\n"); - grammarBuilder.append("KW1013 : 'KW' '1013';\n"); - grammarBuilder.append("KW1014 : 'KW' '1014';\n"); - grammarBuilder.append("KW1015 : 'KW' '1015';\n"); - grammarBuilder.append("KW1016 : 'KW' '1016';\n"); - grammarBuilder.append("KW1017 : 'KW' '1017';\n"); - grammarBuilder.append("KW1018 : 'KW' '1018';\n"); - grammarBuilder.append("KW1019 : 'KW' '1019';\n"); - grammarBuilder.append("KW1020 : 'KW' '1020';\n"); - grammarBuilder.append("KW1021 : 'KW' '1021';\n"); - grammarBuilder.append("KW1022 : 'KW' '1022';\n"); - grammarBuilder.append("KW1023 : 'KW' '1023';\n"); - grammarBuilder.append("KW1024 : 'KW' '1024';\n"); - grammarBuilder.append("KW1025 : 'KW' '1025';\n"); - grammarBuilder.append("KW1026 : 'KW' '1026';\n"); - grammarBuilder.append("KW1027 : 'KW' '1027';\n"); - grammarBuilder.append("KW1028 : 'KW' '1028';\n"); - grammarBuilder.append("KW1029 : 'KW' '1029';\n"); - grammarBuilder.append("KW1030 : 'KW' '1030';\n"); - grammarBuilder.append("KW1031 : 'KW' '1031';\n"); - grammarBuilder.append("KW1032 : 'KW' '1032';\n"); - grammarBuilder.append("KW1033 : 'KW' '1033';\n"); - grammarBuilder.append("KW1034 : 'KW' '1034';\n"); - grammarBuilder.append("KW1035 : 'KW' '1035';\n"); - grammarBuilder.append("KW1036 : 'KW' '1036';\n"); - grammarBuilder.append("KW1037 : 'KW' '1037';\n"); - grammarBuilder.append("KW1038 : 'KW' '1038';\n"); - grammarBuilder.append("KW1039 : 'KW' '1039';\n"); - grammarBuilder.append("KW1040 : 'KW' '1040';\n"); - grammarBuilder.append("KW1041 : 'KW' '1041';\n"); - grammarBuilder.append("KW1042 : 'KW' '1042';\n"); - grammarBuilder.append("KW1043 : 'KW' '1043';\n"); - grammarBuilder.append("KW1044 : 'KW' '1044';\n"); - grammarBuilder.append("KW1045 : 'KW' '1045';\n"); - grammarBuilder.append("KW1046 : 'KW' '1046';\n"); - grammarBuilder.append("KW1047 : 'KW' '1047';\n"); - grammarBuilder.append("KW1048 : 'KW' '1048';\n"); - grammarBuilder.append("KW1049 : 'KW' '1049';\n"); - grammarBuilder.append("KW1050 : 'KW' '1050';\n"); - grammarBuilder.append("KW1051 : 'KW' '1051';\n"); - grammarBuilder.append("KW1052 : 'KW' '1052';\n"); - grammarBuilder.append("KW1053 : 'KW' '1053';\n"); - grammarBuilder.append("KW1054 : 'KW' '1054';\n"); - grammarBuilder.append("KW1055 : 'KW' '1055';\n"); - grammarBuilder.append("KW1056 : 'KW' '1056';\n"); - grammarBuilder.append("KW1057 : 'KW' '1057';\n"); - grammarBuilder.append("KW1058 : 'KW' '1058';\n"); - grammarBuilder.append("KW1059 : 'KW' '1059';\n"); - grammarBuilder.append("KW1060 : 'KW' '1060';\n"); - grammarBuilder.append("KW1061 : 'KW' '1061';\n"); - grammarBuilder.append("KW1062 : 'KW' '1062';\n"); - grammarBuilder.append("KW1063 : 'KW' '1063';\n"); - grammarBuilder.append("KW1064 : 'KW' '1064';\n"); - grammarBuilder.append("KW1065 : 'KW' '1065';\n"); - grammarBuilder.append("KW1066 : 'KW' '1066';\n"); - grammarBuilder.append("KW1067 : 'KW' '1067';\n"); - grammarBuilder.append("KW1068 : 'KW' '1068';\n"); - grammarBuilder.append("KW1069 : 'KW' '1069';\n"); - grammarBuilder.append("KW1070 : 'KW' '1070';\n"); - grammarBuilder.append("KW1071 : 'KW' '1071';\n"); - grammarBuilder.append("KW1072 : 'KW' '1072';\n"); - grammarBuilder.append("KW1073 : 'KW' '1073';\n"); - grammarBuilder.append("KW1074 : 'KW' '1074';\n"); - grammarBuilder.append("KW1075 : 'KW' '1075';\n"); - grammarBuilder.append("KW1076 : 'KW' '1076';\n"); - grammarBuilder.append("KW1077 : 'KW' '1077';\n"); - grammarBuilder.append("KW1078 : 'KW' '1078';\n"); - grammarBuilder.append("KW1079 : 'KW' '1079';\n"); - grammarBuilder.append("KW1080 : 'KW' '1080';\n"); - grammarBuilder.append("KW1081 : 'KW' '1081';\n"); - grammarBuilder.append("KW1082 : 'KW' '1082';\n"); - grammarBuilder.append("KW1083 : 'KW' '1083';\n"); - grammarBuilder.append("KW1084 : 'KW' '1084';\n"); - grammarBuilder.append("KW1085 : 'KW' '1085';\n"); - grammarBuilder.append("KW1086 : 'KW' '1086';\n"); - grammarBuilder.append("KW1087 : 'KW' '1087';\n"); - grammarBuilder.append("KW1088 : 'KW' '1088';\n"); - grammarBuilder.append("KW1089 : 'KW' '1089';\n"); - grammarBuilder.append("KW1090 : 'KW' '1090';\n"); - grammarBuilder.append("KW1091 : 'KW' '1091';\n"); - grammarBuilder.append("KW1092 : 'KW' '1092';\n"); - grammarBuilder.append("KW1093 : 'KW' '1093';\n"); - grammarBuilder.append("KW1094 : 'KW' '1094';\n"); - grammarBuilder.append("KW1095 : 'KW' '1095';\n"); - grammarBuilder.append("KW1096 : 'KW' '1096';\n"); - grammarBuilder.append("KW1097 : 'KW' '1097';\n"); - grammarBuilder.append("KW1098 : 'KW' '1098';\n"); - grammarBuilder.append("KW1099 : 'KW' '1099';\n"); - grammarBuilder.append("KW1100 : 'KW' '1100';\n"); - grammarBuilder.append("KW1101 : 'KW' '1101';\n"); - grammarBuilder.append("KW1102 : 'KW' '1102';\n"); - grammarBuilder.append("KW1103 : 'KW' '1103';\n"); - grammarBuilder.append("KW1104 : 'KW' '1104';\n"); - grammarBuilder.append("KW1105 : 'KW' '1105';\n"); - grammarBuilder.append("KW1106 : 'KW' '1106';\n"); - grammarBuilder.append("KW1107 : 'KW' '1107';\n"); - grammarBuilder.append("KW1108 : 'KW' '1108';\n"); - grammarBuilder.append("KW1109 : 'KW' '1109';\n"); - grammarBuilder.append("KW1110 : 'KW' '1110';\n"); - grammarBuilder.append("KW1111 : 'KW' '1111';\n"); - grammarBuilder.append("KW1112 : 'KW' '1112';\n"); - grammarBuilder.append("KW1113 : 'KW' '1113';\n"); - grammarBuilder.append("KW1114 : 'KW' '1114';\n"); - grammarBuilder.append("KW1115 : 'KW' '1115';\n"); - grammarBuilder.append("KW1116 : 'KW' '1116';\n"); - grammarBuilder.append("KW1117 : 'KW' '1117';\n"); - grammarBuilder.append("KW1118 : 'KW' '1118';\n"); - grammarBuilder.append("KW1119 : 'KW' '1119';\n"); - grammarBuilder.append("KW1120 : 'KW' '1120';\n"); - grammarBuilder.append("KW1121 : 'KW' '1121';\n"); - grammarBuilder.append("KW1122 : 'KW' '1122';\n"); - grammarBuilder.append("KW1123 : 'KW' '1123';\n"); - grammarBuilder.append("KW1124 : 'KW' '1124';\n"); - grammarBuilder.append("KW1125 : 'KW' '1125';\n"); - grammarBuilder.append("KW1126 : 'KW' '1126';\n"); - grammarBuilder.append("KW1127 : 'KW' '1127';\n"); - grammarBuilder.append("KW1128 : 'KW' '1128';\n"); - grammarBuilder.append("KW1129 : 'KW' '1129';\n"); - grammarBuilder.append("KW1130 : 'KW' '1130';\n"); - grammarBuilder.append("KW1131 : 'KW' '1131';\n"); - grammarBuilder.append("KW1132 : 'KW' '1132';\n"); - grammarBuilder.append("KW1133 : 'KW' '1133';\n"); - grammarBuilder.append("KW1134 : 'KW' '1134';\n"); - grammarBuilder.append("KW1135 : 'KW' '1135';\n"); - grammarBuilder.append("KW1136 : 'KW' '1136';\n"); - grammarBuilder.append("KW1137 : 'KW' '1137';\n"); - grammarBuilder.append("KW1138 : 'KW' '1138';\n"); - grammarBuilder.append("KW1139 : 'KW' '1139';\n"); - grammarBuilder.append("KW1140 : 'KW' '1140';\n"); - grammarBuilder.append("KW1141 : 'KW' '1141';\n"); - grammarBuilder.append("KW1142 : 'KW' '1142';\n"); - grammarBuilder.append("KW1143 : 'KW' '1143';\n"); - grammarBuilder.append("KW1144 : 'KW' '1144';\n"); - grammarBuilder.append("KW1145 : 'KW' '1145';\n"); - grammarBuilder.append("KW1146 : 'KW' '1146';\n"); - grammarBuilder.append("KW1147 : 'KW' '1147';\n"); - grammarBuilder.append("KW1148 : 'KW' '1148';\n"); - grammarBuilder.append("KW1149 : 'KW' '1149';\n"); - grammarBuilder.append("KW1150 : 'KW' '1150';\n"); - grammarBuilder.append("KW1151 : 'KW' '1151';\n"); - grammarBuilder.append("KW1152 : 'KW' '1152';\n"); - grammarBuilder.append("KW1153 : 'KW' '1153';\n"); - grammarBuilder.append("KW1154 : 'KW' '1154';\n"); - grammarBuilder.append("KW1155 : 'KW' '1155';\n"); - grammarBuilder.append("KW1156 : 'KW' '1156';\n"); - grammarBuilder.append("KW1157 : 'KW' '1157';\n"); - grammarBuilder.append("KW1158 : 'KW' '1158';\n"); - grammarBuilder.append("KW1159 : 'KW' '1159';\n"); - grammarBuilder.append("KW1160 : 'KW' '1160';\n"); - grammarBuilder.append("KW1161 : 'KW' '1161';\n"); - grammarBuilder.append("KW1162 : 'KW' '1162';\n"); - grammarBuilder.append("KW1163 : 'KW' '1163';\n"); - grammarBuilder.append("KW1164 : 'KW' '1164';\n"); - grammarBuilder.append("KW1165 : 'KW' '1165';\n"); - grammarBuilder.append("KW1166 : 'KW' '1166';\n"); - grammarBuilder.append("KW1167 : 'KW' '1167';\n"); - grammarBuilder.append("KW1168 : 'KW' '1168';\n"); - grammarBuilder.append("KW1169 : 'KW' '1169';\n"); - grammarBuilder.append("KW1170 : 'KW' '1170';\n"); - grammarBuilder.append("KW1171 : 'KW' '1171';\n"); - grammarBuilder.append("KW1172 : 'KW' '1172';\n"); - grammarBuilder.append("KW1173 : 'KW' '1173';\n"); - grammarBuilder.append("KW1174 : 'KW' '1174';\n"); - grammarBuilder.append("KW1175 : 'KW' '1175';\n"); - grammarBuilder.append("KW1176 : 'KW' '1176';\n"); - grammarBuilder.append("KW1177 : 'KW' '1177';\n"); - grammarBuilder.append("KW1178 : 'KW' '1178';\n"); - grammarBuilder.append("KW1179 : 'KW' '1179';\n"); - grammarBuilder.append("KW1180 : 'KW' '1180';\n"); - grammarBuilder.append("KW1181 : 'KW' '1181';\n"); - grammarBuilder.append("KW1182 : 'KW' '1182';\n"); - grammarBuilder.append("KW1183 : 'KW' '1183';\n"); - grammarBuilder.append("KW1184 : 'KW' '1184';\n"); - grammarBuilder.append("KW1185 : 'KW' '1185';\n"); - grammarBuilder.append("KW1186 : 'KW' '1186';\n"); - grammarBuilder.append("KW1187 : 'KW' '1187';\n"); - grammarBuilder.append("KW1188 : 'KW' '1188';\n"); - grammarBuilder.append("KW1189 : 'KW' '1189';\n"); - grammarBuilder.append("KW1190 : 'KW' '1190';\n"); - grammarBuilder.append("KW1191 : 'KW' '1191';\n"); - grammarBuilder.append("KW1192 : 'KW' '1192';\n"); - grammarBuilder.append("KW1193 : 'KW' '1193';\n"); - grammarBuilder.append("KW1194 : 'KW' '1194';\n"); - grammarBuilder.append("KW1195 : 'KW' '1195';\n"); - grammarBuilder.append("KW1196 : 'KW' '1196';\n"); - grammarBuilder.append("KW1197 : 'KW' '1197';\n"); - grammarBuilder.append("KW1198 : 'KW' '1198';\n"); - grammarBuilder.append("KW1199 : 'KW' '1199';\n"); - grammarBuilder.append("KW1200 : 'KW' '1200';\n"); - grammarBuilder.append("KW1201 : 'KW' '1201';\n"); - grammarBuilder.append("KW1202 : 'KW' '1202';\n"); - grammarBuilder.append("KW1203 : 'KW' '1203';\n"); - grammarBuilder.append("KW1204 : 'KW' '1204';\n"); - grammarBuilder.append("KW1205 : 'KW' '1205';\n"); - grammarBuilder.append("KW1206 : 'KW' '1206';\n"); - grammarBuilder.append("KW1207 : 'KW' '1207';\n"); - grammarBuilder.append("KW1208 : 'KW' '1208';\n"); - grammarBuilder.append("KW1209 : 'KW' '1209';\n"); - grammarBuilder.append("KW1210 : 'KW' '1210';\n"); - grammarBuilder.append("KW1211 : 'KW' '1211';\n"); - grammarBuilder.append("KW1212 : 'KW' '1212';\n"); - grammarBuilder.append("KW1213 : 'KW' '1213';\n"); - grammarBuilder.append("KW1214 : 'KW' '1214';\n"); - grammarBuilder.append("KW1215 : 'KW' '1215';\n"); - grammarBuilder.append("KW1216 : 'KW' '1216';\n"); - grammarBuilder.append("KW1217 : 'KW' '1217';\n"); - grammarBuilder.append("KW1218 : 'KW' '1218';\n"); - grammarBuilder.append("KW1219 : 'KW' '1219';\n"); - grammarBuilder.append("KW1220 : 'KW' '1220';\n"); - grammarBuilder.append("KW1221 : 'KW' '1221';\n"); - grammarBuilder.append("KW1222 : 'KW' '1222';\n"); - grammarBuilder.append("KW1223 : 'KW' '1223';\n"); - grammarBuilder.append("KW1224 : 'KW' '1224';\n"); - grammarBuilder.append("KW1225 : 'KW' '1225';\n"); - grammarBuilder.append("KW1226 : 'KW' '1226';\n"); - grammarBuilder.append("KW1227 : 'KW' '1227';\n"); - grammarBuilder.append("KW1228 : 'KW' '1228';\n"); - grammarBuilder.append("KW1229 : 'KW' '1229';\n"); - grammarBuilder.append("KW1230 : 'KW' '1230';\n"); - grammarBuilder.append("KW1231 : 'KW' '1231';\n"); - grammarBuilder.append("KW1232 : 'KW' '1232';\n"); - grammarBuilder.append("KW1233 : 'KW' '1233';\n"); - grammarBuilder.append("KW1234 : 'KW' '1234';\n"); - grammarBuilder.append("KW1235 : 'KW' '1235';\n"); - grammarBuilder.append("KW1236 : 'KW' '1236';\n"); - grammarBuilder.append("KW1237 : 'KW' '1237';\n"); - grammarBuilder.append("KW1238 : 'KW' '1238';\n"); - grammarBuilder.append("KW1239 : 'KW' '1239';\n"); - grammarBuilder.append("KW1240 : 'KW' '1240';\n"); - grammarBuilder.append("KW1241 : 'KW' '1241';\n"); - grammarBuilder.append("KW1242 : 'KW' '1242';\n"); - grammarBuilder.append("KW1243 : 'KW' '1243';\n"); - grammarBuilder.append("KW1244 : 'KW' '1244';\n"); - grammarBuilder.append("KW1245 : 'KW' '1245';\n"); - grammarBuilder.append("KW1246 : 'KW' '1246';\n"); - grammarBuilder.append("KW1247 : 'KW' '1247';\n"); - grammarBuilder.append("KW1248 : 'KW' '1248';\n"); - grammarBuilder.append("KW1249 : 'KW' '1249';\n"); - grammarBuilder.append("KW1250 : 'KW' '1250';\n"); - grammarBuilder.append("KW1251 : 'KW' '1251';\n"); - grammarBuilder.append("KW1252 : 'KW' '1252';\n"); - grammarBuilder.append("KW1253 : 'KW' '1253';\n"); - grammarBuilder.append("KW1254 : 'KW' '1254';\n"); - grammarBuilder.append("KW1255 : 'KW' '1255';\n"); - grammarBuilder.append("KW1256 : 'KW' '1256';\n"); - grammarBuilder.append("KW1257 : 'KW' '1257';\n"); - grammarBuilder.append("KW1258 : 'KW' '1258';\n"); - grammarBuilder.append("KW1259 : 'KW' '1259';\n"); - grammarBuilder.append("KW1260 : 'KW' '1260';\n"); - grammarBuilder.append("KW1261 : 'KW' '1261';\n"); - grammarBuilder.append("KW1262 : 'KW' '1262';\n"); - grammarBuilder.append("KW1263 : 'KW' '1263';\n"); - grammarBuilder.append("KW1264 : 'KW' '1264';\n"); - grammarBuilder.append("KW1265 : 'KW' '1265';\n"); - grammarBuilder.append("KW1266 : 'KW' '1266';\n"); - grammarBuilder.append("KW1267 : 'KW' '1267';\n"); - grammarBuilder.append("KW1268 : 'KW' '1268';\n"); - grammarBuilder.append("KW1269 : 'KW' '1269';\n"); - grammarBuilder.append("KW1270 : 'KW' '1270';\n"); - grammarBuilder.append("KW1271 : 'KW' '1271';\n"); - grammarBuilder.append("KW1272 : 'KW' '1272';\n"); - grammarBuilder.append("KW1273 : 'KW' '1273';\n"); - grammarBuilder.append("KW1274 : 'KW' '1274';\n"); - grammarBuilder.append("KW1275 : 'KW' '1275';\n"); - grammarBuilder.append("KW1276 : 'KW' '1276';\n"); - grammarBuilder.append("KW1277 : 'KW' '1277';\n"); - grammarBuilder.append("KW1278 : 'KW' '1278';\n"); - grammarBuilder.append("KW1279 : 'KW' '1279';\n"); - grammarBuilder.append("KW1280 : 'KW' '1280';\n"); - grammarBuilder.append("KW1281 : 'KW' '1281';\n"); - grammarBuilder.append("KW1282 : 'KW' '1282';\n"); - grammarBuilder.append("KW1283 : 'KW' '1283';\n"); - grammarBuilder.append("KW1284 : 'KW' '1284';\n"); - grammarBuilder.append("KW1285 : 'KW' '1285';\n"); - grammarBuilder.append("KW1286 : 'KW' '1286';\n"); - grammarBuilder.append("KW1287 : 'KW' '1287';\n"); - grammarBuilder.append("KW1288 : 'KW' '1288';\n"); - grammarBuilder.append("KW1289 : 'KW' '1289';\n"); - grammarBuilder.append("KW1290 : 'KW' '1290';\n"); - grammarBuilder.append("KW1291 : 'KW' '1291';\n"); - grammarBuilder.append("KW1292 : 'KW' '1292';\n"); - grammarBuilder.append("KW1293 : 'KW' '1293';\n"); - grammarBuilder.append("KW1294 : 'KW' '1294';\n"); - grammarBuilder.append("KW1295 : 'KW' '1295';\n"); - grammarBuilder.append("KW1296 : 'KW' '1296';\n"); - grammarBuilder.append("KW1297 : 'KW' '1297';\n"); - grammarBuilder.append("KW1298 : 'KW' '1298';\n"); - grammarBuilder.append("KW1299 : 'KW' '1299';\n"); - grammarBuilder.append("KW1300 : 'KW' '1300';\n"); - grammarBuilder.append("KW1301 : 'KW' '1301';\n"); - grammarBuilder.append("KW1302 : 'KW' '1302';\n"); - grammarBuilder.append("KW1303 : 'KW' '1303';\n"); - grammarBuilder.append("KW1304 : 'KW' '1304';\n"); - grammarBuilder.append("KW1305 : 'KW' '1305';\n"); - grammarBuilder.append("KW1306 : 'KW' '1306';\n"); - grammarBuilder.append("KW1307 : 'KW' '1307';\n"); - grammarBuilder.append("KW1308 : 'KW' '1308';\n"); - grammarBuilder.append("KW1309 : 'KW' '1309';\n"); - grammarBuilder.append("KW1310 : 'KW' '1310';\n"); - grammarBuilder.append("KW1311 : 'KW' '1311';\n"); - grammarBuilder.append("KW1312 : 'KW' '1312';\n"); - grammarBuilder.append("KW1313 : 'KW' '1313';\n"); - grammarBuilder.append("KW1314 : 'KW' '1314';\n"); - grammarBuilder.append("KW1315 : 'KW' '1315';\n"); - grammarBuilder.append("KW1316 : 'KW' '1316';\n"); - grammarBuilder.append("KW1317 : 'KW' '1317';\n"); - grammarBuilder.append("KW1318 : 'KW' '1318';\n"); - grammarBuilder.append("KW1319 : 'KW' '1319';\n"); - grammarBuilder.append("KW1320 : 'KW' '1320';\n"); - grammarBuilder.append("KW1321 : 'KW' '1321';\n"); - grammarBuilder.append("KW1322 : 'KW' '1322';\n"); - grammarBuilder.append("KW1323 : 'KW' '1323';\n"); - grammarBuilder.append("KW1324 : 'KW' '1324';\n"); - grammarBuilder.append("KW1325 : 'KW' '1325';\n"); - grammarBuilder.append("KW1326 : 'KW' '1326';\n"); - grammarBuilder.append("KW1327 : 'KW' '1327';\n"); - grammarBuilder.append("KW1328 : 'KW' '1328';\n"); - grammarBuilder.append("KW1329 : 'KW' '1329';\n"); - grammarBuilder.append("KW1330 : 'KW' '1330';\n"); - grammarBuilder.append("KW1331 : 'KW' '1331';\n"); - grammarBuilder.append("KW1332 : 'KW' '1332';\n"); - grammarBuilder.append("KW1333 : 'KW' '1333';\n"); - grammarBuilder.append("KW1334 : 'KW' '1334';\n"); - grammarBuilder.append("KW1335 : 'KW' '1335';\n"); - grammarBuilder.append("KW1336 : 'KW' '1336';\n"); - grammarBuilder.append("KW1337 : 'KW' '1337';\n"); - grammarBuilder.append("KW1338 : 'KW' '1338';\n"); - grammarBuilder.append("KW1339 : 'KW' '1339';\n"); - grammarBuilder.append("KW1340 : 'KW' '1340';\n"); - grammarBuilder.append("KW1341 : 'KW' '1341';\n"); - grammarBuilder.append("KW1342 : 'KW' '1342';\n"); - grammarBuilder.append("KW1343 : 'KW' '1343';\n"); - grammarBuilder.append("KW1344 : 'KW' '1344';\n"); - grammarBuilder.append("KW1345 : 'KW' '1345';\n"); - grammarBuilder.append("KW1346 : 'KW' '1346';\n"); - grammarBuilder.append("KW1347 : 'KW' '1347';\n"); - grammarBuilder.append("KW1348 : 'KW' '1348';\n"); - grammarBuilder.append("KW1349 : 'KW' '1349';\n"); - grammarBuilder.append("KW1350 : 'KW' '1350';\n"); - grammarBuilder.append("KW1351 : 'KW' '1351';\n"); - grammarBuilder.append("KW1352 : 'KW' '1352';\n"); - grammarBuilder.append("KW1353 : 'KW' '1353';\n"); - grammarBuilder.append("KW1354 : 'KW' '1354';\n"); - grammarBuilder.append("KW1355 : 'KW' '1355';\n"); - grammarBuilder.append("KW1356 : 'KW' '1356';\n"); - grammarBuilder.append("KW1357 : 'KW' '1357';\n"); - grammarBuilder.append("KW1358 : 'KW' '1358';\n"); - grammarBuilder.append("KW1359 : 'KW' '1359';\n"); - grammarBuilder.append("KW1360 : 'KW' '1360';\n"); - grammarBuilder.append("KW1361 : 'KW' '1361';\n"); - grammarBuilder.append("KW1362 : 'KW' '1362';\n"); - grammarBuilder.append("KW1363 : 'KW' '1363';\n"); - grammarBuilder.append("KW1364 : 'KW' '1364';\n"); - grammarBuilder.append("KW1365 : 'KW' '1365';\n"); - grammarBuilder.append("KW1366 : 'KW' '1366';\n"); - grammarBuilder.append("KW1367 : 'KW' '1367';\n"); - grammarBuilder.append("KW1368 : 'KW' '1368';\n"); - grammarBuilder.append("KW1369 : 'KW' '1369';\n"); - grammarBuilder.append("KW1370 : 'KW' '1370';\n"); - grammarBuilder.append("KW1371 : 'KW' '1371';\n"); - grammarBuilder.append("KW1372 : 'KW' '1372';\n"); - grammarBuilder.append("KW1373 : 'KW' '1373';\n"); - grammarBuilder.append("KW1374 : 'KW' '1374';\n"); - grammarBuilder.append("KW1375 : 'KW' '1375';\n"); - grammarBuilder.append("KW1376 : 'KW' '1376';\n"); - grammarBuilder.append("KW1377 : 'KW' '1377';\n"); - grammarBuilder.append("KW1378 : 'KW' '1378';\n"); - grammarBuilder.append("KW1379 : 'KW' '1379';\n"); - grammarBuilder.append("KW1380 : 'KW' '1380';\n"); - grammarBuilder.append("KW1381 : 'KW' '1381';\n"); - grammarBuilder.append("KW1382 : 'KW' '1382';\n"); - grammarBuilder.append("KW1383 : 'KW' '1383';\n"); - grammarBuilder.append("KW1384 : 'KW' '1384';\n"); - grammarBuilder.append("KW1385 : 'KW' '1385';\n"); - grammarBuilder.append("KW1386 : 'KW' '1386';\n"); - grammarBuilder.append("KW1387 : 'KW' '1387';\n"); - grammarBuilder.append("KW1388 : 'KW' '1388';\n"); - grammarBuilder.append("KW1389 : 'KW' '1389';\n"); - grammarBuilder.append("KW1390 : 'KW' '1390';\n"); - grammarBuilder.append("KW1391 : 'KW' '1391';\n"); - grammarBuilder.append("KW1392 : 'KW' '1392';\n"); - grammarBuilder.append("KW1393 : 'KW' '1393';\n"); - grammarBuilder.append("KW1394 : 'KW' '1394';\n"); - grammarBuilder.append("KW1395 : 'KW' '1395';\n"); - grammarBuilder.append("KW1396 : 'KW' '1396';\n"); - grammarBuilder.append("KW1397 : 'KW' '1397';\n"); - grammarBuilder.append("KW1398 : 'KW' '1398';\n"); - grammarBuilder.append("KW1399 : 'KW' '1399';\n"); - grammarBuilder.append("KW1400 : 'KW' '1400';\n"); - grammarBuilder.append("KW1401 : 'KW' '1401';\n"); - grammarBuilder.append("KW1402 : 'KW' '1402';\n"); - grammarBuilder.append("KW1403 : 'KW' '1403';\n"); - grammarBuilder.append("KW1404 : 'KW' '1404';\n"); - grammarBuilder.append("KW1405 : 'KW' '1405';\n"); - grammarBuilder.append("KW1406 : 'KW' '1406';\n"); - grammarBuilder.append("KW1407 : 'KW' '1407';\n"); - grammarBuilder.append("KW1408 : 'KW' '1408';\n"); - grammarBuilder.append("KW1409 : 'KW' '1409';\n"); - grammarBuilder.append("KW1410 : 'KW' '1410';\n"); - grammarBuilder.append("KW1411 : 'KW' '1411';\n"); - grammarBuilder.append("KW1412 : 'KW' '1412';\n"); - grammarBuilder.append("KW1413 : 'KW' '1413';\n"); - grammarBuilder.append("KW1414 : 'KW' '1414';\n"); - grammarBuilder.append("KW1415 : 'KW' '1415';\n"); - grammarBuilder.append("KW1416 : 'KW' '1416';\n"); - grammarBuilder.append("KW1417 : 'KW' '1417';\n"); - grammarBuilder.append("KW1418 : 'KW' '1418';\n"); - grammarBuilder.append("KW1419 : 'KW' '1419';\n"); - grammarBuilder.append("KW1420 : 'KW' '1420';\n"); - grammarBuilder.append("KW1421 : 'KW' '1421';\n"); - grammarBuilder.append("KW1422 : 'KW' '1422';\n"); - grammarBuilder.append("KW1423 : 'KW' '1423';\n"); - grammarBuilder.append("KW1424 : 'KW' '1424';\n"); - grammarBuilder.append("KW1425 : 'KW' '1425';\n"); - grammarBuilder.append("KW1426 : 'KW' '1426';\n"); - grammarBuilder.append("KW1427 : 'KW' '1427';\n"); - grammarBuilder.append("KW1428 : 'KW' '1428';\n"); - grammarBuilder.append("KW1429 : 'KW' '1429';\n"); - grammarBuilder.append("KW1430 : 'KW' '1430';\n"); - grammarBuilder.append("KW1431 : 'KW' '1431';\n"); - grammarBuilder.append("KW1432 : 'KW' '1432';\n"); - grammarBuilder.append("KW1433 : 'KW' '1433';\n"); - grammarBuilder.append("KW1434 : 'KW' '1434';\n"); - grammarBuilder.append("KW1435 : 'KW' '1435';\n"); - grammarBuilder.append("KW1436 : 'KW' '1436';\n"); - grammarBuilder.append("KW1437 : 'KW' '1437';\n"); - grammarBuilder.append("KW1438 : 'KW' '1438';\n"); - grammarBuilder.append("KW1439 : 'KW' '1439';\n"); - grammarBuilder.append("KW1440 : 'KW' '1440';\n"); - grammarBuilder.append("KW1441 : 'KW' '1441';\n"); - grammarBuilder.append("KW1442 : 'KW' '1442';\n"); - grammarBuilder.append("KW1443 : 'KW' '1443';\n"); - grammarBuilder.append("KW1444 : 'KW' '1444';\n"); - grammarBuilder.append("KW1445 : 'KW' '1445';\n"); - grammarBuilder.append("KW1446 : 'KW' '1446';\n"); - grammarBuilder.append("KW1447 : 'KW' '1447';\n"); - grammarBuilder.append("KW1448 : 'KW' '1448';\n"); - grammarBuilder.append("KW1449 : 'KW' '1449';\n"); - grammarBuilder.append("KW1450 : 'KW' '1450';\n"); - grammarBuilder.append("KW1451 : 'KW' '1451';\n"); - grammarBuilder.append("KW1452 : 'KW' '1452';\n"); - grammarBuilder.append("KW1453 : 'KW' '1453';\n"); - grammarBuilder.append("KW1454 : 'KW' '1454';\n"); - grammarBuilder.append("KW1455 : 'KW' '1455';\n"); - grammarBuilder.append("KW1456 : 'KW' '1456';\n"); - grammarBuilder.append("KW1457 : 'KW' '1457';\n"); - grammarBuilder.append("KW1458 : 'KW' '1458';\n"); - grammarBuilder.append("KW1459 : 'KW' '1459';\n"); - grammarBuilder.append("KW1460 : 'KW' '1460';\n"); - grammarBuilder.append("KW1461 : 'KW' '1461';\n"); - grammarBuilder.append("KW1462 : 'KW' '1462';\n"); - grammarBuilder.append("KW1463 : 'KW' '1463';\n"); - grammarBuilder.append("KW1464 : 'KW' '1464';\n"); - grammarBuilder.append("KW1465 : 'KW' '1465';\n"); - grammarBuilder.append("KW1466 : 'KW' '1466';\n"); - grammarBuilder.append("KW1467 : 'KW' '1467';\n"); - grammarBuilder.append("KW1468 : 'KW' '1468';\n"); - grammarBuilder.append("KW1469 : 'KW' '1469';\n"); - grammarBuilder.append("KW1470 : 'KW' '1470';\n"); - grammarBuilder.append("KW1471 : 'KW' '1471';\n"); - grammarBuilder.append("KW1472 : 'KW' '1472';\n"); - grammarBuilder.append("KW1473 : 'KW' '1473';\n"); - grammarBuilder.append("KW1474 : 'KW' '1474';\n"); - grammarBuilder.append("KW1475 : 'KW' '1475';\n"); - grammarBuilder.append("KW1476 : 'KW' '1476';\n"); - grammarBuilder.append("KW1477 : 'KW' '1477';\n"); - grammarBuilder.append("KW1478 : 'KW' '1478';\n"); - grammarBuilder.append("KW1479 : 'KW' '1479';\n"); - grammarBuilder.append("KW1480 : 'KW' '1480';\n"); - grammarBuilder.append("KW1481 : 'KW' '1481';\n"); - grammarBuilder.append("KW1482 : 'KW' '1482';\n"); - grammarBuilder.append("KW1483 : 'KW' '1483';\n"); - grammarBuilder.append("KW1484 : 'KW' '1484';\n"); - grammarBuilder.append("KW1485 : 'KW' '1485';\n"); - grammarBuilder.append("KW1486 : 'KW' '1486';\n"); - grammarBuilder.append("KW1487 : 'KW' '1487';\n"); - grammarBuilder.append("KW1488 : 'KW' '1488';\n"); - grammarBuilder.append("KW1489 : 'KW' '1489';\n"); - grammarBuilder.append("KW1490 : 'KW' '1490';\n"); - grammarBuilder.append("KW1491 : 'KW' '1491';\n"); - grammarBuilder.append("KW1492 : 'KW' '1492';\n"); - grammarBuilder.append("KW1493 : 'KW' '1493';\n"); - grammarBuilder.append("KW1494 : 'KW' '1494';\n"); - grammarBuilder.append("KW1495 : 'KW' '1495';\n"); - grammarBuilder.append("KW1496 : 'KW' '1496';\n"); - grammarBuilder.append("KW1497 : 'KW' '1497';\n"); - grammarBuilder.append("KW1498 : 'KW' '1498';\n"); - grammarBuilder.append("KW1499 : 'KW' '1499';\n"); - grammarBuilder.append("KW1500 : 'KW' '1500';\n"); - grammarBuilder.append("KW1501 : 'KW' '1501';\n"); - grammarBuilder.append("KW1502 : 'KW' '1502';\n"); - grammarBuilder.append("KW1503 : 'KW' '1503';\n"); - grammarBuilder.append("KW1504 : 'KW' '1504';\n"); - grammarBuilder.append("KW1505 : 'KW' '1505';\n"); - grammarBuilder.append("KW1506 : 'KW' '1506';\n"); - grammarBuilder.append("KW1507 : 'KW' '1507';\n"); - grammarBuilder.append("KW1508 : 'KW' '1508';\n"); - grammarBuilder.append("KW1509 : 'KW' '1509';\n"); - grammarBuilder.append("KW1510 : 'KW' '1510';\n"); - grammarBuilder.append("KW1511 : 'KW' '1511';\n"); - grammarBuilder.append("KW1512 : 'KW' '1512';\n"); - grammarBuilder.append("KW1513 : 'KW' '1513';\n"); - grammarBuilder.append("KW1514 : 'KW' '1514';\n"); - grammarBuilder.append("KW1515 : 'KW' '1515';\n"); - grammarBuilder.append("KW1516 : 'KW' '1516';\n"); - grammarBuilder.append("KW1517 : 'KW' '1517';\n"); - grammarBuilder.append("KW1518 : 'KW' '1518';\n"); - grammarBuilder.append("KW1519 : 'KW' '1519';\n"); - grammarBuilder.append("KW1520 : 'KW' '1520';\n"); - grammarBuilder.append("KW1521 : 'KW' '1521';\n"); - grammarBuilder.append("KW1522 : 'KW' '1522';\n"); - grammarBuilder.append("KW1523 : 'KW' '1523';\n"); - grammarBuilder.append("KW1524 : 'KW' '1524';\n"); - grammarBuilder.append("KW1525 : 'KW' '1525';\n"); - grammarBuilder.append("KW1526 : 'KW' '1526';\n"); - grammarBuilder.append("KW1527 : 'KW' '1527';\n"); - grammarBuilder.append("KW1528 : 'KW' '1528';\n"); - grammarBuilder.append("KW1529 : 'KW' '1529';\n"); - grammarBuilder.append("KW1530 : 'KW' '1530';\n"); - grammarBuilder.append("KW1531 : 'KW' '1531';\n"); - grammarBuilder.append("KW1532 : 'KW' '1532';\n"); - grammarBuilder.append("KW1533 : 'KW' '1533';\n"); - grammarBuilder.append("KW1534 : 'KW' '1534';\n"); - grammarBuilder.append("KW1535 : 'KW' '1535';\n"); - grammarBuilder.append("KW1536 : 'KW' '1536';\n"); - grammarBuilder.append("KW1537 : 'KW' '1537';\n"); - grammarBuilder.append("KW1538 : 'KW' '1538';\n"); - grammarBuilder.append("KW1539 : 'KW' '1539';\n"); - grammarBuilder.append("KW1540 : 'KW' '1540';\n"); - grammarBuilder.append("KW1541 : 'KW' '1541';\n"); - grammarBuilder.append("KW1542 : 'KW' '1542';\n"); - grammarBuilder.append("KW1543 : 'KW' '1543';\n"); - grammarBuilder.append("KW1544 : 'KW' '1544';\n"); - grammarBuilder.append("KW1545 : 'KW' '1545';\n"); - grammarBuilder.append("KW1546 : 'KW' '1546';\n"); - grammarBuilder.append("KW1547 : 'KW' '1547';\n"); - grammarBuilder.append("KW1548 : 'KW' '1548';\n"); - grammarBuilder.append("KW1549 : 'KW' '1549';\n"); - grammarBuilder.append("KW1550 : 'KW' '1550';\n"); - grammarBuilder.append("KW1551 : 'KW' '1551';\n"); - grammarBuilder.append("KW1552 : 'KW' '1552';\n"); - grammarBuilder.append("KW1553 : 'KW' '1553';\n"); - grammarBuilder.append("KW1554 : 'KW' '1554';\n"); - grammarBuilder.append("KW1555 : 'KW' '1555';\n"); - grammarBuilder.append("KW1556 : 'KW' '1556';\n"); - grammarBuilder.append("KW1557 : 'KW' '1557';\n"); - grammarBuilder.append("KW1558 : 'KW' '1558';\n"); - grammarBuilder.append("KW1559 : 'KW' '1559';\n"); - grammarBuilder.append("KW1560 : 'KW' '1560';\n"); - grammarBuilder.append("KW1561 : 'KW' '1561';\n"); - grammarBuilder.append("KW1562 : 'KW' '1562';\n"); - grammarBuilder.append("KW1563 : 'KW' '1563';\n"); - grammarBuilder.append("KW1564 : 'KW' '1564';\n"); - grammarBuilder.append("KW1565 : 'KW' '1565';\n"); - grammarBuilder.append("KW1566 : 'KW' '1566';\n"); - grammarBuilder.append("KW1567 : 'KW' '1567';\n"); - grammarBuilder.append("KW1568 : 'KW' '1568';\n"); - grammarBuilder.append("KW1569 : 'KW' '1569';\n"); - grammarBuilder.append("KW1570 : 'KW' '1570';\n"); - grammarBuilder.append("KW1571 : 'KW' '1571';\n"); - grammarBuilder.append("KW1572 : 'KW' '1572';\n"); - grammarBuilder.append("KW1573 : 'KW' '1573';\n"); - grammarBuilder.append("KW1574 : 'KW' '1574';\n"); - grammarBuilder.append("KW1575 : 'KW' '1575';\n"); - grammarBuilder.append("KW1576 : 'KW' '1576';\n"); - grammarBuilder.append("KW1577 : 'KW' '1577';\n"); - grammarBuilder.append("KW1578 : 'KW' '1578';\n"); - grammarBuilder.append("KW1579 : 'KW' '1579';\n"); - grammarBuilder.append("KW1580 : 'KW' '1580';\n"); - grammarBuilder.append("KW1581 : 'KW' '1581';\n"); - grammarBuilder.append("KW1582 : 'KW' '1582';\n"); - grammarBuilder.append("KW1583 : 'KW' '1583';\n"); - grammarBuilder.append("KW1584 : 'KW' '1584';\n"); - grammarBuilder.append("KW1585 : 'KW' '1585';\n"); - grammarBuilder.append("KW1586 : 'KW' '1586';\n"); - grammarBuilder.append("KW1587 : 'KW' '1587';\n"); - grammarBuilder.append("KW1588 : 'KW' '1588';\n"); - grammarBuilder.append("KW1589 : 'KW' '1589';\n"); - grammarBuilder.append("KW1590 : 'KW' '1590';\n"); - grammarBuilder.append("KW1591 : 'KW' '1591';\n"); - grammarBuilder.append("KW1592 : 'KW' '1592';\n"); - grammarBuilder.append("KW1593 : 'KW' '1593';\n"); - grammarBuilder.append("KW1594 : 'KW' '1594';\n"); - grammarBuilder.append("KW1595 : 'KW' '1595';\n"); - grammarBuilder.append("KW1596 : 'KW' '1596';\n"); - grammarBuilder.append("KW1597 : 'KW' '1597';\n"); - grammarBuilder.append("KW1598 : 'KW' '1598';\n"); - grammarBuilder.append("KW1599 : 'KW' '1599';\n"); - grammarBuilder.append("KW1600 : 'KW' '1600';\n"); - grammarBuilder.append("KW1601 : 'KW' '1601';\n"); - grammarBuilder.append("KW1602 : 'KW' '1602';\n"); - grammarBuilder.append("KW1603 : 'KW' '1603';\n"); - grammarBuilder.append("KW1604 : 'KW' '1604';\n"); - grammarBuilder.append("KW1605 : 'KW' '1605';\n"); - grammarBuilder.append("KW1606 : 'KW' '1606';\n"); - grammarBuilder.append("KW1607 : 'KW' '1607';\n"); - grammarBuilder.append("KW1608 : 'KW' '1608';\n"); - grammarBuilder.append("KW1609 : 'KW' '1609';\n"); - grammarBuilder.append("KW1610 : 'KW' '1610';\n"); - grammarBuilder.append("KW1611 : 'KW' '1611';\n"); - grammarBuilder.append("KW1612 : 'KW' '1612';\n"); - grammarBuilder.append("KW1613 : 'KW' '1613';\n"); - grammarBuilder.append("KW1614 : 'KW' '1614';\n"); - grammarBuilder.append("KW1615 : 'KW' '1615';\n"); - grammarBuilder.append("KW1616 : 'KW' '1616';\n"); - grammarBuilder.append("KW1617 : 'KW' '1617';\n"); - grammarBuilder.append("KW1618 : 'KW' '1618';\n"); - grammarBuilder.append("KW1619 : 'KW' '1619';\n"); - grammarBuilder.append("KW1620 : 'KW' '1620';\n"); - grammarBuilder.append("KW1621 : 'KW' '1621';\n"); - grammarBuilder.append("KW1622 : 'KW' '1622';\n"); - grammarBuilder.append("KW1623 : 'KW' '1623';\n"); - grammarBuilder.append("KW1624 : 'KW' '1624';\n"); - grammarBuilder.append("KW1625 : 'KW' '1625';\n"); - grammarBuilder.append("KW1626 : 'KW' '1626';\n"); - grammarBuilder.append("KW1627 : 'KW' '1627';\n"); - grammarBuilder.append("KW1628 : 'KW' '1628';\n"); - grammarBuilder.append("KW1629 : 'KW' '1629';\n"); - grammarBuilder.append("KW1630 : 'KW' '1630';\n"); - grammarBuilder.append("KW1631 : 'KW' '1631';\n"); - grammarBuilder.append("KW1632 : 'KW' '1632';\n"); - grammarBuilder.append("KW1633 : 'KW' '1633';\n"); - grammarBuilder.append("KW1634 : 'KW' '1634';\n"); - grammarBuilder.append("KW1635 : 'KW' '1635';\n"); - grammarBuilder.append("KW1636 : 'KW' '1636';\n"); - grammarBuilder.append("KW1637 : 'KW' '1637';\n"); - grammarBuilder.append("KW1638 : 'KW' '1638';\n"); - grammarBuilder.append("KW1639 : 'KW' '1639';\n"); - grammarBuilder.append("KW1640 : 'KW' '1640';\n"); - grammarBuilder.append("KW1641 : 'KW' '1641';\n"); - grammarBuilder.append("KW1642 : 'KW' '1642';\n"); - grammarBuilder.append("KW1643 : 'KW' '1643';\n"); - grammarBuilder.append("KW1644 : 'KW' '1644';\n"); - grammarBuilder.append("KW1645 : 'KW' '1645';\n"); - grammarBuilder.append("KW1646 : 'KW' '1646';\n"); - grammarBuilder.append("KW1647 : 'KW' '1647';\n"); - grammarBuilder.append("KW1648 : 'KW' '1648';\n"); - grammarBuilder.append("KW1649 : 'KW' '1649';\n"); - grammarBuilder.append("KW1650 : 'KW' '1650';\n"); - grammarBuilder.append("KW1651 : 'KW' '1651';\n"); - grammarBuilder.append("KW1652 : 'KW' '1652';\n"); - grammarBuilder.append("KW1653 : 'KW' '1653';\n"); - grammarBuilder.append("KW1654 : 'KW' '1654';\n"); - grammarBuilder.append("KW1655 : 'KW' '1655';\n"); - grammarBuilder.append("KW1656 : 'KW' '1656';\n"); - grammarBuilder.append("KW1657 : 'KW' '1657';\n"); - grammarBuilder.append("KW1658 : 'KW' '1658';\n"); - grammarBuilder.append("KW1659 : 'KW' '1659';\n"); - grammarBuilder.append("KW1660 : 'KW' '1660';\n"); - grammarBuilder.append("KW1661 : 'KW' '1661';\n"); - grammarBuilder.append("KW1662 : 'KW' '1662';\n"); - grammarBuilder.append("KW1663 : 'KW' '1663';\n"); - grammarBuilder.append("KW1664 : 'KW' '1664';\n"); - grammarBuilder.append("KW1665 : 'KW' '1665';\n"); - grammarBuilder.append("KW1666 : 'KW' '1666';\n"); - grammarBuilder.append("KW1667 : 'KW' '1667';\n"); - grammarBuilder.append("KW1668 : 'KW' '1668';\n"); - grammarBuilder.append("KW1669 : 'KW' '1669';\n"); - grammarBuilder.append("KW1670 : 'KW' '1670';\n"); - grammarBuilder.append("KW1671 : 'KW' '1671';\n"); - grammarBuilder.append("KW1672 : 'KW' '1672';\n"); - grammarBuilder.append("KW1673 : 'KW' '1673';\n"); - grammarBuilder.append("KW1674 : 'KW' '1674';\n"); - grammarBuilder.append("KW1675 : 'KW' '1675';\n"); - grammarBuilder.append("KW1676 : 'KW' '1676';\n"); - grammarBuilder.append("KW1677 : 'KW' '1677';\n"); - grammarBuilder.append("KW1678 : 'KW' '1678';\n"); - grammarBuilder.append("KW1679 : 'KW' '1679';\n"); - grammarBuilder.append("KW1680 : 'KW' '1680';\n"); - grammarBuilder.append("KW1681 : 'KW' '1681';\n"); - grammarBuilder.append("KW1682 : 'KW' '1682';\n"); - grammarBuilder.append("KW1683 : 'KW' '1683';\n"); - grammarBuilder.append("KW1684 : 'KW' '1684';\n"); - grammarBuilder.append("KW1685 : 'KW' '1685';\n"); - grammarBuilder.append("KW1686 : 'KW' '1686';\n"); - grammarBuilder.append("KW1687 : 'KW' '1687';\n"); - grammarBuilder.append("KW1688 : 'KW' '1688';\n"); - grammarBuilder.append("KW1689 : 'KW' '1689';\n"); - grammarBuilder.append("KW1690 : 'KW' '1690';\n"); - grammarBuilder.append("KW1691 : 'KW' '1691';\n"); - grammarBuilder.append("KW1692 : 'KW' '1692';\n"); - grammarBuilder.append("KW1693 : 'KW' '1693';\n"); - grammarBuilder.append("KW1694 : 'KW' '1694';\n"); - grammarBuilder.append("KW1695 : 'KW' '1695';\n"); - grammarBuilder.append("KW1696 : 'KW' '1696';\n"); - grammarBuilder.append("KW1697 : 'KW' '1697';\n"); - grammarBuilder.append("KW1698 : 'KW' '1698';\n"); - grammarBuilder.append("KW1699 : 'KW' '1699';\n"); - grammarBuilder.append("KW1700 : 'KW' '1700';\n"); - grammarBuilder.append("KW1701 : 'KW' '1701';\n"); - grammarBuilder.append("KW1702 : 'KW' '1702';\n"); - grammarBuilder.append("KW1703 : 'KW' '1703';\n"); - grammarBuilder.append("KW1704 : 'KW' '1704';\n"); - grammarBuilder.append("KW1705 : 'KW' '1705';\n"); - grammarBuilder.append("KW1706 : 'KW' '1706';\n"); - grammarBuilder.append("KW1707 : 'KW' '1707';\n"); - grammarBuilder.append("KW1708 : 'KW' '1708';\n"); - grammarBuilder.append("KW1709 : 'KW' '1709';\n"); - grammarBuilder.append("KW1710 : 'KW' '1710';\n"); - grammarBuilder.append("KW1711 : 'KW' '1711';\n"); - grammarBuilder.append("KW1712 : 'KW' '1712';\n"); - grammarBuilder.append("KW1713 : 'KW' '1713';\n"); - grammarBuilder.append("KW1714 : 'KW' '1714';\n"); - grammarBuilder.append("KW1715 : 'KW' '1715';\n"); - grammarBuilder.append("KW1716 : 'KW' '1716';\n"); - grammarBuilder.append("KW1717 : 'KW' '1717';\n"); - grammarBuilder.append("KW1718 : 'KW' '1718';\n"); - grammarBuilder.append("KW1719 : 'KW' '1719';\n"); - grammarBuilder.append("KW1720 : 'KW' '1720';\n"); - grammarBuilder.append("KW1721 : 'KW' '1721';\n"); - grammarBuilder.append("KW1722 : 'KW' '1722';\n"); - grammarBuilder.append("KW1723 : 'KW' '1723';\n"); - grammarBuilder.append("KW1724 : 'KW' '1724';\n"); - grammarBuilder.append("KW1725 : 'KW' '1725';\n"); - grammarBuilder.append("KW1726 : 'KW' '1726';\n"); - grammarBuilder.append("KW1727 : 'KW' '1727';\n"); - grammarBuilder.append("KW1728 : 'KW' '1728';\n"); - grammarBuilder.append("KW1729 : 'KW' '1729';\n"); - grammarBuilder.append("KW1730 : 'KW' '1730';\n"); - grammarBuilder.append("KW1731 : 'KW' '1731';\n"); - grammarBuilder.append("KW1732 : 'KW' '1732';\n"); - grammarBuilder.append("KW1733 : 'KW' '1733';\n"); - grammarBuilder.append("KW1734 : 'KW' '1734';\n"); - grammarBuilder.append("KW1735 : 'KW' '1735';\n"); - grammarBuilder.append("KW1736 : 'KW' '1736';\n"); - grammarBuilder.append("KW1737 : 'KW' '1737';\n"); - grammarBuilder.append("KW1738 : 'KW' '1738';\n"); - grammarBuilder.append("KW1739 : 'KW' '1739';\n"); - grammarBuilder.append("KW1740 : 'KW' '1740';\n"); - grammarBuilder.append("KW1741 : 'KW' '1741';\n"); - grammarBuilder.append("KW1742 : 'KW' '1742';\n"); - grammarBuilder.append("KW1743 : 'KW' '1743';\n"); - grammarBuilder.append("KW1744 : 'KW' '1744';\n"); - grammarBuilder.append("KW1745 : 'KW' '1745';\n"); - grammarBuilder.append("KW1746 : 'KW' '1746';\n"); - grammarBuilder.append("KW1747 : 'KW' '1747';\n"); - grammarBuilder.append("KW1748 : 'KW' '1748';\n"); - grammarBuilder.append("KW1749 : 'KW' '1749';\n"); - grammarBuilder.append("KW1750 : 'KW' '1750';\n"); - grammarBuilder.append("KW1751 : 'KW' '1751';\n"); - grammarBuilder.append("KW1752 : 'KW' '1752';\n"); - grammarBuilder.append("KW1753 : 'KW' '1753';\n"); - grammarBuilder.append("KW1754 : 'KW' '1754';\n"); - grammarBuilder.append("KW1755 : 'KW' '1755';\n"); - grammarBuilder.append("KW1756 : 'KW' '1756';\n"); - grammarBuilder.append("KW1757 : 'KW' '1757';\n"); - grammarBuilder.append("KW1758 : 'KW' '1758';\n"); - grammarBuilder.append("KW1759 : 'KW' '1759';\n"); - grammarBuilder.append("KW1760 : 'KW' '1760';\n"); - grammarBuilder.append("KW1761 : 'KW' '1761';\n"); - grammarBuilder.append("KW1762 : 'KW' '1762';\n"); - grammarBuilder.append("KW1763 : 'KW' '1763';\n"); - grammarBuilder.append("KW1764 : 'KW' '1764';\n"); - grammarBuilder.append("KW1765 : 'KW' '1765';\n"); - grammarBuilder.append("KW1766 : 'KW' '1766';\n"); - grammarBuilder.append("KW1767 : 'KW' '1767';\n"); - grammarBuilder.append("KW1768 : 'KW' '1768';\n"); - grammarBuilder.append("KW1769 : 'KW' '1769';\n"); - grammarBuilder.append("KW1770 : 'KW' '1770';\n"); - grammarBuilder.append("KW1771 : 'KW' '1771';\n"); - grammarBuilder.append("KW1772 : 'KW' '1772';\n"); - grammarBuilder.append("KW1773 : 'KW' '1773';\n"); - grammarBuilder.append("KW1774 : 'KW' '1774';\n"); - grammarBuilder.append("KW1775 : 'KW' '1775';\n"); - grammarBuilder.append("KW1776 : 'KW' '1776';\n"); - grammarBuilder.append("KW1777 : 'KW' '1777';\n"); - grammarBuilder.append("KW1778 : 'KW' '1778';\n"); - grammarBuilder.append("KW1779 : 'KW' '1779';\n"); - grammarBuilder.append("KW1780 : 'KW' '1780';\n"); - grammarBuilder.append("KW1781 : 'KW' '1781';\n"); - grammarBuilder.append("KW1782 : 'KW' '1782';\n"); - grammarBuilder.append("KW1783 : 'KW' '1783';\n"); - grammarBuilder.append("KW1784 : 'KW' '1784';\n"); - grammarBuilder.append("KW1785 : 'KW' '1785';\n"); - grammarBuilder.append("KW1786 : 'KW' '1786';\n"); - grammarBuilder.append("KW1787 : 'KW' '1787';\n"); - grammarBuilder.append("KW1788 : 'KW' '1788';\n"); - grammarBuilder.append("KW1789 : 'KW' '1789';\n"); - grammarBuilder.append("KW1790 : 'KW' '1790';\n"); - grammarBuilder.append("KW1791 : 'KW' '1791';\n"); - grammarBuilder.append("KW1792 : 'KW' '1792';\n"); - grammarBuilder.append("KW1793 : 'KW' '1793';\n"); - grammarBuilder.append("KW1794 : 'KW' '1794';\n"); - grammarBuilder.append("KW1795 : 'KW' '1795';\n"); - grammarBuilder.append("KW1796 : 'KW' '1796';\n"); - grammarBuilder.append("KW1797 : 'KW' '1797';\n"); - grammarBuilder.append("KW1798 : 'KW' '1798';\n"); - grammarBuilder.append("KW1799 : 'KW' '1799';\n"); - grammarBuilder.append("KW1800 : 'KW' '1800';\n"); - grammarBuilder.append("KW1801 : 'KW' '1801';\n"); - grammarBuilder.append("KW1802 : 'KW' '1802';\n"); - grammarBuilder.append("KW1803 : 'KW' '1803';\n"); - grammarBuilder.append("KW1804 : 'KW' '1804';\n"); - grammarBuilder.append("KW1805 : 'KW' '1805';\n"); - grammarBuilder.append("KW1806 : 'KW' '1806';\n"); - grammarBuilder.append("KW1807 : 'KW' '1807';\n"); - grammarBuilder.append("KW1808 : 'KW' '1808';\n"); - grammarBuilder.append("KW1809 : 'KW' '1809';\n"); - grammarBuilder.append("KW1810 : 'KW' '1810';\n"); - grammarBuilder.append("KW1811 : 'KW' '1811';\n"); - grammarBuilder.append("KW1812 : 'KW' '1812';\n"); - grammarBuilder.append("KW1813 : 'KW' '1813';\n"); - grammarBuilder.append("KW1814 : 'KW' '1814';\n"); - grammarBuilder.append("KW1815 : 'KW' '1815';\n"); - grammarBuilder.append("KW1816 : 'KW' '1816';\n"); - grammarBuilder.append("KW1817 : 'KW' '1817';\n"); - grammarBuilder.append("KW1818 : 'KW' '1818';\n"); - grammarBuilder.append("KW1819 : 'KW' '1819';\n"); - grammarBuilder.append("KW1820 : 'KW' '1820';\n"); - grammarBuilder.append("KW1821 : 'KW' '1821';\n"); - grammarBuilder.append("KW1822 : 'KW' '1822';\n"); - grammarBuilder.append("KW1823 : 'KW' '1823';\n"); - grammarBuilder.append("KW1824 : 'KW' '1824';\n"); - grammarBuilder.append("KW1825 : 'KW' '1825';\n"); - grammarBuilder.append("KW1826 : 'KW' '1826';\n"); - grammarBuilder.append("KW1827 : 'KW' '1827';\n"); - grammarBuilder.append("KW1828 : 'KW' '1828';\n"); - grammarBuilder.append("KW1829 : 'KW' '1829';\n"); - grammarBuilder.append("KW1830 : 'KW' '1830';\n"); - grammarBuilder.append("KW1831 : 'KW' '1831';\n"); - grammarBuilder.append("KW1832 : 'KW' '1832';\n"); - grammarBuilder.append("KW1833 : 'KW' '1833';\n"); - grammarBuilder.append("KW1834 : 'KW' '1834';\n"); - grammarBuilder.append("KW1835 : 'KW' '1835';\n"); - grammarBuilder.append("KW1836 : 'KW' '1836';\n"); - grammarBuilder.append("KW1837 : 'KW' '1837';\n"); - grammarBuilder.append("KW1838 : 'KW' '1838';\n"); - grammarBuilder.append("KW1839 : 'KW' '1839';\n"); - grammarBuilder.append("KW1840 : 'KW' '1840';\n"); - grammarBuilder.append("KW1841 : 'KW' '1841';\n"); - grammarBuilder.append("KW1842 : 'KW' '1842';\n"); - grammarBuilder.append("KW1843 : 'KW' '1843';\n"); - grammarBuilder.append("KW1844 : 'KW' '1844';\n"); - grammarBuilder.append("KW1845 : 'KW' '1845';\n"); - grammarBuilder.append("KW1846 : 'KW' '1846';\n"); - grammarBuilder.append("KW1847 : 'KW' '1847';\n"); - grammarBuilder.append("KW1848 : 'KW' '1848';\n"); - grammarBuilder.append("KW1849 : 'KW' '1849';\n"); - grammarBuilder.append("KW1850 : 'KW' '1850';\n"); - grammarBuilder.append("KW1851 : 'KW' '1851';\n"); - grammarBuilder.append("KW1852 : 'KW' '1852';\n"); - grammarBuilder.append("KW1853 : 'KW' '1853';\n"); - grammarBuilder.append("KW1854 : 'KW' '1854';\n"); - grammarBuilder.append("KW1855 : 'KW' '1855';\n"); - grammarBuilder.append("KW1856 : 'KW' '1856';\n"); - grammarBuilder.append("KW1857 : 'KW' '1857';\n"); - grammarBuilder.append("KW1858 : 'KW' '1858';\n"); - grammarBuilder.append("KW1859 : 'KW' '1859';\n"); - grammarBuilder.append("KW1860 : 'KW' '1860';\n"); - grammarBuilder.append("KW1861 : 'KW' '1861';\n"); - grammarBuilder.append("KW1862 : 'KW' '1862';\n"); - grammarBuilder.append("KW1863 : 'KW' '1863';\n"); - grammarBuilder.append("KW1864 : 'KW' '1864';\n"); - grammarBuilder.append("KW1865 : 'KW' '1865';\n"); - grammarBuilder.append("KW1866 : 'KW' '1866';\n"); - grammarBuilder.append("KW1867 : 'KW' '1867';\n"); - grammarBuilder.append("KW1868 : 'KW' '1868';\n"); - grammarBuilder.append("KW1869 : 'KW' '1869';\n"); - grammarBuilder.append("KW1870 : 'KW' '1870';\n"); - grammarBuilder.append("KW1871 : 'KW' '1871';\n"); - grammarBuilder.append("KW1872 : 'KW' '1872';\n"); - grammarBuilder.append("KW1873 : 'KW' '1873';\n"); - grammarBuilder.append("KW1874 : 'KW' '1874';\n"); - grammarBuilder.append("KW1875 : 'KW' '1875';\n"); - grammarBuilder.append("KW1876 : 'KW' '1876';\n"); - grammarBuilder.append("KW1877 : 'KW' '1877';\n"); - grammarBuilder.append("KW1878 : 'KW' '1878';\n"); - grammarBuilder.append("KW1879 : 'KW' '1879';\n"); - grammarBuilder.append("KW1880 : 'KW' '1880';\n"); - grammarBuilder.append("KW1881 : 'KW' '1881';\n"); - grammarBuilder.append("KW1882 : 'KW' '1882';\n"); - grammarBuilder.append("KW1883 : 'KW' '1883';\n"); - grammarBuilder.append("KW1884 : 'KW' '1884';\n"); - grammarBuilder.append("KW1885 : 'KW' '1885';\n"); - grammarBuilder.append("KW1886 : 'KW' '1886';\n"); - grammarBuilder.append("KW1887 : 'KW' '1887';\n"); - grammarBuilder.append("KW1888 : 'KW' '1888';\n"); - grammarBuilder.append("KW1889 : 'KW' '1889';\n"); - grammarBuilder.append("KW1890 : 'KW' '1890';\n"); - grammarBuilder.append("KW1891 : 'KW' '1891';\n"); - grammarBuilder.append("KW1892 : 'KW' '1892';\n"); - grammarBuilder.append("KW1893 : 'KW' '1893';\n"); - grammarBuilder.append("KW1894 : 'KW' '1894';\n"); - grammarBuilder.append("KW1895 : 'KW' '1895';\n"); - grammarBuilder.append("KW1896 : 'KW' '1896';\n"); - grammarBuilder.append("KW1897 : 'KW' '1897';\n"); - grammarBuilder.append("KW1898 : 'KW' '1898';\n"); - grammarBuilder.append("KW1899 : 'KW' '1899';\n"); - grammarBuilder.append("KW1900 : 'KW' '1900';\n"); - grammarBuilder.append("KW1901 : 'KW' '1901';\n"); - grammarBuilder.append("KW1902 : 'KW' '1902';\n"); - grammarBuilder.append("KW1903 : 'KW' '1903';\n"); - grammarBuilder.append("KW1904 : 'KW' '1904';\n"); - grammarBuilder.append("KW1905 : 'KW' '1905';\n"); - grammarBuilder.append("KW1906 : 'KW' '1906';\n"); - grammarBuilder.append("KW1907 : 'KW' '1907';\n"); - grammarBuilder.append("KW1908 : 'KW' '1908';\n"); - grammarBuilder.append("KW1909 : 'KW' '1909';\n"); - grammarBuilder.append("KW1910 : 'KW' '1910';\n"); - grammarBuilder.append("KW1911 : 'KW' '1911';\n"); - grammarBuilder.append("KW1912 : 'KW' '1912';\n"); - grammarBuilder.append("KW1913 : 'KW' '1913';\n"); - grammarBuilder.append("KW1914 : 'KW' '1914';\n"); - grammarBuilder.append("KW1915 : 'KW' '1915';\n"); - grammarBuilder.append("KW1916 : 'KW' '1916';\n"); - grammarBuilder.append("KW1917 : 'KW' '1917';\n"); - grammarBuilder.append("KW1918 : 'KW' '1918';\n"); - grammarBuilder.append("KW1919 : 'KW' '1919';\n"); - grammarBuilder.append("KW1920 : 'KW' '1920';\n"); - grammarBuilder.append("KW1921 : 'KW' '1921';\n"); - grammarBuilder.append("KW1922 : 'KW' '1922';\n"); - grammarBuilder.append("KW1923 : 'KW' '1923';\n"); - grammarBuilder.append("KW1924 : 'KW' '1924';\n"); - grammarBuilder.append("KW1925 : 'KW' '1925';\n"); - grammarBuilder.append("KW1926 : 'KW' '1926';\n"); - grammarBuilder.append("KW1927 : 'KW' '1927';\n"); - grammarBuilder.append("KW1928 : 'KW' '1928';\n"); - grammarBuilder.append("KW1929 : 'KW' '1929';\n"); - grammarBuilder.append("KW1930 : 'KW' '1930';\n"); - grammarBuilder.append("KW1931 : 'KW' '1931';\n"); - grammarBuilder.append("KW1932 : 'KW' '1932';\n"); - grammarBuilder.append("KW1933 : 'KW' '1933';\n"); - grammarBuilder.append("KW1934 : 'KW' '1934';\n"); - grammarBuilder.append("KW1935 : 'KW' '1935';\n"); - grammarBuilder.append("KW1936 : 'KW' '1936';\n"); - grammarBuilder.append("KW1937 : 'KW' '1937';\n"); - grammarBuilder.append("KW1938 : 'KW' '1938';\n"); - grammarBuilder.append("KW1939 : 'KW' '1939';\n"); - grammarBuilder.append("KW1940 : 'KW' '1940';\n"); - grammarBuilder.append("KW1941 : 'KW' '1941';\n"); - grammarBuilder.append("KW1942 : 'KW' '1942';\n"); - grammarBuilder.append("KW1943 : 'KW' '1943';\n"); - grammarBuilder.append("KW1944 : 'KW' '1944';\n"); - grammarBuilder.append("KW1945 : 'KW' '1945';\n"); - grammarBuilder.append("KW1946 : 'KW' '1946';\n"); - grammarBuilder.append("KW1947 : 'KW' '1947';\n"); - grammarBuilder.append("KW1948 : 'KW' '1948';\n"); - grammarBuilder.append("KW1949 : 'KW' '1949';\n"); - grammarBuilder.append("KW1950 : 'KW' '1950';\n"); - grammarBuilder.append("KW1951 : 'KW' '1951';\n"); - grammarBuilder.append("KW1952 : 'KW' '1952';\n"); - grammarBuilder.append("KW1953 : 'KW' '1953';\n"); - grammarBuilder.append("KW1954 : 'KW' '1954';\n"); - grammarBuilder.append("KW1955 : 'KW' '1955';\n"); - grammarBuilder.append("KW1956 : 'KW' '1956';\n"); - grammarBuilder.append("KW1957 : 'KW' '1957';\n"); - grammarBuilder.append("KW1958 : 'KW' '1958';\n"); - grammarBuilder.append("KW1959 : 'KW' '1959';\n"); - grammarBuilder.append("KW1960 : 'KW' '1960';\n"); - grammarBuilder.append("KW1961 : 'KW' '1961';\n"); - grammarBuilder.append("KW1962 : 'KW' '1962';\n"); - grammarBuilder.append("KW1963 : 'KW' '1963';\n"); - grammarBuilder.append("KW1964 : 'KW' '1964';\n"); - grammarBuilder.append("KW1965 : 'KW' '1965';\n"); - grammarBuilder.append("KW1966 : 'KW' '1966';\n"); - grammarBuilder.append("KW1967 : 'KW' '1967';\n"); - grammarBuilder.append("KW1968 : 'KW' '1968';\n"); - grammarBuilder.append("KW1969 : 'KW' '1969';\n"); - grammarBuilder.append("KW1970 : 'KW' '1970';\n"); - grammarBuilder.append("KW1971 : 'KW' '1971';\n"); - grammarBuilder.append("KW1972 : 'KW' '1972';\n"); - grammarBuilder.append("KW1973 : 'KW' '1973';\n"); - grammarBuilder.append("KW1974 : 'KW' '1974';\n"); - grammarBuilder.append("KW1975 : 'KW' '1975';\n"); - grammarBuilder.append("KW1976 : 'KW' '1976';\n"); - grammarBuilder.append("KW1977 : 'KW' '1977';\n"); - grammarBuilder.append("KW1978 : 'KW' '1978';\n"); - grammarBuilder.append("KW1979 : 'KW' '1979';\n"); - grammarBuilder.append("KW1980 : 'KW' '1980';\n"); - grammarBuilder.append("KW1981 : 'KW' '1981';\n"); - grammarBuilder.append("KW1982 : 'KW' '1982';\n"); - grammarBuilder.append("KW1983 : 'KW' '1983';\n"); - grammarBuilder.append("KW1984 : 'KW' '1984';\n"); - grammarBuilder.append("KW1985 : 'KW' '1985';\n"); - grammarBuilder.append("KW1986 : 'KW' '1986';\n"); - grammarBuilder.append("KW1987 : 'KW' '1987';\n"); - grammarBuilder.append("KW1988 : 'KW' '1988';\n"); - grammarBuilder.append("KW1989 : 'KW' '1989';\n"); - grammarBuilder.append("KW1990 : 'KW' '1990';\n"); - grammarBuilder.append("KW1991 : 'KW' '1991';\n"); - grammarBuilder.append("KW1992 : 'KW' '1992';\n"); - grammarBuilder.append("KW1993 : 'KW' '1993';\n"); - grammarBuilder.append("KW1994 : 'KW' '1994';\n"); - grammarBuilder.append("KW1995 : 'KW' '1995';\n"); - grammarBuilder.append("KW1996 : 'KW' '1996';\n"); - grammarBuilder.append("KW1997 : 'KW' '1997';\n"); - grammarBuilder.append("KW1998 : 'KW' '1998';\n"); - grammarBuilder.append("KW1999 : 'KW' '1999';\n"); - grammarBuilder.append("KW2000 : 'KW' '2000';\n"); - grammarBuilder.append("KW2001 : 'KW' '2001';\n"); - grammarBuilder.append("KW2002 : 'KW' '2002';\n"); - grammarBuilder.append("KW2003 : 'KW' '2003';\n"); - grammarBuilder.append("KW2004 : 'KW' '2004';\n"); - grammarBuilder.append("KW2005 : 'KW' '2005';\n"); - grammarBuilder.append("KW2006 : 'KW' '2006';\n"); - grammarBuilder.append("KW2007 : 'KW' '2007';\n"); - grammarBuilder.append("KW2008 : 'KW' '2008';\n"); - grammarBuilder.append("KW2009 : 'KW' '2009';\n"); - grammarBuilder.append("KW2010 : 'KW' '2010';\n"); - grammarBuilder.append("KW2011 : 'KW' '2011';\n"); - grammarBuilder.append("KW2012 : 'KW' '2012';\n"); - grammarBuilder.append("KW2013 : 'KW' '2013';\n"); - grammarBuilder.append("KW2014 : 'KW' '2014';\n"); - grammarBuilder.append("KW2015 : 'KW' '2015';\n"); - grammarBuilder.append("KW2016 : 'KW' '2016';\n"); - grammarBuilder.append("KW2017 : 'KW' '2017';\n"); - grammarBuilder.append("KW2018 : 'KW' '2018';\n"); - grammarBuilder.append("KW2019 : 'KW' '2019';\n"); - grammarBuilder.append("KW2020 : 'KW' '2020';\n"); - grammarBuilder.append("KW2021 : 'KW' '2021';\n"); - grammarBuilder.append("KW2022 : 'KW' '2022';\n"); - grammarBuilder.append("KW2023 : 'KW' '2023';\n"); - grammarBuilder.append("KW2024 : 'KW' '2024';\n"); - grammarBuilder.append("KW2025 : 'KW' '2025';\n"); - grammarBuilder.append("KW2026 : 'KW' '2026';\n"); - grammarBuilder.append("KW2027 : 'KW' '2027';\n"); - grammarBuilder.append("KW2028 : 'KW' '2028';\n"); - grammarBuilder.append("KW2029 : 'KW' '2029';\n"); - grammarBuilder.append("KW2030 : 'KW' '2030';\n"); - grammarBuilder.append("KW2031 : 'KW' '2031';\n"); - grammarBuilder.append("KW2032 : 'KW' '2032';\n"); - grammarBuilder.append("KW2033 : 'KW' '2033';\n"); - grammarBuilder.append("KW2034 : 'KW' '2034';\n"); - grammarBuilder.append("KW2035 : 'KW' '2035';\n"); - grammarBuilder.append("KW2036 : 'KW' '2036';\n"); - grammarBuilder.append("KW2037 : 'KW' '2037';\n"); - grammarBuilder.append("KW2038 : 'KW' '2038';\n"); - grammarBuilder.append("KW2039 : 'KW' '2039';\n"); - grammarBuilder.append("KW2040 : 'KW' '2040';\n"); - grammarBuilder.append("KW2041 : 'KW' '2041';\n"); - grammarBuilder.append("KW2042 : 'KW' '2042';\n"); - grammarBuilder.append("KW2043 : 'KW' '2043';\n"); - grammarBuilder.append("KW2044 : 'KW' '2044';\n"); - grammarBuilder.append("KW2045 : 'KW' '2045';\n"); - grammarBuilder.append("KW2046 : 'KW' '2046';\n"); - grammarBuilder.append("KW2047 : 'KW' '2047';\n"); - grammarBuilder.append("KW2048 : 'KW' '2048';\n"); - grammarBuilder.append("KW2049 : 'KW' '2049';\n"); - grammarBuilder.append("KW2050 : 'KW' '2050';\n"); - grammarBuilder.append("KW2051 : 'KW' '2051';\n"); - grammarBuilder.append("KW2052 : 'KW' '2052';\n"); - grammarBuilder.append("KW2053 : 'KW' '2053';\n"); - grammarBuilder.append("KW2054 : 'KW' '2054';\n"); - grammarBuilder.append("KW2055 : 'KW' '2055';\n"); - grammarBuilder.append("KW2056 : 'KW' '2056';\n"); - grammarBuilder.append("KW2057 : 'KW' '2057';\n"); - grammarBuilder.append("KW2058 : 'KW' '2058';\n"); - grammarBuilder.append("KW2059 : 'KW' '2059';\n"); - grammarBuilder.append("KW2060 : 'KW' '2060';\n"); - grammarBuilder.append("KW2061 : 'KW' '2061';\n"); - grammarBuilder.append("KW2062 : 'KW' '2062';\n"); - grammarBuilder.append("KW2063 : 'KW' '2063';\n"); - grammarBuilder.append("KW2064 : 'KW' '2064';\n"); - grammarBuilder.append("KW2065 : 'KW' '2065';\n"); - grammarBuilder.append("KW2066 : 'KW' '2066';\n"); - grammarBuilder.append("KW2067 : 'KW' '2067';\n"); - grammarBuilder.append("KW2068 : 'KW' '2068';\n"); - grammarBuilder.append("KW2069 : 'KW' '2069';\n"); - grammarBuilder.append("KW2070 : 'KW' '2070';\n"); - grammarBuilder.append("KW2071 : 'KW' '2071';\n"); - grammarBuilder.append("KW2072 : 'KW' '2072';\n"); - grammarBuilder.append("KW2073 : 'KW' '2073';\n"); - grammarBuilder.append("KW2074 : 'KW' '2074';\n"); - grammarBuilder.append("KW2075 : 'KW' '2075';\n"); - grammarBuilder.append("KW2076 : 'KW' '2076';\n"); - grammarBuilder.append("KW2077 : 'KW' '2077';\n"); - grammarBuilder.append("KW2078 : 'KW' '2078';\n"); - grammarBuilder.append("KW2079 : 'KW' '2079';\n"); - grammarBuilder.append("KW2080 : 'KW' '2080';\n"); - grammarBuilder.append("KW2081 : 'KW' '2081';\n"); - grammarBuilder.append("KW2082 : 'KW' '2082';\n"); - grammarBuilder.append("KW2083 : 'KW' '2083';\n"); - grammarBuilder.append("KW2084 : 'KW' '2084';\n"); - grammarBuilder.append("KW2085 : 'KW' '2085';\n"); - grammarBuilder.append("KW2086 : 'KW' '2086';\n"); - grammarBuilder.append("KW2087 : 'KW' '2087';\n"); - grammarBuilder.append("KW2088 : 'KW' '2088';\n"); - grammarBuilder.append("KW2089 : 'KW' '2089';\n"); - grammarBuilder.append("KW2090 : 'KW' '2090';\n"); - grammarBuilder.append("KW2091 : 'KW' '2091';\n"); - grammarBuilder.append("KW2092 : 'KW' '2092';\n"); - grammarBuilder.append("KW2093 : 'KW' '2093';\n"); - grammarBuilder.append("KW2094 : 'KW' '2094';\n"); - grammarBuilder.append("KW2095 : 'KW' '2095';\n"); - grammarBuilder.append("KW2096 : 'KW' '2096';\n"); - grammarBuilder.append("KW2097 : 'KW' '2097';\n"); - grammarBuilder.append("KW2098 : 'KW' '2098';\n"); - grammarBuilder.append("KW2099 : 'KW' '2099';\n"); - grammarBuilder.append("KW2100 : 'KW' '2100';\n"); - grammarBuilder.append("KW2101 : 'KW' '2101';\n"); - grammarBuilder.append("KW2102 : 'KW' '2102';\n"); - grammarBuilder.append("KW2103 : 'KW' '2103';\n"); - grammarBuilder.append("KW2104 : 'KW' '2104';\n"); - grammarBuilder.append("KW2105 : 'KW' '2105';\n"); - grammarBuilder.append("KW2106 : 'KW' '2106';\n"); - grammarBuilder.append("KW2107 : 'KW' '2107';\n"); - grammarBuilder.append("KW2108 : 'KW' '2108';\n"); - grammarBuilder.append("KW2109 : 'KW' '2109';\n"); - grammarBuilder.append("KW2110 : 'KW' '2110';\n"); - grammarBuilder.append("KW2111 : 'KW' '2111';\n"); - grammarBuilder.append("KW2112 : 'KW' '2112';\n"); - grammarBuilder.append("KW2113 : 'KW' '2113';\n"); - grammarBuilder.append("KW2114 : 'KW' '2114';\n"); - grammarBuilder.append("KW2115 : 'KW' '2115';\n"); - grammarBuilder.append("KW2116 : 'KW' '2116';\n"); - grammarBuilder.append("KW2117 : 'KW' '2117';\n"); - grammarBuilder.append("KW2118 : 'KW' '2118';\n"); - grammarBuilder.append("KW2119 : 'KW' '2119';\n"); - grammarBuilder.append("KW2120 : 'KW' '2120';\n"); - grammarBuilder.append("KW2121 : 'KW' '2121';\n"); - grammarBuilder.append("KW2122 : 'KW' '2122';\n"); - grammarBuilder.append("KW2123 : 'KW' '2123';\n"); - grammarBuilder.append("KW2124 : 'KW' '2124';\n"); - grammarBuilder.append("KW2125 : 'KW' '2125';\n"); - grammarBuilder.append("KW2126 : 'KW' '2126';\n"); - grammarBuilder.append("KW2127 : 'KW' '2127';\n"); - grammarBuilder.append("KW2128 : 'KW' '2128';\n"); - grammarBuilder.append("KW2129 : 'KW' '2129';\n"); - grammarBuilder.append("KW2130 : 'KW' '2130';\n"); - grammarBuilder.append("KW2131 : 'KW' '2131';\n"); - grammarBuilder.append("KW2132 : 'KW' '2132';\n"); - grammarBuilder.append("KW2133 : 'KW' '2133';\n"); - grammarBuilder.append("KW2134 : 'KW' '2134';\n"); - grammarBuilder.append("KW2135 : 'KW' '2135';\n"); - grammarBuilder.append("KW2136 : 'KW' '2136';\n"); - grammarBuilder.append("KW2137 : 'KW' '2137';\n"); - grammarBuilder.append("KW2138 : 'KW' '2138';\n"); - grammarBuilder.append("KW2139 : 'KW' '2139';\n"); - grammarBuilder.append("KW2140 : 'KW' '2140';\n"); - grammarBuilder.append("KW2141 : 'KW' '2141';\n"); - grammarBuilder.append("KW2142 : 'KW' '2142';\n"); - grammarBuilder.append("KW2143 : 'KW' '2143';\n"); - grammarBuilder.append("KW2144 : 'KW' '2144';\n"); - grammarBuilder.append("KW2145 : 'KW' '2145';\n"); - grammarBuilder.append("KW2146 : 'KW' '2146';\n"); - grammarBuilder.append("KW2147 : 'KW' '2147';\n"); - grammarBuilder.append("KW2148 : 'KW' '2148';\n"); - grammarBuilder.append("KW2149 : 'KW' '2149';\n"); - grammarBuilder.append("KW2150 : 'KW' '2150';\n"); - grammarBuilder.append("KW2151 : 'KW' '2151';\n"); - grammarBuilder.append("KW2152 : 'KW' '2152';\n"); - grammarBuilder.append("KW2153 : 'KW' '2153';\n"); - grammarBuilder.append("KW2154 : 'KW' '2154';\n"); - grammarBuilder.append("KW2155 : 'KW' '2155';\n"); - grammarBuilder.append("KW2156 : 'KW' '2156';\n"); - grammarBuilder.append("KW2157 : 'KW' '2157';\n"); - grammarBuilder.append("KW2158 : 'KW' '2158';\n"); - grammarBuilder.append("KW2159 : 'KW' '2159';\n"); - grammarBuilder.append("KW2160 : 'KW' '2160';\n"); - grammarBuilder.append("KW2161 : 'KW' '2161';\n"); - grammarBuilder.append("KW2162 : 'KW' '2162';\n"); - grammarBuilder.append("KW2163 : 'KW' '2163';\n"); - grammarBuilder.append("KW2164 : 'KW' '2164';\n"); - grammarBuilder.append("KW2165 : 'KW' '2165';\n"); - grammarBuilder.append("KW2166 : 'KW' '2166';\n"); - grammarBuilder.append("KW2167 : 'KW' '2167';\n"); - grammarBuilder.append("KW2168 : 'KW' '2168';\n"); - grammarBuilder.append("KW2169 : 'KW' '2169';\n"); - grammarBuilder.append("KW2170 : 'KW' '2170';\n"); - grammarBuilder.append("KW2171 : 'KW' '2171';\n"); - grammarBuilder.append("KW2172 : 'KW' '2172';\n"); - grammarBuilder.append("KW2173 : 'KW' '2173';\n"); - grammarBuilder.append("KW2174 : 'KW' '2174';\n"); - grammarBuilder.append("KW2175 : 'KW' '2175';\n"); - grammarBuilder.append("KW2176 : 'KW' '2176';\n"); - grammarBuilder.append("KW2177 : 'KW' '2177';\n"); - grammarBuilder.append("KW2178 : 'KW' '2178';\n"); - grammarBuilder.append("KW2179 : 'KW' '2179';\n"); - grammarBuilder.append("KW2180 : 'KW' '2180';\n"); - grammarBuilder.append("KW2181 : 'KW' '2181';\n"); - grammarBuilder.append("KW2182 : 'KW' '2182';\n"); - grammarBuilder.append("KW2183 : 'KW' '2183';\n"); - grammarBuilder.append("KW2184 : 'KW' '2184';\n"); - grammarBuilder.append("KW2185 : 'KW' '2185';\n"); - grammarBuilder.append("KW2186 : 'KW' '2186';\n"); - grammarBuilder.append("KW2187 : 'KW' '2187';\n"); - grammarBuilder.append("KW2188 : 'KW' '2188';\n"); - grammarBuilder.append("KW2189 : 'KW' '2189';\n"); - grammarBuilder.append("KW2190 : 'KW' '2190';\n"); - grammarBuilder.append("KW2191 : 'KW' '2191';\n"); - grammarBuilder.append("KW2192 : 'KW' '2192';\n"); - grammarBuilder.append("KW2193 : 'KW' '2193';\n"); - grammarBuilder.append("KW2194 : 'KW' '2194';\n"); - grammarBuilder.append("KW2195 : 'KW' '2195';\n"); - grammarBuilder.append("KW2196 : 'KW' '2196';\n"); - grammarBuilder.append("KW2197 : 'KW' '2197';\n"); - grammarBuilder.append("KW2198 : 'KW' '2198';\n"); - grammarBuilder.append("KW2199 : 'KW' '2199';\n"); - grammarBuilder.append("KW2200 : 'KW' '2200';\n"); - grammarBuilder.append("KW2201 : 'KW' '2201';\n"); - grammarBuilder.append("KW2202 : 'KW' '2202';\n"); - grammarBuilder.append("KW2203 : 'KW' '2203';\n"); - grammarBuilder.append("KW2204 : 'KW' '2204';\n"); - grammarBuilder.append("KW2205 : 'KW' '2205';\n"); - grammarBuilder.append("KW2206 : 'KW' '2206';\n"); - grammarBuilder.append("KW2207 : 'KW' '2207';\n"); - grammarBuilder.append("KW2208 : 'KW' '2208';\n"); - grammarBuilder.append("KW2209 : 'KW' '2209';\n"); - grammarBuilder.append("KW2210 : 'KW' '2210';\n"); - grammarBuilder.append("KW2211 : 'KW' '2211';\n"); - grammarBuilder.append("KW2212 : 'KW' '2212';\n"); - grammarBuilder.append("KW2213 : 'KW' '2213';\n"); - grammarBuilder.append("KW2214 : 'KW' '2214';\n"); - grammarBuilder.append("KW2215 : 'KW' '2215';\n"); - grammarBuilder.append("KW2216 : 'KW' '2216';\n"); - grammarBuilder.append("KW2217 : 'KW' '2217';\n"); - grammarBuilder.append("KW2218 : 'KW' '2218';\n"); - grammarBuilder.append("KW2219 : 'KW' '2219';\n"); - grammarBuilder.append("KW2220 : 'KW' '2220';\n"); - grammarBuilder.append("KW2221 : 'KW' '2221';\n"); - grammarBuilder.append("KW2222 : 'KW' '2222';\n"); - grammarBuilder.append("KW2223 : 'KW' '2223';\n"); - grammarBuilder.append("KW2224 : 'KW' '2224';\n"); - grammarBuilder.append("KW2225 : 'KW' '2225';\n"); - grammarBuilder.append("KW2226 : 'KW' '2226';\n"); - grammarBuilder.append("KW2227 : 'KW' '2227';\n"); - grammarBuilder.append("KW2228 : 'KW' '2228';\n"); - grammarBuilder.append("KW2229 : 'KW' '2229';\n"); - grammarBuilder.append("KW2230 : 'KW' '2230';\n"); - grammarBuilder.append("KW2231 : 'KW' '2231';\n"); - grammarBuilder.append("KW2232 : 'KW' '2232';\n"); - grammarBuilder.append("KW2233 : 'KW' '2233';\n"); - grammarBuilder.append("KW2234 : 'KW' '2234';\n"); - grammarBuilder.append("KW2235 : 'KW' '2235';\n"); - grammarBuilder.append("KW2236 : 'KW' '2236';\n"); - grammarBuilder.append("KW2237 : 'KW' '2237';\n"); - grammarBuilder.append("KW2238 : 'KW' '2238';\n"); - grammarBuilder.append("KW2239 : 'KW' '2239';\n"); - grammarBuilder.append("KW2240 : 'KW' '2240';\n"); - grammarBuilder.append("KW2241 : 'KW' '2241';\n"); - grammarBuilder.append("KW2242 : 'KW' '2242';\n"); - grammarBuilder.append("KW2243 : 'KW' '2243';\n"); - grammarBuilder.append("KW2244 : 'KW' '2244';\n"); - grammarBuilder.append("KW2245 : 'KW' '2245';\n"); - grammarBuilder.append("KW2246 : 'KW' '2246';\n"); - grammarBuilder.append("KW2247 : 'KW' '2247';\n"); - grammarBuilder.append("KW2248 : 'KW' '2248';\n"); - grammarBuilder.append("KW2249 : 'KW' '2249';\n"); - grammarBuilder.append("KW2250 : 'KW' '2250';\n"); - grammarBuilder.append("KW2251 : 'KW' '2251';\n"); - grammarBuilder.append("KW2252 : 'KW' '2252';\n"); - grammarBuilder.append("KW2253 : 'KW' '2253';\n"); - grammarBuilder.append("KW2254 : 'KW' '2254';\n"); - grammarBuilder.append("KW2255 : 'KW' '2255';\n"); - grammarBuilder.append("KW2256 : 'KW' '2256';\n"); - grammarBuilder.append("KW2257 : 'KW' '2257';\n"); - grammarBuilder.append("KW2258 : 'KW' '2258';\n"); - grammarBuilder.append("KW2259 : 'KW' '2259';\n"); - grammarBuilder.append("KW2260 : 'KW' '2260';\n"); - grammarBuilder.append("KW2261 : 'KW' '2261';\n"); - grammarBuilder.append("KW2262 : 'KW' '2262';\n"); - grammarBuilder.append("KW2263 : 'KW' '2263';\n"); - grammarBuilder.append("KW2264 : 'KW' '2264';\n"); - grammarBuilder.append("KW2265 : 'KW' '2265';\n"); - grammarBuilder.append("KW2266 : 'KW' '2266';\n"); - grammarBuilder.append("KW2267 : 'KW' '2267';\n"); - grammarBuilder.append("KW2268 : 'KW' '2268';\n"); - grammarBuilder.append("KW2269 : 'KW' '2269';\n"); - grammarBuilder.append("KW2270 : 'KW' '2270';\n"); - grammarBuilder.append("KW2271 : 'KW' '2271';\n"); - grammarBuilder.append("KW2272 : 'KW' '2272';\n"); - grammarBuilder.append("KW2273 : 'KW' '2273';\n"); - grammarBuilder.append("KW2274 : 'KW' '2274';\n"); - grammarBuilder.append("KW2275 : 'KW' '2275';\n"); - grammarBuilder.append("KW2276 : 'KW' '2276';\n"); - grammarBuilder.append("KW2277 : 'KW' '2277';\n"); - grammarBuilder.append("KW2278 : 'KW' '2278';\n"); - grammarBuilder.append("KW2279 : 'KW' '2279';\n"); - grammarBuilder.append("KW2280 : 'KW' '2280';\n"); - grammarBuilder.append("KW2281 : 'KW' '2281';\n"); - grammarBuilder.append("KW2282 : 'KW' '2282';\n"); - grammarBuilder.append("KW2283 : 'KW' '2283';\n"); - grammarBuilder.append("KW2284 : 'KW' '2284';\n"); - grammarBuilder.append("KW2285 : 'KW' '2285';\n"); - grammarBuilder.append("KW2286 : 'KW' '2286';\n"); - grammarBuilder.append("KW2287 : 'KW' '2287';\n"); - grammarBuilder.append("KW2288 : 'KW' '2288';\n"); - grammarBuilder.append("KW2289 : 'KW' '2289';\n"); - grammarBuilder.append("KW2290 : 'KW' '2290';\n"); - grammarBuilder.append("KW2291 : 'KW' '2291';\n"); - grammarBuilder.append("KW2292 : 'KW' '2292';\n"); - grammarBuilder.append("KW2293 : 'KW' '2293';\n"); - grammarBuilder.append("KW2294 : 'KW' '2294';\n"); - grammarBuilder.append("KW2295 : 'KW' '2295';\n"); - grammarBuilder.append("KW2296 : 'KW' '2296';\n"); - grammarBuilder.append("KW2297 : 'KW' '2297';\n"); - grammarBuilder.append("KW2298 : 'KW' '2298';\n"); - grammarBuilder.append("KW2299 : 'KW' '2299';\n"); - grammarBuilder.append("KW2300 : 'KW' '2300';\n"); - grammarBuilder.append("KW2301 : 'KW' '2301';\n"); - grammarBuilder.append("KW2302 : 'KW' '2302';\n"); - grammarBuilder.append("KW2303 : 'KW' '2303';\n"); - grammarBuilder.append("KW2304 : 'KW' '2304';\n"); - grammarBuilder.append("KW2305 : 'KW' '2305';\n"); - grammarBuilder.append("KW2306 : 'KW' '2306';\n"); - grammarBuilder.append("KW2307 : 'KW' '2307';\n"); - grammarBuilder.append("KW2308 : 'KW' '2308';\n"); - grammarBuilder.append("KW2309 : 'KW' '2309';\n"); - grammarBuilder.append("KW2310 : 'KW' '2310';\n"); - grammarBuilder.append("KW2311 : 'KW' '2311';\n"); - grammarBuilder.append("KW2312 : 'KW' '2312';\n"); - grammarBuilder.append("KW2313 : 'KW' '2313';\n"); - grammarBuilder.append("KW2314 : 'KW' '2314';\n"); - grammarBuilder.append("KW2315 : 'KW' '2315';\n"); - grammarBuilder.append("KW2316 : 'KW' '2316';\n"); - grammarBuilder.append("KW2317 : 'KW' '2317';\n"); - grammarBuilder.append("KW2318 : 'KW' '2318';\n"); - grammarBuilder.append("KW2319 : 'KW' '2319';\n"); - grammarBuilder.append("KW2320 : 'KW' '2320';\n"); - grammarBuilder.append("KW2321 : 'KW' '2321';\n"); - grammarBuilder.append("KW2322 : 'KW' '2322';\n"); - grammarBuilder.append("KW2323 : 'KW' '2323';\n"); - grammarBuilder.append("KW2324 : 'KW' '2324';\n"); - grammarBuilder.append("KW2325 : 'KW' '2325';\n"); - grammarBuilder.append("KW2326 : 'KW' '2326';\n"); - grammarBuilder.append("KW2327 : 'KW' '2327';\n"); - grammarBuilder.append("KW2328 : 'KW' '2328';\n"); - grammarBuilder.append("KW2329 : 'KW' '2329';\n"); - grammarBuilder.append("KW2330 : 'KW' '2330';\n"); - grammarBuilder.append("KW2331 : 'KW' '2331';\n"); - grammarBuilder.append("KW2332 : 'KW' '2332';\n"); - grammarBuilder.append("KW2333 : 'KW' '2333';\n"); - grammarBuilder.append("KW2334 : 'KW' '2334';\n"); - grammarBuilder.append("KW2335 : 'KW' '2335';\n"); - grammarBuilder.append("KW2336 : 'KW' '2336';\n"); - grammarBuilder.append("KW2337 : 'KW' '2337';\n"); - grammarBuilder.append("KW2338 : 'KW' '2338';\n"); - grammarBuilder.append("KW2339 : 'KW' '2339';\n"); - grammarBuilder.append("KW2340 : 'KW' '2340';\n"); - grammarBuilder.append("KW2341 : 'KW' '2341';\n"); - grammarBuilder.append("KW2342 : 'KW' '2342';\n"); - grammarBuilder.append("KW2343 : 'KW' '2343';\n"); - grammarBuilder.append("KW2344 : 'KW' '2344';\n"); - grammarBuilder.append("KW2345 : 'KW' '2345';\n"); - grammarBuilder.append("KW2346 : 'KW' '2346';\n"); - grammarBuilder.append("KW2347 : 'KW' '2347';\n"); - grammarBuilder.append("KW2348 : 'KW' '2348';\n"); - grammarBuilder.append("KW2349 : 'KW' '2349';\n"); - grammarBuilder.append("KW2350 : 'KW' '2350';\n"); - grammarBuilder.append("KW2351 : 'KW' '2351';\n"); - grammarBuilder.append("KW2352 : 'KW' '2352';\n"); - grammarBuilder.append("KW2353 : 'KW' '2353';\n"); - grammarBuilder.append("KW2354 : 'KW' '2354';\n"); - grammarBuilder.append("KW2355 : 'KW' '2355';\n"); - grammarBuilder.append("KW2356 : 'KW' '2356';\n"); - grammarBuilder.append("KW2357 : 'KW' '2357';\n"); - grammarBuilder.append("KW2358 : 'KW' '2358';\n"); - grammarBuilder.append("KW2359 : 'KW' '2359';\n"); - grammarBuilder.append("KW2360 : 'KW' '2360';\n"); - grammarBuilder.append("KW2361 : 'KW' '2361';\n"); - grammarBuilder.append("KW2362 : 'KW' '2362';\n"); - grammarBuilder.append("KW2363 : 'KW' '2363';\n"); - grammarBuilder.append("KW2364 : 'KW' '2364';\n"); - grammarBuilder.append("KW2365 : 'KW' '2365';\n"); - grammarBuilder.append("KW2366 : 'KW' '2366';\n"); - grammarBuilder.append("KW2367 : 'KW' '2367';\n"); - grammarBuilder.append("KW2368 : 'KW' '2368';\n"); - grammarBuilder.append("KW2369 : 'KW' '2369';\n"); - grammarBuilder.append("KW2370 : 'KW' '2370';\n"); - grammarBuilder.append("KW2371 : 'KW' '2371';\n"); - grammarBuilder.append("KW2372 : 'KW' '2372';\n"); - grammarBuilder.append("KW2373 : 'KW' '2373';\n"); - grammarBuilder.append("KW2374 : 'KW' '2374';\n"); - grammarBuilder.append("KW2375 : 'KW' '2375';\n"); - grammarBuilder.append("KW2376 : 'KW' '2376';\n"); - grammarBuilder.append("KW2377 : 'KW' '2377';\n"); - grammarBuilder.append("KW2378 : 'KW' '2378';\n"); - grammarBuilder.append("KW2379 : 'KW' '2379';\n"); - grammarBuilder.append("KW2380 : 'KW' '2380';\n"); - grammarBuilder.append("KW2381 : 'KW' '2381';\n"); - grammarBuilder.append("KW2382 : 'KW' '2382';\n"); - grammarBuilder.append("KW2383 : 'KW' '2383';\n"); - grammarBuilder.append("KW2384 : 'KW' '2384';\n"); - grammarBuilder.append("KW2385 : 'KW' '2385';\n"); - grammarBuilder.append("KW2386 : 'KW' '2386';\n"); - grammarBuilder.append("KW2387 : 'KW' '2387';\n"); - grammarBuilder.append("KW2388 : 'KW' '2388';\n"); - grammarBuilder.append("KW2389 : 'KW' '2389';\n"); - grammarBuilder.append("KW2390 : 'KW' '2390';\n"); - grammarBuilder.append("KW2391 : 'KW' '2391';\n"); - grammarBuilder.append("KW2392 : 'KW' '2392';\n"); - grammarBuilder.append("KW2393 : 'KW' '2393';\n"); - grammarBuilder.append("KW2394 : 'KW' '2394';\n"); - grammarBuilder.append("KW2395 : 'KW' '2395';\n"); - grammarBuilder.append("KW2396 : 'KW' '2396';\n"); - grammarBuilder.append("KW2397 : 'KW' '2397';\n"); - grammarBuilder.append("KW2398 : 'KW' '2398';\n"); - grammarBuilder.append("KW2399 : 'KW' '2399';\n"); - grammarBuilder.append("KW2400 : 'KW' '2400';\n"); - grammarBuilder.append("KW2401 : 'KW' '2401';\n"); - grammarBuilder.append("KW2402 : 'KW' '2402';\n"); - grammarBuilder.append("KW2403 : 'KW' '2403';\n"); - grammarBuilder.append("KW2404 : 'KW' '2404';\n"); - grammarBuilder.append("KW2405 : 'KW' '2405';\n"); - grammarBuilder.append("KW2406 : 'KW' '2406';\n"); - grammarBuilder.append("KW2407 : 'KW' '2407';\n"); - grammarBuilder.append("KW2408 : 'KW' '2408';\n"); - grammarBuilder.append("KW2409 : 'KW' '2409';\n"); - grammarBuilder.append("KW2410 : 'KW' '2410';\n"); - grammarBuilder.append("KW2411 : 'KW' '2411';\n"); - grammarBuilder.append("KW2412 : 'KW' '2412';\n"); - grammarBuilder.append("KW2413 : 'KW' '2413';\n"); - grammarBuilder.append("KW2414 : 'KW' '2414';\n"); - grammarBuilder.append("KW2415 : 'KW' '2415';\n"); - grammarBuilder.append("KW2416 : 'KW' '2416';\n"); - grammarBuilder.append("KW2417 : 'KW' '2417';\n"); - grammarBuilder.append("KW2418 : 'KW' '2418';\n"); - grammarBuilder.append("KW2419 : 'KW' '2419';\n"); - grammarBuilder.append("KW2420 : 'KW' '2420';\n"); - grammarBuilder.append("KW2421 : 'KW' '2421';\n"); - grammarBuilder.append("KW2422 : 'KW' '2422';\n"); - grammarBuilder.append("KW2423 : 'KW' '2423';\n"); - grammarBuilder.append("KW2424 : 'KW' '2424';\n"); - grammarBuilder.append("KW2425 : 'KW' '2425';\n"); - grammarBuilder.append("KW2426 : 'KW' '2426';\n"); - grammarBuilder.append("KW2427 : 'KW' '2427';\n"); - grammarBuilder.append("KW2428 : 'KW' '2428';\n"); - grammarBuilder.append("KW2429 : 'KW' '2429';\n"); - grammarBuilder.append("KW2430 : 'KW' '2430';\n"); - grammarBuilder.append("KW2431 : 'KW' '2431';\n"); - grammarBuilder.append("KW2432 : 'KW' '2432';\n"); - grammarBuilder.append("KW2433 : 'KW' '2433';\n"); - grammarBuilder.append("KW2434 : 'KW' '2434';\n"); - grammarBuilder.append("KW2435 : 'KW' '2435';\n"); - grammarBuilder.append("KW2436 : 'KW' '2436';\n"); - grammarBuilder.append("KW2437 : 'KW' '2437';\n"); - grammarBuilder.append("KW2438 : 'KW' '2438';\n"); - grammarBuilder.append("KW2439 : 'KW' '2439';\n"); - grammarBuilder.append("KW2440 : 'KW' '2440';\n"); - grammarBuilder.append("KW2441 : 'KW' '2441';\n"); - grammarBuilder.append("KW2442 : 'KW' '2442';\n"); - grammarBuilder.append("KW2443 : 'KW' '2443';\n"); - grammarBuilder.append("KW2444 : 'KW' '2444';\n"); - grammarBuilder.append("KW2445 : 'KW' '2445';\n"); - grammarBuilder.append("KW2446 : 'KW' '2446';\n"); - grammarBuilder.append("KW2447 : 'KW' '2447';\n"); - grammarBuilder.append("KW2448 : 'KW' '2448';\n"); - grammarBuilder.append("KW2449 : 'KW' '2449';\n"); - grammarBuilder.append("KW2450 : 'KW' '2450';\n"); - grammarBuilder.append("KW2451 : 'KW' '2451';\n"); - grammarBuilder.append("KW2452 : 'KW' '2452';\n"); - grammarBuilder.append("KW2453 : 'KW' '2453';\n"); - grammarBuilder.append("KW2454 : 'KW' '2454';\n"); - grammarBuilder.append("KW2455 : 'KW' '2455';\n"); - grammarBuilder.append("KW2456 : 'KW' '2456';\n"); - grammarBuilder.append("KW2457 : 'KW' '2457';\n"); - grammarBuilder.append("KW2458 : 'KW' '2458';\n"); - grammarBuilder.append("KW2459 : 'KW' '2459';\n"); - grammarBuilder.append("KW2460 : 'KW' '2460';\n"); - grammarBuilder.append("KW2461 : 'KW' '2461';\n"); - grammarBuilder.append("KW2462 : 'KW' '2462';\n"); - grammarBuilder.append("KW2463 : 'KW' '2463';\n"); - grammarBuilder.append("KW2464 : 'KW' '2464';\n"); - grammarBuilder.append("KW2465 : 'KW' '2465';\n"); - grammarBuilder.append("KW2466 : 'KW' '2466';\n"); - grammarBuilder.append("KW2467 : 'KW' '2467';\n"); - grammarBuilder.append("KW2468 : 'KW' '2468';\n"); - grammarBuilder.append("KW2469 : 'KW' '2469';\n"); - grammarBuilder.append("KW2470 : 'KW' '2470';\n"); - grammarBuilder.append("KW2471 : 'KW' '2471';\n"); - grammarBuilder.append("KW2472 : 'KW' '2472';\n"); - grammarBuilder.append("KW2473 : 'KW' '2473';\n"); - grammarBuilder.append("KW2474 : 'KW' '2474';\n"); - grammarBuilder.append("KW2475 : 'KW' '2475';\n"); - grammarBuilder.append("KW2476 : 'KW' '2476';\n"); - grammarBuilder.append("KW2477 : 'KW' '2477';\n"); - grammarBuilder.append("KW2478 : 'KW' '2478';\n"); - grammarBuilder.append("KW2479 : 'KW' '2479';\n"); - grammarBuilder.append("KW2480 : 'KW' '2480';\n"); - grammarBuilder.append("KW2481 : 'KW' '2481';\n"); - grammarBuilder.append("KW2482 : 'KW' '2482';\n"); - grammarBuilder.append("KW2483 : 'KW' '2483';\n"); - grammarBuilder.append("KW2484 : 'KW' '2484';\n"); - grammarBuilder.append("KW2485 : 'KW' '2485';\n"); - grammarBuilder.append("KW2486 : 'KW' '2486';\n"); - grammarBuilder.append("KW2487 : 'KW' '2487';\n"); - grammarBuilder.append("KW2488 : 'KW' '2488';\n"); - grammarBuilder.append("KW2489 : 'KW' '2489';\n"); - grammarBuilder.append("KW2490 : 'KW' '2490';\n"); - grammarBuilder.append("KW2491 : 'KW' '2491';\n"); - grammarBuilder.append("KW2492 : 'KW' '2492';\n"); - grammarBuilder.append("KW2493 : 'KW' '2493';\n"); - grammarBuilder.append("KW2494 : 'KW' '2494';\n"); - grammarBuilder.append("KW2495 : 'KW' '2495';\n"); - grammarBuilder.append("KW2496 : 'KW' '2496';\n"); - grammarBuilder.append("KW2497 : 'KW' '2497';\n"); - grammarBuilder.append("KW2498 : 'KW' '2498';\n"); - grammarBuilder.append("KW2499 : 'KW' '2499';\n"); - grammarBuilder.append("KW2500 : 'KW' '2500';\n"); - grammarBuilder.append("KW2501 : 'KW' '2501';\n"); - grammarBuilder.append("KW2502 : 'KW' '2502';\n"); - grammarBuilder.append("KW2503 : 'KW' '2503';\n"); - grammarBuilder.append("KW2504 : 'KW' '2504';\n"); - grammarBuilder.append("KW2505 : 'KW' '2505';\n"); - grammarBuilder.append("KW2506 : 'KW' '2506';\n"); - grammarBuilder.append("KW2507 : 'KW' '2507';\n"); - grammarBuilder.append("KW2508 : 'KW' '2508';\n"); - grammarBuilder.append("KW2509 : 'KW' '2509';\n"); - grammarBuilder.append("KW2510 : 'KW' '2510';\n"); - grammarBuilder.append("KW2511 : 'KW' '2511';\n"); - grammarBuilder.append("KW2512 : 'KW' '2512';\n"); - grammarBuilder.append("KW2513 : 'KW' '2513';\n"); - grammarBuilder.append("KW2514 : 'KW' '2514';\n"); - grammarBuilder.append("KW2515 : 'KW' '2515';\n"); - grammarBuilder.append("KW2516 : 'KW' '2516';\n"); - grammarBuilder.append("KW2517 : 'KW' '2517';\n"); - grammarBuilder.append("KW2518 : 'KW' '2518';\n"); - grammarBuilder.append("KW2519 : 'KW' '2519';\n"); - grammarBuilder.append("KW2520 : 'KW' '2520';\n"); - grammarBuilder.append("KW2521 : 'KW' '2521';\n"); - grammarBuilder.append("KW2522 : 'KW' '2522';\n"); - grammarBuilder.append("KW2523 : 'KW' '2523';\n"); - grammarBuilder.append("KW2524 : 'KW' '2524';\n"); - grammarBuilder.append("KW2525 : 'KW' '2525';\n"); - grammarBuilder.append("KW2526 : 'KW' '2526';\n"); - grammarBuilder.append("KW2527 : 'KW' '2527';\n"); - grammarBuilder.append("KW2528 : 'KW' '2528';\n"); - grammarBuilder.append("KW2529 : 'KW' '2529';\n"); - grammarBuilder.append("KW2530 : 'KW' '2530';\n"); - grammarBuilder.append("KW2531 : 'KW' '2531';\n"); - grammarBuilder.append("KW2532 : 'KW' '2532';\n"); - grammarBuilder.append("KW2533 : 'KW' '2533';\n"); - grammarBuilder.append("KW2534 : 'KW' '2534';\n"); - grammarBuilder.append("KW2535 : 'KW' '2535';\n"); - grammarBuilder.append("KW2536 : 'KW' '2536';\n"); - grammarBuilder.append("KW2537 : 'KW' '2537';\n"); - grammarBuilder.append("KW2538 : 'KW' '2538';\n"); - grammarBuilder.append("KW2539 : 'KW' '2539';\n"); - grammarBuilder.append("KW2540 : 'KW' '2540';\n"); - grammarBuilder.append("KW2541 : 'KW' '2541';\n"); - grammarBuilder.append("KW2542 : 'KW' '2542';\n"); - grammarBuilder.append("KW2543 : 'KW' '2543';\n"); - grammarBuilder.append("KW2544 : 'KW' '2544';\n"); - grammarBuilder.append("KW2545 : 'KW' '2545';\n"); - grammarBuilder.append("KW2546 : 'KW' '2546';\n"); - grammarBuilder.append("KW2547 : 'KW' '2547';\n"); - grammarBuilder.append("KW2548 : 'KW' '2548';\n"); - grammarBuilder.append("KW2549 : 'KW' '2549';\n"); - grammarBuilder.append("KW2550 : 'KW' '2550';\n"); - grammarBuilder.append("KW2551 : 'KW' '2551';\n"); - grammarBuilder.append("KW2552 : 'KW' '2552';\n"); - grammarBuilder.append("KW2553 : 'KW' '2553';\n"); - grammarBuilder.append("KW2554 : 'KW' '2554';\n"); - grammarBuilder.append("KW2555 : 'KW' '2555';\n"); - grammarBuilder.append("KW2556 : 'KW' '2556';\n"); - grammarBuilder.append("KW2557 : 'KW' '2557';\n"); - grammarBuilder.append("KW2558 : 'KW' '2558';\n"); - grammarBuilder.append("KW2559 : 'KW' '2559';\n"); - grammarBuilder.append("KW2560 : 'KW' '2560';\n"); - grammarBuilder.append("KW2561 : 'KW' '2561';\n"); - grammarBuilder.append("KW2562 : 'KW' '2562';\n"); - grammarBuilder.append("KW2563 : 'KW' '2563';\n"); - grammarBuilder.append("KW2564 : 'KW' '2564';\n"); - grammarBuilder.append("KW2565 : 'KW' '2565';\n"); - grammarBuilder.append("KW2566 : 'KW' '2566';\n"); - grammarBuilder.append("KW2567 : 'KW' '2567';\n"); - grammarBuilder.append("KW2568 : 'KW' '2568';\n"); - grammarBuilder.append("KW2569 : 'KW' '2569';\n"); - grammarBuilder.append("KW2570 : 'KW' '2570';\n"); - grammarBuilder.append("KW2571 : 'KW' '2571';\n"); - grammarBuilder.append("KW2572 : 'KW' '2572';\n"); - grammarBuilder.append("KW2573 : 'KW' '2573';\n"); - grammarBuilder.append("KW2574 : 'KW' '2574';\n"); - grammarBuilder.append("KW2575 : 'KW' '2575';\n"); - grammarBuilder.append("KW2576 : 'KW' '2576';\n"); - grammarBuilder.append("KW2577 : 'KW' '2577';\n"); - grammarBuilder.append("KW2578 : 'KW' '2578';\n"); - grammarBuilder.append("KW2579 : 'KW' '2579';\n"); - grammarBuilder.append("KW2580 : 'KW' '2580';\n"); - grammarBuilder.append("KW2581 : 'KW' '2581';\n"); - grammarBuilder.append("KW2582 : 'KW' '2582';\n"); - grammarBuilder.append("KW2583 : 'KW' '2583';\n"); - grammarBuilder.append("KW2584 : 'KW' '2584';\n"); - grammarBuilder.append("KW2585 : 'KW' '2585';\n"); - grammarBuilder.append("KW2586 : 'KW' '2586';\n"); - grammarBuilder.append("KW2587 : 'KW' '2587';\n"); - grammarBuilder.append("KW2588 : 'KW' '2588';\n"); - grammarBuilder.append("KW2589 : 'KW' '2589';\n"); - grammarBuilder.append("KW2590 : 'KW' '2590';\n"); - grammarBuilder.append("KW2591 : 'KW' '2591';\n"); - grammarBuilder.append("KW2592 : 'KW' '2592';\n"); - grammarBuilder.append("KW2593 : 'KW' '2593';\n"); - grammarBuilder.append("KW2594 : 'KW' '2594';\n"); - grammarBuilder.append("KW2595 : 'KW' '2595';\n"); - grammarBuilder.append("KW2596 : 'KW' '2596';\n"); - grammarBuilder.append("KW2597 : 'KW' '2597';\n"); - grammarBuilder.append("KW2598 : 'KW' '2598';\n"); - grammarBuilder.append("KW2599 : 'KW' '2599';\n"); - grammarBuilder.append("KW2600 : 'KW' '2600';\n"); - grammarBuilder.append("KW2601 : 'KW' '2601';\n"); - grammarBuilder.append("KW2602 : 'KW' '2602';\n"); - grammarBuilder.append("KW2603 : 'KW' '2603';\n"); - grammarBuilder.append("KW2604 : 'KW' '2604';\n"); - grammarBuilder.append("KW2605 : 'KW' '2605';\n"); - grammarBuilder.append("KW2606 : 'KW' '2606';\n"); - grammarBuilder.append("KW2607 : 'KW' '2607';\n"); - grammarBuilder.append("KW2608 : 'KW' '2608';\n"); - grammarBuilder.append("KW2609 : 'KW' '2609';\n"); - grammarBuilder.append("KW2610 : 'KW' '2610';\n"); - grammarBuilder.append("KW2611 : 'KW' '2611';\n"); - grammarBuilder.append("KW2612 : 'KW' '2612';\n"); - grammarBuilder.append("KW2613 : 'KW' '2613';\n"); - grammarBuilder.append("KW2614 : 'KW' '2614';\n"); - grammarBuilder.append("KW2615 : 'KW' '2615';\n"); - grammarBuilder.append("KW2616 : 'KW' '2616';\n"); - grammarBuilder.append("KW2617 : 'KW' '2617';\n"); - grammarBuilder.append("KW2618 : 'KW' '2618';\n"); - grammarBuilder.append("KW2619 : 'KW' '2619';\n"); - grammarBuilder.append("KW2620 : 'KW' '2620';\n"); - grammarBuilder.append("KW2621 : 'KW' '2621';\n"); - grammarBuilder.append("KW2622 : 'KW' '2622';\n"); - grammarBuilder.append("KW2623 : 'KW' '2623';\n"); - grammarBuilder.append("KW2624 : 'KW' '2624';\n"); - grammarBuilder.append("KW2625 : 'KW' '2625';\n"); - grammarBuilder.append("KW2626 : 'KW' '2626';\n"); - grammarBuilder.append("KW2627 : 'KW' '2627';\n"); - grammarBuilder.append("KW2628 : 'KW' '2628';\n"); - grammarBuilder.append("KW2629 : 'KW' '2629';\n"); - grammarBuilder.append("KW2630 : 'KW' '2630';\n"); - grammarBuilder.append("KW2631 : 'KW' '2631';\n"); - grammarBuilder.append("KW2632 : 'KW' '2632';\n"); - grammarBuilder.append("KW2633 : 'KW' '2633';\n"); - grammarBuilder.append("KW2634 : 'KW' '2634';\n"); - grammarBuilder.append("KW2635 : 'KW' '2635';\n"); - grammarBuilder.append("KW2636 : 'KW' '2636';\n"); - grammarBuilder.append("KW2637 : 'KW' '2637';\n"); - grammarBuilder.append("KW2638 : 'KW' '2638';\n"); - grammarBuilder.append("KW2639 : 'KW' '2639';\n"); - grammarBuilder.append("KW2640 : 'KW' '2640';\n"); - grammarBuilder.append("KW2641 : 'KW' '2641';\n"); - grammarBuilder.append("KW2642 : 'KW' '2642';\n"); - grammarBuilder.append("KW2643 : 'KW' '2643';\n"); - grammarBuilder.append("KW2644 : 'KW' '2644';\n"); - grammarBuilder.append("KW2645 : 'KW' '2645';\n"); - grammarBuilder.append("KW2646 : 'KW' '2646';\n"); - grammarBuilder.append("KW2647 : 'KW' '2647';\n"); - grammarBuilder.append("KW2648 : 'KW' '2648';\n"); - grammarBuilder.append("KW2649 : 'KW' '2649';\n"); - grammarBuilder.append("KW2650 : 'KW' '2650';\n"); - grammarBuilder.append("KW2651 : 'KW' '2651';\n"); - grammarBuilder.append("KW2652 : 'KW' '2652';\n"); - grammarBuilder.append("KW2653 : 'KW' '2653';\n"); - grammarBuilder.append("KW2654 : 'KW' '2654';\n"); - grammarBuilder.append("KW2655 : 'KW' '2655';\n"); - grammarBuilder.append("KW2656 : 'KW' '2656';\n"); - grammarBuilder.append("KW2657 : 'KW' '2657';\n"); - grammarBuilder.append("KW2658 : 'KW' '2658';\n"); - grammarBuilder.append("KW2659 : 'KW' '2659';\n"); - grammarBuilder.append("KW2660 : 'KW' '2660';\n"); - grammarBuilder.append("KW2661 : 'KW' '2661';\n"); - grammarBuilder.append("KW2662 : 'KW' '2662';\n"); - grammarBuilder.append("KW2663 : 'KW' '2663';\n"); - grammarBuilder.append("KW2664 : 'KW' '2664';\n"); - grammarBuilder.append("KW2665 : 'KW' '2665';\n"); - grammarBuilder.append("KW2666 : 'KW' '2666';\n"); - grammarBuilder.append("KW2667 : 'KW' '2667';\n"); - grammarBuilder.append("KW2668 : 'KW' '2668';\n"); - grammarBuilder.append("KW2669 : 'KW' '2669';\n"); - grammarBuilder.append("KW2670 : 'KW' '2670';\n"); - grammarBuilder.append("KW2671 : 'KW' '2671';\n"); - grammarBuilder.append("KW2672 : 'KW' '2672';\n"); - grammarBuilder.append("KW2673 : 'KW' '2673';\n"); - grammarBuilder.append("KW2674 : 'KW' '2674';\n"); - grammarBuilder.append("KW2675 : 'KW' '2675';\n"); - grammarBuilder.append("KW2676 : 'KW' '2676';\n"); - grammarBuilder.append("KW2677 : 'KW' '2677';\n"); - grammarBuilder.append("KW2678 : 'KW' '2678';\n"); - grammarBuilder.append("KW2679 : 'KW' '2679';\n"); - grammarBuilder.append("KW2680 : 'KW' '2680';\n"); - grammarBuilder.append("KW2681 : 'KW' '2681';\n"); - grammarBuilder.append("KW2682 : 'KW' '2682';\n"); - grammarBuilder.append("KW2683 : 'KW' '2683';\n"); - grammarBuilder.append("KW2684 : 'KW' '2684';\n"); - grammarBuilder.append("KW2685 : 'KW' '2685';\n"); - grammarBuilder.append("KW2686 : 'KW' '2686';\n"); - grammarBuilder.append("KW2687 : 'KW' '2687';\n"); - grammarBuilder.append("KW2688 : 'KW' '2688';\n"); - grammarBuilder.append("KW2689 : 'KW' '2689';\n"); - grammarBuilder.append("KW2690 : 'KW' '2690';\n"); - grammarBuilder.append("KW2691 : 'KW' '2691';\n"); - grammarBuilder.append("KW2692 : 'KW' '2692';\n"); - grammarBuilder.append("KW2693 : 'KW' '2693';\n"); - grammarBuilder.append("KW2694 : 'KW' '2694';\n"); - grammarBuilder.append("KW2695 : 'KW' '2695';\n"); - grammarBuilder.append("KW2696 : 'KW' '2696';\n"); - grammarBuilder.append("KW2697 : 'KW' '2697';\n"); - grammarBuilder.append("KW2698 : 'KW' '2698';\n"); - grammarBuilder.append("KW2699 : 'KW' '2699';\n"); - grammarBuilder.append("KW2700 : 'KW' '2700';\n"); - grammarBuilder.append("KW2701 : 'KW' '2701';\n"); - grammarBuilder.append("KW2702 : 'KW' '2702';\n"); - grammarBuilder.append("KW2703 : 'KW' '2703';\n"); - grammarBuilder.append("KW2704 : 'KW' '2704';\n"); - grammarBuilder.append("KW2705 : 'KW' '2705';\n"); - grammarBuilder.append("KW2706 : 'KW' '2706';\n"); - grammarBuilder.append("KW2707 : 'KW' '2707';\n"); - grammarBuilder.append("KW2708 : 'KW' '2708';\n"); - grammarBuilder.append("KW2709 : 'KW' '2709';\n"); - grammarBuilder.append("KW2710 : 'KW' '2710';\n"); - grammarBuilder.append("KW2711 : 'KW' '2711';\n"); - grammarBuilder.append("KW2712 : 'KW' '2712';\n"); - grammarBuilder.append("KW2713 : 'KW' '2713';\n"); - grammarBuilder.append("KW2714 : 'KW' '2714';\n"); - grammarBuilder.append("KW2715 : 'KW' '2715';\n"); - grammarBuilder.append("KW2716 : 'KW' '2716';\n"); - grammarBuilder.append("KW2717 : 'KW' '2717';\n"); - grammarBuilder.append("KW2718 : 'KW' '2718';\n"); - grammarBuilder.append("KW2719 : 'KW' '2719';\n"); - grammarBuilder.append("KW2720 : 'KW' '2720';\n"); - grammarBuilder.append("KW2721 : 'KW' '2721';\n"); - grammarBuilder.append("KW2722 : 'KW' '2722';\n"); - grammarBuilder.append("KW2723 : 'KW' '2723';\n"); - grammarBuilder.append("KW2724 : 'KW' '2724';\n"); - grammarBuilder.append("KW2725 : 'KW' '2725';\n"); - grammarBuilder.append("KW2726 : 'KW' '2726';\n"); - grammarBuilder.append("KW2727 : 'KW' '2727';\n"); - grammarBuilder.append("KW2728 : 'KW' '2728';\n"); - grammarBuilder.append("KW2729 : 'KW' '2729';\n"); - grammarBuilder.append("KW2730 : 'KW' '2730';\n"); - grammarBuilder.append("KW2731 : 'KW' '2731';\n"); - grammarBuilder.append("KW2732 : 'KW' '2732';\n"); - grammarBuilder.append("KW2733 : 'KW' '2733';\n"); - grammarBuilder.append("KW2734 : 'KW' '2734';\n"); - grammarBuilder.append("KW2735 : 'KW' '2735';\n"); - grammarBuilder.append("KW2736 : 'KW' '2736';\n"); - grammarBuilder.append("KW2737 : 'KW' '2737';\n"); - grammarBuilder.append("KW2738 : 'KW' '2738';\n"); - grammarBuilder.append("KW2739 : 'KW' '2739';\n"); - grammarBuilder.append("KW2740 : 'KW' '2740';\n"); - grammarBuilder.append("KW2741 : 'KW' '2741';\n"); - grammarBuilder.append("KW2742 : 'KW' '2742';\n"); - grammarBuilder.append("KW2743 : 'KW' '2743';\n"); - grammarBuilder.append("KW2744 : 'KW' '2744';\n"); - grammarBuilder.append("KW2745 : 'KW' '2745';\n"); - grammarBuilder.append("KW2746 : 'KW' '2746';\n"); - grammarBuilder.append("KW2747 : 'KW' '2747';\n"); - grammarBuilder.append("KW2748 : 'KW' '2748';\n"); - grammarBuilder.append("KW2749 : 'KW' '2749';\n"); - grammarBuilder.append("KW2750 : 'KW' '2750';\n"); - grammarBuilder.append("KW2751 : 'KW' '2751';\n"); - grammarBuilder.append("KW2752 : 'KW' '2752';\n"); - grammarBuilder.append("KW2753 : 'KW' '2753';\n"); - grammarBuilder.append("KW2754 : 'KW' '2754';\n"); - grammarBuilder.append("KW2755 : 'KW' '2755';\n"); - grammarBuilder.append("KW2756 : 'KW' '2756';\n"); - grammarBuilder.append("KW2757 : 'KW' '2757';\n"); - grammarBuilder.append("KW2758 : 'KW' '2758';\n"); - grammarBuilder.append("KW2759 : 'KW' '2759';\n"); - grammarBuilder.append("KW2760 : 'KW' '2760';\n"); - grammarBuilder.append("KW2761 : 'KW' '2761';\n"); - grammarBuilder.append("KW2762 : 'KW' '2762';\n"); - grammarBuilder.append("KW2763 : 'KW' '2763';\n"); - grammarBuilder.append("KW2764 : 'KW' '2764';\n"); - grammarBuilder.append("KW2765 : 'KW' '2765';\n"); - grammarBuilder.append("KW2766 : 'KW' '2766';\n"); - grammarBuilder.append("KW2767 : 'KW' '2767';\n"); - grammarBuilder.append("KW2768 : 'KW' '2768';\n"); - grammarBuilder.append("KW2769 : 'KW' '2769';\n"); - grammarBuilder.append("KW2770 : 'KW' '2770';\n"); - grammarBuilder.append("KW2771 : 'KW' '2771';\n"); - grammarBuilder.append("KW2772 : 'KW' '2772';\n"); - grammarBuilder.append("KW2773 : 'KW' '2773';\n"); - grammarBuilder.append("KW2774 : 'KW' '2774';\n"); - grammarBuilder.append("KW2775 : 'KW' '2775';\n"); - grammarBuilder.append("KW2776 : 'KW' '2776';\n"); - grammarBuilder.append("KW2777 : 'KW' '2777';\n"); - grammarBuilder.append("KW2778 : 'KW' '2778';\n"); - grammarBuilder.append("KW2779 : 'KW' '2779';\n"); - grammarBuilder.append("KW2780 : 'KW' '2780';\n"); - grammarBuilder.append("KW2781 : 'KW' '2781';\n"); - grammarBuilder.append("KW2782 : 'KW' '2782';\n"); - grammarBuilder.append("KW2783 : 'KW' '2783';\n"); - grammarBuilder.append("KW2784 : 'KW' '2784';\n"); - grammarBuilder.append("KW2785 : 'KW' '2785';\n"); - grammarBuilder.append("KW2786 : 'KW' '2786';\n"); - grammarBuilder.append("KW2787 : 'KW' '2787';\n"); - grammarBuilder.append("KW2788 : 'KW' '2788';\n"); - grammarBuilder.append("KW2789 : 'KW' '2789';\n"); - grammarBuilder.append("KW2790 : 'KW' '2790';\n"); - grammarBuilder.append("KW2791 : 'KW' '2791';\n"); - grammarBuilder.append("KW2792 : 'KW' '2792';\n"); - grammarBuilder.append("KW2793 : 'KW' '2793';\n"); - grammarBuilder.append("KW2794 : 'KW' '2794';\n"); - grammarBuilder.append("KW2795 : 'KW' '2795';\n"); - grammarBuilder.append("KW2796 : 'KW' '2796';\n"); - grammarBuilder.append("KW2797 : 'KW' '2797';\n"); - grammarBuilder.append("KW2798 : 'KW' '2798';\n"); - grammarBuilder.append("KW2799 : 'KW' '2799';\n"); - grammarBuilder.append("KW2800 : 'KW' '2800';\n"); - grammarBuilder.append("KW2801 : 'KW' '2801';\n"); - grammarBuilder.append("KW2802 : 'KW' '2802';\n"); - grammarBuilder.append("KW2803 : 'KW' '2803';\n"); - grammarBuilder.append("KW2804 : 'KW' '2804';\n"); - grammarBuilder.append("KW2805 : 'KW' '2805';\n"); - grammarBuilder.append("KW2806 : 'KW' '2806';\n"); - grammarBuilder.append("KW2807 : 'KW' '2807';\n"); - grammarBuilder.append("KW2808 : 'KW' '2808';\n"); - grammarBuilder.append("KW2809 : 'KW' '2809';\n"); - grammarBuilder.append("KW2810 : 'KW' '2810';\n"); - grammarBuilder.append("KW2811 : 'KW' '2811';\n"); - grammarBuilder.append("KW2812 : 'KW' '2812';\n"); - grammarBuilder.append("KW2813 : 'KW' '2813';\n"); - grammarBuilder.append("KW2814 : 'KW' '2814';\n"); - grammarBuilder.append("KW2815 : 'KW' '2815';\n"); - grammarBuilder.append("KW2816 : 'KW' '2816';\n"); - grammarBuilder.append("KW2817 : 'KW' '2817';\n"); - grammarBuilder.append("KW2818 : 'KW' '2818';\n"); - grammarBuilder.append("KW2819 : 'KW' '2819';\n"); - grammarBuilder.append("KW2820 : 'KW' '2820';\n"); - grammarBuilder.append("KW2821 : 'KW' '2821';\n"); - grammarBuilder.append("KW2822 : 'KW' '2822';\n"); - grammarBuilder.append("KW2823 : 'KW' '2823';\n"); - grammarBuilder.append("KW2824 : 'KW' '2824';\n"); - grammarBuilder.append("KW2825 : 'KW' '2825';\n"); - grammarBuilder.append("KW2826 : 'KW' '2826';\n"); - grammarBuilder.append("KW2827 : 'KW' '2827';\n"); - grammarBuilder.append("KW2828 : 'KW' '2828';\n"); - grammarBuilder.append("KW2829 : 'KW' '2829';\n"); - grammarBuilder.append("KW2830 : 'KW' '2830';\n"); - grammarBuilder.append("KW2831 : 'KW' '2831';\n"); - grammarBuilder.append("KW2832 : 'KW' '2832';\n"); - grammarBuilder.append("KW2833 : 'KW' '2833';\n"); - grammarBuilder.append("KW2834 : 'KW' '2834';\n"); - grammarBuilder.append("KW2835 : 'KW' '2835';\n"); - grammarBuilder.append("KW2836 : 'KW' '2836';\n"); - grammarBuilder.append("KW2837 : 'KW' '2837';\n"); - grammarBuilder.append("KW2838 : 'KW' '2838';\n"); - grammarBuilder.append("KW2839 : 'KW' '2839';\n"); - grammarBuilder.append("KW2840 : 'KW' '2840';\n"); - grammarBuilder.append("KW2841 : 'KW' '2841';\n"); - grammarBuilder.append("KW2842 : 'KW' '2842';\n"); - grammarBuilder.append("KW2843 : 'KW' '2843';\n"); - grammarBuilder.append("KW2844 : 'KW' '2844';\n"); - grammarBuilder.append("KW2845 : 'KW' '2845';\n"); - grammarBuilder.append("KW2846 : 'KW' '2846';\n"); - grammarBuilder.append("KW2847 : 'KW' '2847';\n"); - grammarBuilder.append("KW2848 : 'KW' '2848';\n"); - grammarBuilder.append("KW2849 : 'KW' '2849';\n"); - grammarBuilder.append("KW2850 : 'KW' '2850';\n"); - grammarBuilder.append("KW2851 : 'KW' '2851';\n"); - grammarBuilder.append("KW2852 : 'KW' '2852';\n"); - grammarBuilder.append("KW2853 : 'KW' '2853';\n"); - grammarBuilder.append("KW2854 : 'KW' '2854';\n"); - grammarBuilder.append("KW2855 : 'KW' '2855';\n"); - grammarBuilder.append("KW2856 : 'KW' '2856';\n"); - grammarBuilder.append("KW2857 : 'KW' '2857';\n"); - grammarBuilder.append("KW2858 : 'KW' '2858';\n"); - grammarBuilder.append("KW2859 : 'KW' '2859';\n"); - grammarBuilder.append("KW2860 : 'KW' '2860';\n"); - grammarBuilder.append("KW2861 : 'KW' '2861';\n"); - grammarBuilder.append("KW2862 : 'KW' '2862';\n"); - grammarBuilder.append("KW2863 : 'KW' '2863';\n"); - grammarBuilder.append("KW2864 : 'KW' '2864';\n"); - grammarBuilder.append("KW2865 : 'KW' '2865';\n"); - grammarBuilder.append("KW2866 : 'KW' '2866';\n"); - grammarBuilder.append("KW2867 : 'KW' '2867';\n"); - grammarBuilder.append("KW2868 : 'KW' '2868';\n"); - grammarBuilder.append("KW2869 : 'KW' '2869';\n"); - grammarBuilder.append("KW2870 : 'KW' '2870';\n"); - grammarBuilder.append("KW2871 : 'KW' '2871';\n"); - grammarBuilder.append("KW2872 : 'KW' '2872';\n"); - grammarBuilder.append("KW2873 : 'KW' '2873';\n"); - grammarBuilder.append("KW2874 : 'KW' '2874';\n"); - grammarBuilder.append("KW2875 : 'KW' '2875';\n"); - grammarBuilder.append("KW2876 : 'KW' '2876';\n"); - grammarBuilder.append("KW2877 : 'KW' '2877';\n"); - grammarBuilder.append("KW2878 : 'KW' '2878';\n"); - grammarBuilder.append("KW2879 : 'KW' '2879';\n"); - grammarBuilder.append("KW2880 : 'KW' '2880';\n"); - grammarBuilder.append("KW2881 : 'KW' '2881';\n"); - grammarBuilder.append("KW2882 : 'KW' '2882';\n"); - grammarBuilder.append("KW2883 : 'KW' '2883';\n"); - grammarBuilder.append("KW2884 : 'KW' '2884';\n"); - grammarBuilder.append("KW2885 : 'KW' '2885';\n"); - grammarBuilder.append("KW2886 : 'KW' '2886';\n"); - grammarBuilder.append("KW2887 : 'KW' '2887';\n"); - grammarBuilder.append("KW2888 : 'KW' '2888';\n"); - grammarBuilder.append("KW2889 : 'KW' '2889';\n"); - grammarBuilder.append("KW2890 : 'KW' '2890';\n"); - grammarBuilder.append("KW2891 : 'KW' '2891';\n"); - grammarBuilder.append("KW2892 : 'KW' '2892';\n"); - grammarBuilder.append("KW2893 : 'KW' '2893';\n"); - grammarBuilder.append("KW2894 : 'KW' '2894';\n"); - grammarBuilder.append("KW2895 : 'KW' '2895';\n"); - grammarBuilder.append("KW2896 : 'KW' '2896';\n"); - grammarBuilder.append("KW2897 : 'KW' '2897';\n"); - grammarBuilder.append("KW2898 : 'KW' '2898';\n"); - grammarBuilder.append("KW2899 : 'KW' '2899';\n"); - grammarBuilder.append("KW2900 : 'KW' '2900';\n"); - grammarBuilder.append("KW2901 : 'KW' '2901';\n"); - grammarBuilder.append("KW2902 : 'KW' '2902';\n"); - grammarBuilder.append("KW2903 : 'KW' '2903';\n"); - grammarBuilder.append("KW2904 : 'KW' '2904';\n"); - grammarBuilder.append("KW2905 : 'KW' '2905';\n"); - grammarBuilder.append("KW2906 : 'KW' '2906';\n"); - grammarBuilder.append("KW2907 : 'KW' '2907';\n"); - grammarBuilder.append("KW2908 : 'KW' '2908';\n"); - grammarBuilder.append("KW2909 : 'KW' '2909';\n"); - grammarBuilder.append("KW2910 : 'KW' '2910';\n"); - grammarBuilder.append("KW2911 : 'KW' '2911';\n"); - grammarBuilder.append("KW2912 : 'KW' '2912';\n"); - grammarBuilder.append("KW2913 : 'KW' '2913';\n"); - grammarBuilder.append("KW2914 : 'KW' '2914';\n"); - grammarBuilder.append("KW2915 : 'KW' '2915';\n"); - grammarBuilder.append("KW2916 : 'KW' '2916';\n"); - grammarBuilder.append("KW2917 : 'KW' '2917';\n"); - grammarBuilder.append("KW2918 : 'KW' '2918';\n"); - grammarBuilder.append("KW2919 : 'KW' '2919';\n"); - grammarBuilder.append("KW2920 : 'KW' '2920';\n"); - grammarBuilder.append("KW2921 : 'KW' '2921';\n"); - grammarBuilder.append("KW2922 : 'KW' '2922';\n"); - grammarBuilder.append("KW2923 : 'KW' '2923';\n"); - grammarBuilder.append("KW2924 : 'KW' '2924';\n"); - grammarBuilder.append("KW2925 : 'KW' '2925';\n"); - grammarBuilder.append("KW2926 : 'KW' '2926';\n"); - grammarBuilder.append("KW2927 : 'KW' '2927';\n"); - grammarBuilder.append("KW2928 : 'KW' '2928';\n"); - grammarBuilder.append("KW2929 : 'KW' '2929';\n"); - grammarBuilder.append("KW2930 : 'KW' '2930';\n"); - grammarBuilder.append("KW2931 : 'KW' '2931';\n"); - grammarBuilder.append("KW2932 : 'KW' '2932';\n"); - grammarBuilder.append("KW2933 : 'KW' '2933';\n"); - grammarBuilder.append("KW2934 : 'KW' '2934';\n"); - grammarBuilder.append("KW2935 : 'KW' '2935';\n"); - grammarBuilder.append("KW2936 : 'KW' '2936';\n"); - grammarBuilder.append("KW2937 : 'KW' '2937';\n"); - grammarBuilder.append("KW2938 : 'KW' '2938';\n"); - grammarBuilder.append("KW2939 : 'KW' '2939';\n"); - grammarBuilder.append("KW2940 : 'KW' '2940';\n"); - grammarBuilder.append("KW2941 : 'KW' '2941';\n"); - grammarBuilder.append("KW2942 : 'KW' '2942';\n"); - grammarBuilder.append("KW2943 : 'KW' '2943';\n"); - grammarBuilder.append("KW2944 : 'KW' '2944';\n"); - grammarBuilder.append("KW2945 : 'KW' '2945';\n"); - grammarBuilder.append("KW2946 : 'KW' '2946';\n"); - grammarBuilder.append("KW2947 : 'KW' '2947';\n"); - grammarBuilder.append("KW2948 : 'KW' '2948';\n"); - grammarBuilder.append("KW2949 : 'KW' '2949';\n"); - grammarBuilder.append("KW2950 : 'KW' '2950';\n"); - grammarBuilder.append("KW2951 : 'KW' '2951';\n"); - grammarBuilder.append("KW2952 : 'KW' '2952';\n"); - grammarBuilder.append("KW2953 : 'KW' '2953';\n"); - grammarBuilder.append("KW2954 : 'KW' '2954';\n"); - grammarBuilder.append("KW2955 : 'KW' '2955';\n"); - grammarBuilder.append("KW2956 : 'KW' '2956';\n"); - grammarBuilder.append("KW2957 : 'KW' '2957';\n"); - grammarBuilder.append("KW2958 : 'KW' '2958';\n"); - grammarBuilder.append("KW2959 : 'KW' '2959';\n"); - grammarBuilder.append("KW2960 : 'KW' '2960';\n"); - grammarBuilder.append("KW2961 : 'KW' '2961';\n"); - grammarBuilder.append("KW2962 : 'KW' '2962';\n"); - grammarBuilder.append("KW2963 : 'KW' '2963';\n"); - grammarBuilder.append("KW2964 : 'KW' '2964';\n"); - grammarBuilder.append("KW2965 : 'KW' '2965';\n"); - grammarBuilder.append("KW2966 : 'KW' '2966';\n"); - grammarBuilder.append("KW2967 : 'KW' '2967';\n"); - grammarBuilder.append("KW2968 : 'KW' '2968';\n"); - grammarBuilder.append("KW2969 : 'KW' '2969';\n"); - grammarBuilder.append("KW2970 : 'KW' '2970';\n"); - grammarBuilder.append("KW2971 : 'KW' '2971';\n"); - grammarBuilder.append("KW2972 : 'KW' '2972';\n"); - grammarBuilder.append("KW2973 : 'KW' '2973';\n"); - grammarBuilder.append("KW2974 : 'KW' '2974';\n"); - grammarBuilder.append("KW2975 : 'KW' '2975';\n"); - grammarBuilder.append("KW2976 : 'KW' '2976';\n"); - grammarBuilder.append("KW2977 : 'KW' '2977';\n"); - grammarBuilder.append("KW2978 : 'KW' '2978';\n"); - grammarBuilder.append("KW2979 : 'KW' '2979';\n"); - grammarBuilder.append("KW2980 : 'KW' '2980';\n"); - grammarBuilder.append("KW2981 : 'KW' '2981';\n"); - grammarBuilder.append("KW2982 : 'KW' '2982';\n"); - grammarBuilder.append("KW2983 : 'KW' '2983';\n"); - grammarBuilder.append("KW2984 : 'KW' '2984';\n"); - grammarBuilder.append("KW2985 : 'KW' '2985';\n"); - grammarBuilder.append("KW2986 : 'KW' '2986';\n"); - grammarBuilder.append("KW2987 : 'KW' '2987';\n"); - grammarBuilder.append("KW2988 : 'KW' '2988';\n"); - grammarBuilder.append("KW2989 : 'KW' '2989';\n"); - grammarBuilder.append("KW2990 : 'KW' '2990';\n"); - grammarBuilder.append("KW2991 : 'KW' '2991';\n"); - grammarBuilder.append("KW2992 : 'KW' '2992';\n"); - grammarBuilder.append("KW2993 : 'KW' '2993';\n"); - grammarBuilder.append("KW2994 : 'KW' '2994';\n"); - grammarBuilder.append("KW2995 : 'KW' '2995';\n"); - grammarBuilder.append("KW2996 : 'KW' '2996';\n"); - grammarBuilder.append("KW2997 : 'KW' '2997';\n"); - grammarBuilder.append("KW2998 : 'KW' '2998';\n"); - grammarBuilder.append("KW2999 : 'KW' '2999';\n"); - grammarBuilder.append("KW3000 : 'KW' '3000';\n"); - grammarBuilder.append("KW3001 : 'KW' '3001';\n"); - grammarBuilder.append("KW3002 : 'KW' '3002';\n"); - grammarBuilder.append("KW3003 : 'KW' '3003';\n"); - grammarBuilder.append("KW3004 : 'KW' '3004';\n"); - grammarBuilder.append("KW3005 : 'KW' '3005';\n"); - grammarBuilder.append("KW3006 : 'KW' '3006';\n"); - grammarBuilder.append("KW3007 : 'KW' '3007';\n"); - grammarBuilder.append("KW3008 : 'KW' '3008';\n"); - grammarBuilder.append("KW3009 : 'KW' '3009';\n"); - grammarBuilder.append("KW3010 : 'KW' '3010';\n"); - grammarBuilder.append("KW3011 : 'KW' '3011';\n"); - grammarBuilder.append("KW3012 : 'KW' '3012';\n"); - grammarBuilder.append("KW3013 : 'KW' '3013';\n"); - grammarBuilder.append("KW3014 : 'KW' '3014';\n"); - grammarBuilder.append("KW3015 : 'KW' '3015';\n"); - grammarBuilder.append("KW3016 : 'KW' '3016';\n"); - grammarBuilder.append("KW3017 : 'KW' '3017';\n"); - grammarBuilder.append("KW3018 : 'KW' '3018';\n"); - grammarBuilder.append("KW3019 : 'KW' '3019';\n"); - grammarBuilder.append("KW3020 : 'KW' '3020';\n"); - grammarBuilder.append("KW3021 : 'KW' '3021';\n"); - grammarBuilder.append("KW3022 : 'KW' '3022';\n"); - grammarBuilder.append("KW3023 : 'KW' '3023';\n"); - grammarBuilder.append("KW3024 : 'KW' '3024';\n"); - grammarBuilder.append("KW3025 : 'KW' '3025';\n"); - grammarBuilder.append("KW3026 : 'KW' '3026';\n"); - grammarBuilder.append("KW3027 : 'KW' '3027';\n"); - grammarBuilder.append("KW3028 : 'KW' '3028';\n"); - grammarBuilder.append("KW3029 : 'KW' '3029';\n"); - grammarBuilder.append("KW3030 : 'KW' '3030';\n"); - grammarBuilder.append("KW3031 : 'KW' '3031';\n"); - grammarBuilder.append("KW3032 : 'KW' '3032';\n"); - grammarBuilder.append("KW3033 : 'KW' '3033';\n"); - grammarBuilder.append("KW3034 : 'KW' '3034';\n"); - grammarBuilder.append("KW3035 : 'KW' '3035';\n"); - grammarBuilder.append("KW3036 : 'KW' '3036';\n"); - grammarBuilder.append("KW3037 : 'KW' '3037';\n"); - grammarBuilder.append("KW3038 : 'KW' '3038';\n"); - grammarBuilder.append("KW3039 : 'KW' '3039';\n"); - grammarBuilder.append("KW3040 : 'KW' '3040';\n"); - grammarBuilder.append("KW3041 : 'KW' '3041';\n"); - grammarBuilder.append("KW3042 : 'KW' '3042';\n"); - grammarBuilder.append("KW3043 : 'KW' '3043';\n"); - grammarBuilder.append("KW3044 : 'KW' '3044';\n"); - grammarBuilder.append("KW3045 : 'KW' '3045';\n"); - grammarBuilder.append("KW3046 : 'KW' '3046';\n"); - grammarBuilder.append("KW3047 : 'KW' '3047';\n"); - grammarBuilder.append("KW3048 : 'KW' '3048';\n"); - grammarBuilder.append("KW3049 : 'KW' '3049';\n"); - grammarBuilder.append("KW3050 : 'KW' '3050';\n"); - grammarBuilder.append("KW3051 : 'KW' '3051';\n"); - grammarBuilder.append("KW3052 : 'KW' '3052';\n"); - grammarBuilder.append("KW3053 : 'KW' '3053';\n"); - grammarBuilder.append("KW3054 : 'KW' '3054';\n"); - grammarBuilder.append("KW3055 : 'KW' '3055';\n"); - grammarBuilder.append("KW3056 : 'KW' '3056';\n"); - grammarBuilder.append("KW3057 : 'KW' '3057';\n"); - grammarBuilder.append("KW3058 : 'KW' '3058';\n"); - grammarBuilder.append("KW3059 : 'KW' '3059';\n"); - grammarBuilder.append("KW3060 : 'KW' '3060';\n"); - grammarBuilder.append("KW3061 : 'KW' '3061';\n"); - grammarBuilder.append("KW3062 : 'KW' '3062';\n"); - grammarBuilder.append("KW3063 : 'KW' '3063';\n"); - grammarBuilder.append("KW3064 : 'KW' '3064';\n"); - grammarBuilder.append("KW3065 : 'KW' '3065';\n"); - grammarBuilder.append("KW3066 : 'KW' '3066';\n"); - grammarBuilder.append("KW3067 : 'KW' '3067';\n"); - grammarBuilder.append("KW3068 : 'KW' '3068';\n"); - grammarBuilder.append("KW3069 : 'KW' '3069';\n"); - grammarBuilder.append("KW3070 : 'KW' '3070';\n"); - grammarBuilder.append("KW3071 : 'KW' '3071';\n"); - grammarBuilder.append("KW3072 : 'KW' '3072';\n"); - grammarBuilder.append("KW3073 : 'KW' '3073';\n"); - grammarBuilder.append("KW3074 : 'KW' '3074';\n"); - grammarBuilder.append("KW3075 : 'KW' '3075';\n"); - grammarBuilder.append("KW3076 : 'KW' '3076';\n"); - grammarBuilder.append("KW3077 : 'KW' '3077';\n"); - grammarBuilder.append("KW3078 : 'KW' '3078';\n"); - grammarBuilder.append("KW3079 : 'KW' '3079';\n"); - grammarBuilder.append("KW3080 : 'KW' '3080';\n"); - grammarBuilder.append("KW3081 : 'KW' '3081';\n"); - grammarBuilder.append("KW3082 : 'KW' '3082';\n"); - grammarBuilder.append("KW3083 : 'KW' '3083';\n"); - grammarBuilder.append("KW3084 : 'KW' '3084';\n"); - grammarBuilder.append("KW3085 : 'KW' '3085';\n"); - grammarBuilder.append("KW3086 : 'KW' '3086';\n"); - grammarBuilder.append("KW3087 : 'KW' '3087';\n"); - grammarBuilder.append("KW3088 : 'KW' '3088';\n"); - grammarBuilder.append("KW3089 : 'KW' '3089';\n"); - grammarBuilder.append("KW3090 : 'KW' '3090';\n"); - grammarBuilder.append("KW3091 : 'KW' '3091';\n"); - grammarBuilder.append("KW3092 : 'KW' '3092';\n"); - grammarBuilder.append("KW3093 : 'KW' '3093';\n"); - grammarBuilder.append("KW3094 : 'KW' '3094';\n"); - grammarBuilder.append("KW3095 : 'KW' '3095';\n"); - grammarBuilder.append("KW3096 : 'KW' '3096';\n"); - grammarBuilder.append("KW3097 : 'KW' '3097';\n"); - grammarBuilder.append("KW3098 : 'KW' '3098';\n"); - grammarBuilder.append("KW3099 : 'KW' '3099';\n"); - grammarBuilder.append("KW3100 : 'KW' '3100';\n"); - grammarBuilder.append("KW3101 : 'KW' '3101';\n"); - grammarBuilder.append("KW3102 : 'KW' '3102';\n"); - grammarBuilder.append("KW3103 : 'KW' '3103';\n"); - grammarBuilder.append("KW3104 : 'KW' '3104';\n"); - grammarBuilder.append("KW3105 : 'KW' '3105';\n"); - grammarBuilder.append("KW3106 : 'KW' '3106';\n"); - grammarBuilder.append("KW3107 : 'KW' '3107';\n"); - grammarBuilder.append("KW3108 : 'KW' '3108';\n"); - grammarBuilder.append("KW3109 : 'KW' '3109';\n"); - grammarBuilder.append("KW3110 : 'KW' '3110';\n"); - grammarBuilder.append("KW3111 : 'KW' '3111';\n"); - grammarBuilder.append("KW3112 : 'KW' '3112';\n"); - grammarBuilder.append("KW3113 : 'KW' '3113';\n"); - grammarBuilder.append("KW3114 : 'KW' '3114';\n"); - grammarBuilder.append("KW3115 : 'KW' '3115';\n"); - grammarBuilder.append("KW3116 : 'KW' '3116';\n"); - grammarBuilder.append("KW3117 : 'KW' '3117';\n"); - grammarBuilder.append("KW3118 : 'KW' '3118';\n"); - grammarBuilder.append("KW3119 : 'KW' '3119';\n"); - grammarBuilder.append("KW3120 : 'KW' '3120';\n"); - grammarBuilder.append("KW3121 : 'KW' '3121';\n"); - grammarBuilder.append("KW3122 : 'KW' '3122';\n"); - grammarBuilder.append("KW3123 : 'KW' '3123';\n"); - grammarBuilder.append("KW3124 : 'KW' '3124';\n"); - grammarBuilder.append("KW3125 : 'KW' '3125';\n"); - grammarBuilder.append("KW3126 : 'KW' '3126';\n"); - grammarBuilder.append("KW3127 : 'KW' '3127';\n"); - grammarBuilder.append("KW3128 : 'KW' '3128';\n"); - grammarBuilder.append("KW3129 : 'KW' '3129';\n"); - grammarBuilder.append("KW3130 : 'KW' '3130';\n"); - grammarBuilder.append("KW3131 : 'KW' '3131';\n"); - grammarBuilder.append("KW3132 : 'KW' '3132';\n"); - grammarBuilder.append("KW3133 : 'KW' '3133';\n"); - grammarBuilder.append("KW3134 : 'KW' '3134';\n"); - grammarBuilder.append("KW3135 : 'KW' '3135';\n"); - grammarBuilder.append("KW3136 : 'KW' '3136';\n"); - grammarBuilder.append("KW3137 : 'KW' '3137';\n"); - grammarBuilder.append("KW3138 : 'KW' '3138';\n"); - grammarBuilder.append("KW3139 : 'KW' '3139';\n"); - grammarBuilder.append("KW3140 : 'KW' '3140';\n"); - grammarBuilder.append("KW3141 : 'KW' '3141';\n"); - grammarBuilder.append("KW3142 : 'KW' '3142';\n"); - grammarBuilder.append("KW3143 : 'KW' '3143';\n"); - grammarBuilder.append("KW3144 : 'KW' '3144';\n"); - grammarBuilder.append("KW3145 : 'KW' '3145';\n"); - grammarBuilder.append("KW3146 : 'KW' '3146';\n"); - grammarBuilder.append("KW3147 : 'KW' '3147';\n"); - grammarBuilder.append("KW3148 : 'KW' '3148';\n"); - grammarBuilder.append("KW3149 : 'KW' '3149';\n"); - grammarBuilder.append("KW3150 : 'KW' '3150';\n"); - grammarBuilder.append("KW3151 : 'KW' '3151';\n"); - grammarBuilder.append("KW3152 : 'KW' '3152';\n"); - grammarBuilder.append("KW3153 : 'KW' '3153';\n"); - grammarBuilder.append("KW3154 : 'KW' '3154';\n"); - grammarBuilder.append("KW3155 : 'KW' '3155';\n"); - grammarBuilder.append("KW3156 : 'KW' '3156';\n"); - grammarBuilder.append("KW3157 : 'KW' '3157';\n"); - grammarBuilder.append("KW3158 : 'KW' '3158';\n"); - grammarBuilder.append("KW3159 : 'KW' '3159';\n"); - grammarBuilder.append("KW3160 : 'KW' '3160';\n"); - grammarBuilder.append("KW3161 : 'KW' '3161';\n"); - grammarBuilder.append("KW3162 : 'KW' '3162';\n"); - grammarBuilder.append("KW3163 : 'KW' '3163';\n"); - grammarBuilder.append("KW3164 : 'KW' '3164';\n"); - grammarBuilder.append("KW3165 : 'KW' '3165';\n"); - grammarBuilder.append("KW3166 : 'KW' '3166';\n"); - grammarBuilder.append("KW3167 : 'KW' '3167';\n"); - grammarBuilder.append("KW3168 : 'KW' '3168';\n"); - grammarBuilder.append("KW3169 : 'KW' '3169';\n"); - grammarBuilder.append("KW3170 : 'KW' '3170';\n"); - grammarBuilder.append("KW3171 : 'KW' '3171';\n"); - grammarBuilder.append("KW3172 : 'KW' '3172';\n"); - grammarBuilder.append("KW3173 : 'KW' '3173';\n"); - grammarBuilder.append("KW3174 : 'KW' '3174';\n"); - grammarBuilder.append("KW3175 : 'KW' '3175';\n"); - grammarBuilder.append("KW3176 : 'KW' '3176';\n"); - grammarBuilder.append("KW3177 : 'KW' '3177';\n"); - grammarBuilder.append("KW3178 : 'KW' '3178';\n"); - grammarBuilder.append("KW3179 : 'KW' '3179';\n"); - grammarBuilder.append("KW3180 : 'KW' '3180';\n"); - grammarBuilder.append("KW3181 : 'KW' '3181';\n"); - grammarBuilder.append("KW3182 : 'KW' '3182';\n"); - grammarBuilder.append("KW3183 : 'KW' '3183';\n"); - grammarBuilder.append("KW3184 : 'KW' '3184';\n"); - grammarBuilder.append("KW3185 : 'KW' '3185';\n"); - grammarBuilder.append("KW3186 : 'KW' '3186';\n"); - grammarBuilder.append("KW3187 : 'KW' '3187';\n"); - grammarBuilder.append("KW3188 : 'KW' '3188';\n"); - grammarBuilder.append("KW3189 : 'KW' '3189';\n"); - grammarBuilder.append("KW3190 : 'KW' '3190';\n"); - grammarBuilder.append("KW3191 : 'KW' '3191';\n"); - grammarBuilder.append("KW3192 : 'KW' '3192';\n"); - grammarBuilder.append("KW3193 : 'KW' '3193';\n"); - grammarBuilder.append("KW3194 : 'KW' '3194';\n"); - grammarBuilder.append("KW3195 : 'KW' '3195';\n"); - grammarBuilder.append("KW3196 : 'KW' '3196';\n"); - grammarBuilder.append("KW3197 : 'KW' '3197';\n"); - grammarBuilder.append("KW3198 : 'KW' '3198';\n"); - grammarBuilder.append("KW3199 : 'KW' '3199';\n"); - grammarBuilder.append("KW3200 : 'KW' '3200';\n"); - grammarBuilder.append("KW3201 : 'KW' '3201';\n"); - grammarBuilder.append("KW3202 : 'KW' '3202';\n"); - grammarBuilder.append("KW3203 : 'KW' '3203';\n"); - grammarBuilder.append("KW3204 : 'KW' '3204';\n"); - grammarBuilder.append("KW3205 : 'KW' '3205';\n"); - grammarBuilder.append("KW3206 : 'KW' '3206';\n"); - grammarBuilder.append("KW3207 : 'KW' '3207';\n"); - grammarBuilder.append("KW3208 : 'KW' '3208';\n"); - grammarBuilder.append("KW3209 : 'KW' '3209';\n"); - grammarBuilder.append("KW3210 : 'KW' '3210';\n"); - grammarBuilder.append("KW3211 : 'KW' '3211';\n"); - grammarBuilder.append("KW3212 : 'KW' '3212';\n"); - grammarBuilder.append("KW3213 : 'KW' '3213';\n"); - grammarBuilder.append("KW3214 : 'KW' '3214';\n"); - grammarBuilder.append("KW3215 : 'KW' '3215';\n"); - grammarBuilder.append("KW3216 : 'KW' '3216';\n"); - grammarBuilder.append("KW3217 : 'KW' '3217';\n"); - grammarBuilder.append("KW3218 : 'KW' '3218';\n"); - grammarBuilder.append("KW3219 : 'KW' '3219';\n"); - grammarBuilder.append("KW3220 : 'KW' '3220';\n"); - grammarBuilder.append("KW3221 : 'KW' '3221';\n"); - grammarBuilder.append("KW3222 : 'KW' '3222';\n"); - grammarBuilder.append("KW3223 : 'KW' '3223';\n"); - grammarBuilder.append("KW3224 : 'KW' '3224';\n"); - grammarBuilder.append("KW3225 : 'KW' '3225';\n"); - grammarBuilder.append("KW3226 : 'KW' '3226';\n"); - grammarBuilder.append("KW3227 : 'KW' '3227';\n"); - grammarBuilder.append("KW3228 : 'KW' '3228';\n"); - grammarBuilder.append("KW3229 : 'KW' '3229';\n"); - grammarBuilder.append("KW3230 : 'KW' '3230';\n"); - grammarBuilder.append("KW3231 : 'KW' '3231';\n"); - grammarBuilder.append("KW3232 : 'KW' '3232';\n"); - grammarBuilder.append("KW3233 : 'KW' '3233';\n"); - grammarBuilder.append("KW3234 : 'KW' '3234';\n"); - grammarBuilder.append("KW3235 : 'KW' '3235';\n"); - grammarBuilder.append("KW3236 : 'KW' '3236';\n"); - grammarBuilder.append("KW3237 : 'KW' '3237';\n"); - grammarBuilder.append("KW3238 : 'KW' '3238';\n"); - grammarBuilder.append("KW3239 : 'KW' '3239';\n"); - grammarBuilder.append("KW3240 : 'KW' '3240';\n"); - grammarBuilder.append("KW3241 : 'KW' '3241';\n"); - grammarBuilder.append("KW3242 : 'KW' '3242';\n"); - grammarBuilder.append("KW3243 : 'KW' '3243';\n"); - grammarBuilder.append("KW3244 : 'KW' '3244';\n"); - grammarBuilder.append("KW3245 : 'KW' '3245';\n"); - grammarBuilder.append("KW3246 : 'KW' '3246';\n"); - grammarBuilder.append("KW3247 : 'KW' '3247';\n"); - grammarBuilder.append("KW3248 : 'KW' '3248';\n"); - grammarBuilder.append("KW3249 : 'KW' '3249';\n"); - grammarBuilder.append("KW3250 : 'KW' '3250';\n"); - grammarBuilder.append("KW3251 : 'KW' '3251';\n"); - grammarBuilder.append("KW3252 : 'KW' '3252';\n"); - grammarBuilder.append("KW3253 : 'KW' '3253';\n"); - grammarBuilder.append("KW3254 : 'KW' '3254';\n"); - grammarBuilder.append("KW3255 : 'KW' '3255';\n"); - grammarBuilder.append("KW3256 : 'KW' '3256';\n"); - grammarBuilder.append("KW3257 : 'KW' '3257';\n"); - grammarBuilder.append("KW3258 : 'KW' '3258';\n"); - grammarBuilder.append("KW3259 : 'KW' '3259';\n"); - grammarBuilder.append("KW3260 : 'KW' '3260';\n"); - grammarBuilder.append("KW3261 : 'KW' '3261';\n"); - grammarBuilder.append("KW3262 : 'KW' '3262';\n"); - grammarBuilder.append("KW3263 : 'KW' '3263';\n"); - grammarBuilder.append("KW3264 : 'KW' '3264';\n"); - grammarBuilder.append("KW3265 : 'KW' '3265';\n"); - grammarBuilder.append("KW3266 : 'KW' '3266';\n"); - grammarBuilder.append("KW3267 : 'KW' '3267';\n"); - grammarBuilder.append("KW3268 : 'KW' '3268';\n"); - grammarBuilder.append("KW3269 : 'KW' '3269';\n"); - grammarBuilder.append("KW3270 : 'KW' '3270';\n"); - grammarBuilder.append("KW3271 : 'KW' '3271';\n"); - grammarBuilder.append("KW3272 : 'KW' '3272';\n"); - grammarBuilder.append("KW3273 : 'KW' '3273';\n"); - grammarBuilder.append("KW3274 : 'KW' '3274';\n"); - grammarBuilder.append("KW3275 : 'KW' '3275';\n"); - grammarBuilder.append("KW3276 : 'KW' '3276';\n"); - grammarBuilder.append("KW3277 : 'KW' '3277';\n"); - grammarBuilder.append("KW3278 : 'KW' '3278';\n"); - grammarBuilder.append("KW3279 : 'KW' '3279';\n"); - grammarBuilder.append("KW3280 : 'KW' '3280';\n"); - grammarBuilder.append("KW3281 : 'KW' '3281';\n"); - grammarBuilder.append("KW3282 : 'KW' '3282';\n"); - grammarBuilder.append("KW3283 : 'KW' '3283';\n"); - grammarBuilder.append("KW3284 : 'KW' '3284';\n"); - grammarBuilder.append("KW3285 : 'KW' '3285';\n"); - grammarBuilder.append("KW3286 : 'KW' '3286';\n"); - grammarBuilder.append("KW3287 : 'KW' '3287';\n"); - grammarBuilder.append("KW3288 : 'KW' '3288';\n"); - grammarBuilder.append("KW3289 : 'KW' '3289';\n"); - grammarBuilder.append("KW3290 : 'KW' '3290';\n"); - grammarBuilder.append("KW3291 : 'KW' '3291';\n"); - grammarBuilder.append("KW3292 : 'KW' '3292';\n"); - grammarBuilder.append("KW3293 : 'KW' '3293';\n"); - grammarBuilder.append("KW3294 : 'KW' '3294';\n"); - grammarBuilder.append("KW3295 : 'KW' '3295';\n"); - grammarBuilder.append("KW3296 : 'KW' '3296';\n"); - grammarBuilder.append("KW3297 : 'KW' '3297';\n"); - grammarBuilder.append("KW3298 : 'KW' '3298';\n"); - grammarBuilder.append("KW3299 : 'KW' '3299';\n"); - grammarBuilder.append("KW3300 : 'KW' '3300';\n"); - grammarBuilder.append("KW3301 : 'KW' '3301';\n"); - grammarBuilder.append("KW3302 : 'KW' '3302';\n"); - grammarBuilder.append("KW3303 : 'KW' '3303';\n"); - grammarBuilder.append("KW3304 : 'KW' '3304';\n"); - grammarBuilder.append("KW3305 : 'KW' '3305';\n"); - grammarBuilder.append("KW3306 : 'KW' '3306';\n"); - grammarBuilder.append("KW3307 : 'KW' '3307';\n"); - grammarBuilder.append("KW3308 : 'KW' '3308';\n"); - grammarBuilder.append("KW3309 : 'KW' '3309';\n"); - grammarBuilder.append("KW3310 : 'KW' '3310';\n"); - grammarBuilder.append("KW3311 : 'KW' '3311';\n"); - grammarBuilder.append("KW3312 : 'KW' '3312';\n"); - grammarBuilder.append("KW3313 : 'KW' '3313';\n"); - grammarBuilder.append("KW3314 : 'KW' '3314';\n"); - grammarBuilder.append("KW3315 : 'KW' '3315';\n"); - grammarBuilder.append("KW3316 : 'KW' '3316';\n"); - grammarBuilder.append("KW3317 : 'KW' '3317';\n"); - grammarBuilder.append("KW3318 : 'KW' '3318';\n"); - grammarBuilder.append("KW3319 : 'KW' '3319';\n"); - grammarBuilder.append("KW3320 : 'KW' '3320';\n"); - grammarBuilder.append("KW3321 : 'KW' '3321';\n"); - grammarBuilder.append("KW3322 : 'KW' '3322';\n"); - grammarBuilder.append("KW3323 : 'KW' '3323';\n"); - grammarBuilder.append("KW3324 : 'KW' '3324';\n"); - grammarBuilder.append("KW3325 : 'KW' '3325';\n"); - grammarBuilder.append("KW3326 : 'KW' '3326';\n"); - grammarBuilder.append("KW3327 : 'KW' '3327';\n"); - grammarBuilder.append("KW3328 : 'KW' '3328';\n"); - grammarBuilder.append("KW3329 : 'KW' '3329';\n"); - grammarBuilder.append("KW3330 : 'KW' '3330';\n"); - grammarBuilder.append("KW3331 : 'KW' '3331';\n"); - grammarBuilder.append("KW3332 : 'KW' '3332';\n"); - grammarBuilder.append("KW3333 : 'KW' '3333';\n"); - grammarBuilder.append("KW3334 : 'KW' '3334';\n"); - grammarBuilder.append("KW3335 : 'KW' '3335';\n"); - grammarBuilder.append("KW3336 : 'KW' '3336';\n"); - grammarBuilder.append("KW3337 : 'KW' '3337';\n"); - grammarBuilder.append("KW3338 : 'KW' '3338';\n"); - grammarBuilder.append("KW3339 : 'KW' '3339';\n"); - grammarBuilder.append("KW3340 : 'KW' '3340';\n"); - grammarBuilder.append("KW3341 : 'KW' '3341';\n"); - grammarBuilder.append("KW3342 : 'KW' '3342';\n"); - grammarBuilder.append("KW3343 : 'KW' '3343';\n"); - grammarBuilder.append("KW3344 : 'KW' '3344';\n"); - grammarBuilder.append("KW3345 : 'KW' '3345';\n"); - grammarBuilder.append("KW3346 : 'KW' '3346';\n"); - grammarBuilder.append("KW3347 : 'KW' '3347';\n"); - grammarBuilder.append("KW3348 : 'KW' '3348';\n"); - grammarBuilder.append("KW3349 : 'KW' '3349';\n"); - grammarBuilder.append("KW3350 : 'KW' '3350';\n"); - grammarBuilder.append("KW3351 : 'KW' '3351';\n"); - grammarBuilder.append("KW3352 : 'KW' '3352';\n"); - grammarBuilder.append("KW3353 : 'KW' '3353';\n"); - grammarBuilder.append("KW3354 : 'KW' '3354';\n"); - grammarBuilder.append("KW3355 : 'KW' '3355';\n"); - grammarBuilder.append("KW3356 : 'KW' '3356';\n"); - grammarBuilder.append("KW3357 : 'KW' '3357';\n"); - grammarBuilder.append("KW3358 : 'KW' '3358';\n"); - grammarBuilder.append("KW3359 : 'KW' '3359';\n"); - grammarBuilder.append("KW3360 : 'KW' '3360';\n"); - grammarBuilder.append("KW3361 : 'KW' '3361';\n"); - grammarBuilder.append("KW3362 : 'KW' '3362';\n"); - grammarBuilder.append("KW3363 : 'KW' '3363';\n"); - grammarBuilder.append("KW3364 : 'KW' '3364';\n"); - grammarBuilder.append("KW3365 : 'KW' '3365';\n"); - grammarBuilder.append("KW3366 : 'KW' '3366';\n"); - grammarBuilder.append("KW3367 : 'KW' '3367';\n"); - grammarBuilder.append("KW3368 : 'KW' '3368';\n"); - grammarBuilder.append("KW3369 : 'KW' '3369';\n"); - grammarBuilder.append("KW3370 : 'KW' '3370';\n"); - grammarBuilder.append("KW3371 : 'KW' '3371';\n"); - grammarBuilder.append("KW3372 : 'KW' '3372';\n"); - grammarBuilder.append("KW3373 : 'KW' '3373';\n"); - grammarBuilder.append("KW3374 : 'KW' '3374';\n"); - grammarBuilder.append("KW3375 : 'KW' '3375';\n"); - grammarBuilder.append("KW3376 : 'KW' '3376';\n"); - grammarBuilder.append("KW3377 : 'KW' '3377';\n"); - grammarBuilder.append("KW3378 : 'KW' '3378';\n"); - grammarBuilder.append("KW3379 : 'KW' '3379';\n"); - grammarBuilder.append("KW3380 : 'KW' '3380';\n"); - grammarBuilder.append("KW3381 : 'KW' '3381';\n"); - grammarBuilder.append("KW3382 : 'KW' '3382';\n"); - grammarBuilder.append("KW3383 : 'KW' '3383';\n"); - grammarBuilder.append("KW3384 : 'KW' '3384';\n"); - grammarBuilder.append("KW3385 : 'KW' '3385';\n"); - grammarBuilder.append("KW3386 : 'KW' '3386';\n"); - grammarBuilder.append("KW3387 : 'KW' '3387';\n"); - grammarBuilder.append("KW3388 : 'KW' '3388';\n"); - grammarBuilder.append("KW3389 : 'KW' '3389';\n"); - grammarBuilder.append("KW3390 : 'KW' '3390';\n"); - grammarBuilder.append("KW3391 : 'KW' '3391';\n"); - grammarBuilder.append("KW3392 : 'KW' '3392';\n"); - grammarBuilder.append("KW3393 : 'KW' '3393';\n"); - grammarBuilder.append("KW3394 : 'KW' '3394';\n"); - grammarBuilder.append("KW3395 : 'KW' '3395';\n"); - grammarBuilder.append("KW3396 : 'KW' '3396';\n"); - grammarBuilder.append("KW3397 : 'KW' '3397';\n"); - grammarBuilder.append("KW3398 : 'KW' '3398';\n"); - grammarBuilder.append("KW3399 : 'KW' '3399';\n"); - grammarBuilder.append("KW3400 : 'KW' '3400';\n"); - grammarBuilder.append("KW3401 : 'KW' '3401';\n"); - grammarBuilder.append("KW3402 : 'KW' '3402';\n"); - grammarBuilder.append("KW3403 : 'KW' '3403';\n"); - grammarBuilder.append("KW3404 : 'KW' '3404';\n"); - grammarBuilder.append("KW3405 : 'KW' '3405';\n"); - grammarBuilder.append("KW3406 : 'KW' '3406';\n"); - grammarBuilder.append("KW3407 : 'KW' '3407';\n"); - grammarBuilder.append("KW3408 : 'KW' '3408';\n"); - grammarBuilder.append("KW3409 : 'KW' '3409';\n"); - grammarBuilder.append("KW3410 : 'KW' '3410';\n"); - grammarBuilder.append("KW3411 : 'KW' '3411';\n"); - grammarBuilder.append("KW3412 : 'KW' '3412';\n"); - grammarBuilder.append("KW3413 : 'KW' '3413';\n"); - grammarBuilder.append("KW3414 : 'KW' '3414';\n"); - grammarBuilder.append("KW3415 : 'KW' '3415';\n"); - grammarBuilder.append("KW3416 : 'KW' '3416';\n"); - grammarBuilder.append("KW3417 : 'KW' '3417';\n"); - grammarBuilder.append("KW3418 : 'KW' '3418';\n"); - grammarBuilder.append("KW3419 : 'KW' '3419';\n"); - grammarBuilder.append("KW3420 : 'KW' '3420';\n"); - grammarBuilder.append("KW3421 : 'KW' '3421';\n"); - grammarBuilder.append("KW3422 : 'KW' '3422';\n"); - grammarBuilder.append("KW3423 : 'KW' '3423';\n"); - grammarBuilder.append("KW3424 : 'KW' '3424';\n"); - grammarBuilder.append("KW3425 : 'KW' '3425';\n"); - grammarBuilder.append("KW3426 : 'KW' '3426';\n"); - grammarBuilder.append("KW3427 : 'KW' '3427';\n"); - grammarBuilder.append("KW3428 : 'KW' '3428';\n"); - grammarBuilder.append("KW3429 : 'KW' '3429';\n"); - grammarBuilder.append("KW3430 : 'KW' '3430';\n"); - grammarBuilder.append("KW3431 : 'KW' '3431';\n"); - grammarBuilder.append("KW3432 : 'KW' '3432';\n"); - grammarBuilder.append("KW3433 : 'KW' '3433';\n"); - grammarBuilder.append("KW3434 : 'KW' '3434';\n"); - grammarBuilder.append("KW3435 : 'KW' '3435';\n"); - grammarBuilder.append("KW3436 : 'KW' '3436';\n"); - grammarBuilder.append("KW3437 : 'KW' '3437';\n"); - grammarBuilder.append("KW3438 : 'KW' '3438';\n"); - grammarBuilder.append("KW3439 : 'KW' '3439';\n"); - grammarBuilder.append("KW3440 : 'KW' '3440';\n"); - grammarBuilder.append("KW3441 : 'KW' '3441';\n"); - grammarBuilder.append("KW3442 : 'KW' '3442';\n"); - grammarBuilder.append("KW3443 : 'KW' '3443';\n"); - grammarBuilder.append("KW3444 : 'KW' '3444';\n"); - grammarBuilder.append("KW3445 : 'KW' '3445';\n"); - grammarBuilder.append("KW3446 : 'KW' '3446';\n"); - grammarBuilder.append("KW3447 : 'KW' '3447';\n"); - grammarBuilder.append("KW3448 : 'KW' '3448';\n"); - grammarBuilder.append("KW3449 : 'KW' '3449';\n"); - grammarBuilder.append("KW3450 : 'KW' '3450';\n"); - grammarBuilder.append("KW3451 : 'KW' '3451';\n"); - grammarBuilder.append("KW3452 : 'KW' '3452';\n"); - grammarBuilder.append("KW3453 : 'KW' '3453';\n"); - grammarBuilder.append("KW3454 : 'KW' '3454';\n"); - grammarBuilder.append("KW3455 : 'KW' '3455';\n"); - grammarBuilder.append("KW3456 : 'KW' '3456';\n"); - grammarBuilder.append("KW3457 : 'KW' '3457';\n"); - grammarBuilder.append("KW3458 : 'KW' '3458';\n"); - grammarBuilder.append("KW3459 : 'KW' '3459';\n"); - grammarBuilder.append("KW3460 : 'KW' '3460';\n"); - grammarBuilder.append("KW3461 : 'KW' '3461';\n"); - grammarBuilder.append("KW3462 : 'KW' '3462';\n"); - grammarBuilder.append("KW3463 : 'KW' '3463';\n"); - grammarBuilder.append("KW3464 : 'KW' '3464';\n"); - grammarBuilder.append("KW3465 : 'KW' '3465';\n"); - grammarBuilder.append("KW3466 : 'KW' '3466';\n"); - grammarBuilder.append("KW3467 : 'KW' '3467';\n"); - grammarBuilder.append("KW3468 : 'KW' '3468';\n"); - grammarBuilder.append("KW3469 : 'KW' '3469';\n"); - grammarBuilder.append("KW3470 : 'KW' '3470';\n"); - grammarBuilder.append("KW3471 : 'KW' '3471';\n"); - grammarBuilder.append("KW3472 : 'KW' '3472';\n"); - grammarBuilder.append("KW3473 : 'KW' '3473';\n"); - grammarBuilder.append("KW3474 : 'KW' '3474';\n"); - grammarBuilder.append("KW3475 : 'KW' '3475';\n"); - grammarBuilder.append("KW3476 : 'KW' '3476';\n"); - grammarBuilder.append("KW3477 : 'KW' '3477';\n"); - grammarBuilder.append("KW3478 : 'KW' '3478';\n"); - grammarBuilder.append("KW3479 : 'KW' '3479';\n"); - grammarBuilder.append("KW3480 : 'KW' '3480';\n"); - grammarBuilder.append("KW3481 : 'KW' '3481';\n"); - grammarBuilder.append("KW3482 : 'KW' '3482';\n"); - grammarBuilder.append("KW3483 : 'KW' '3483';\n"); - grammarBuilder.append("KW3484 : 'KW' '3484';\n"); - grammarBuilder.append("KW3485 : 'KW' '3485';\n"); - grammarBuilder.append("KW3486 : 'KW' '3486';\n"); - grammarBuilder.append("KW3487 : 'KW' '3487';\n"); - grammarBuilder.append("KW3488 : 'KW' '3488';\n"); - grammarBuilder.append("KW3489 : 'KW' '3489';\n"); - grammarBuilder.append("KW3490 : 'KW' '3490';\n"); - grammarBuilder.append("KW3491 : 'KW' '3491';\n"); - grammarBuilder.append("KW3492 : 'KW' '3492';\n"); - grammarBuilder.append("KW3493 : 'KW' '3493';\n"); - grammarBuilder.append("KW3494 : 'KW' '3494';\n"); - grammarBuilder.append("KW3495 : 'KW' '3495';\n"); - grammarBuilder.append("KW3496 : 'KW' '3496';\n"); - grammarBuilder.append("KW3497 : 'KW' '3497';\n"); - grammarBuilder.append("KW3498 : 'KW' '3498';\n"); - grammarBuilder.append("KW3499 : 'KW' '3499';\n"); - grammarBuilder.append("KW3500 : 'KW' '3500';\n"); - grammarBuilder.append("KW3501 : 'KW' '3501';\n"); - grammarBuilder.append("KW3502 : 'KW' '3502';\n"); - grammarBuilder.append("KW3503 : 'KW' '3503';\n"); - grammarBuilder.append("KW3504 : 'KW' '3504';\n"); - grammarBuilder.append("KW3505 : 'KW' '3505';\n"); - grammarBuilder.append("KW3506 : 'KW' '3506';\n"); - grammarBuilder.append("KW3507 : 'KW' '3507';\n"); - grammarBuilder.append("KW3508 : 'KW' '3508';\n"); - grammarBuilder.append("KW3509 : 'KW' '3509';\n"); - grammarBuilder.append("KW3510 : 'KW' '3510';\n"); - grammarBuilder.append("KW3511 : 'KW' '3511';\n"); - grammarBuilder.append("KW3512 : 'KW' '3512';\n"); - grammarBuilder.append("KW3513 : 'KW' '3513';\n"); - grammarBuilder.append("KW3514 : 'KW' '3514';\n"); - grammarBuilder.append("KW3515 : 'KW' '3515';\n"); - grammarBuilder.append("KW3516 : 'KW' '3516';\n"); - grammarBuilder.append("KW3517 : 'KW' '3517';\n"); - grammarBuilder.append("KW3518 : 'KW' '3518';\n"); - grammarBuilder.append("KW3519 : 'KW' '3519';\n"); - grammarBuilder.append("KW3520 : 'KW' '3520';\n"); - grammarBuilder.append("KW3521 : 'KW' '3521';\n"); - grammarBuilder.append("KW3522 : 'KW' '3522';\n"); - grammarBuilder.append("KW3523 : 'KW' '3523';\n"); - grammarBuilder.append("KW3524 : 'KW' '3524';\n"); - grammarBuilder.append("KW3525 : 'KW' '3525';\n"); - grammarBuilder.append("KW3526 : 'KW' '3526';\n"); - grammarBuilder.append("KW3527 : 'KW' '3527';\n"); - grammarBuilder.append("KW3528 : 'KW' '3528';\n"); - grammarBuilder.append("KW3529 : 'KW' '3529';\n"); - grammarBuilder.append("KW3530 : 'KW' '3530';\n"); - grammarBuilder.append("KW3531 : 'KW' '3531';\n"); - grammarBuilder.append("KW3532 : 'KW' '3532';\n"); - grammarBuilder.append("KW3533 : 'KW' '3533';\n"); - grammarBuilder.append("KW3534 : 'KW' '3534';\n"); - grammarBuilder.append("KW3535 : 'KW' '3535';\n"); - grammarBuilder.append("KW3536 : 'KW' '3536';\n"); - grammarBuilder.append("KW3537 : 'KW' '3537';\n"); - grammarBuilder.append("KW3538 : 'KW' '3538';\n"); - grammarBuilder.append("KW3539 : 'KW' '3539';\n"); - grammarBuilder.append("KW3540 : 'KW' '3540';\n"); - grammarBuilder.append("KW3541 : 'KW' '3541';\n"); - grammarBuilder.append("KW3542 : 'KW' '3542';\n"); - grammarBuilder.append("KW3543 : 'KW' '3543';\n"); - grammarBuilder.append("KW3544 : 'KW' '3544';\n"); - grammarBuilder.append("KW3545 : 'KW' '3545';\n"); - grammarBuilder.append("KW3546 : 'KW' '3546';\n"); - grammarBuilder.append("KW3547 : 'KW' '3547';\n"); - grammarBuilder.append("KW3548 : 'KW' '3548';\n"); - grammarBuilder.append("KW3549 : 'KW' '3549';\n"); - grammarBuilder.append("KW3550 : 'KW' '3550';\n"); - grammarBuilder.append("KW3551 : 'KW' '3551';\n"); - grammarBuilder.append("KW3552 : 'KW' '3552';\n"); - grammarBuilder.append("KW3553 : 'KW' '3553';\n"); - grammarBuilder.append("KW3554 : 'KW' '3554';\n"); - grammarBuilder.append("KW3555 : 'KW' '3555';\n"); - grammarBuilder.append("KW3556 : 'KW' '3556';\n"); - grammarBuilder.append("KW3557 : 'KW' '3557';\n"); - grammarBuilder.append("KW3558 : 'KW' '3558';\n"); - grammarBuilder.append("KW3559 : 'KW' '3559';\n"); - grammarBuilder.append("KW3560 : 'KW' '3560';\n"); - grammarBuilder.append("KW3561 : 'KW' '3561';\n"); - grammarBuilder.append("KW3562 : 'KW' '3562';\n"); - grammarBuilder.append("KW3563 : 'KW' '3563';\n"); - grammarBuilder.append("KW3564 : 'KW' '3564';\n"); - grammarBuilder.append("KW3565 : 'KW' '3565';\n"); - grammarBuilder.append("KW3566 : 'KW' '3566';\n"); - grammarBuilder.append("KW3567 : 'KW' '3567';\n"); - grammarBuilder.append("KW3568 : 'KW' '3568';\n"); - grammarBuilder.append("KW3569 : 'KW' '3569';\n"); - grammarBuilder.append("KW3570 : 'KW' '3570';\n"); - grammarBuilder.append("KW3571 : 'KW' '3571';\n"); - grammarBuilder.append("KW3572 : 'KW' '3572';\n"); - grammarBuilder.append("KW3573 : 'KW' '3573';\n"); - grammarBuilder.append("KW3574 : 'KW' '3574';\n"); - grammarBuilder.append("KW3575 : 'KW' '3575';\n"); - grammarBuilder.append("KW3576 : 'KW' '3576';\n"); - grammarBuilder.append("KW3577 : 'KW' '3577';\n"); - grammarBuilder.append("KW3578 : 'KW' '3578';\n"); - grammarBuilder.append("KW3579 : 'KW' '3579';\n"); - grammarBuilder.append("KW3580 : 'KW' '3580';\n"); - grammarBuilder.append("KW3581 : 'KW' '3581';\n"); - grammarBuilder.append("KW3582 : 'KW' '3582';\n"); - grammarBuilder.append("KW3583 : 'KW' '3583';\n"); - grammarBuilder.append("KW3584 : 'KW' '3584';\n"); - grammarBuilder.append("KW3585 : 'KW' '3585';\n"); - grammarBuilder.append("KW3586 : 'KW' '3586';\n"); - grammarBuilder.append("KW3587 : 'KW' '3587';\n"); - grammarBuilder.append("KW3588 : 'KW' '3588';\n"); - grammarBuilder.append("KW3589 : 'KW' '3589';\n"); - grammarBuilder.append("KW3590 : 'KW' '3590';\n"); - grammarBuilder.append("KW3591 : 'KW' '3591';\n"); - grammarBuilder.append("KW3592 : 'KW' '3592';\n"); - grammarBuilder.append("KW3593 : 'KW' '3593';\n"); - grammarBuilder.append("KW3594 : 'KW' '3594';\n"); - grammarBuilder.append("KW3595 : 'KW' '3595';\n"); - grammarBuilder.append("KW3596 : 'KW' '3596';\n"); - grammarBuilder.append("KW3597 : 'KW' '3597';\n"); - grammarBuilder.append("KW3598 : 'KW' '3598';\n"); - grammarBuilder.append("KW3599 : 'KW' '3599';\n"); - grammarBuilder.append("KW3600 : 'KW' '3600';\n"); - grammarBuilder.append("KW3601 : 'KW' '3601';\n"); - grammarBuilder.append("KW3602 : 'KW' '3602';\n"); - grammarBuilder.append("KW3603 : 'KW' '3603';\n"); - grammarBuilder.append("KW3604 : 'KW' '3604';\n"); - grammarBuilder.append("KW3605 : 'KW' '3605';\n"); - grammarBuilder.append("KW3606 : 'KW' '3606';\n"); - grammarBuilder.append("KW3607 : 'KW' '3607';\n"); - grammarBuilder.append("KW3608 : 'KW' '3608';\n"); - grammarBuilder.append("KW3609 : 'KW' '3609';\n"); - grammarBuilder.append("KW3610 : 'KW' '3610';\n"); - grammarBuilder.append("KW3611 : 'KW' '3611';\n"); - grammarBuilder.append("KW3612 : 'KW' '3612';\n"); - grammarBuilder.append("KW3613 : 'KW' '3613';\n"); - grammarBuilder.append("KW3614 : 'KW' '3614';\n"); - grammarBuilder.append("KW3615 : 'KW' '3615';\n"); - grammarBuilder.append("KW3616 : 'KW' '3616';\n"); - grammarBuilder.append("KW3617 : 'KW' '3617';\n"); - grammarBuilder.append("KW3618 : 'KW' '3618';\n"); - grammarBuilder.append("KW3619 : 'KW' '3619';\n"); - grammarBuilder.append("KW3620 : 'KW' '3620';\n"); - grammarBuilder.append("KW3621 : 'KW' '3621';\n"); - grammarBuilder.append("KW3622 : 'KW' '3622';\n"); - grammarBuilder.append("KW3623 : 'KW' '3623';\n"); - grammarBuilder.append("KW3624 : 'KW' '3624';\n"); - grammarBuilder.append("KW3625 : 'KW' '3625';\n"); - grammarBuilder.append("KW3626 : 'KW' '3626';\n"); - grammarBuilder.append("KW3627 : 'KW' '3627';\n"); - grammarBuilder.append("KW3628 : 'KW' '3628';\n"); - grammarBuilder.append("KW3629 : 'KW' '3629';\n"); - grammarBuilder.append("KW3630 : 'KW' '3630';\n"); - grammarBuilder.append("KW3631 : 'KW' '3631';\n"); - grammarBuilder.append("KW3632 : 'KW' '3632';\n"); - grammarBuilder.append("KW3633 : 'KW' '3633';\n"); - grammarBuilder.append("KW3634 : 'KW' '3634';\n"); - grammarBuilder.append("KW3635 : 'KW' '3635';\n"); - grammarBuilder.append("KW3636 : 'KW' '3636';\n"); - grammarBuilder.append("KW3637 : 'KW' '3637';\n"); - grammarBuilder.append("KW3638 : 'KW' '3638';\n"); - grammarBuilder.append("KW3639 : 'KW' '3639';\n"); - grammarBuilder.append("KW3640 : 'KW' '3640';\n"); - grammarBuilder.append("KW3641 : 'KW' '3641';\n"); - grammarBuilder.append("KW3642 : 'KW' '3642';\n"); - grammarBuilder.append("KW3643 : 'KW' '3643';\n"); - grammarBuilder.append("KW3644 : 'KW' '3644';\n"); - grammarBuilder.append("KW3645 : 'KW' '3645';\n"); - grammarBuilder.append("KW3646 : 'KW' '3646';\n"); - grammarBuilder.append("KW3647 : 'KW' '3647';\n"); - grammarBuilder.append("KW3648 : 'KW' '3648';\n"); - grammarBuilder.append("KW3649 : 'KW' '3649';\n"); - grammarBuilder.append("KW3650 : 'KW' '3650';\n"); - grammarBuilder.append("KW3651 : 'KW' '3651';\n"); - grammarBuilder.append("KW3652 : 'KW' '3652';\n"); - grammarBuilder.append("KW3653 : 'KW' '3653';\n"); - grammarBuilder.append("KW3654 : 'KW' '3654';\n"); - grammarBuilder.append("KW3655 : 'KW' '3655';\n"); - grammarBuilder.append("KW3656 : 'KW' '3656';\n"); - grammarBuilder.append("KW3657 : 'KW' '3657';\n"); - grammarBuilder.append("KW3658 : 'KW' '3658';\n"); - grammarBuilder.append("KW3659 : 'KW' '3659';\n"); - grammarBuilder.append("KW3660 : 'KW' '3660';\n"); - grammarBuilder.append("KW3661 : 'KW' '3661';\n"); - grammarBuilder.append("KW3662 : 'KW' '3662';\n"); - grammarBuilder.append("KW3663 : 'KW' '3663';\n"); - grammarBuilder.append("KW3664 : 'KW' '3664';\n"); - grammarBuilder.append("KW3665 : 'KW' '3665';\n"); - grammarBuilder.append("KW3666 : 'KW' '3666';\n"); - grammarBuilder.append("KW3667 : 'KW' '3667';\n"); - grammarBuilder.append("KW3668 : 'KW' '3668';\n"); - grammarBuilder.append("KW3669 : 'KW' '3669';\n"); - grammarBuilder.append("KW3670 : 'KW' '3670';\n"); - grammarBuilder.append("KW3671 : 'KW' '3671';\n"); - grammarBuilder.append("KW3672 : 'KW' '3672';\n"); - grammarBuilder.append("KW3673 : 'KW' '3673';\n"); - grammarBuilder.append("KW3674 : 'KW' '3674';\n"); - grammarBuilder.append("KW3675 : 'KW' '3675';\n"); - grammarBuilder.append("KW3676 : 'KW' '3676';\n"); - grammarBuilder.append("KW3677 : 'KW' '3677';\n"); - grammarBuilder.append("KW3678 : 'KW' '3678';\n"); - grammarBuilder.append("KW3679 : 'KW' '3679';\n"); - grammarBuilder.append("KW3680 : 'KW' '3680';\n"); - grammarBuilder.append("KW3681 : 'KW' '3681';\n"); - grammarBuilder.append("KW3682 : 'KW' '3682';\n"); - grammarBuilder.append("KW3683 : 'KW' '3683';\n"); - grammarBuilder.append("KW3684 : 'KW' '3684';\n"); - grammarBuilder.append("KW3685 : 'KW' '3685';\n"); - grammarBuilder.append("KW3686 : 'KW' '3686';\n"); - grammarBuilder.append("KW3687 : 'KW' '3687';\n"); - grammarBuilder.append("KW3688 : 'KW' '3688';\n"); - grammarBuilder.append("KW3689 : 'KW' '3689';\n"); - grammarBuilder.append("KW3690 : 'KW' '3690';\n"); - grammarBuilder.append("KW3691 : 'KW' '3691';\n"); - grammarBuilder.append("KW3692 : 'KW' '3692';\n"); - grammarBuilder.append("KW3693 : 'KW' '3693';\n"); - grammarBuilder.append("KW3694 : 'KW' '3694';\n"); - grammarBuilder.append("KW3695 : 'KW' '3695';\n"); - grammarBuilder.append("KW3696 : 'KW' '3696';\n"); - grammarBuilder.append("KW3697 : 'KW' '3697';\n"); - grammarBuilder.append("KW3698 : 'KW' '3698';\n"); - grammarBuilder.append("KW3699 : 'KW' '3699';\n"); - grammarBuilder.append("KW3700 : 'KW' '3700';\n"); - grammarBuilder.append("KW3701 : 'KW' '3701';\n"); - grammarBuilder.append("KW3702 : 'KW' '3702';\n"); - grammarBuilder.append("KW3703 : 'KW' '3703';\n"); - grammarBuilder.append("KW3704 : 'KW' '3704';\n"); - grammarBuilder.append("KW3705 : 'KW' '3705';\n"); - grammarBuilder.append("KW3706 : 'KW' '3706';\n"); - grammarBuilder.append("KW3707 : 'KW' '3707';\n"); - grammarBuilder.append("KW3708 : 'KW' '3708';\n"); - grammarBuilder.append("KW3709 : 'KW' '3709';\n"); - grammarBuilder.append("KW3710 : 'KW' '3710';\n"); - grammarBuilder.append("KW3711 : 'KW' '3711';\n"); - grammarBuilder.append("KW3712 : 'KW' '3712';\n"); - grammarBuilder.append("KW3713 : 'KW' '3713';\n"); - grammarBuilder.append("KW3714 : 'KW' '3714';\n"); - grammarBuilder.append("KW3715 : 'KW' '3715';\n"); - grammarBuilder.append("KW3716 : 'KW' '3716';\n"); - grammarBuilder.append("KW3717 : 'KW' '3717';\n"); - grammarBuilder.append("KW3718 : 'KW' '3718';\n"); - grammarBuilder.append("KW3719 : 'KW' '3719';\n"); - grammarBuilder.append("KW3720 : 'KW' '3720';\n"); - grammarBuilder.append("KW3721 : 'KW' '3721';\n"); - grammarBuilder.append("KW3722 : 'KW' '3722';\n"); - grammarBuilder.append("KW3723 : 'KW' '3723';\n"); - grammarBuilder.append("KW3724 : 'KW' '3724';\n"); - grammarBuilder.append("KW3725 : 'KW' '3725';\n"); - grammarBuilder.append("KW3726 : 'KW' '3726';\n"); - grammarBuilder.append("KW3727 : 'KW' '3727';\n"); - grammarBuilder.append("KW3728 : 'KW' '3728';\n"); - grammarBuilder.append("KW3729 : 'KW' '3729';\n"); - grammarBuilder.append("KW3730 : 'KW' '3730';\n"); - grammarBuilder.append("KW3731 : 'KW' '3731';\n"); - grammarBuilder.append("KW3732 : 'KW' '3732';\n"); - grammarBuilder.append("KW3733 : 'KW' '3733';\n"); - grammarBuilder.append("KW3734 : 'KW' '3734';\n"); - grammarBuilder.append("KW3735 : 'KW' '3735';\n"); - grammarBuilder.append("KW3736 : 'KW' '3736';\n"); - grammarBuilder.append("KW3737 : 'KW' '3737';\n"); - grammarBuilder.append("KW3738 : 'KW' '3738';\n"); - grammarBuilder.append("KW3739 : 'KW' '3739';\n"); - grammarBuilder.append("KW3740 : 'KW' '3740';\n"); - grammarBuilder.append("KW3741 : 'KW' '3741';\n"); - grammarBuilder.append("KW3742 : 'KW' '3742';\n"); - grammarBuilder.append("KW3743 : 'KW' '3743';\n"); - grammarBuilder.append("KW3744 : 'KW' '3744';\n"); - grammarBuilder.append("KW3745 : 'KW' '3745';\n"); - grammarBuilder.append("KW3746 : 'KW' '3746';\n"); - grammarBuilder.append("KW3747 : 'KW' '3747';\n"); - grammarBuilder.append("KW3748 : 'KW' '3748';\n"); - grammarBuilder.append("KW3749 : 'KW' '3749';\n"); - grammarBuilder.append("KW3750 : 'KW' '3750';\n"); - grammarBuilder.append("KW3751 : 'KW' '3751';\n"); - grammarBuilder.append("KW3752 : 'KW' '3752';\n"); - grammarBuilder.append("KW3753 : 'KW' '3753';\n"); - grammarBuilder.append("KW3754 : 'KW' '3754';\n"); - grammarBuilder.append("KW3755 : 'KW' '3755';\n"); - grammarBuilder.append("KW3756 : 'KW' '3756';\n"); - grammarBuilder.append("KW3757 : 'KW' '3757';\n"); - grammarBuilder.append("KW3758 : 'KW' '3758';\n"); - grammarBuilder.append("KW3759 : 'KW' '3759';\n"); - grammarBuilder.append("KW3760 : 'KW' '3760';\n"); - grammarBuilder.append("KW3761 : 'KW' '3761';\n"); - grammarBuilder.append("KW3762 : 'KW' '3762';\n"); - grammarBuilder.append("KW3763 : 'KW' '3763';\n"); - grammarBuilder.append("KW3764 : 'KW' '3764';\n"); - grammarBuilder.append("KW3765 : 'KW' '3765';\n"); - grammarBuilder.append("KW3766 : 'KW' '3766';\n"); - grammarBuilder.append("KW3767 : 'KW' '3767';\n"); - grammarBuilder.append("KW3768 : 'KW' '3768';\n"); - grammarBuilder.append("KW3769 : 'KW' '3769';\n"); - grammarBuilder.append("KW3770 : 'KW' '3770';\n"); - grammarBuilder.append("KW3771 : 'KW' '3771';\n"); - grammarBuilder.append("KW3772 : 'KW' '3772';\n"); - grammarBuilder.append("KW3773 : 'KW' '3773';\n"); - grammarBuilder.append("KW3774 : 'KW' '3774';\n"); - grammarBuilder.append("KW3775 : 'KW' '3775';\n"); - grammarBuilder.append("KW3776 : 'KW' '3776';\n"); - grammarBuilder.append("KW3777 : 'KW' '3777';\n"); - grammarBuilder.append("KW3778 : 'KW' '3778';\n"); - grammarBuilder.append("KW3779 : 'KW' '3779';\n"); - grammarBuilder.append("KW3780 : 'KW' '3780';\n"); - grammarBuilder.append("KW3781 : 'KW' '3781';\n"); - grammarBuilder.append("KW3782 : 'KW' '3782';\n"); - grammarBuilder.append("KW3783 : 'KW' '3783';\n"); - grammarBuilder.append("KW3784 : 'KW' '3784';\n"); - grammarBuilder.append("KW3785 : 'KW' '3785';\n"); - grammarBuilder.append("KW3786 : 'KW' '3786';\n"); - grammarBuilder.append("KW3787 : 'KW' '3787';\n"); - grammarBuilder.append("KW3788 : 'KW' '3788';\n"); - grammarBuilder.append("KW3789 : 'KW' '3789';\n"); - grammarBuilder.append("KW3790 : 'KW' '3790';\n"); - grammarBuilder.append("KW3791 : 'KW' '3791';\n"); - grammarBuilder.append("KW3792 : 'KW' '3792';\n"); - grammarBuilder.append("KW3793 : 'KW' '3793';\n"); - grammarBuilder.append("KW3794 : 'KW' '3794';\n"); - grammarBuilder.append("KW3795 : 'KW' '3795';\n"); - grammarBuilder.append("KW3796 : 'KW' '3796';\n"); - grammarBuilder.append("KW3797 : 'KW' '3797';\n"); - grammarBuilder.append("KW3798 : 'KW' '3798';\n"); - grammarBuilder.append("KW3799 : 'KW' '3799';\n"); - grammarBuilder.append("KW3800 : 'KW' '3800';\n"); - grammarBuilder.append("KW3801 : 'KW' '3801';\n"); - grammarBuilder.append("KW3802 : 'KW' '3802';\n"); - grammarBuilder.append("KW3803 : 'KW' '3803';\n"); - grammarBuilder.append("KW3804 : 'KW' '3804';\n"); - grammarBuilder.append("KW3805 : 'KW' '3805';\n"); - grammarBuilder.append("KW3806 : 'KW' '3806';\n"); - grammarBuilder.append("KW3807 : 'KW' '3807';\n"); - grammarBuilder.append("KW3808 : 'KW' '3808';\n"); - grammarBuilder.append("KW3809 : 'KW' '3809';\n"); - grammarBuilder.append("KW3810 : 'KW' '3810';\n"); - grammarBuilder.append("KW3811 : 'KW' '3811';\n"); - grammarBuilder.append("KW3812 : 'KW' '3812';\n"); - grammarBuilder.append("KW3813 : 'KW' '3813';\n"); - grammarBuilder.append("KW3814 : 'KW' '3814';\n"); - grammarBuilder.append("KW3815 : 'KW' '3815';\n"); - grammarBuilder.append("KW3816 : 'KW' '3816';\n"); - grammarBuilder.append("KW3817 : 'KW' '3817';\n"); - grammarBuilder.append("KW3818 : 'KW' '3818';\n"); - grammarBuilder.append("KW3819 : 'KW' '3819';\n"); - grammarBuilder.append("KW3820 : 'KW' '3820';\n"); - grammarBuilder.append("KW3821 : 'KW' '3821';\n"); - grammarBuilder.append("KW3822 : 'KW' '3822';\n"); - grammarBuilder.append("KW3823 : 'KW' '3823';\n"); - grammarBuilder.append("KW3824 : 'KW' '3824';\n"); - grammarBuilder.append("KW3825 : 'KW' '3825';\n"); - grammarBuilder.append("KW3826 : 'KW' '3826';\n"); - grammarBuilder.append("KW3827 : 'KW' '3827';\n"); - grammarBuilder.append("KW3828 : 'KW' '3828';\n"); - grammarBuilder.append("KW3829 : 'KW' '3829';\n"); - grammarBuilder.append("KW3830 : 'KW' '3830';\n"); - grammarBuilder.append("KW3831 : 'KW' '3831';\n"); - grammarBuilder.append("KW3832 : 'KW' '3832';\n"); - grammarBuilder.append("KW3833 : 'KW' '3833';\n"); - grammarBuilder.append("KW3834 : 'KW' '3834';\n"); - grammarBuilder.append("KW3835 : 'KW' '3835';\n"); - grammarBuilder.append("KW3836 : 'KW' '3836';\n"); - grammarBuilder.append("KW3837 : 'KW' '3837';\n"); - grammarBuilder.append("KW3838 : 'KW' '3838';\n"); - grammarBuilder.append("KW3839 : 'KW' '3839';\n"); - grammarBuilder.append("KW3840 : 'KW' '3840';\n"); - grammarBuilder.append("KW3841 : 'KW' '3841';\n"); - grammarBuilder.append("KW3842 : 'KW' '3842';\n"); - grammarBuilder.append("KW3843 : 'KW' '3843';\n"); - grammarBuilder.append("KW3844 : 'KW' '3844';\n"); - grammarBuilder.append("KW3845 : 'KW' '3845';\n"); - grammarBuilder.append("KW3846 : 'KW' '3846';\n"); - grammarBuilder.append("KW3847 : 'KW' '3847';\n"); - grammarBuilder.append("KW3848 : 'KW' '3848';\n"); - grammarBuilder.append("KW3849 : 'KW' '3849';\n"); - grammarBuilder.append("KW3850 : 'KW' '3850';\n"); - grammarBuilder.append("KW3851 : 'KW' '3851';\n"); - grammarBuilder.append("KW3852 : 'KW' '3852';\n"); - grammarBuilder.append("KW3853 : 'KW' '3853';\n"); - grammarBuilder.append("KW3854 : 'KW' '3854';\n"); - grammarBuilder.append("KW3855 : 'KW' '3855';\n"); - grammarBuilder.append("KW3856 : 'KW' '3856';\n"); - grammarBuilder.append("KW3857 : 'KW' '3857';\n"); - grammarBuilder.append("KW3858 : 'KW' '3858';\n"); - grammarBuilder.append("KW3859 : 'KW' '3859';\n"); - grammarBuilder.append("KW3860 : 'KW' '3860';\n"); - grammarBuilder.append("KW3861 : 'KW' '3861';\n"); - grammarBuilder.append("KW3862 : 'KW' '3862';\n"); - grammarBuilder.append("KW3863 : 'KW' '3863';\n"); - grammarBuilder.append("KW3864 : 'KW' '3864';\n"); - grammarBuilder.append("KW3865 : 'KW' '3865';\n"); - grammarBuilder.append("KW3866 : 'KW' '3866';\n"); - grammarBuilder.append("KW3867 : 'KW' '3867';\n"); - grammarBuilder.append("KW3868 : 'KW' '3868';\n"); - grammarBuilder.append("KW3869 : 'KW' '3869';\n"); - grammarBuilder.append("KW3870 : 'KW' '3870';\n"); - grammarBuilder.append("KW3871 : 'KW' '3871';\n"); - grammarBuilder.append("KW3872 : 'KW' '3872';\n"); - grammarBuilder.append("KW3873 : 'KW' '3873';\n"); - grammarBuilder.append("KW3874 : 'KW' '3874';\n"); - grammarBuilder.append("KW3875 : 'KW' '3875';\n"); - grammarBuilder.append("KW3876 : 'KW' '3876';\n"); - grammarBuilder.append("KW3877 : 'KW' '3877';\n"); - grammarBuilder.append("KW3878 : 'KW' '3878';\n"); - grammarBuilder.append("KW3879 : 'KW' '3879';\n"); - grammarBuilder.append("KW3880 : 'KW' '3880';\n"); - grammarBuilder.append("KW3881 : 'KW' '3881';\n"); - grammarBuilder.append("KW3882 : 'KW' '3882';\n"); - grammarBuilder.append("KW3883 : 'KW' '3883';\n"); - grammarBuilder.append("KW3884 : 'KW' '3884';\n"); - grammarBuilder.append("KW3885 : 'KW' '3885';\n"); - grammarBuilder.append("KW3886 : 'KW' '3886';\n"); - grammarBuilder.append("KW3887 : 'KW' '3887';\n"); - grammarBuilder.append("KW3888 : 'KW' '3888';\n"); - grammarBuilder.append("KW3889 : 'KW' '3889';\n"); - grammarBuilder.append("KW3890 : 'KW' '3890';\n"); - grammarBuilder.append("KW3891 : 'KW' '3891';\n"); - grammarBuilder.append("KW3892 : 'KW' '3892';\n"); - grammarBuilder.append("KW3893 : 'KW' '3893';\n"); - grammarBuilder.append("KW3894 : 'KW' '3894';\n"); - grammarBuilder.append("KW3895 : 'KW' '3895';\n"); - grammarBuilder.append("KW3896 : 'KW' '3896';\n"); - grammarBuilder.append("KW3897 : 'KW' '3897';\n"); - grammarBuilder.append("KW3898 : 'KW' '3898';\n"); - grammarBuilder.append("KW3899 : 'KW' '3899';\n"); - grammarBuilder.append("KW3900 : 'KW' '3900';\n"); - grammarBuilder.append("KW3901 : 'KW' '3901';\n"); - grammarBuilder.append("KW3902 : 'KW' '3902';\n"); - grammarBuilder.append("KW3903 : 'KW' '3903';\n"); - grammarBuilder.append("KW3904 : 'KW' '3904';\n"); - grammarBuilder.append("KW3905 : 'KW' '3905';\n"); - grammarBuilder.append("KW3906 : 'KW' '3906';\n"); - grammarBuilder.append("KW3907 : 'KW' '3907';\n"); - grammarBuilder.append("KW3908 : 'KW' '3908';\n"); - grammarBuilder.append("KW3909 : 'KW' '3909';\n"); - grammarBuilder.append("KW3910 : 'KW' '3910';\n"); - grammarBuilder.append("KW3911 : 'KW' '3911';\n"); - grammarBuilder.append("KW3912 : 'KW' '3912';\n"); - grammarBuilder.append("KW3913 : 'KW' '3913';\n"); - grammarBuilder.append("KW3914 : 'KW' '3914';\n"); - grammarBuilder.append("KW3915 : 'KW' '3915';\n"); - grammarBuilder.append("KW3916 : 'KW' '3916';\n"); - grammarBuilder.append("KW3917 : 'KW' '3917';\n"); - grammarBuilder.append("KW3918 : 'KW' '3918';\n"); - grammarBuilder.append("KW3919 : 'KW' '3919';\n"); - grammarBuilder.append("KW3920 : 'KW' '3920';\n"); - grammarBuilder.append("KW3921 : 'KW' '3921';\n"); - grammarBuilder.append("KW3922 : 'KW' '3922';\n"); - grammarBuilder.append("KW3923 : 'KW' '3923';\n"); - grammarBuilder.append("KW3924 : 'KW' '3924';\n"); - grammarBuilder.append("KW3925 : 'KW' '3925';\n"); - grammarBuilder.append("KW3926 : 'KW' '3926';\n"); - grammarBuilder.append("KW3927 : 'KW' '3927';\n"); - grammarBuilder.append("KW3928 : 'KW' '3928';\n"); - grammarBuilder.append("KW3929 : 'KW' '3929';\n"); - grammarBuilder.append("KW3930 : 'KW' '3930';\n"); - grammarBuilder.append("KW3931 : 'KW' '3931';\n"); - grammarBuilder.append("KW3932 : 'KW' '3932';\n"); - grammarBuilder.append("KW3933 : 'KW' '3933';\n"); - grammarBuilder.append("KW3934 : 'KW' '3934';\n"); - grammarBuilder.append("KW3935 : 'KW' '3935';\n"); - grammarBuilder.append("KW3936 : 'KW' '3936';\n"); - grammarBuilder.append("KW3937 : 'KW' '3937';\n"); - grammarBuilder.append("KW3938 : 'KW' '3938';\n"); - grammarBuilder.append("KW3939 : 'KW' '3939';\n"); - grammarBuilder.append("KW3940 : 'KW' '3940';\n"); - grammarBuilder.append("KW3941 : 'KW' '3941';\n"); - grammarBuilder.append("KW3942 : 'KW' '3942';\n"); - grammarBuilder.append("KW3943 : 'KW' '3943';\n"); - grammarBuilder.append("KW3944 : 'KW' '3944';\n"); - grammarBuilder.append("KW3945 : 'KW' '3945';\n"); - grammarBuilder.append("KW3946 : 'KW' '3946';\n"); - grammarBuilder.append("KW3947 : 'KW' '3947';\n"); - grammarBuilder.append("KW3948 : 'KW' '3948';\n"); - grammarBuilder.append("KW3949 : 'KW' '3949';\n"); - grammarBuilder.append("KW3950 : 'KW' '3950';\n"); - grammarBuilder.append("KW3951 : 'KW' '3951';\n"); - grammarBuilder.append("KW3952 : 'KW' '3952';\n"); - grammarBuilder.append("KW3953 : 'KW' '3953';\n"); - grammarBuilder.append("KW3954 : 'KW' '3954';\n"); - grammarBuilder.append("KW3955 : 'KW' '3955';\n"); - grammarBuilder.append("KW3956 : 'KW' '3956';\n"); - grammarBuilder.append("KW3957 : 'KW' '3957';\n"); - grammarBuilder.append("KW3958 : 'KW' '3958';\n"); - grammarBuilder.append("KW3959 : 'KW' '3959';\n"); - grammarBuilder.append("KW3960 : 'KW' '3960';\n"); - grammarBuilder.append("KW3961 : 'KW' '3961';\n"); - grammarBuilder.append("KW3962 : 'KW' '3962';\n"); - grammarBuilder.append("KW3963 : 'KW' '3963';\n"); - grammarBuilder.append("KW3964 : 'KW' '3964';\n"); - grammarBuilder.append("KW3965 : 'KW' '3965';\n"); - grammarBuilder.append("KW3966 : 'KW' '3966';\n"); - grammarBuilder.append("KW3967 : 'KW' '3967';\n"); - grammarBuilder.append("KW3968 : 'KW' '3968';\n"); - grammarBuilder.append("KW3969 : 'KW' '3969';\n"); - grammarBuilder.append("KW3970 : 'KW' '3970';\n"); - grammarBuilder.append("KW3971 : 'KW' '3971';\n"); - grammarBuilder.append("KW3972 : 'KW' '3972';\n"); - grammarBuilder.append("KW3973 : 'KW' '3973';\n"); - grammarBuilder.append("KW3974 : 'KW' '3974';\n"); - grammarBuilder.append("KW3975 : 'KW' '3975';\n"); - grammarBuilder.append("KW3976 : 'KW' '3976';\n"); - grammarBuilder.append("KW3977 : 'KW' '3977';\n"); - grammarBuilder.append("KW3978 : 'KW' '3978';\n"); - grammarBuilder.append("KW3979 : 'KW' '3979';\n"); - grammarBuilder.append("KW3980 : 'KW' '3980';\n"); - grammarBuilder.append("KW3981 : 'KW' '3981';\n"); - grammarBuilder.append("KW3982 : 'KW' '3982';\n"); - grammarBuilder.append("KW3983 : 'KW' '3983';\n"); - grammarBuilder.append("KW3984 : 'KW' '3984';\n"); - grammarBuilder.append("KW3985 : 'KW' '3985';\n"); - grammarBuilder.append("KW3986 : 'KW' '3986';\n"); - grammarBuilder.append("KW3987 : 'KW' '3987';\n"); - grammarBuilder.append("KW3988 : 'KW' '3988';\n"); - grammarBuilder.append("KW3989 : 'KW' '3989';\n"); - grammarBuilder.append("KW3990 : 'KW' '3990';\n"); - grammarBuilder.append("KW3991 : 'KW' '3991';\n"); - grammarBuilder.append("KW3992 : 'KW' '3992';\n"); - grammarBuilder.append("KW3993 : 'KW' '3993';\n"); - grammarBuilder.append("KW3994 : 'KW' '3994';\n"); - grammarBuilder.append("KW3995 : 'KW' '3995';\n"); - grammarBuilder.append("KW3996 : 'KW' '3996';\n"); - grammarBuilder.append("KW3997 : 'KW' '3997';\n"); - grammarBuilder.append("KW3998 : 'KW' '3998';\n"); - grammarBuilder.append("KW3999 : 'KW' '3999';"); - String grammar = grammarBuilder.toString(); - - String input ="KW400"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='KW400',<402>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : .*? ('a' | 'ab') {std::cout << getText() << std::endl;} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : . {std::cout << getText() << std::endl;};"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "a\n" + - "b\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:1='b',<3>,1:1]\n" + - "[@2,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"hi\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:3='\"hi\"',<1>,1:0]\n" + - "[@1,4:8='\"mom\"',<1>,1:4]\n" + - "[@2,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParentheses() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("START_BLOCK: '-.-.-';\n"); - grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); - grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); - grammarBuilder.append("fragment L_A: '.-';\n"); - grammarBuilder.append("fragment L_K: '-.-';\n"); - grammarBuilder.append("SEPARATOR: '!';"); - String grammar = grammarBuilder.toString(); - - String input ="-.-.-!"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='-.-.-',<1>,1:0]\n" + - "[@1,5:5='!',<3>,1:5]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPositionAdjustingLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2737); - grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("protected:\n"); - grammarBuilder.append(" class PositionAdjustingLexerATNSimulator : public atn::LexerATNSimulator {\n"); - grammarBuilder.append(" public:\n"); - grammarBuilder.append(" PositionAdjustingLexerATNSimulator(Lexer *recog, const atn::ATN &atn, std::vector &decisionToDFA,\n"); - grammarBuilder.append(" atn::PredictionContextCache &sharedContextCache)\n"); - grammarBuilder.append(" : atn::LexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache) {\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" void resetAcceptPosition(CharStream *input, int index, int line, int charPositionInLine) {\n"); - grammarBuilder.append(" input->seek(index);\n"); - grammarBuilder.append(" _line = line;\n"); - grammarBuilder.append(" _charPositionInLine = charPositionInLine;\n"); - grammarBuilder.append(" consume(input);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual std::unique_ptr nextToken() override {\n"); - grammarBuilder.append(" if (dynamic_cast(_interpreter) == nullptr) {\n"); - grammarBuilder.append(" delete _interpreter;\n"); - grammarBuilder.append(" _interpreter = new PositionAdjustingLexerATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return Lexer::nextToken();\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" virtual Token* emit() override {\n"); - grammarBuilder.append(" switch (type) {\n"); - grammarBuilder.append(" case TOKENS:\n"); - grammarBuilder.append(" handleAcceptPositionForKeyword(\"tokens\");\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" case LABEL:\n"); - grammarBuilder.append(" handleAcceptPositionForIdentifier();\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" default:\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return Lexer::emit();\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("private:\n"); - grammarBuilder.append(" bool handleAcceptPositionForIdentifier() {\n"); - grammarBuilder.append(" std::string tokenText = getText();\n"); - grammarBuilder.append(" int identifierLength = 0;\n"); - grammarBuilder.append(" while (identifierLength < tokenText.length() && isIdentifierChar(tokenText[identifierLength])) {\n"); - grammarBuilder.append(" identifierLength++;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" if (getInputStream()->index() > tokenStartCharIndex + identifierLength) {\n"); - grammarBuilder.append(" int offset = identifierLength - 1;\n"); - grammarBuilder.append(" getInterpreter()->resetAcceptPosition(getInputStream(),\n"); - grammarBuilder.append(" tokenStartCharIndex + offset, tokenStartLine, tokenStartCharPositionInLine + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" bool handleAcceptPositionForKeyword(const std::string &keyword) {\n"); - grammarBuilder.append(" if (getInputStream()->index() > tokenStartCharIndex + keyword.length()) {\n"); - grammarBuilder.append(" long offset = keyword.size() - 1;\n"); - grammarBuilder.append(" getInterpreter()->resetAcceptPosition(getInputStream(),\n"); - grammarBuilder.append(" tokenStartCharIndex + offset, tokenStartLine, tokenStartCharPositionInLine + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" static bool isIdentifierChar(char c) {\n"); - grammarBuilder.append(" return std::isalnum(c) || c == '_';\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ASSIGN : '=' ;\n"); - grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); - grammarBuilder.append("LCURLY: '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// 'tokens' followed by '{'\n"); - grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); - grammarBuilder.append("LABEL\n"); - grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("IDENTIFIER\n"); - grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("IGNORED\n"); - grammarBuilder.append(" : [ \\t\\r\\n]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("NEWLINE\n"); - grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS\n"); - grammarBuilder.append(" : [ \\t]+ -> skip\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - String input = - "tokens\n" + - "tokens {\n" + - "notLabel\n" + - "label1 =\n" + - "label2 +=\n" + - "notLabel\n"; - String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); - assertEquals( - "[@0,0:5='tokens',<6>,1:0]\n" + - "[@1,7:12='tokens',<4>,2:0]\n" + - "[@2,14:14='{',<3>,2:7]\n" + - "[@3,16:23='notLabel',<6>,3:0]\n" + - "[@4,25:30='label1',<5>,4:0]\n" + - "[@5,32:32='=',<1>,4:7]\n" + - "[@6,34:39='label2',<5>,5:0]\n" + - "[@7,41:42='+=',<2>,5:7]\n" + - "[@8,44:51='notLabel',<6>,6:0]\n" + - "[@9,53:52='',<-1>,7:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testQuoteTranslation() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); - String grammar = grammarBuilder.toString(); - - String input ="\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\"',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : '-' I ;\n"); - grammarBuilder.append("I : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 -21 3"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='34',<2>,1:0]\n" + - "[@1,3:5='-21',<1>,1:3]\n" + - "[@2,7:7='3',<2>,1:7]\n" + - "[@3,8:7='',<-1>,1:8]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSlashes() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("Backslash : '\\\\';\n"); - grammarBuilder.append("Slash : '/';\n"); - grammarBuilder.append("Vee : '\\\\/';\n"); - grammarBuilder.append("Wedge : '/\\\\';\n"); - grammarBuilder.append("WS : [ \\t] -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="\\ / \\/ /\\"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\\',<1>,1:0]\n" + - "[@1,2:2='/',<2>,1:2]\n" + - "[@2,4:5='\\/',<3>,1:4]\n" + - "[@3,7:8='/\\',<4>,1:7]\n" + - "[@4,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testZeroLengthToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("BeginString\n"); - grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("mode StringMode;\n"); - grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); - grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); - grammarBuilder.append("mode EndStringMode; \n"); - grammarBuilder.append(" EndString : '\\'' -> popMode;"); - String grammar = grammarBuilder.toString(); - - String input ="'xxx'"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4=''xxx'',<1>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestListeners.java index 6c82951b3..5739d90f0 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestListeners.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestListeners.java @@ -1,370 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestListeners extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(506); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::definitions {\n"); - grammarBuilder.append("#include \"TBaseListener.h\"\n"); - grammarBuilder.append("class LeafListener : public TBaseListener {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual void visitTerminal(tree::TerminalNode *node) override {\n"); - grammarBuilder.append(" std::cout << node->getSymbol()->getText() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("LeafListener listener;\n"); - grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "1\n" + - "2\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(716); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::definitions {\n"); - grammarBuilder.append("#include \"TBaseListener.h\"\n"); - grammarBuilder.append("class LeafListener : public TBaseListener {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual void exitE(TParser::EContext *ctx) override {\n"); - grammarBuilder.append(" if (ctx->children.size() == 3) {\n"); - grammarBuilder.append(" std::cout << ctx->e(0)->start->getText() << \" \" << ctx->e(1)->start->getText() << \" \" << ctx->e()[0]->start->getText() << std::endl;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" std::cout << ctx->INT()->getSymbol()->getText() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("LeafListener listener;\n"); - grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1\n" + - "2\n" + - "3\n" + - "2 3 2\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(718); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::definitions {\n"); - grammarBuilder.append("#include \"TBaseListener.h\"\n"); - grammarBuilder.append("class LeafListener : public TBaseListener {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual void exitCall(TParser::CallContext *ctx) override {\n"); - grammarBuilder.append(" std::cout << ctx->e()->start->getText() << \" \" << ctx->eList()->toString() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" virtual void exitInt(TParser::IntContext *ctx) override {\n"); - grammarBuilder.append(" std::cout << ctx->INT()->getSymbol()->getText() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("LeafListener listener;\n"); - grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1\n" + - "2\n" + - "3\n" + - "1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(736); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::definitions {\n"); - grammarBuilder.append("#include \"TBaseListener.h\"\n"); - grammarBuilder.append("class LeafListener : public TBaseListener {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); - grammarBuilder.append(" if (ctx->children.size() == 2) {\n"); - grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << \" \" << ctx->b(1)->start->getText() << \" \" << ctx->b()[0]->start->getText() << std::endl;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("LeafListener listener;\n"); - grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b 1) (b 2))\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(736); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::definitions {\n"); - grammarBuilder.append("#include \"TBaseListener.h\"\n"); - grammarBuilder.append("class LeafListener : public TBaseListener {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); - grammarBuilder.append(" if (ctx->children.size() == 2) {\n"); - grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << \" \" << ctx->b(1)->start->getText() << \" \" << ctx->b()[0]->start->getText() << std::endl;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" std::cout << ctx->b(0)->start->getText() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("LeafListener listener;\n"); - grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(701); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::definitions {\n"); - grammarBuilder.append("#include \"TBaseListener.h\"\n"); - grammarBuilder.append("class LeafListener : public TBaseListener {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); - grammarBuilder.append(" if (ctx->children.size() == 2)\n"); - grammarBuilder.append(" std::cout << ctx->INT(0)->getSymbol()->getText() << \" \" << ctx->INT(1)->getSymbol()->getText()\n"); - grammarBuilder.append(" << \" \" << Arrays::toString(ctx->INT()) << std::endl;\n"); - grammarBuilder.append(" else\n"); - grammarBuilder.append(" std::cout << ctx->ID()->getSymbol()->toString() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("LeafListener listener;\n"); - grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(701); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::definitions {\n"); - grammarBuilder.append("#include \"TBaseListener.h\"\n"); - grammarBuilder.append("class LeafListener : public TBaseListener {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" virtual void exitA(TParser::AContext *ctx) override {\n"); - grammarBuilder.append(" if (ctx->children.size() == 2)\n"); - grammarBuilder.append(" std::cout << ctx->INT(0)->getSymbol()->getText() << \" \" << ctx->INT(1)->getSymbol()->getText()\n"); - grammarBuilder.append(" << \" \" << Arrays::toString(ctx->INT()) << std::endl;\n"); - grammarBuilder.append(" else\n"); - grammarBuilder.append(" std::cout << ctx->ID()->getSymbol()->toString() << std::endl;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("LeafListener listener;\n"); - grammarBuilder.append("tree::ParseTreeWalker::DEFAULT.walk(&listener, $ctx->r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParseTrees.java index 780bbe62e..8587c1326 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParseTrees.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParseTrees.java @@ -1,302 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParseTrees extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2AltLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(147); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyyxyxz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x y y x y x z)\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2Alts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a y)\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAltNum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(582); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class MyRuleNode : public ParserRuleContext {\n"); - grammarBuilder.append("public:\n"); - grammarBuilder.append(" size_t altNum;\n"); - grammarBuilder.append(" MyRuleNode(ParserRuleContext *parent, int invokingStateNumber)\n"); - grammarBuilder.append(" : ParserRuleContext(parent, invokingStateNumber) {\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" virtual size_t getAltNumber() const override { return altNum; }\n"); - grammarBuilder.append(" virtual void setAltNumber(size_t altNum) override { this->altNum = altNum; }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("a : 'f'\n"); - grammarBuilder.append(" | 'g'\n"); - grammarBuilder.append(" | 'x' b 'z'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'e' {} | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a:3 x (b:2 y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExtraToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(153); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="xzy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x z y)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(155); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a z)\n", found); - - assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleRef() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b 'x'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'y' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="yx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a (b y) x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSync() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(156); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'* '!'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xzyy!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x z y y !)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToken2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(138); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenAndRuleContextString() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(217); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $r.ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' { \n"); - grammarBuilder.append("std::cout << Arrays::listToString(getRuleInvocationStack(), \", \") << std::endl;\n"); - grammarBuilder.append("} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "[a, s]\n" + - "(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserErrors.java index 932529963..7cbb066f6 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserErrors.java @@ -1,720 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserErrors extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x='b' {std::cout << \"conjured=\" + $x->toString() << std::endl;} 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpTokenFromSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x=('b'|'c') {std::cout << \"conjured=\" + $x->toString() << std::endl;} 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testContextListGetters() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(208); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members{\n"); - grammarBuilder.append("void foo() {\n"); - grammarBuilder.append(" SContext *s;\n"); - grammarBuilder.append(" std::vector a = s->a();\n"); - grammarBuilder.append(" std::vector b = s->b();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : (a | b)+;\n"); - grammarBuilder.append("a : 'a' {std::cout << \"a\";};\n"); - grammarBuilder.append("b : 'b' {std::cout << \"b\";};"); - String grammar = grammarBuilder.toString(); - - - String input ="abab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("abab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidATNStateRemoval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(114); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {/* do nothing */} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input ="x:x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidEmptyInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID+;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - - assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1ErrorInfo() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(303); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); - grammarBuilder.append("animal : (DOG | CAT );\n"); - grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); - grammarBuilder.append("AND : 'and';\n"); - grammarBuilder.append("DOG : 'dog';\n"); - grammarBuilder.append("CAT : 'cat';\n"); - grammarBuilder.append("HARDWARE: 'hardware';\n"); - grammarBuilder.append("SOFTWARE: 'software';\n"); - grammarBuilder.append("WS : ' ' -> skip ;\n"); - grammarBuilder.append("acClass\n"); - grammarBuilder.append("@init\n"); - grammarBuilder.append("{std::cout << getExpectedTokens().toString(_tokenNames) << std::endl;}\n"); - grammarBuilder.append(" : ;"); - String grammar = grammarBuilder.toString(); - - - String input ="dog and software"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("{'hardware', 'software'}\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'\n"); - grammarBuilder.append(" | 'a' 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(55); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c'\n"); - grammarBuilder.append(" | 'a' 'b' 'd'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abe"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLLStar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aaae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAltAvoidance() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e '!' ;\n"); - grammarBuilder.append("e : 'a' 'b'\n"); - grammarBuilder.append(" | 'a'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a."; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(34); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(107); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {std::cout << \"\" + $myset.stop->toString() << std::endl;} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("[@0,0:0='a',<3>,1:0]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('b' | 'c')\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'a'\n"); - grammarBuilder.append(";"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(25); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})*;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforePredict() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="caaab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(107); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {std::cout << \"\" + $myset.stop->toString() << std::endl;} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="aabd"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("[@2,2:2='b',<1>,1:2]\n", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{/* do nothing */})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionExpectingSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); - grammarBuilder.append("expr: ID '=' STR ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="( ~FORCE_ERROR~ "; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserExec.java index 4c259d3c8..4a2659010 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestParserExec.java @@ -1,791 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserExec extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(97); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID+ {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(97); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(97); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(102); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)+ {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(102); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(102); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorB() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID {\n"); - grammarBuilder.append("std::cout << \"alt 1\" << std::endl;\n"); - grammarBuilder.append("} | INT {\n"); - grammarBuilder.append("std::cout << \"alt 2\" << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(125); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})+ {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(125); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(125); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID INT {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFInClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : stat EOF;\n"); - grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(206); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(206); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(207); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(206); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(123); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(123); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("std::cout << $text << std::endl;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(197); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : a* EOF;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : label=subrule {std::cout << $label.text << std::endl;} #One\n"); - grammarBuilder.append(" | label='y' {std::cout << $label.text << std::endl;} #Two\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("subrule : 'x';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "x\n" + - "y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); - grammarBuilder.append("b : id_=ID val+=INT*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelForClosureContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(465); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("ifStatement\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("assert($ctx->elseIfStatement().size() >= 0);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : 'if' expression\n"); - grammarBuilder.append(" ( ( 'then'\n"); - grammarBuilder.append(" executableStatement*\n"); - grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); - grammarBuilder.append(" elseStatement?\n"); - grammarBuilder.append(" 'end' 'if'\n"); - grammarBuilder.append(" ) | executableStatement )\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("elseIfStatement\n"); - grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expression : 'a' ;\n"); - grammarBuilder.append("executableStatement : 'a' ;\n"); - grammarBuilder.append("elseStatement : 'a' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelsOnSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b b* ';' ;\n"); - grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleEOFHandling() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(42); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserProperty() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("bool Property() {\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("a : {Property()}? ID {std::cout << \"valid\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("valid\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedIfIfElse() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(174); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : stmt EOF ;\n"); - grammarBuilder.append("stmt : ifStmt | ID;\n"); - grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { _input->LA(1) != TParser::ELSE }?);\n"); - grammarBuilder.append("ELSE : 'else';\n"); - grammarBuilder.append("ID : [a-zA-Z]+;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x if x a else b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredictionIssue334() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_ @init{\n"); - grammarBuilder.append("_errHandler = std::make_shared();\n"); - grammarBuilder.append("} \n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); - grammarBuilder.append("item : A B?;\n"); - grammarBuilder.append("SEMICOLON: ';';\n"); - grammarBuilder.append("A : 'a'|'A';\n"); - grammarBuilder.append("B : 'b'|'B';\n"); - grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); - - assertEquals("(file_ (item a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {std::cout << $text << std::endl;} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {std::cout << $text << std::endl;} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestPerformance.java index e182c3126..771a2e8f4 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestPerformance.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestPerformance.java @@ -1,218 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestPerformance extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Cpp"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalLexer.java index cfb1c4437..cac662c1a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalLexer.java @@ -1,218 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalLexer extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisableRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("E1 : 'enum' { false }? ;\n"); - grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<3>,1:5]\n" + - "[@2,8:7='',<-1>,1:8]\n" + - "s0-' '->:s5=>4\n" + - "s0-'a'->:s6=>3\n" + - "s0-'e'->:s1=>3\n" + - ":s1=>3-'n'->:s2=>3\n" + - ":s2=>3-'u'->:s3=>3\n" + - ":s6=>3-'b'->:s6=>3\n" + - ":s6=>3-'c'->:s6=>3\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnumNotID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { getText() == \"enum\" }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<1>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s3=>3\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDnotEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s2=>3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDvsEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s5=>3\n" + - "s0-'a'->:s4=>2\n" + - "s0-'e'->:s1=>2\n" + - ":s1=>2-'n'->:s2=>2\n" + - ":s2=>2-'u'->:s3=>2\n" + - ":s4=>2-'b'->:s4=>2\n" + - ":s4=>2-'c'->:s4=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndent() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(163); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { tokenStartCharPositionInLine == 0 }?\n"); - grammarBuilder.append(" { std::cout << \"INDENT\" << std::endl; } ;\n"); - grammarBuilder.append("NL : '\\n';\n"); - grammarBuilder.append("WS : [ \\t]+ ;"); - String grammar = grammarBuilder.toString(); - - String input = - "abc\n" + - " def \n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "INDENT\n" + - "[@0,0:2='abc',<1>,1:0]\n" + - "[@1,3:3='\\n',<3>,1:3]\n" + - "[@2,4:5=' ',<2>,2:0]\n" + - "[@3,6:8='def',<1>,2:2]\n" + - "[@4,9:10=' ',<4>,2:5]\n" + - "[@5,11:11='\\n',<3>,2:7]\n" + - "[@6,12:11='',<-1>,3:0]\n" + - "s0-'\n" + - "'->:s2=>3\n" + - "s0-'a'->:s1=>1\n" + - "s0-'d'->:s1=>1\n" + - ":s1=>1-'b'->:s1=>1\n" + - ":s1=>1-'c'->:s1=>1\n" + - ":s1=>1-'e'->:s1=>1\n" + - ":s1=>1-'f'->:s1=>1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerInputPositionSensitivePredicates() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(270); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WORD1 : ID1+ { std::cout << getText() << std::endl; } ;\n"); - grammarBuilder.append("WORD2 : ID2+ { std::cout << getText() << std::endl; } ;\n"); - grammarBuilder.append("fragment ID1 : { getCharPositionInLine() < 2 }? [a-zA-Z];\n"); - grammarBuilder.append("fragment ID2 : { getCharPositionInLine() >= 2 }? [a-zA-Z];\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input = - "a cde\n" + - "abcde\n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "a\n" + - "cde\n" + - "ab\n" + - "cde\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:4='cde',<2>,1:2]\n" + - "[@2,6:7='ab',<1>,2:0]\n" + - "[@3,8:10='cde',<2>,2:2]\n" + - "[@4,12:11='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedKeywords() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(184); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { getText() == \"enum\" }? { std::cout << \"enum!\" << std::endl; } ;\n"); - grammarBuilder.append("ID : [a-z]+ { std::cout << \"ID \" + getText() << std::endl; } ;\n"); - grammarBuilder.append("WS : [ \\n] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="enum enu a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "enum!\n" + - "ID enu\n" + - "ID a\n" + - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='enu',<2>,1:5]\n" + - "[@2,9:9='a',<2>,1:9]\n" + - "[@3,10:9='',<-1>,1:10]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalParser.java index 743cd3ab9..b0bc2070f 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSemPredEvalParser.java @@ -1,763 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalParser extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAlts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(374); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);} a ';' a; // do 2x: once in ATN, next in DFA\n"); - grammarBuilder.append("a : ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" | {false}? ID {std::cout << \"alt 3\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "alt 1\n" + - "alt 1\n", found); - - assertEquals( - "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + - "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(439); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {getInterpreter()->setPredictionMode(atn::PredictionMode::LL_EXACT_AMBIG_DETECTION);} a ';' a ';' a;\n"); - grammarBuilder.append("a : INT {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | ID {std::cout << \"alt 2\" << std::endl;} // must pick this one for ID since pred is false\n"); - grammarBuilder.append(" | ID {std::cout << \"alt 3\" << std::endl;}\n"); - grammarBuilder.append(" | {false}? ID {std::cout << \"alt 4\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34; x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "alt 1\n" + - "alt 2\n" + - "alt 2\n", found); - - assertEquals( - "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + - "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionHidesPreds() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(239); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a+ ;\n"); - grammarBuilder.append("a : {i = 1;} ID {i == 1}? {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {i = 2;} ID {i == 2}? {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 1\n" + - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionsHidePredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(316); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); - grammarBuilder.append(" std::cout << \"eval=\" << std::boolalpha << v << std::endl;\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {} {pred(true)}? {std::cout << \"parse\" << std::endl;} '!' ;\n"); - grammarBuilder.append("t : e {} {pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAtomWithClosureInTranslatedLRRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : e[0] EOF;\n"); - grammarBuilder.append("e[int _p]\n"); - grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); - grammarBuilder.append(" ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b+a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDepedentPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(343); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); - grammarBuilder.append(" std::cout << \"eval=\" << std::boolalpha << v << std::endl;\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : a[99] ;\n"); - grammarBuilder.append("a[int i] : e {pred($i == 99)}? {std::cout << \"parse\" << std::endl;} '!' ;\n"); - grammarBuilder.append("b[int i] : e {pred($i == 99)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); - grammarBuilder.append("b[int i] : a[i] ;\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i == 1}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {$i == 2}? ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisabledAlternative() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); - grammarBuilder.append("content: anything | {false}? .;\n"); - grammarBuilder.append("anything: ANY_CHAR;\n"); - grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); - String grammar = grammarBuilder.toString(); - - - String input ="hello"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(209); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b ';' | b '.' ;\n"); - grammarBuilder.append("b : a ;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoTruePredsThrowsNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(197); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {false}? ID INT {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {false}? ID INT {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOrder() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(323); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); - grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); - grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); - grammarBuilder.append("a : ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(217); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {std::cout << $ctx->toStringTree(this) << std::endl;}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{_input->LA(2) != TParser::NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); - - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); - - assertEquals( - "line 5:0 mismatched input '' expecting '\n" + - "'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(217); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {std::cout << $ctx->toStringTree(this) << std::endl;}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{_input->LA(2) != TParser::NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n" + - "\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); - - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(230); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {std::cout << \"ID \"+$ID.text << std::endl;}\n"); - grammarBuilder.append(" | {!enumKeyword}? 'enum' {std::cout << \"enum\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); - - assertEquals("ID abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(230); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {std::cout << \"ID \"+$ID.text << std::endl;}\n"); - grammarBuilder.append(" | {!enumKeyword}? 'enum' {std::cout << \"enum\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="enum"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i == 1}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {$i == 2}? ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i == 1}? ID \n"); - grammarBuilder.append(" | {$i == 2}? ID \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(310); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); - grammarBuilder.append(" std::cout << \"eval=\" << std::boolalpha << v << std::endl;\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {pred(true)}? {std::cout << \"parse\" << std::endl;} '!' ;\n"); - grammarBuilder.append("t : e {pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRewindBeforePredEval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {_input->LT(1)->getText() == \"x\"}? ID INT {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {_input->LT(1)->getText() == \"y\"}? ID INT {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(295); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); - grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" | INT {std::cout << \"alt 3\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y 3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(190); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {true}? INT {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(193); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a;\n"); - grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {true}? INT {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="3 4 x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n", found); - - assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeft() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(190); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append(" s : a+ ;\n"); - grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {true}? ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeftWithVaryingPredicate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(289); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : ({i += 1;\n"); - grammarBuilder.append("std::cout << \"i=\";\n"); - grammarBuilder.append("std::cout << i << std::endl;} a)+ ;\n"); - grammarBuilder.append("a : {i % 2 == 0}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {i % 2 != 0}? ID {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "i=1\n" + - "alt 2\n" + - "i=2\n" + - "alt 1\n" + - "i=3\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testUnpredicatedPathsInAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(209); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | b {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("a : {false}? ID INT\n"); - grammarBuilder.append(" | ID INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testValidateInDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(358); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ';' a;\n"); - grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); - grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); - grammarBuilder.append("// throws an exception if the validating predicate fails\n"); - grammarBuilder.append("a : {false}? ID {std::cout << \"alt 1\" << std::endl;}\n"); - grammarBuilder.append(" | {true}? INT {std::cout << \"alt 2\" << std::endl;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x ; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:0 no viable alternative at input 'x'\n" + - "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSets.java index 8c5a20c87..b55d9163b 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestSets.java @@ -1,477 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSets extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetLiteral() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (A {std::cout << $A.text << std::endl;})+ ;\n"); - grammarBuilder.append("A : [AaBb] ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="A a B b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals( - "A\n" + - "a\n" + - "B\n" + - "b\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testComplementSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("parse : ~NEW_LINE;\n"); - grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:0 token recognition error at: 'a'\n" + - "line 1:1 missing {} at ''\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : ('a'|'b')? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : ('a'|'b')* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(66); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); - grammarBuilder.append("A : ~'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(72); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); - grammarBuilder.append("A : ~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(74); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); - grammarBuilder.append("A : h=~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithRuleRef3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(138); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << $A.text << std::endl;} ;\n"); - grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("B : ~('a'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : 'b'? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {std::cout << _input->getText() << std::endl;} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~('x'|'y') 'z' {std::cout << $t.text << std::endl;} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(72); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {std::cout << _input->getText() << std::endl;} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("zz\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotTokenWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~'x' 'z' {std::cout << $t.text << std::endl;} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(65); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=('x'|'y') {std::cout << $t.text << std::endl;} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : 'b'+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {std::cout << _input->getText() << std::endl;} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleAsSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {std::cout << _input->getText() << std::endl;} : 'a' | 'b' |'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("b\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSeqDoesNotBecomeSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(122); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("fragment A : '1' | '2';\n"); - grammarBuilder.append("fragment B : '3' '4';\n"); - grammarBuilder.append("C : A | B;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {std::cout << _input->getText() << std::endl;} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {std::cout << _input->getText() << std::endl;} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestVisitors.java index 4cc8fa22e..99905fe30 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestVisitors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/TestVisitors.java @@ -1,298 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.cpp; -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestVisitors extends BaseCppTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx.r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "[ '1', '2' ]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCppTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx.r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1,,2,,32 3 21 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Cpp"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(286); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx.r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1,,2,,3,1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx.r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b 1) (b 2))\n" + - ",1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx.r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx.r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - ",1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("std::cout << $ctx.r->toStringTree(this) << std::endl;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj new file mode 100644 index 000000000..eb4870943 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.mono.csproj @@ -0,0 +1,51 @@ + + + + Debug + AnyCPU + {EDC70A11-C4C1-4209-93A6-CCE2B19E8E95} + Exe + Antlr4.Test.mono + Test + Test + v3.5 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + true + + + true + bin\Release + prompt + 4 + true + + + + + + + {E1A46D9D-66CB-46E8-93B0-7FC87299ABEF} + Antlr4.Runtime.mono + + + + + + + + + + + Test.exe.config + Always + + + diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj new file mode 100644 index 000000000..bab5315d5 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/Antlr4.Test.vs2013.csproj @@ -0,0 +1,44 @@ + + + Debug + AnyCPU + {EDC70A11-C4C1-4209-93A6-CCE2B19E8E95} + Exe + Antlr4.Test.mono + Test + Test + v3.5 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + true + + + true + bin\Release + prompt + 4 + true + + + + + + + + + + + + + {E1A46D9D-66CB-46E8-93B0-7FC87299ABEF} + Antlr4.Runtime.vs2013 + + + diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/App.config b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/App.config new file mode 100644 index 000000000..43157903b --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/App.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs new file mode 100644 index 000000000..f67408625 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/AssemblyInfo.cs @@ -0,0 +1,28 @@ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle ("Antlr4.Test.mono")] +[assembly: AssemblyDescription ("")] +[assembly: AssemblyConfiguration ("")] +[assembly: AssemblyCompany ("")] +[assembly: AssemblyProduct ("")] +[assembly: AssemblyCopyright ("ericvergnaud")] +[assembly: AssemblyTrademark ("")] +[assembly: AssemblyCulture ("")] +[assembly: CLSCompliant (true)] +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion ("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java new file mode 100644 index 000000000..a5b548e03 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java @@ -0,0 +1,952 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.csharp; + +import org.antlr.v4.Tool; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.WritableToken; +import org.antlr.v4.runtime.misc.Utils; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.SingleTest; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.DefaultToolListener; +import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.junit.rules.TestRule; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; +import org.stringtemplate.v4.ST; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathFactory; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class BaseCSharpTest implements SingleTest { + public static final String newline = System.getProperty("line.separator"); + public static final String pathSep = System.getProperty("path.separator"); + + /** + * When the {@code antlr.preserve-test-dir} runtime property is set to + * {@code true}, the temporary directories created by the test run will not + * be removed at the end of the test run, even for tests that completed + * successfully. + * + *

+ * The default behavior (used in all other cases) is removing the temporary + * directories for all tests which completed successfully, and preserving + * the directories for tests which failed.

+ */ + public static final boolean PRESERVE_TEST_DIR = Boolean.parseBoolean(System.getProperty("antlr-preserve-csharp-test-dir")); + + /** + * The base test directory is the directory where generated files get placed + * during unit test execution. + * + *

+ * The default value for this property is the {@code java.io.tmpdir} system + * property, and can be overridden by setting the + * {@code antlr.java-test-dir} property to a custom location. Note that the + * {@code antlr.java-test-dir} property directly affects the + * {@link #CREATE_PER_TEST_DIRECTORIES} value as well.

+ */ + public static final String BASE_TEST_DIR; + + /** + * When {@code true}, a temporary directory will be created for each test + * executed during the test run. + * + *

+ * This value is {@code true} when the {@code antlr.java-test-dir} system + * property is set, and otherwise {@code false}.

+ */ + public static final boolean CREATE_PER_TEST_DIRECTORIES; + + static { + String baseTestDir = System.getProperty("antlr-csharp-test-dir"); + boolean perTestDirectories = false; + if (baseTestDir == null || baseTestDir.isEmpty()) { + baseTestDir = System.getProperty("java.io.tmpdir"); + perTestDirectories = true; + } + + if (!new File(baseTestDir).isDirectory()) { + throw new UnsupportedOperationException("The specified base test directory does not exist: " + baseTestDir); + } + + BASE_TEST_DIR = baseTestDir; + CREATE_PER_TEST_DIRECTORIES = perTestDirectories; + } + + public String tmpdir = null; + + /** If error during parser execution, store stderr here; can't return + * stdout and stderr. This doesn't trap errors from running antlr. + */ + protected String stderrDuringParse; + + /** Errors found while running antlr */ + protected StringBuilder antlrToolErrors; + + @org.junit.Rule + public final TestRule testWatcher = new TestWatcher() { + + @Override + protected void succeeded(Description description) { + // remove tmpdir if no error. + if (!PRESERVE_TEST_DIR) { + eraseTempDir(); + } + } + + }; + + @Override + public void testSetUp() throws Exception { + if (CREATE_PER_TEST_DIRECTORIES) { + // new output dir for each test + String testDirectory = getClass().getSimpleName() + "-" + System.currentTimeMillis(); + tmpdir = new File(BASE_TEST_DIR, testDirectory).getAbsolutePath(); + } + else { + tmpdir = new File(BASE_TEST_DIR).getAbsolutePath(); + if (!PRESERVE_TEST_DIR && new File(tmpdir).exists()) { + eraseFiles(); + } + } + antlrToolErrors = new StringBuilder(); + } + + @Override + public void testTearDown() throws Exception { + } + + @Override + public String getTmpDir() { + return tmpdir; + } + + @Override + public String getStdout() { + return null; + } + + @Override + public String getParseErrors() { + return stderrDuringParse; + } + + @Override + public String getANTLRToolErrors() { + if ( antlrToolErrors.length()==0 ) { + return null; + } + return antlrToolErrors.toString(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { + Tool tool = new Tool(args); + return tool; + } + + protected Tool newTool() { + org.antlr.v4.Tool tool = new Tool(new String[] {"-o", tmpdir}); + return tool; + } + + protected String load(String fileName, String encoding) + throws IOException + { + if ( fileName==null ) { + return null; + } + + String fullFileName = getClass().getPackage().getName().replace('.', '/') + '/' + fileName; + int size = 65000; + InputStreamReader isr; + InputStream fis = getClass().getClassLoader().getResourceAsStream(fullFileName); + if ( encoding!=null ) { + isr = new InputStreamReader(fis, encoding); + } + else { + isr = new InputStreamReader(fis); + } + try { + char[] data = new char[size]; + int n = isr.read(data); + return new String(data, 0, n); + } + finally { + isr.close(); + } + } + + + protected ErrorQueue antlr(String grammarFileName, boolean defaultListener, String... extraOptions) { + final List options = new ArrayList(); + Collections.addAll(options, extraOptions); + options.add("-Dlanguage=CSharp"); + if ( !options.contains("-o") ) { + options.add("-o"); + options.add(tmpdir); + } + if ( !options.contains("-lib") ) { + options.add("-lib"); + options.add(tmpdir); + } + if ( !options.contains("-encoding") ) { + options.add("-encoding"); + options.add("UTF-8"); + } + options.add(new File(tmpdir,grammarFileName).toString()); + + final String[] optionsA = new String[options.size()]; + options.toArray(optionsA); + Tool antlr = newTool(optionsA); + ErrorQueue equeue = new ErrorQueue(antlr); + antlr.addListener(equeue); + if (defaultListener) { + antlr.addListener(new DefaultToolListener(antlr)); + } + antlr.processGrammarsOnCommandLine(); + + if ( !defaultListener && !equeue.errors.isEmpty() ) { + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage msg = equeue.errors.get(i); + antlrToolErrors.append(msg.toString()); + } + try { + antlrToolErrors.append(new String(Utils.readFile(tmpdir+"/"+grammarFileName))); + } + catch (IOException ioe) { + antlrToolErrors.append(ioe.toString()); + } + } + if ( !defaultListener && !equeue.warnings.isEmpty() ) { + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage msg = equeue.warnings.get(i); + // antlrToolErrors.append(msg); warnings are hushed + } + } + + return equeue; + } + + protected ErrorQueue antlr(String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { + mkdir(tmpdir); + writeFile(tmpdir, grammarFileName, grammarStr); + return antlr(grammarFileName, defaultListener, extraOptions); + } + + protected String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input) + { + return execLexer(grammarFileName, grammarStr, lexerName, input, false); + } + + @Override + public String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, + boolean showDFA) + { + boolean success = rawGenerateRecognizer(grammarFileName, + grammarStr, + null, + lexerName); + assertTrue(success); + writeFile(tmpdir, "input", input); + writeLexerTestFile(lexerName, showDFA); + addSourceFiles("Test.cs"); + if(!compile()) { + System.err.println("Failed to compile!"); + return stderrDuringParse; + } + String output = execTest(); + if ( output.length()==0 ) { + output = null; + } + return output; + } + + Set sourceFiles = new HashSet(); + + private void addSourceFiles(String ... files) { + for(String file : files) + this.sourceFiles.add(file); + } + + @Override + public String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean showDiagnosticErrors) + { + boolean success = rawGenerateRecognizer(grammarFileName, + grammarStr, + parserName, + lexerName, + "-visitor"); + assertTrue(success); + writeFile(tmpdir, "input", input); + return rawExecRecognizer(parserName, + lexerName, + startRuleName, + showDiagnosticErrors); + } + + /** Return true if all is well */ + protected boolean rawGenerateRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) + { + return rawGenerateRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); + } + + /** Return true if all is well */ + protected boolean rawGenerateRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) + { + ErrorQueue equeue = antlr(grammarFileName, grammarStr, defaultListener, extraOptions); + if (!equeue.errors.isEmpty()) { + return false; + } + + List files = new ArrayList(); + if ( lexerName!=null ) { + files.add(lexerName+".cs"); + } + if ( parserName!=null ) { + files.add(parserName+".cs"); + Set optionsSet = new HashSet(Arrays.asList(extraOptions)); + String grammarName = grammarFileName.substring(0, grammarFileName.lastIndexOf('.')); + if (!optionsSet.contains("-no-listener")) { + files.add(grammarName+"Listener.cs"); + files.add(grammarName+"BaseListener.cs"); + } + if (optionsSet.contains("-visitor")) { + files.add(grammarName+"Visitor.cs"); + files.add(grammarName+"BaseVisitor.cs"); + } + } + addSourceFiles(files.toArray(new String[files.size()])); + return true; + } + + protected String rawExecRecognizer(String parserName, + String lexerName, + String parserStartRuleName, + boolean debug) + { + this.stderrDuringParse = null; + if ( parserName==null ) { + writeLexerTestFile(lexerName, false); + } + else { + writeParserTestFile(parserName, + lexerName, + parserStartRuleName, + debug); + } + + addSourceFiles("Test.cs"); + return execRecognizer(); + } + + public String execRecognizer() { + compile(); + String output = execTest(); + if ( output!=null && output.length()==0 ) { + output = null; + } + return output; + } + + public boolean compile() { + try { + if(!createProject()) + return false; + if(!buildProject()) + return false; + return true; + } catch(Exception e) { + return false; + } + } + + private File getTestProjectFile() { + return new File(tmpdir, "Antlr4.Test.mono.csproj"); + } + + private boolean buildProject() throws Exception { + String msbuild = locateMSBuild(); + String[] args = { + msbuild, + "/p:Configuration=Release", + getTestProjectFile().getAbsolutePath() + }; +// System.err.println("Starting build "+ Utils.join(args, " ")); + ProcessBuilder pb = new ProcessBuilder(args); + pb.directory(new File(tmpdir)); + Process process = pb.start(); + StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + // xbuild sends errors to output, so check exit code + boolean success = process.exitValue()==0; + if ( !success ) { + this.stderrDuringParse = stdoutVacuum.toString(); + System.err.println("buildProject stderrVacuum: "+ this.stderrDuringParse); + } + return success; + } + + private String locateMSBuild() { + if(isWindows()) + return "\"C:\\Program Files (x86)\\MSBuild\\12.0\\Bin\\MSBuild.exe\""; + else + return locateTool("xbuild"); + } + + private boolean isWindows() { + return System.getProperty("os.name").toLowerCase().contains("windows"); + } + + private String locateExec() { + return new File(tmpdir, "bin/Release/Test.exe").getAbsolutePath(); + } + + private String locateTool(String tool) { + String[] roots = { "/usr/bin/", "/usr/local/bin/" }; + for(String root : roots) { + if(new File(root + tool).exists()) + return root + tool; + } + throw new RuntimeException("Could not locate " + tool); + } + + public boolean createProject() { + try { + String pack = BaseCSharpTest.class.getPackage().getName().replace(".", "/") + "/"; + // save auxiliary files + saveResourceAsFile(pack + "AssemblyInfo.cs", new File(tmpdir, "AssemblyInfo.cs")); + saveResourceAsFile(pack + "App.config", new File(tmpdir, "App.config")); + // update project + String projectName = isWindows() ? "Antlr4.Test.vs2013.csproj" : "Antlr4.Test.mono.csproj"; + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + InputStream input = loader.getResourceAsStream(pack + projectName); + Document prjXml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input); + // update runtime project reference + // find project file as a resource not relative pathname (now that we've merged repos) + String runtimeName = isWindows() ? "Antlr4.Runtime.vs2013.csproj" : "Antlr4.Runtime.mono.csproj"; + final URL runtimeProj = loader.getResource("CSharp/runtime/CSharp/Antlr4.Runtime/"+runtimeName); + if ( runtimeProj==null ) { + throw new RuntimeException("C# runtime project file not found!"); + } + String runtimeProjPath = runtimeProj.getPath(); + if(isWindows()){ + runtimeProjPath = runtimeProjPath.replaceFirst("/", ""); + } + XPathExpression exp = XPathFactory.newInstance().newXPath() + .compile("/Project/ItemGroup/ProjectReference[@Include='" + runtimeName + "']"); + Element node = (Element)exp.evaluate(prjXml, XPathConstants.NODE); + node.setAttribute("Include", runtimeProjPath.replace("/", "\\")); + // update project file list + exp = XPathFactory.newInstance().newXPath().compile("/Project/ItemGroup[Compile/@Include='AssemblyInfo.cs']"); + Element group = (Element)exp.evaluate(prjXml, XPathConstants.NODE); + if(group==null) + return false; + // remove existing children + while(group.hasChildNodes()) + group.removeChild(group.getFirstChild()); + // add AssemblyInfo.cs, not a generated source + sourceFiles.add("AssemblyInfo.cs"); + // add files to compile + for(String file : sourceFiles) { + Element elem = group.getOwnerDocument().createElement("Compile"); + elem.setAttribute("Include", file); + group.appendChild(elem); + } + // save project + File prjFile = getTestProjectFile(); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.transform(new DOMSource(prjXml), new StreamResult(prjFile)); + return true; + } + catch(Exception e) { + e.printStackTrace(System.err); + return false; + } + } + + private void saveResourceAsFile(String resourceName, File file) throws IOException { + InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceName); + if ( input==null ) { + System.err.println("Can't find " + resourceName + " as resource"); + throw new IOException("Missing resource:" + resourceName); + } + OutputStream output = new FileOutputStream(file.getAbsolutePath()); + while(input.available()>0) { + output.write(input.read()); + } + output.close(); + input.close(); + } + + public String execTest() { + try { + String exec = locateExec(); + String[] args = isWindows() ? + new String[] { exec, new File(tmpdir, "input").getAbsolutePath() } : + new String[] { "mono", exec, new File(tmpdir, "input").getAbsolutePath() }; + ProcessBuilder pb = new ProcessBuilder(args); + pb.directory(new File(tmpdir)); + Process process = pb.start(); + StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + String output = stdoutVacuum.toString(); + if ( output.length()==0 ) { + output = null; + } + if ( stderrVacuum.toString().length()>0 ) { + this.stderrDuringParse = stderrVacuum.toString(); + } + return output; + } + catch (Exception e) { + System.err.println("can't exec recognizer"); + e.printStackTrace(System.err); + } + return null; + } + + public void testErrors(String[] pairs, boolean printTree) { + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; + + String[] lines = input.split("\n"); + String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); + ErrorQueue equeue = antlr(fileName, input, false); + + String actual = equeue.toString(true); + actual = actual.replace(tmpdir + File.separator, ""); + System.err.println(actual); + String msg = input; + msg = msg.replace("\n","\\n"); + msg = msg.replace("\r","\\r"); + msg = msg.replace("\t","\\t"); + + org.junit.Assert.assertEquals("error in: "+msg,expect,actual); + } + } + + public String getFilenameFromFirstLineOfGrammar(String line) { + String fileName = "A" + Tool.GRAMMAR_EXTENSION; + int grIndex = line.lastIndexOf("grammar"); + int semi = line.lastIndexOf(';'); + if ( grIndex>=0 && semi>=0 ) { + int space = line.indexOf(' ', grIndex); + fileName = line.substring(space+1, semi)+Tool.GRAMMAR_EXTENSION; + } + if ( fileName.length()==Tool.GRAMMAR_EXTENSION.length() ) fileName = "A" + Tool.GRAMMAR_EXTENSION; + return fileName; + } + + + List getMessagesOfType(List msgs, Class c) { + List filtered = new ArrayList(); + for (ANTLRMessage m : msgs) { + if ( m.getClass() == c ) filtered.add(m); + } + return filtered; + } + + + public static class StreamVacuum implements Runnable { + StringBuilder buf = new StringBuilder(); + BufferedReader in; + Thread sucker; + public StreamVacuum(InputStream in) { + this.in = new BufferedReader( new InputStreamReader(in) ); + } + public void start() { + sucker = new Thread(this); + sucker.start(); + } + @Override + public void run() { + try { + String line = in.readLine(); + while (line!=null) { + buf.append(line); + buf.append('\n'); + line = in.readLine(); + } + } + catch (IOException ioe) { + System.err.println("can't read output from process"); + } + } + /** wait for the thread to finish */ + public void join() throws InterruptedException { + sucker.join(); + } + @Override + public String toString() { + return buf.toString(); + } + } + + protected void checkGrammarSemanticsError(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { + return false; + } + + Token t = get(i); + if ( hide.contains(t.getType()) ) { + ((WritableToken)t).setChannel(Token.HIDDEN_CHANNEL); + } + + return true; + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } + + public static void writeFile(String dir, String fileName, String content) { + try { + Utils.writeFile(dir+"/"+fileName, content, "UTF-8"); + } + catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + protected void mkdir(String dir) { + File f = new File(dir); + f.mkdirs(); + } + + protected void writeParserTestFile(String parserName, + String lexerName, + String parserStartRuleName, + boolean debug) + { + ST outputFileST = new ST( + "using System;\n" + + "using Antlr4.Runtime;\n" + + "using Antlr4.Runtime.Tree;\n" + + "\n" + + "public class Test {\n" + + " public static void Main(string[] args) {\n" + + " ICharStream input = new AntlrFileStream(args[0]);\n" + + " lex = new (input);\n" + + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + + " \n"+ + " parser.BuildParseTree = true;\n" + + " ParserRuleContext tree = parser.();\n" + + " ParseTreeWalker.Default.Walk(new TreeShapeListener(), tree);\n" + + " }\n" + + "}\n" + + "\n" + + "class TreeShapeListener : IParseTreeListener {\n" + + " public void VisitTerminal(ITerminalNode node) { }\n" + + " public void VisitErrorNode(IErrorNode node) { }\n" + + " public void ExitEveryRule(ParserRuleContext ctx) { }\n" + + "\n" + + " public void EnterEveryRule(ParserRuleContext ctx) {\n" + + " for (int i = 0; i \\< ctx.ChildCount; i++) {\n" + + " IParseTree parent = ctx.GetChild(i).Parent;\n" + + " if (!(parent is IRuleNode) || ((IRuleNode)parent).RuleContext != ctx) {\n" + + " throw new Exception(\"Invalid parse tree shape detected.\");\n" + + " }\n" + + " }\n" + + " }\n" + + "}" + ); + ST createParserST = new ST(" parser = new (tokens);\n"); + if ( debug ) { + createParserST = + new ST( + " parser = new (tokens);\n" + + " parser.AddErrorListener(new DiagnosticErrorListener());\n"); + } + outputFileST.add("createParser", createParserST); + outputFileST.add("parserName", parserName); + outputFileST.add("lexerName", lexerName); + outputFileST.add("parserStartRuleName", parserStartRuleName); + writeFile(tmpdir, "Test.cs", outputFileST.render()); + } + + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + ST outputFileST = new ST( + "using System;\n" + + "using Antlr4.Runtime;\n" + + "\n" + + "public class Test {\n" + + " public static void Main(string[] args) {\n" + + " ICharStream input = new AntlrFileStream(args[0]);\n" + + " lex = new (input);\n" + + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + + " tokens.Fill();\n" + + " foreach (object t in tokens.GetTokens())\n" + + " Console.WriteLine(t);\n" + + (showDFA?"Console.Write(lex.Interpreter.GetDFA(Lexer.DefaultMode).ToLexerString());\n":"")+ + " }\n" + + "}" + ); + + outputFileST.add("lexerName", lexerName); + writeFile(tmpdir, "Test.cs", outputFileST.render()); + } + + public void writeRecognizerAndCompile(String parserName, String lexerName, + String parserStartRuleName, + boolean debug) { + if ( parserName==null ) { + writeLexerTestFile(lexerName, debug); + } + else { + writeParserTestFile(parserName, + lexerName, + parserStartRuleName, + debug); + } + + addSourceFiles("Test.cs"); + } + + + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(tmpdir+"/"+files[i]).delete(); + } + } + } + + protected void eraseFiles() { + if (tmpdir == null) { + return; + } + + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + if(files!=null) for(String file : files) { + new File(tmpdir+"/"+file).delete(); + } + } + + @Override + public void eraseTempDir() { + File tmpdirF = new File(tmpdir); + if ( tmpdirF.exists() ) { + eraseFiles(); + tmpdirF.delete(); + } + } + + public String getFirstLineOfException() { + if ( this.stderrDuringParse ==null ) { + return null; + } + String[] lines = this.stderrDuringParse.split("\n"); + String prefix="Exception in thread \"main\" "; + return lines[0].substring(prefix.length(),lines[0].length()); + } + + public List realElements(List elements) { + return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); + } + + public void assertNotNullOrEmpty(String message, String text) { + assertNotNull(message, text); + assertFalse(message, text.isEmpty()); + } + + public void assertNotNullOrEmpty(String text) { + assertNotNull(text); + assertFalse(text.isEmpty()); + } + + + /** Return map sorted by key */ + public ,V> LinkedHashMap sort(Map data) { + LinkedHashMap dup = new LinkedHashMap(); + List keys = new ArrayList(); + keys.addAll(data.keySet()); + Collections.sort(keys); + for (K k : keys) { + dup.put(k, data.get(k)); + } + return dup; + } + + protected static void assertEquals(String msg, int a, int b) { + org.junit.Assert.assertEquals(msg, a, b); + } + + protected static void assertEquals(String a, String b) { + a = absorbExpectedDifferences(a); + b = absorbActualDifferences(b); + org.junit.Assert.assertEquals(a, b); + } + + protected static void assertNull(String a) { + a = absorbActualDifferences(a); + org.junit.Assert.assertNull(a); + } + + private static String absorbExpectedDifferences(String a) { + if(a==null) + return a; + // work around the lack of requiresFullContext field in DFAState + if(a.startsWith("Decision")) + a = a.replaceAll("\\^", ""); + // work around the algo difference for full context + a = stripOutUnwantedLinesWith(a, "reportAttemptingFullContext","reportContextSensitivity", "reportAmbiguity"); + if(a.isEmpty()) + a = null; + return a; + } + + private static String absorbActualDifferences(String a) { + if(a==null) + return a; + // work around the algo difference for full context + // work around the algo difference for semantic predicates + a = stripOutUnwantedLinesWith(a, "reportContextSensitivity","eval=false"); + if(a.isEmpty()) + a = null; + return a; + } + + private static String stripOutUnwantedLinesWith(String a, String ... unwanteds) { + String[] lines = a.split("\n"); + StringBuilder sb = new StringBuilder(); + for(String line : lines) { + boolean wanted = true; + for(String unwanted : unwanteds) { + if(line.contains(unwanted) ) { + wanted = false; + break; + } + } + if(!wanted) + continue; + sb.append(line); + sb.append("\n"); + } + return sb.toString(); + } + +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeLexers.java index dee2da3f0..48c2a693d 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeLexers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeLexers.java @@ -1,64 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestCompositeLexers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {Console.WriteLine(\"S.A\");};\n" + - "C : 'c' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "S.A\n" + - "[@0,0:0='a',<3>,1:0]\n" + - "[@1,1:1='b',<1>,1:1]\n" + - "[@2,2:2='c',<4>,1:2]\n" + - "[@3,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {Console.WriteLine(\"S.A\");} ;\n" + - "B : 'b' {Console.WriteLine(\"S.B\");} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - - StringBuilder grammarBuilder = new StringBuilder(92); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("A : 'a' B {Console.WriteLine(\"M.A\");} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "M.A\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeParsers.java index 736a31a94..9f6ee7765 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestCompositeParsers.java @@ -1,391 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestCompositeParsers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBringInLiteralsFromDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : '=' 'a' {Console.Write(\"S.a\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="=a"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCombinedImportsCombined() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : 'x' INT {Console.WriteLine(\"S.x\");};\n" + - "INT : '0'..'9'+ ;\n" + - "WS : (' '|'\\n') -> skip ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(31); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : x INT;"); - String grammar = grammarBuilder.toString(); - String input ="x 34 9"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatesSeeSameTokenType() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : A {Console.WriteLine(\"S.x\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { C, B, A } // reverse order\n" + - "y : A {Console.WriteLine(\"T.y\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(598); - grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); - grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); - grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); - grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); - grammarBuilder.append("// mapping in each parser:\n"); - grammarBuilder.append("// public static final int C=6;\n"); - grammarBuilder.append("// public static final int EOF=-1;\n"); - grammarBuilder.append("// public static final int B=5;\n"); - grammarBuilder.append("// public static final int WS=7;\n"); - grammarBuilder.append("// public static final int A=4;\n"); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); - grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); - grammarBuilder.append("A : 'a' ; \n"); - grammarBuilder.append("C : 'c' ; \n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals( - "S.x\n" + - "T.y\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorAccessesDelegateMembers() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "@parser::members {\n" + - "public void foo() {Console.WriteLine(\"foo\");}\n" + - "}\n" + - "a : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar M; // uses no rules from the import\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : 'b' {this.foo();} ; // gS is import pointer\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("foo\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : B {Console.WriteLine(\"S.a\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a[int x] returns [int y] : B {Console.Write(\"S.a\");} {$y=1000;} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(144); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : label=a[3] {Console.WriteLine($label.y);} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a1000\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : B {Console.Write(\"S.a\");} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(130); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a {Console.Write($a.text);} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.ab\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : b {Console.WriteLine(\"S.a\");};\n" + - "b : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "a : B {Console.WriteLine(\"T.a\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : b {Console.Write(\"S.a\");};\n" + - "b : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("b : 'b'|'c';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "a", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegates() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : b {Console.WriteLine(\"S.a\");};\n" + - "b : 'b' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { A }\n" + - "b : 'b' {Console.WriteLine(\"T.b\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S, T;\n"); - grammarBuilder.append("b : 'b'|'c' {Console.WriteLine(\"M.b\");}|B|A;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "a", input, false); - assertEquals( - "M.b\n" + - "S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "type_ : 'int' ;\n" + - "decl : type_ ID ';'\n" + - " | type_ ID init ';' {Console.Write(\"JavaDecl: \" + $text);};\n" + - "init : '=' INT;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("prog : decl ;\n"); - grammarBuilder.append("type_ : 'int' | 'float' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="float x = 3;"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "prog", input, false); - assertEquals("JavaDecl: floatx=3;\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportLexerWithOnlyFragmentRules() throws Exception { - mkdir(tmpdir); - String slave_Unicode = - "lexer grammar Unicode;\n" + - "\n" + - "fragment\n" + - "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + - " | '\\u2000'..'\\u200A'\n" + - " | '\\u202F' | '\\u205F' | '\\u3000'\n" + - " ;\n"; - writeFile(tmpdir, "Unicode.g4", slave_Unicode); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar Test;\n"); - grammarBuilder.append("import Unicode;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program : 'test' 'test';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); - String grammar = grammarBuilder.toString(); - String input ="test test"; - String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedGrammarWithEmptyOptions() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "options {}\n" + - "a : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedRuleWithAction() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a @after {int x = 0;} : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordVSIDOrder() throws Exception { - mkdir(tmpdir); - String slave_S = - "lexer grammar S;\n" + - "ID : 'a'..'z'+;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("a : A {Console.WriteLine(\"M.a: \" + $A);};\n"); - grammarBuilder.append("A : 'abc' {Console.WriteLine(\"M.A\");};\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "a", input, false); - assertEquals( - "M.A\n" + - "M.a: [@0,0:2='abc',<1>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestFullContextParsing.java index d0224adaf..14abb8f86 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestFullContextParsing.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestFullContextParsing.java @@ -1,429 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestFullContextParsing extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigYieldsCtxSensitiveDFA() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(101); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.DumpDFA();}\n"); - grammarBuilder.append(" : ID | ID {} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-ID->:s1^=>1\n", found); - - assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbiguityNoLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append(" : expr expr {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: '@'\n"); - grammarBuilder.append(" | ID '@'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a@"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, true); - assertEquals("alt 1\n", found); - - assertEquals( - "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + - "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + - "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFATwoDiffInput() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.DumpDFA();}\n"); - grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="$ 34 abc @ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 2:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + - "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="$ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="@ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(289); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append(": expr[0] {Console.WriteLine($expr.ctx.ToStringTree(this));};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("(expr a + (expr b))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(289); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append(": expr[0] {Console.WriteLine($expr.ctx.ToStringTree(this));};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b*c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("(expr a + (expr b * (expr c)))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + - "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + - "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(237); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append("@after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then return }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s1=>2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(237); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append("@after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(237); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append("@after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(237); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append("@after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then if y then return else foo else bar }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + - "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(237); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append("@after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(237); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append("@after {this.DumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLoopsSimulateTailRecursion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(321); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;}\n"); - grammarBuilder.append(" : expr_or_assign*;\n"); - grammarBuilder.append("expr_or_assign\n"); - grammarBuilder.append(" : expr '++' {Console.WriteLine(\"fail.\");}\n"); - grammarBuilder.append(" | expr {Console.WriteLine(\"pass: \"+$expr.text);}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); - grammarBuilder.append("expr_primary\n"); - grammarBuilder.append(" : '(' ID ')'\n"); - grammarBuilder.append(" | ID '(' ID ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;"); - String grammar = grammarBuilder.toString(); - String input ="a(i)<-x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, true); - assertEquals("pass: a(i)<-x\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + - "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSLLSeesEOFInLLGrammar() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.DumpDFA();}\n"); - grammarBuilder.append(" : a;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + - "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLeftRecursion.java index 783f01b6e..2088afc7b 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLeftRecursion.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLeftRecursion.java @@ -1,2917 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestLeftRecursion extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="1\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="a = 5\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="b = 6\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="a+b*2\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="(1+2)*3\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_10() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(*a)[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="*a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator * (declarator a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="**a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[3]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator b) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(a)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator ( (declarator a) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[]()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[][]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="*a[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {Console.WriteLine($ctx.ToStringTree(this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {Console.WriteLine($ctx.ToStringTree(this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("(a (a x) y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {Console.WriteLine($ctx.ToStringTree(this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("(a (a (a x) y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 1) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) - (e 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.this"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) . this) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e - (e a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a|b&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_10() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.f(x)==T.c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_11() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.f().g(x,1)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_12() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="new T[((n-1) * x) + 1]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(a|b)&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a > b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) > (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a >> b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) >> (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a^b^c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(T)x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="new A().b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(T)t.f()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(245); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(245); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(245); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(184); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(184); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(184); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(740); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(740); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(740); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(740); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {Debug.Assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {Debug.Assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrecedenceFilterConsidersContext() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog \n"); - grammarBuilder.append("@after {Console.WriteLine($ctx.ToStringTree(this));}\n"); - grammarBuilder.append(": statement* EOF {};\n"); - grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); - grammarBuilder.append("letterA: 'a';"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, false); - assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(223); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (literal - 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(223); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-1 + -1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(342); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(342); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a+b)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(342); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b+c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("((a=b)+c)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(460); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(460); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(460); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(460); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "CSharp"); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {Console.WriteLine($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="(1+2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("9\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPred() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a {true}? ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPredFailOption() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID {false}?\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a x) y z))\n", found); - - assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a x))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a x) y))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {Console.WriteLine($ctx.ToStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="Test(1,3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="Test(1, 3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerErrors.java index 7bee6c75d..c292740ff 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerErrors.java @@ -1,232 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestLexerErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatFailsBackToDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(39); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:3='ab',<1>,1:2]\n" + - "[@2,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;\n"); - grammarBuilder.append("C : 'abcd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababcx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:4='abc',<2>,1:2]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="{ { } }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='{ { } }',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="{ { }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testErrorInMiddle() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'abc' ;"); - String grammar = grammarBuilder.toString(); - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStart() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,1:0='',<-1>,1:1]\n", found); - - assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStartAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="ax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,2:1='',<-1>,1:2]\n", found); - - assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInTokenAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="abax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - - assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerExecDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar L;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input ="x : x"; - String found = execLexer("L.g4", grammar, "LLexer", input, false); - assertEquals( - "[@0,0:0='x',<3>,1:0]\n" + - "[@1,2:2=':',<1>,1:2]\n" + - "[@2,4:4='x',<3>,1:4]\n" + - "[@3,5:4='',<-1>,1:5]\n", found); - - assertEquals( - "line 1:1 token recognition error at: ' '\n" + - "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="[\"foo\"]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="[\"foo]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerExec.java index 73d5927d9..fb77cda13 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestLexerExec.java @@ -1,4947 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestLexerExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionPlacement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(293); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ({Console.WriteLine(\"stuff fail: \" + this.Text);} 'a'\n"); - grammarBuilder.append("| {Console.WriteLine(\"stuff0: \" + this.Text);}\n"); - grammarBuilder.append(" 'a' {Console.WriteLine(\"stuff1: \" + this.Text);}\n"); - grammarBuilder.append(" 'b' {Console.WriteLine(\"stuff2: \" + this.Text);})\n"); - grammarBuilder.append(" {Console.WriteLine(this.Text);} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "stuff0: \n" + - "stuff1: a\n" + - "stuff2: ab\n" + - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {Console.WriteLine(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetInSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(92); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : (~[ab \\n]|'a') {Console.WriteLine(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:2='x',<1>,1:2]\n" + - "[@2,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetNot() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {Console.WriteLine(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="xaf"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:2='xaf',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {Console.WriteLine(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(141); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {Console.WriteLine(\"I\");} ;\n"); - grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {Console.WriteLine(\"ID\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34 a2 abc \n" + - " "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "ID\n" + - "ID\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,7:8='a2',<2>,2:4]\n" + - "[@3,10:12='abc',<2>,2:7]\n" + - "[@4,18:17='',<-1>,3:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithEscapedChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DASHBRACK : [\\-\\]]+ {Console.WriteLine(\"DASHBRACK\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="- ] "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "DASHBRACK\n" + - "DASHBRACK\n" + - "[@0,0:0='-',<1>,1:0]\n" + - "[@1,2:2=']',<1>,1:2]\n" + - "[@2,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEndRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-]+ {Console.WriteLine(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="00\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='00',<1>,1:0]\n" + - "[@1,3:2='',<-1>,2:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEscapeChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {Console.WriteLine(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"a-z]+ {Console.WriteLine(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b\"a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:2='b\"a',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(81); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"\\\\ab]+ {Console.WriteLine(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b\"\\a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:3='b\"\\a',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithReversedRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [z-a9]+ {Console.WriteLine(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="9"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:0='9',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFByItself() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DONE : EOF ;\n"); - grammarBuilder.append("A : 'a';"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:-1='',<1>,1:0]\n" + - "[@1,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(100); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ('a' | 'ab') {Console.WriteLine(this.Text);} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testHexVsID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); - grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); - grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input ="x 0 1 a.b a.l"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='x',<5>,1:0]\n" + - "[@1,1:1=' ',<6>,1:1]\n" + - "[@2,2:2='0',<2>,1:2]\n" + - "[@3,3:3=' ',<6>,1:3]\n" + - "[@4,4:4='1',<2>,1:4]\n" + - "[@5,5:5=' ',<6>,1:5]\n" + - "[@6,6:6='a',<5>,1:6]\n" + - "[@7,7:7='.',<4>,1:7]\n" + - "[@8,8:8='b',<5>,1:8]\n" + - "[@9,9:9=' ',<6>,1:9]\n" + - "[@10,10:10='a',<5>,1:10]\n" + - "[@11,11:11='.',<4>,1:11]\n" + - "[@12,12:12='l',<5>,1:12]\n" + - "[@13,13:12='',<-1>,1:13]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("KEND : 'end' ; // has priority\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input ="end eend ending a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:2='end',<1>,1:0]\n" + - "[@1,3:3=' ',<3>,1:3]\n" + - "[@2,4:7='eend',<2>,1:4]\n" + - "[@3,8:8=' ',<3>,1:8]\n" + - "[@4,9:14='ending',<2>,1:9]\n" + - "[@5,15:15=' ',<3>,1:15]\n" + - "[@6,16:16='a',<2>,1:16]\n" + - "[@7,17:16='',<-1>,1:17]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLargeLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85821); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); - grammarBuilder.append("KW0 : 'KW' '0';\n"); - grammarBuilder.append("KW1 : 'KW' '1';\n"); - grammarBuilder.append("KW2 : 'KW' '2';\n"); - grammarBuilder.append("KW3 : 'KW' '3';\n"); - grammarBuilder.append("KW4 : 'KW' '4';\n"); - grammarBuilder.append("KW5 : 'KW' '5';\n"); - grammarBuilder.append("KW6 : 'KW' '6';\n"); - grammarBuilder.append("KW7 : 'KW' '7';\n"); - grammarBuilder.append("KW8 : 'KW' '8';\n"); - grammarBuilder.append("KW9 : 'KW' '9';\n"); - grammarBuilder.append("KW10 : 'KW' '10';\n"); - grammarBuilder.append("KW11 : 'KW' '11';\n"); - grammarBuilder.append("KW12 : 'KW' '12';\n"); - grammarBuilder.append("KW13 : 'KW' '13';\n"); - grammarBuilder.append("KW14 : 'KW' '14';\n"); - grammarBuilder.append("KW15 : 'KW' '15';\n"); - grammarBuilder.append("KW16 : 'KW' '16';\n"); - grammarBuilder.append("KW17 : 'KW' '17';\n"); - grammarBuilder.append("KW18 : 'KW' '18';\n"); - grammarBuilder.append("KW19 : 'KW' '19';\n"); - grammarBuilder.append("KW20 : 'KW' '20';\n"); - grammarBuilder.append("KW21 : 'KW' '21';\n"); - grammarBuilder.append("KW22 : 'KW' '22';\n"); - grammarBuilder.append("KW23 : 'KW' '23';\n"); - grammarBuilder.append("KW24 : 'KW' '24';\n"); - grammarBuilder.append("KW25 : 'KW' '25';\n"); - grammarBuilder.append("KW26 : 'KW' '26';\n"); - grammarBuilder.append("KW27 : 'KW' '27';\n"); - grammarBuilder.append("KW28 : 'KW' '28';\n"); - grammarBuilder.append("KW29 : 'KW' '29';\n"); - grammarBuilder.append("KW30 : 'KW' '30';\n"); - grammarBuilder.append("KW31 : 'KW' '31';\n"); - grammarBuilder.append("KW32 : 'KW' '32';\n"); - grammarBuilder.append("KW33 : 'KW' '33';\n"); - grammarBuilder.append("KW34 : 'KW' '34';\n"); - grammarBuilder.append("KW35 : 'KW' '35';\n"); - grammarBuilder.append("KW36 : 'KW' '36';\n"); - grammarBuilder.append("KW37 : 'KW' '37';\n"); - grammarBuilder.append("KW38 : 'KW' '38';\n"); - grammarBuilder.append("KW39 : 'KW' '39';\n"); - grammarBuilder.append("KW40 : 'KW' '40';\n"); - grammarBuilder.append("KW41 : 'KW' '41';\n"); - grammarBuilder.append("KW42 : 'KW' '42';\n"); - grammarBuilder.append("KW43 : 'KW' '43';\n"); - grammarBuilder.append("KW44 : 'KW' '44';\n"); - grammarBuilder.append("KW45 : 'KW' '45';\n"); - grammarBuilder.append("KW46 : 'KW' '46';\n"); - grammarBuilder.append("KW47 : 'KW' '47';\n"); - grammarBuilder.append("KW48 : 'KW' '48';\n"); - grammarBuilder.append("KW49 : 'KW' '49';\n"); - grammarBuilder.append("KW50 : 'KW' '50';\n"); - grammarBuilder.append("KW51 : 'KW' '51';\n"); - grammarBuilder.append("KW52 : 'KW' '52';\n"); - grammarBuilder.append("KW53 : 'KW' '53';\n"); - grammarBuilder.append("KW54 : 'KW' '54';\n"); - grammarBuilder.append("KW55 : 'KW' '55';\n"); - grammarBuilder.append("KW56 : 'KW' '56';\n"); - grammarBuilder.append("KW57 : 'KW' '57';\n"); - grammarBuilder.append("KW58 : 'KW' '58';\n"); - grammarBuilder.append("KW59 : 'KW' '59';\n"); - grammarBuilder.append("KW60 : 'KW' '60';\n"); - grammarBuilder.append("KW61 : 'KW' '61';\n"); - grammarBuilder.append("KW62 : 'KW' '62';\n"); - grammarBuilder.append("KW63 : 'KW' '63';\n"); - grammarBuilder.append("KW64 : 'KW' '64';\n"); - grammarBuilder.append("KW65 : 'KW' '65';\n"); - grammarBuilder.append("KW66 : 'KW' '66';\n"); - grammarBuilder.append("KW67 : 'KW' '67';\n"); - grammarBuilder.append("KW68 : 'KW' '68';\n"); - grammarBuilder.append("KW69 : 'KW' '69';\n"); - grammarBuilder.append("KW70 : 'KW' '70';\n"); - grammarBuilder.append("KW71 : 'KW' '71';\n"); - grammarBuilder.append("KW72 : 'KW' '72';\n"); - grammarBuilder.append("KW73 : 'KW' '73';\n"); - grammarBuilder.append("KW74 : 'KW' '74';\n"); - grammarBuilder.append("KW75 : 'KW' '75';\n"); - grammarBuilder.append("KW76 : 'KW' '76';\n"); - grammarBuilder.append("KW77 : 'KW' '77';\n"); - grammarBuilder.append("KW78 : 'KW' '78';\n"); - grammarBuilder.append("KW79 : 'KW' '79';\n"); - grammarBuilder.append("KW80 : 'KW' '80';\n"); - grammarBuilder.append("KW81 : 'KW' '81';\n"); - grammarBuilder.append("KW82 : 'KW' '82';\n"); - grammarBuilder.append("KW83 : 'KW' '83';\n"); - grammarBuilder.append("KW84 : 'KW' '84';\n"); - grammarBuilder.append("KW85 : 'KW' '85';\n"); - grammarBuilder.append("KW86 : 'KW' '86';\n"); - grammarBuilder.append("KW87 : 'KW' '87';\n"); - grammarBuilder.append("KW88 : 'KW' '88';\n"); - grammarBuilder.append("KW89 : 'KW' '89';\n"); - grammarBuilder.append("KW90 : 'KW' '90';\n"); - grammarBuilder.append("KW91 : 'KW' '91';\n"); - grammarBuilder.append("KW92 : 'KW' '92';\n"); - grammarBuilder.append("KW93 : 'KW' '93';\n"); - grammarBuilder.append("KW94 : 'KW' '94';\n"); - grammarBuilder.append("KW95 : 'KW' '95';\n"); - grammarBuilder.append("KW96 : 'KW' '96';\n"); - grammarBuilder.append("KW97 : 'KW' '97';\n"); - grammarBuilder.append("KW98 : 'KW' '98';\n"); - grammarBuilder.append("KW99 : 'KW' '99';\n"); - grammarBuilder.append("KW100 : 'KW' '100';\n"); - grammarBuilder.append("KW101 : 'KW' '101';\n"); - grammarBuilder.append("KW102 : 'KW' '102';\n"); - grammarBuilder.append("KW103 : 'KW' '103';\n"); - grammarBuilder.append("KW104 : 'KW' '104';\n"); - grammarBuilder.append("KW105 : 'KW' '105';\n"); - grammarBuilder.append("KW106 : 'KW' '106';\n"); - grammarBuilder.append("KW107 : 'KW' '107';\n"); - grammarBuilder.append("KW108 : 'KW' '108';\n"); - grammarBuilder.append("KW109 : 'KW' '109';\n"); - grammarBuilder.append("KW110 : 'KW' '110';\n"); - grammarBuilder.append("KW111 : 'KW' '111';\n"); - grammarBuilder.append("KW112 : 'KW' '112';\n"); - grammarBuilder.append("KW113 : 'KW' '113';\n"); - grammarBuilder.append("KW114 : 'KW' '114';\n"); - grammarBuilder.append("KW115 : 'KW' '115';\n"); - grammarBuilder.append("KW116 : 'KW' '116';\n"); - grammarBuilder.append("KW117 : 'KW' '117';\n"); - grammarBuilder.append("KW118 : 'KW' '118';\n"); - grammarBuilder.append("KW119 : 'KW' '119';\n"); - grammarBuilder.append("KW120 : 'KW' '120';\n"); - grammarBuilder.append("KW121 : 'KW' '121';\n"); - grammarBuilder.append("KW122 : 'KW' '122';\n"); - grammarBuilder.append("KW123 : 'KW' '123';\n"); - grammarBuilder.append("KW124 : 'KW' '124';\n"); - grammarBuilder.append("KW125 : 'KW' '125';\n"); - grammarBuilder.append("KW126 : 'KW' '126';\n"); - grammarBuilder.append("KW127 : 'KW' '127';\n"); - grammarBuilder.append("KW128 : 'KW' '128';\n"); - grammarBuilder.append("KW129 : 'KW' '129';\n"); - grammarBuilder.append("KW130 : 'KW' '130';\n"); - grammarBuilder.append("KW131 : 'KW' '131';\n"); - grammarBuilder.append("KW132 : 'KW' '132';\n"); - grammarBuilder.append("KW133 : 'KW' '133';\n"); - grammarBuilder.append("KW134 : 'KW' '134';\n"); - grammarBuilder.append("KW135 : 'KW' '135';\n"); - grammarBuilder.append("KW136 : 'KW' '136';\n"); - grammarBuilder.append("KW137 : 'KW' '137';\n"); - grammarBuilder.append("KW138 : 'KW' '138';\n"); - grammarBuilder.append("KW139 : 'KW' '139';\n"); - grammarBuilder.append("KW140 : 'KW' '140';\n"); - grammarBuilder.append("KW141 : 'KW' '141';\n"); - grammarBuilder.append("KW142 : 'KW' '142';\n"); - grammarBuilder.append("KW143 : 'KW' '143';\n"); - grammarBuilder.append("KW144 : 'KW' '144';\n"); - grammarBuilder.append("KW145 : 'KW' '145';\n"); - grammarBuilder.append("KW146 : 'KW' '146';\n"); - grammarBuilder.append("KW147 : 'KW' '147';\n"); - grammarBuilder.append("KW148 : 'KW' '148';\n"); - grammarBuilder.append("KW149 : 'KW' '149';\n"); - grammarBuilder.append("KW150 : 'KW' '150';\n"); - grammarBuilder.append("KW151 : 'KW' '151';\n"); - grammarBuilder.append("KW152 : 'KW' '152';\n"); - grammarBuilder.append("KW153 : 'KW' '153';\n"); - grammarBuilder.append("KW154 : 'KW' '154';\n"); - grammarBuilder.append("KW155 : 'KW' '155';\n"); - grammarBuilder.append("KW156 : 'KW' '156';\n"); - grammarBuilder.append("KW157 : 'KW' '157';\n"); - grammarBuilder.append("KW158 : 'KW' '158';\n"); - grammarBuilder.append("KW159 : 'KW' '159';\n"); - grammarBuilder.append("KW160 : 'KW' '160';\n"); - grammarBuilder.append("KW161 : 'KW' '161';\n"); - grammarBuilder.append("KW162 : 'KW' '162';\n"); - grammarBuilder.append("KW163 : 'KW' '163';\n"); - grammarBuilder.append("KW164 : 'KW' '164';\n"); - grammarBuilder.append("KW165 : 'KW' '165';\n"); - grammarBuilder.append("KW166 : 'KW' '166';\n"); - grammarBuilder.append("KW167 : 'KW' '167';\n"); - grammarBuilder.append("KW168 : 'KW' '168';\n"); - grammarBuilder.append("KW169 : 'KW' '169';\n"); - grammarBuilder.append("KW170 : 'KW' '170';\n"); - grammarBuilder.append("KW171 : 'KW' '171';\n"); - grammarBuilder.append("KW172 : 'KW' '172';\n"); - grammarBuilder.append("KW173 : 'KW' '173';\n"); - grammarBuilder.append("KW174 : 'KW' '174';\n"); - grammarBuilder.append("KW175 : 'KW' '175';\n"); - grammarBuilder.append("KW176 : 'KW' '176';\n"); - grammarBuilder.append("KW177 : 'KW' '177';\n"); - grammarBuilder.append("KW178 : 'KW' '178';\n"); - grammarBuilder.append("KW179 : 'KW' '179';\n"); - grammarBuilder.append("KW180 : 'KW' '180';\n"); - grammarBuilder.append("KW181 : 'KW' '181';\n"); - grammarBuilder.append("KW182 : 'KW' '182';\n"); - grammarBuilder.append("KW183 : 'KW' '183';\n"); - grammarBuilder.append("KW184 : 'KW' '184';\n"); - grammarBuilder.append("KW185 : 'KW' '185';\n"); - grammarBuilder.append("KW186 : 'KW' '186';\n"); - grammarBuilder.append("KW187 : 'KW' '187';\n"); - grammarBuilder.append("KW188 : 'KW' '188';\n"); - grammarBuilder.append("KW189 : 'KW' '189';\n"); - grammarBuilder.append("KW190 : 'KW' '190';\n"); - grammarBuilder.append("KW191 : 'KW' '191';\n"); - grammarBuilder.append("KW192 : 'KW' '192';\n"); - grammarBuilder.append("KW193 : 'KW' '193';\n"); - grammarBuilder.append("KW194 : 'KW' '194';\n"); - grammarBuilder.append("KW195 : 'KW' '195';\n"); - grammarBuilder.append("KW196 : 'KW' '196';\n"); - grammarBuilder.append("KW197 : 'KW' '197';\n"); - grammarBuilder.append("KW198 : 'KW' '198';\n"); - grammarBuilder.append("KW199 : 'KW' '199';\n"); - grammarBuilder.append("KW200 : 'KW' '200';\n"); - grammarBuilder.append("KW201 : 'KW' '201';\n"); - grammarBuilder.append("KW202 : 'KW' '202';\n"); - grammarBuilder.append("KW203 : 'KW' '203';\n"); - grammarBuilder.append("KW204 : 'KW' '204';\n"); - grammarBuilder.append("KW205 : 'KW' '205';\n"); - grammarBuilder.append("KW206 : 'KW' '206';\n"); - grammarBuilder.append("KW207 : 'KW' '207';\n"); - grammarBuilder.append("KW208 : 'KW' '208';\n"); - grammarBuilder.append("KW209 : 'KW' '209';\n"); - grammarBuilder.append("KW210 : 'KW' '210';\n"); - grammarBuilder.append("KW211 : 'KW' '211';\n"); - grammarBuilder.append("KW212 : 'KW' '212';\n"); - grammarBuilder.append("KW213 : 'KW' '213';\n"); - grammarBuilder.append("KW214 : 'KW' '214';\n"); - grammarBuilder.append("KW215 : 'KW' '215';\n"); - grammarBuilder.append("KW216 : 'KW' '216';\n"); - grammarBuilder.append("KW217 : 'KW' '217';\n"); - grammarBuilder.append("KW218 : 'KW' '218';\n"); - grammarBuilder.append("KW219 : 'KW' '219';\n"); - grammarBuilder.append("KW220 : 'KW' '220';\n"); - grammarBuilder.append("KW221 : 'KW' '221';\n"); - grammarBuilder.append("KW222 : 'KW' '222';\n"); - grammarBuilder.append("KW223 : 'KW' '223';\n"); - grammarBuilder.append("KW224 : 'KW' '224';\n"); - grammarBuilder.append("KW225 : 'KW' '225';\n"); - grammarBuilder.append("KW226 : 'KW' '226';\n"); - grammarBuilder.append("KW227 : 'KW' '227';\n"); - grammarBuilder.append("KW228 : 'KW' '228';\n"); - grammarBuilder.append("KW229 : 'KW' '229';\n"); - grammarBuilder.append("KW230 : 'KW' '230';\n"); - grammarBuilder.append("KW231 : 'KW' '231';\n"); - grammarBuilder.append("KW232 : 'KW' '232';\n"); - grammarBuilder.append("KW233 : 'KW' '233';\n"); - grammarBuilder.append("KW234 : 'KW' '234';\n"); - grammarBuilder.append("KW235 : 'KW' '235';\n"); - grammarBuilder.append("KW236 : 'KW' '236';\n"); - grammarBuilder.append("KW237 : 'KW' '237';\n"); - grammarBuilder.append("KW238 : 'KW' '238';\n"); - grammarBuilder.append("KW239 : 'KW' '239';\n"); - grammarBuilder.append("KW240 : 'KW' '240';\n"); - grammarBuilder.append("KW241 : 'KW' '241';\n"); - grammarBuilder.append("KW242 : 'KW' '242';\n"); - grammarBuilder.append("KW243 : 'KW' '243';\n"); - grammarBuilder.append("KW244 : 'KW' '244';\n"); - grammarBuilder.append("KW245 : 'KW' '245';\n"); - grammarBuilder.append("KW246 : 'KW' '246';\n"); - grammarBuilder.append("KW247 : 'KW' '247';\n"); - grammarBuilder.append("KW248 : 'KW' '248';\n"); - grammarBuilder.append("KW249 : 'KW' '249';\n"); - grammarBuilder.append("KW250 : 'KW' '250';\n"); - grammarBuilder.append("KW251 : 'KW' '251';\n"); - grammarBuilder.append("KW252 : 'KW' '252';\n"); - grammarBuilder.append("KW253 : 'KW' '253';\n"); - grammarBuilder.append("KW254 : 'KW' '254';\n"); - grammarBuilder.append("KW255 : 'KW' '255';\n"); - grammarBuilder.append("KW256 : 'KW' '256';\n"); - grammarBuilder.append("KW257 : 'KW' '257';\n"); - grammarBuilder.append("KW258 : 'KW' '258';\n"); - grammarBuilder.append("KW259 : 'KW' '259';\n"); - grammarBuilder.append("KW260 : 'KW' '260';\n"); - grammarBuilder.append("KW261 : 'KW' '261';\n"); - grammarBuilder.append("KW262 : 'KW' '262';\n"); - grammarBuilder.append("KW263 : 'KW' '263';\n"); - grammarBuilder.append("KW264 : 'KW' '264';\n"); - grammarBuilder.append("KW265 : 'KW' '265';\n"); - grammarBuilder.append("KW266 : 'KW' '266';\n"); - grammarBuilder.append("KW267 : 'KW' '267';\n"); - grammarBuilder.append("KW268 : 'KW' '268';\n"); - grammarBuilder.append("KW269 : 'KW' '269';\n"); - grammarBuilder.append("KW270 : 'KW' '270';\n"); - grammarBuilder.append("KW271 : 'KW' '271';\n"); - grammarBuilder.append("KW272 : 'KW' '272';\n"); - grammarBuilder.append("KW273 : 'KW' '273';\n"); - grammarBuilder.append("KW274 : 'KW' '274';\n"); - grammarBuilder.append("KW275 : 'KW' '275';\n"); - grammarBuilder.append("KW276 : 'KW' '276';\n"); - grammarBuilder.append("KW277 : 'KW' '277';\n"); - grammarBuilder.append("KW278 : 'KW' '278';\n"); - grammarBuilder.append("KW279 : 'KW' '279';\n"); - grammarBuilder.append("KW280 : 'KW' '280';\n"); - grammarBuilder.append("KW281 : 'KW' '281';\n"); - grammarBuilder.append("KW282 : 'KW' '282';\n"); - grammarBuilder.append("KW283 : 'KW' '283';\n"); - grammarBuilder.append("KW284 : 'KW' '284';\n"); - grammarBuilder.append("KW285 : 'KW' '285';\n"); - grammarBuilder.append("KW286 : 'KW' '286';\n"); - grammarBuilder.append("KW287 : 'KW' '287';\n"); - grammarBuilder.append("KW288 : 'KW' '288';\n"); - grammarBuilder.append("KW289 : 'KW' '289';\n"); - grammarBuilder.append("KW290 : 'KW' '290';\n"); - grammarBuilder.append("KW291 : 'KW' '291';\n"); - grammarBuilder.append("KW292 : 'KW' '292';\n"); - grammarBuilder.append("KW293 : 'KW' '293';\n"); - grammarBuilder.append("KW294 : 'KW' '294';\n"); - grammarBuilder.append("KW295 : 'KW' '295';\n"); - grammarBuilder.append("KW296 : 'KW' '296';\n"); - grammarBuilder.append("KW297 : 'KW' '297';\n"); - grammarBuilder.append("KW298 : 'KW' '298';\n"); - grammarBuilder.append("KW299 : 'KW' '299';\n"); - grammarBuilder.append("KW300 : 'KW' '300';\n"); - grammarBuilder.append("KW301 : 'KW' '301';\n"); - grammarBuilder.append("KW302 : 'KW' '302';\n"); - grammarBuilder.append("KW303 : 'KW' '303';\n"); - grammarBuilder.append("KW304 : 'KW' '304';\n"); - grammarBuilder.append("KW305 : 'KW' '305';\n"); - grammarBuilder.append("KW306 : 'KW' '306';\n"); - grammarBuilder.append("KW307 : 'KW' '307';\n"); - grammarBuilder.append("KW308 : 'KW' '308';\n"); - grammarBuilder.append("KW309 : 'KW' '309';\n"); - grammarBuilder.append("KW310 : 'KW' '310';\n"); - grammarBuilder.append("KW311 : 'KW' '311';\n"); - grammarBuilder.append("KW312 : 'KW' '312';\n"); - grammarBuilder.append("KW313 : 'KW' '313';\n"); - grammarBuilder.append("KW314 : 'KW' '314';\n"); - grammarBuilder.append("KW315 : 'KW' '315';\n"); - grammarBuilder.append("KW316 : 'KW' '316';\n"); - grammarBuilder.append("KW317 : 'KW' '317';\n"); - grammarBuilder.append("KW318 : 'KW' '318';\n"); - grammarBuilder.append("KW319 : 'KW' '319';\n"); - grammarBuilder.append("KW320 : 'KW' '320';\n"); - grammarBuilder.append("KW321 : 'KW' '321';\n"); - grammarBuilder.append("KW322 : 'KW' '322';\n"); - grammarBuilder.append("KW323 : 'KW' '323';\n"); - grammarBuilder.append("KW324 : 'KW' '324';\n"); - grammarBuilder.append("KW325 : 'KW' '325';\n"); - grammarBuilder.append("KW326 : 'KW' '326';\n"); - grammarBuilder.append("KW327 : 'KW' '327';\n"); - grammarBuilder.append("KW328 : 'KW' '328';\n"); - grammarBuilder.append("KW329 : 'KW' '329';\n"); - grammarBuilder.append("KW330 : 'KW' '330';\n"); - grammarBuilder.append("KW331 : 'KW' '331';\n"); - grammarBuilder.append("KW332 : 'KW' '332';\n"); - grammarBuilder.append("KW333 : 'KW' '333';\n"); - grammarBuilder.append("KW334 : 'KW' '334';\n"); - grammarBuilder.append("KW335 : 'KW' '335';\n"); - grammarBuilder.append("KW336 : 'KW' '336';\n"); - grammarBuilder.append("KW337 : 'KW' '337';\n"); - grammarBuilder.append("KW338 : 'KW' '338';\n"); - grammarBuilder.append("KW339 : 'KW' '339';\n"); - grammarBuilder.append("KW340 : 'KW' '340';\n"); - grammarBuilder.append("KW341 : 'KW' '341';\n"); - grammarBuilder.append("KW342 : 'KW' '342';\n"); - grammarBuilder.append("KW343 : 'KW' '343';\n"); - grammarBuilder.append("KW344 : 'KW' '344';\n"); - grammarBuilder.append("KW345 : 'KW' '345';\n"); - grammarBuilder.append("KW346 : 'KW' '346';\n"); - grammarBuilder.append("KW347 : 'KW' '347';\n"); - grammarBuilder.append("KW348 : 'KW' '348';\n"); - grammarBuilder.append("KW349 : 'KW' '349';\n"); - grammarBuilder.append("KW350 : 'KW' '350';\n"); - grammarBuilder.append("KW351 : 'KW' '351';\n"); - grammarBuilder.append("KW352 : 'KW' '352';\n"); - grammarBuilder.append("KW353 : 'KW' '353';\n"); - grammarBuilder.append("KW354 : 'KW' '354';\n"); - grammarBuilder.append("KW355 : 'KW' '355';\n"); - grammarBuilder.append("KW356 : 'KW' '356';\n"); - grammarBuilder.append("KW357 : 'KW' '357';\n"); - grammarBuilder.append("KW358 : 'KW' '358';\n"); - grammarBuilder.append("KW359 : 'KW' '359';\n"); - grammarBuilder.append("KW360 : 'KW' '360';\n"); - grammarBuilder.append("KW361 : 'KW' '361';\n"); - grammarBuilder.append("KW362 : 'KW' '362';\n"); - grammarBuilder.append("KW363 : 'KW' '363';\n"); - grammarBuilder.append("KW364 : 'KW' '364';\n"); - grammarBuilder.append("KW365 : 'KW' '365';\n"); - grammarBuilder.append("KW366 : 'KW' '366';\n"); - grammarBuilder.append("KW367 : 'KW' '367';\n"); - grammarBuilder.append("KW368 : 'KW' '368';\n"); - grammarBuilder.append("KW369 : 'KW' '369';\n"); - grammarBuilder.append("KW370 : 'KW' '370';\n"); - grammarBuilder.append("KW371 : 'KW' '371';\n"); - grammarBuilder.append("KW372 : 'KW' '372';\n"); - grammarBuilder.append("KW373 : 'KW' '373';\n"); - grammarBuilder.append("KW374 : 'KW' '374';\n"); - grammarBuilder.append("KW375 : 'KW' '375';\n"); - grammarBuilder.append("KW376 : 'KW' '376';\n"); - grammarBuilder.append("KW377 : 'KW' '377';\n"); - grammarBuilder.append("KW378 : 'KW' '378';\n"); - grammarBuilder.append("KW379 : 'KW' '379';\n"); - grammarBuilder.append("KW380 : 'KW' '380';\n"); - grammarBuilder.append("KW381 : 'KW' '381';\n"); - grammarBuilder.append("KW382 : 'KW' '382';\n"); - grammarBuilder.append("KW383 : 'KW' '383';\n"); - grammarBuilder.append("KW384 : 'KW' '384';\n"); - grammarBuilder.append("KW385 : 'KW' '385';\n"); - grammarBuilder.append("KW386 : 'KW' '386';\n"); - grammarBuilder.append("KW387 : 'KW' '387';\n"); - grammarBuilder.append("KW388 : 'KW' '388';\n"); - grammarBuilder.append("KW389 : 'KW' '389';\n"); - grammarBuilder.append("KW390 : 'KW' '390';\n"); - grammarBuilder.append("KW391 : 'KW' '391';\n"); - grammarBuilder.append("KW392 : 'KW' '392';\n"); - grammarBuilder.append("KW393 : 'KW' '393';\n"); - grammarBuilder.append("KW394 : 'KW' '394';\n"); - grammarBuilder.append("KW395 : 'KW' '395';\n"); - grammarBuilder.append("KW396 : 'KW' '396';\n"); - grammarBuilder.append("KW397 : 'KW' '397';\n"); - grammarBuilder.append("KW398 : 'KW' '398';\n"); - grammarBuilder.append("KW399 : 'KW' '399';\n"); - grammarBuilder.append("KW400 : 'KW' '400';\n"); - grammarBuilder.append("KW401 : 'KW' '401';\n"); - grammarBuilder.append("KW402 : 'KW' '402';\n"); - grammarBuilder.append("KW403 : 'KW' '403';\n"); - grammarBuilder.append("KW404 : 'KW' '404';\n"); - grammarBuilder.append("KW405 : 'KW' '405';\n"); - grammarBuilder.append("KW406 : 'KW' '406';\n"); - grammarBuilder.append("KW407 : 'KW' '407';\n"); - grammarBuilder.append("KW408 : 'KW' '408';\n"); - grammarBuilder.append("KW409 : 'KW' '409';\n"); - grammarBuilder.append("KW410 : 'KW' '410';\n"); - grammarBuilder.append("KW411 : 'KW' '411';\n"); - grammarBuilder.append("KW412 : 'KW' '412';\n"); - grammarBuilder.append("KW413 : 'KW' '413';\n"); - grammarBuilder.append("KW414 : 'KW' '414';\n"); - grammarBuilder.append("KW415 : 'KW' '415';\n"); - grammarBuilder.append("KW416 : 'KW' '416';\n"); - grammarBuilder.append("KW417 : 'KW' '417';\n"); - grammarBuilder.append("KW418 : 'KW' '418';\n"); - grammarBuilder.append("KW419 : 'KW' '419';\n"); - grammarBuilder.append("KW420 : 'KW' '420';\n"); - grammarBuilder.append("KW421 : 'KW' '421';\n"); - grammarBuilder.append("KW422 : 'KW' '422';\n"); - grammarBuilder.append("KW423 : 'KW' '423';\n"); - grammarBuilder.append("KW424 : 'KW' '424';\n"); - grammarBuilder.append("KW425 : 'KW' '425';\n"); - grammarBuilder.append("KW426 : 'KW' '426';\n"); - grammarBuilder.append("KW427 : 'KW' '427';\n"); - grammarBuilder.append("KW428 : 'KW' '428';\n"); - grammarBuilder.append("KW429 : 'KW' '429';\n"); - grammarBuilder.append("KW430 : 'KW' '430';\n"); - grammarBuilder.append("KW431 : 'KW' '431';\n"); - grammarBuilder.append("KW432 : 'KW' '432';\n"); - grammarBuilder.append("KW433 : 'KW' '433';\n"); - grammarBuilder.append("KW434 : 'KW' '434';\n"); - grammarBuilder.append("KW435 : 'KW' '435';\n"); - grammarBuilder.append("KW436 : 'KW' '436';\n"); - grammarBuilder.append("KW437 : 'KW' '437';\n"); - grammarBuilder.append("KW438 : 'KW' '438';\n"); - grammarBuilder.append("KW439 : 'KW' '439';\n"); - grammarBuilder.append("KW440 : 'KW' '440';\n"); - grammarBuilder.append("KW441 : 'KW' '441';\n"); - grammarBuilder.append("KW442 : 'KW' '442';\n"); - grammarBuilder.append("KW443 : 'KW' '443';\n"); - grammarBuilder.append("KW444 : 'KW' '444';\n"); - grammarBuilder.append("KW445 : 'KW' '445';\n"); - grammarBuilder.append("KW446 : 'KW' '446';\n"); - grammarBuilder.append("KW447 : 'KW' '447';\n"); - grammarBuilder.append("KW448 : 'KW' '448';\n"); - grammarBuilder.append("KW449 : 'KW' '449';\n"); - grammarBuilder.append("KW450 : 'KW' '450';\n"); - grammarBuilder.append("KW451 : 'KW' '451';\n"); - grammarBuilder.append("KW452 : 'KW' '452';\n"); - grammarBuilder.append("KW453 : 'KW' '453';\n"); - grammarBuilder.append("KW454 : 'KW' '454';\n"); - grammarBuilder.append("KW455 : 'KW' '455';\n"); - grammarBuilder.append("KW456 : 'KW' '456';\n"); - grammarBuilder.append("KW457 : 'KW' '457';\n"); - grammarBuilder.append("KW458 : 'KW' '458';\n"); - grammarBuilder.append("KW459 : 'KW' '459';\n"); - grammarBuilder.append("KW460 : 'KW' '460';\n"); - grammarBuilder.append("KW461 : 'KW' '461';\n"); - grammarBuilder.append("KW462 : 'KW' '462';\n"); - grammarBuilder.append("KW463 : 'KW' '463';\n"); - grammarBuilder.append("KW464 : 'KW' '464';\n"); - grammarBuilder.append("KW465 : 'KW' '465';\n"); - grammarBuilder.append("KW466 : 'KW' '466';\n"); - grammarBuilder.append("KW467 : 'KW' '467';\n"); - grammarBuilder.append("KW468 : 'KW' '468';\n"); - grammarBuilder.append("KW469 : 'KW' '469';\n"); - grammarBuilder.append("KW470 : 'KW' '470';\n"); - grammarBuilder.append("KW471 : 'KW' '471';\n"); - grammarBuilder.append("KW472 : 'KW' '472';\n"); - grammarBuilder.append("KW473 : 'KW' '473';\n"); - grammarBuilder.append("KW474 : 'KW' '474';\n"); - grammarBuilder.append("KW475 : 'KW' '475';\n"); - grammarBuilder.append("KW476 : 'KW' '476';\n"); - grammarBuilder.append("KW477 : 'KW' '477';\n"); - grammarBuilder.append("KW478 : 'KW' '478';\n"); - grammarBuilder.append("KW479 : 'KW' '479';\n"); - grammarBuilder.append("KW480 : 'KW' '480';\n"); - grammarBuilder.append("KW481 : 'KW' '481';\n"); - grammarBuilder.append("KW482 : 'KW' '482';\n"); - grammarBuilder.append("KW483 : 'KW' '483';\n"); - grammarBuilder.append("KW484 : 'KW' '484';\n"); - grammarBuilder.append("KW485 : 'KW' '485';\n"); - grammarBuilder.append("KW486 : 'KW' '486';\n"); - grammarBuilder.append("KW487 : 'KW' '487';\n"); - grammarBuilder.append("KW488 : 'KW' '488';\n"); - grammarBuilder.append("KW489 : 'KW' '489';\n"); - grammarBuilder.append("KW490 : 'KW' '490';\n"); - grammarBuilder.append("KW491 : 'KW' '491';\n"); - grammarBuilder.append("KW492 : 'KW' '492';\n"); - grammarBuilder.append("KW493 : 'KW' '493';\n"); - grammarBuilder.append("KW494 : 'KW' '494';\n"); - grammarBuilder.append("KW495 : 'KW' '495';\n"); - grammarBuilder.append("KW496 : 'KW' '496';\n"); - grammarBuilder.append("KW497 : 'KW' '497';\n"); - grammarBuilder.append("KW498 : 'KW' '498';\n"); - grammarBuilder.append("KW499 : 'KW' '499';\n"); - grammarBuilder.append("KW500 : 'KW' '500';\n"); - grammarBuilder.append("KW501 : 'KW' '501';\n"); - grammarBuilder.append("KW502 : 'KW' '502';\n"); - grammarBuilder.append("KW503 : 'KW' '503';\n"); - grammarBuilder.append("KW504 : 'KW' '504';\n"); - grammarBuilder.append("KW505 : 'KW' '505';\n"); - grammarBuilder.append("KW506 : 'KW' '506';\n"); - grammarBuilder.append("KW507 : 'KW' '507';\n"); - grammarBuilder.append("KW508 : 'KW' '508';\n"); - grammarBuilder.append("KW509 : 'KW' '509';\n"); - grammarBuilder.append("KW510 : 'KW' '510';\n"); - grammarBuilder.append("KW511 : 'KW' '511';\n"); - grammarBuilder.append("KW512 : 'KW' '512';\n"); - grammarBuilder.append("KW513 : 'KW' '513';\n"); - grammarBuilder.append("KW514 : 'KW' '514';\n"); - grammarBuilder.append("KW515 : 'KW' '515';\n"); - grammarBuilder.append("KW516 : 'KW' '516';\n"); - grammarBuilder.append("KW517 : 'KW' '517';\n"); - grammarBuilder.append("KW518 : 'KW' '518';\n"); - grammarBuilder.append("KW519 : 'KW' '519';\n"); - grammarBuilder.append("KW520 : 'KW' '520';\n"); - grammarBuilder.append("KW521 : 'KW' '521';\n"); - grammarBuilder.append("KW522 : 'KW' '522';\n"); - grammarBuilder.append("KW523 : 'KW' '523';\n"); - grammarBuilder.append("KW524 : 'KW' '524';\n"); - grammarBuilder.append("KW525 : 'KW' '525';\n"); - grammarBuilder.append("KW526 : 'KW' '526';\n"); - grammarBuilder.append("KW527 : 'KW' '527';\n"); - grammarBuilder.append("KW528 : 'KW' '528';\n"); - grammarBuilder.append("KW529 : 'KW' '529';\n"); - grammarBuilder.append("KW530 : 'KW' '530';\n"); - grammarBuilder.append("KW531 : 'KW' '531';\n"); - grammarBuilder.append("KW532 : 'KW' '532';\n"); - grammarBuilder.append("KW533 : 'KW' '533';\n"); - grammarBuilder.append("KW534 : 'KW' '534';\n"); - grammarBuilder.append("KW535 : 'KW' '535';\n"); - grammarBuilder.append("KW536 : 'KW' '536';\n"); - grammarBuilder.append("KW537 : 'KW' '537';\n"); - grammarBuilder.append("KW538 : 'KW' '538';\n"); - grammarBuilder.append("KW539 : 'KW' '539';\n"); - grammarBuilder.append("KW540 : 'KW' '540';\n"); - grammarBuilder.append("KW541 : 'KW' '541';\n"); - grammarBuilder.append("KW542 : 'KW' '542';\n"); - grammarBuilder.append("KW543 : 'KW' '543';\n"); - grammarBuilder.append("KW544 : 'KW' '544';\n"); - grammarBuilder.append("KW545 : 'KW' '545';\n"); - grammarBuilder.append("KW546 : 'KW' '546';\n"); - grammarBuilder.append("KW547 : 'KW' '547';\n"); - grammarBuilder.append("KW548 : 'KW' '548';\n"); - grammarBuilder.append("KW549 : 'KW' '549';\n"); - grammarBuilder.append("KW550 : 'KW' '550';\n"); - grammarBuilder.append("KW551 : 'KW' '551';\n"); - grammarBuilder.append("KW552 : 'KW' '552';\n"); - grammarBuilder.append("KW553 : 'KW' '553';\n"); - grammarBuilder.append("KW554 : 'KW' '554';\n"); - grammarBuilder.append("KW555 : 'KW' '555';\n"); - grammarBuilder.append("KW556 : 'KW' '556';\n"); - grammarBuilder.append("KW557 : 'KW' '557';\n"); - grammarBuilder.append("KW558 : 'KW' '558';\n"); - grammarBuilder.append("KW559 : 'KW' '559';\n"); - grammarBuilder.append("KW560 : 'KW' '560';\n"); - grammarBuilder.append("KW561 : 'KW' '561';\n"); - grammarBuilder.append("KW562 : 'KW' '562';\n"); - grammarBuilder.append("KW563 : 'KW' '563';\n"); - grammarBuilder.append("KW564 : 'KW' '564';\n"); - grammarBuilder.append("KW565 : 'KW' '565';\n"); - grammarBuilder.append("KW566 : 'KW' '566';\n"); - grammarBuilder.append("KW567 : 'KW' '567';\n"); - grammarBuilder.append("KW568 : 'KW' '568';\n"); - grammarBuilder.append("KW569 : 'KW' '569';\n"); - grammarBuilder.append("KW570 : 'KW' '570';\n"); - grammarBuilder.append("KW571 : 'KW' '571';\n"); - grammarBuilder.append("KW572 : 'KW' '572';\n"); - grammarBuilder.append("KW573 : 'KW' '573';\n"); - grammarBuilder.append("KW574 : 'KW' '574';\n"); - grammarBuilder.append("KW575 : 'KW' '575';\n"); - grammarBuilder.append("KW576 : 'KW' '576';\n"); - grammarBuilder.append("KW577 : 'KW' '577';\n"); - grammarBuilder.append("KW578 : 'KW' '578';\n"); - grammarBuilder.append("KW579 : 'KW' '579';\n"); - grammarBuilder.append("KW580 : 'KW' '580';\n"); - grammarBuilder.append("KW581 : 'KW' '581';\n"); - grammarBuilder.append("KW582 : 'KW' '582';\n"); - grammarBuilder.append("KW583 : 'KW' '583';\n"); - grammarBuilder.append("KW584 : 'KW' '584';\n"); - grammarBuilder.append("KW585 : 'KW' '585';\n"); - grammarBuilder.append("KW586 : 'KW' '586';\n"); - grammarBuilder.append("KW587 : 'KW' '587';\n"); - grammarBuilder.append("KW588 : 'KW' '588';\n"); - grammarBuilder.append("KW589 : 'KW' '589';\n"); - grammarBuilder.append("KW590 : 'KW' '590';\n"); - grammarBuilder.append("KW591 : 'KW' '591';\n"); - grammarBuilder.append("KW592 : 'KW' '592';\n"); - grammarBuilder.append("KW593 : 'KW' '593';\n"); - grammarBuilder.append("KW594 : 'KW' '594';\n"); - grammarBuilder.append("KW595 : 'KW' '595';\n"); - grammarBuilder.append("KW596 : 'KW' '596';\n"); - grammarBuilder.append("KW597 : 'KW' '597';\n"); - grammarBuilder.append("KW598 : 'KW' '598';\n"); - grammarBuilder.append("KW599 : 'KW' '599';\n"); - grammarBuilder.append("KW600 : 'KW' '600';\n"); - grammarBuilder.append("KW601 : 'KW' '601';\n"); - grammarBuilder.append("KW602 : 'KW' '602';\n"); - grammarBuilder.append("KW603 : 'KW' '603';\n"); - grammarBuilder.append("KW604 : 'KW' '604';\n"); - grammarBuilder.append("KW605 : 'KW' '605';\n"); - grammarBuilder.append("KW606 : 'KW' '606';\n"); - grammarBuilder.append("KW607 : 'KW' '607';\n"); - grammarBuilder.append("KW608 : 'KW' '608';\n"); - grammarBuilder.append("KW609 : 'KW' '609';\n"); - grammarBuilder.append("KW610 : 'KW' '610';\n"); - grammarBuilder.append("KW611 : 'KW' '611';\n"); - grammarBuilder.append("KW612 : 'KW' '612';\n"); - grammarBuilder.append("KW613 : 'KW' '613';\n"); - grammarBuilder.append("KW614 : 'KW' '614';\n"); - grammarBuilder.append("KW615 : 'KW' '615';\n"); - grammarBuilder.append("KW616 : 'KW' '616';\n"); - grammarBuilder.append("KW617 : 'KW' '617';\n"); - grammarBuilder.append("KW618 : 'KW' '618';\n"); - grammarBuilder.append("KW619 : 'KW' '619';\n"); - grammarBuilder.append("KW620 : 'KW' '620';\n"); - grammarBuilder.append("KW621 : 'KW' '621';\n"); - grammarBuilder.append("KW622 : 'KW' '622';\n"); - grammarBuilder.append("KW623 : 'KW' '623';\n"); - grammarBuilder.append("KW624 : 'KW' '624';\n"); - grammarBuilder.append("KW625 : 'KW' '625';\n"); - grammarBuilder.append("KW626 : 'KW' '626';\n"); - grammarBuilder.append("KW627 : 'KW' '627';\n"); - grammarBuilder.append("KW628 : 'KW' '628';\n"); - grammarBuilder.append("KW629 : 'KW' '629';\n"); - grammarBuilder.append("KW630 : 'KW' '630';\n"); - grammarBuilder.append("KW631 : 'KW' '631';\n"); - grammarBuilder.append("KW632 : 'KW' '632';\n"); - grammarBuilder.append("KW633 : 'KW' '633';\n"); - grammarBuilder.append("KW634 : 'KW' '634';\n"); - grammarBuilder.append("KW635 : 'KW' '635';\n"); - grammarBuilder.append("KW636 : 'KW' '636';\n"); - grammarBuilder.append("KW637 : 'KW' '637';\n"); - grammarBuilder.append("KW638 : 'KW' '638';\n"); - grammarBuilder.append("KW639 : 'KW' '639';\n"); - grammarBuilder.append("KW640 : 'KW' '640';\n"); - grammarBuilder.append("KW641 : 'KW' '641';\n"); - grammarBuilder.append("KW642 : 'KW' '642';\n"); - grammarBuilder.append("KW643 : 'KW' '643';\n"); - grammarBuilder.append("KW644 : 'KW' '644';\n"); - grammarBuilder.append("KW645 : 'KW' '645';\n"); - grammarBuilder.append("KW646 : 'KW' '646';\n"); - grammarBuilder.append("KW647 : 'KW' '647';\n"); - grammarBuilder.append("KW648 : 'KW' '648';\n"); - grammarBuilder.append("KW649 : 'KW' '649';\n"); - grammarBuilder.append("KW650 : 'KW' '650';\n"); - grammarBuilder.append("KW651 : 'KW' '651';\n"); - grammarBuilder.append("KW652 : 'KW' '652';\n"); - grammarBuilder.append("KW653 : 'KW' '653';\n"); - grammarBuilder.append("KW654 : 'KW' '654';\n"); - grammarBuilder.append("KW655 : 'KW' '655';\n"); - grammarBuilder.append("KW656 : 'KW' '656';\n"); - grammarBuilder.append("KW657 : 'KW' '657';\n"); - grammarBuilder.append("KW658 : 'KW' '658';\n"); - grammarBuilder.append("KW659 : 'KW' '659';\n"); - grammarBuilder.append("KW660 : 'KW' '660';\n"); - grammarBuilder.append("KW661 : 'KW' '661';\n"); - grammarBuilder.append("KW662 : 'KW' '662';\n"); - grammarBuilder.append("KW663 : 'KW' '663';\n"); - grammarBuilder.append("KW664 : 'KW' '664';\n"); - grammarBuilder.append("KW665 : 'KW' '665';\n"); - grammarBuilder.append("KW666 : 'KW' '666';\n"); - grammarBuilder.append("KW667 : 'KW' '667';\n"); - grammarBuilder.append("KW668 : 'KW' '668';\n"); - grammarBuilder.append("KW669 : 'KW' '669';\n"); - grammarBuilder.append("KW670 : 'KW' '670';\n"); - grammarBuilder.append("KW671 : 'KW' '671';\n"); - grammarBuilder.append("KW672 : 'KW' '672';\n"); - grammarBuilder.append("KW673 : 'KW' '673';\n"); - grammarBuilder.append("KW674 : 'KW' '674';\n"); - grammarBuilder.append("KW675 : 'KW' '675';\n"); - grammarBuilder.append("KW676 : 'KW' '676';\n"); - grammarBuilder.append("KW677 : 'KW' '677';\n"); - grammarBuilder.append("KW678 : 'KW' '678';\n"); - grammarBuilder.append("KW679 : 'KW' '679';\n"); - grammarBuilder.append("KW680 : 'KW' '680';\n"); - grammarBuilder.append("KW681 : 'KW' '681';\n"); - grammarBuilder.append("KW682 : 'KW' '682';\n"); - grammarBuilder.append("KW683 : 'KW' '683';\n"); - grammarBuilder.append("KW684 : 'KW' '684';\n"); - grammarBuilder.append("KW685 : 'KW' '685';\n"); - grammarBuilder.append("KW686 : 'KW' '686';\n"); - grammarBuilder.append("KW687 : 'KW' '687';\n"); - grammarBuilder.append("KW688 : 'KW' '688';\n"); - grammarBuilder.append("KW689 : 'KW' '689';\n"); - grammarBuilder.append("KW690 : 'KW' '690';\n"); - grammarBuilder.append("KW691 : 'KW' '691';\n"); - grammarBuilder.append("KW692 : 'KW' '692';\n"); - grammarBuilder.append("KW693 : 'KW' '693';\n"); - grammarBuilder.append("KW694 : 'KW' '694';\n"); - grammarBuilder.append("KW695 : 'KW' '695';\n"); - grammarBuilder.append("KW696 : 'KW' '696';\n"); - grammarBuilder.append("KW697 : 'KW' '697';\n"); - grammarBuilder.append("KW698 : 'KW' '698';\n"); - grammarBuilder.append("KW699 : 'KW' '699';\n"); - grammarBuilder.append("KW700 : 'KW' '700';\n"); - grammarBuilder.append("KW701 : 'KW' '701';\n"); - grammarBuilder.append("KW702 : 'KW' '702';\n"); - grammarBuilder.append("KW703 : 'KW' '703';\n"); - grammarBuilder.append("KW704 : 'KW' '704';\n"); - grammarBuilder.append("KW705 : 'KW' '705';\n"); - grammarBuilder.append("KW706 : 'KW' '706';\n"); - grammarBuilder.append("KW707 : 'KW' '707';\n"); - grammarBuilder.append("KW708 : 'KW' '708';\n"); - grammarBuilder.append("KW709 : 'KW' '709';\n"); - grammarBuilder.append("KW710 : 'KW' '710';\n"); - grammarBuilder.append("KW711 : 'KW' '711';\n"); - grammarBuilder.append("KW712 : 'KW' '712';\n"); - grammarBuilder.append("KW713 : 'KW' '713';\n"); - grammarBuilder.append("KW714 : 'KW' '714';\n"); - grammarBuilder.append("KW715 : 'KW' '715';\n"); - grammarBuilder.append("KW716 : 'KW' '716';\n"); - grammarBuilder.append("KW717 : 'KW' '717';\n"); - grammarBuilder.append("KW718 : 'KW' '718';\n"); - grammarBuilder.append("KW719 : 'KW' '719';\n"); - grammarBuilder.append("KW720 : 'KW' '720';\n"); - grammarBuilder.append("KW721 : 'KW' '721';\n"); - grammarBuilder.append("KW722 : 'KW' '722';\n"); - grammarBuilder.append("KW723 : 'KW' '723';\n"); - grammarBuilder.append("KW724 : 'KW' '724';\n"); - grammarBuilder.append("KW725 : 'KW' '725';\n"); - grammarBuilder.append("KW726 : 'KW' '726';\n"); - grammarBuilder.append("KW727 : 'KW' '727';\n"); - grammarBuilder.append("KW728 : 'KW' '728';\n"); - grammarBuilder.append("KW729 : 'KW' '729';\n"); - grammarBuilder.append("KW730 : 'KW' '730';\n"); - grammarBuilder.append("KW731 : 'KW' '731';\n"); - grammarBuilder.append("KW732 : 'KW' '732';\n"); - grammarBuilder.append("KW733 : 'KW' '733';\n"); - grammarBuilder.append("KW734 : 'KW' '734';\n"); - grammarBuilder.append("KW735 : 'KW' '735';\n"); - grammarBuilder.append("KW736 : 'KW' '736';\n"); - grammarBuilder.append("KW737 : 'KW' '737';\n"); - grammarBuilder.append("KW738 : 'KW' '738';\n"); - grammarBuilder.append("KW739 : 'KW' '739';\n"); - grammarBuilder.append("KW740 : 'KW' '740';\n"); - grammarBuilder.append("KW741 : 'KW' '741';\n"); - grammarBuilder.append("KW742 : 'KW' '742';\n"); - grammarBuilder.append("KW743 : 'KW' '743';\n"); - grammarBuilder.append("KW744 : 'KW' '744';\n"); - grammarBuilder.append("KW745 : 'KW' '745';\n"); - grammarBuilder.append("KW746 : 'KW' '746';\n"); - grammarBuilder.append("KW747 : 'KW' '747';\n"); - grammarBuilder.append("KW748 : 'KW' '748';\n"); - grammarBuilder.append("KW749 : 'KW' '749';\n"); - grammarBuilder.append("KW750 : 'KW' '750';\n"); - grammarBuilder.append("KW751 : 'KW' '751';\n"); - grammarBuilder.append("KW752 : 'KW' '752';\n"); - grammarBuilder.append("KW753 : 'KW' '753';\n"); - grammarBuilder.append("KW754 : 'KW' '754';\n"); - grammarBuilder.append("KW755 : 'KW' '755';\n"); - grammarBuilder.append("KW756 : 'KW' '756';\n"); - grammarBuilder.append("KW757 : 'KW' '757';\n"); - grammarBuilder.append("KW758 : 'KW' '758';\n"); - grammarBuilder.append("KW759 : 'KW' '759';\n"); - grammarBuilder.append("KW760 : 'KW' '760';\n"); - grammarBuilder.append("KW761 : 'KW' '761';\n"); - grammarBuilder.append("KW762 : 'KW' '762';\n"); - grammarBuilder.append("KW763 : 'KW' '763';\n"); - grammarBuilder.append("KW764 : 'KW' '764';\n"); - grammarBuilder.append("KW765 : 'KW' '765';\n"); - grammarBuilder.append("KW766 : 'KW' '766';\n"); - grammarBuilder.append("KW767 : 'KW' '767';\n"); - grammarBuilder.append("KW768 : 'KW' '768';\n"); - grammarBuilder.append("KW769 : 'KW' '769';\n"); - grammarBuilder.append("KW770 : 'KW' '770';\n"); - grammarBuilder.append("KW771 : 'KW' '771';\n"); - grammarBuilder.append("KW772 : 'KW' '772';\n"); - grammarBuilder.append("KW773 : 'KW' '773';\n"); - grammarBuilder.append("KW774 : 'KW' '774';\n"); - grammarBuilder.append("KW775 : 'KW' '775';\n"); - grammarBuilder.append("KW776 : 'KW' '776';\n"); - grammarBuilder.append("KW777 : 'KW' '777';\n"); - grammarBuilder.append("KW778 : 'KW' '778';\n"); - grammarBuilder.append("KW779 : 'KW' '779';\n"); - grammarBuilder.append("KW780 : 'KW' '780';\n"); - grammarBuilder.append("KW781 : 'KW' '781';\n"); - grammarBuilder.append("KW782 : 'KW' '782';\n"); - grammarBuilder.append("KW783 : 'KW' '783';\n"); - grammarBuilder.append("KW784 : 'KW' '784';\n"); - grammarBuilder.append("KW785 : 'KW' '785';\n"); - grammarBuilder.append("KW786 : 'KW' '786';\n"); - grammarBuilder.append("KW787 : 'KW' '787';\n"); - grammarBuilder.append("KW788 : 'KW' '788';\n"); - grammarBuilder.append("KW789 : 'KW' '789';\n"); - grammarBuilder.append("KW790 : 'KW' '790';\n"); - grammarBuilder.append("KW791 : 'KW' '791';\n"); - grammarBuilder.append("KW792 : 'KW' '792';\n"); - grammarBuilder.append("KW793 : 'KW' '793';\n"); - grammarBuilder.append("KW794 : 'KW' '794';\n"); - grammarBuilder.append("KW795 : 'KW' '795';\n"); - grammarBuilder.append("KW796 : 'KW' '796';\n"); - grammarBuilder.append("KW797 : 'KW' '797';\n"); - grammarBuilder.append("KW798 : 'KW' '798';\n"); - grammarBuilder.append("KW799 : 'KW' '799';\n"); - grammarBuilder.append("KW800 : 'KW' '800';\n"); - grammarBuilder.append("KW801 : 'KW' '801';\n"); - grammarBuilder.append("KW802 : 'KW' '802';\n"); - grammarBuilder.append("KW803 : 'KW' '803';\n"); - grammarBuilder.append("KW804 : 'KW' '804';\n"); - grammarBuilder.append("KW805 : 'KW' '805';\n"); - grammarBuilder.append("KW806 : 'KW' '806';\n"); - grammarBuilder.append("KW807 : 'KW' '807';\n"); - grammarBuilder.append("KW808 : 'KW' '808';\n"); - grammarBuilder.append("KW809 : 'KW' '809';\n"); - grammarBuilder.append("KW810 : 'KW' '810';\n"); - grammarBuilder.append("KW811 : 'KW' '811';\n"); - grammarBuilder.append("KW812 : 'KW' '812';\n"); - grammarBuilder.append("KW813 : 'KW' '813';\n"); - grammarBuilder.append("KW814 : 'KW' '814';\n"); - grammarBuilder.append("KW815 : 'KW' '815';\n"); - grammarBuilder.append("KW816 : 'KW' '816';\n"); - grammarBuilder.append("KW817 : 'KW' '817';\n"); - grammarBuilder.append("KW818 : 'KW' '818';\n"); - grammarBuilder.append("KW819 : 'KW' '819';\n"); - grammarBuilder.append("KW820 : 'KW' '820';\n"); - grammarBuilder.append("KW821 : 'KW' '821';\n"); - grammarBuilder.append("KW822 : 'KW' '822';\n"); - grammarBuilder.append("KW823 : 'KW' '823';\n"); - grammarBuilder.append("KW824 : 'KW' '824';\n"); - grammarBuilder.append("KW825 : 'KW' '825';\n"); - grammarBuilder.append("KW826 : 'KW' '826';\n"); - grammarBuilder.append("KW827 : 'KW' '827';\n"); - grammarBuilder.append("KW828 : 'KW' '828';\n"); - grammarBuilder.append("KW829 : 'KW' '829';\n"); - grammarBuilder.append("KW830 : 'KW' '830';\n"); - grammarBuilder.append("KW831 : 'KW' '831';\n"); - grammarBuilder.append("KW832 : 'KW' '832';\n"); - grammarBuilder.append("KW833 : 'KW' '833';\n"); - grammarBuilder.append("KW834 : 'KW' '834';\n"); - grammarBuilder.append("KW835 : 'KW' '835';\n"); - grammarBuilder.append("KW836 : 'KW' '836';\n"); - grammarBuilder.append("KW837 : 'KW' '837';\n"); - grammarBuilder.append("KW838 : 'KW' '838';\n"); - grammarBuilder.append("KW839 : 'KW' '839';\n"); - grammarBuilder.append("KW840 : 'KW' '840';\n"); - grammarBuilder.append("KW841 : 'KW' '841';\n"); - grammarBuilder.append("KW842 : 'KW' '842';\n"); - grammarBuilder.append("KW843 : 'KW' '843';\n"); - grammarBuilder.append("KW844 : 'KW' '844';\n"); - grammarBuilder.append("KW845 : 'KW' '845';\n"); - grammarBuilder.append("KW846 : 'KW' '846';\n"); - grammarBuilder.append("KW847 : 'KW' '847';\n"); - grammarBuilder.append("KW848 : 'KW' '848';\n"); - grammarBuilder.append("KW849 : 'KW' '849';\n"); - grammarBuilder.append("KW850 : 'KW' '850';\n"); - grammarBuilder.append("KW851 : 'KW' '851';\n"); - grammarBuilder.append("KW852 : 'KW' '852';\n"); - grammarBuilder.append("KW853 : 'KW' '853';\n"); - grammarBuilder.append("KW854 : 'KW' '854';\n"); - grammarBuilder.append("KW855 : 'KW' '855';\n"); - grammarBuilder.append("KW856 : 'KW' '856';\n"); - grammarBuilder.append("KW857 : 'KW' '857';\n"); - grammarBuilder.append("KW858 : 'KW' '858';\n"); - grammarBuilder.append("KW859 : 'KW' '859';\n"); - grammarBuilder.append("KW860 : 'KW' '860';\n"); - grammarBuilder.append("KW861 : 'KW' '861';\n"); - grammarBuilder.append("KW862 : 'KW' '862';\n"); - grammarBuilder.append("KW863 : 'KW' '863';\n"); - grammarBuilder.append("KW864 : 'KW' '864';\n"); - grammarBuilder.append("KW865 : 'KW' '865';\n"); - grammarBuilder.append("KW866 : 'KW' '866';\n"); - grammarBuilder.append("KW867 : 'KW' '867';\n"); - grammarBuilder.append("KW868 : 'KW' '868';\n"); - grammarBuilder.append("KW869 : 'KW' '869';\n"); - grammarBuilder.append("KW870 : 'KW' '870';\n"); - grammarBuilder.append("KW871 : 'KW' '871';\n"); - grammarBuilder.append("KW872 : 'KW' '872';\n"); - grammarBuilder.append("KW873 : 'KW' '873';\n"); - grammarBuilder.append("KW874 : 'KW' '874';\n"); - grammarBuilder.append("KW875 : 'KW' '875';\n"); - grammarBuilder.append("KW876 : 'KW' '876';\n"); - grammarBuilder.append("KW877 : 'KW' '877';\n"); - grammarBuilder.append("KW878 : 'KW' '878';\n"); - grammarBuilder.append("KW879 : 'KW' '879';\n"); - grammarBuilder.append("KW880 : 'KW' '880';\n"); - grammarBuilder.append("KW881 : 'KW' '881';\n"); - grammarBuilder.append("KW882 : 'KW' '882';\n"); - grammarBuilder.append("KW883 : 'KW' '883';\n"); - grammarBuilder.append("KW884 : 'KW' '884';\n"); - grammarBuilder.append("KW885 : 'KW' '885';\n"); - grammarBuilder.append("KW886 : 'KW' '886';\n"); - grammarBuilder.append("KW887 : 'KW' '887';\n"); - grammarBuilder.append("KW888 : 'KW' '888';\n"); - grammarBuilder.append("KW889 : 'KW' '889';\n"); - grammarBuilder.append("KW890 : 'KW' '890';\n"); - grammarBuilder.append("KW891 : 'KW' '891';\n"); - grammarBuilder.append("KW892 : 'KW' '892';\n"); - grammarBuilder.append("KW893 : 'KW' '893';\n"); - grammarBuilder.append("KW894 : 'KW' '894';\n"); - grammarBuilder.append("KW895 : 'KW' '895';\n"); - grammarBuilder.append("KW896 : 'KW' '896';\n"); - grammarBuilder.append("KW897 : 'KW' '897';\n"); - grammarBuilder.append("KW898 : 'KW' '898';\n"); - grammarBuilder.append("KW899 : 'KW' '899';\n"); - grammarBuilder.append("KW900 : 'KW' '900';\n"); - grammarBuilder.append("KW901 : 'KW' '901';\n"); - grammarBuilder.append("KW902 : 'KW' '902';\n"); - grammarBuilder.append("KW903 : 'KW' '903';\n"); - grammarBuilder.append("KW904 : 'KW' '904';\n"); - grammarBuilder.append("KW905 : 'KW' '905';\n"); - grammarBuilder.append("KW906 : 'KW' '906';\n"); - grammarBuilder.append("KW907 : 'KW' '907';\n"); - grammarBuilder.append("KW908 : 'KW' '908';\n"); - grammarBuilder.append("KW909 : 'KW' '909';\n"); - grammarBuilder.append("KW910 : 'KW' '910';\n"); - grammarBuilder.append("KW911 : 'KW' '911';\n"); - grammarBuilder.append("KW912 : 'KW' '912';\n"); - grammarBuilder.append("KW913 : 'KW' '913';\n"); - grammarBuilder.append("KW914 : 'KW' '914';\n"); - grammarBuilder.append("KW915 : 'KW' '915';\n"); - grammarBuilder.append("KW916 : 'KW' '916';\n"); - grammarBuilder.append("KW917 : 'KW' '917';\n"); - grammarBuilder.append("KW918 : 'KW' '918';\n"); - grammarBuilder.append("KW919 : 'KW' '919';\n"); - grammarBuilder.append("KW920 : 'KW' '920';\n"); - grammarBuilder.append("KW921 : 'KW' '921';\n"); - grammarBuilder.append("KW922 : 'KW' '922';\n"); - grammarBuilder.append("KW923 : 'KW' '923';\n"); - grammarBuilder.append("KW924 : 'KW' '924';\n"); - grammarBuilder.append("KW925 : 'KW' '925';\n"); - grammarBuilder.append("KW926 : 'KW' '926';\n"); - grammarBuilder.append("KW927 : 'KW' '927';\n"); - grammarBuilder.append("KW928 : 'KW' '928';\n"); - grammarBuilder.append("KW929 : 'KW' '929';\n"); - grammarBuilder.append("KW930 : 'KW' '930';\n"); - grammarBuilder.append("KW931 : 'KW' '931';\n"); - grammarBuilder.append("KW932 : 'KW' '932';\n"); - grammarBuilder.append("KW933 : 'KW' '933';\n"); - grammarBuilder.append("KW934 : 'KW' '934';\n"); - grammarBuilder.append("KW935 : 'KW' '935';\n"); - grammarBuilder.append("KW936 : 'KW' '936';\n"); - grammarBuilder.append("KW937 : 'KW' '937';\n"); - grammarBuilder.append("KW938 : 'KW' '938';\n"); - grammarBuilder.append("KW939 : 'KW' '939';\n"); - grammarBuilder.append("KW940 : 'KW' '940';\n"); - grammarBuilder.append("KW941 : 'KW' '941';\n"); - grammarBuilder.append("KW942 : 'KW' '942';\n"); - grammarBuilder.append("KW943 : 'KW' '943';\n"); - grammarBuilder.append("KW944 : 'KW' '944';\n"); - grammarBuilder.append("KW945 : 'KW' '945';\n"); - grammarBuilder.append("KW946 : 'KW' '946';\n"); - grammarBuilder.append("KW947 : 'KW' '947';\n"); - grammarBuilder.append("KW948 : 'KW' '948';\n"); - grammarBuilder.append("KW949 : 'KW' '949';\n"); - grammarBuilder.append("KW950 : 'KW' '950';\n"); - grammarBuilder.append("KW951 : 'KW' '951';\n"); - grammarBuilder.append("KW952 : 'KW' '952';\n"); - grammarBuilder.append("KW953 : 'KW' '953';\n"); - grammarBuilder.append("KW954 : 'KW' '954';\n"); - grammarBuilder.append("KW955 : 'KW' '955';\n"); - grammarBuilder.append("KW956 : 'KW' '956';\n"); - grammarBuilder.append("KW957 : 'KW' '957';\n"); - grammarBuilder.append("KW958 : 'KW' '958';\n"); - grammarBuilder.append("KW959 : 'KW' '959';\n"); - grammarBuilder.append("KW960 : 'KW' '960';\n"); - grammarBuilder.append("KW961 : 'KW' '961';\n"); - grammarBuilder.append("KW962 : 'KW' '962';\n"); - grammarBuilder.append("KW963 : 'KW' '963';\n"); - grammarBuilder.append("KW964 : 'KW' '964';\n"); - grammarBuilder.append("KW965 : 'KW' '965';\n"); - grammarBuilder.append("KW966 : 'KW' '966';\n"); - grammarBuilder.append("KW967 : 'KW' '967';\n"); - grammarBuilder.append("KW968 : 'KW' '968';\n"); - grammarBuilder.append("KW969 : 'KW' '969';\n"); - grammarBuilder.append("KW970 : 'KW' '970';\n"); - grammarBuilder.append("KW971 : 'KW' '971';\n"); - grammarBuilder.append("KW972 : 'KW' '972';\n"); - grammarBuilder.append("KW973 : 'KW' '973';\n"); - grammarBuilder.append("KW974 : 'KW' '974';\n"); - grammarBuilder.append("KW975 : 'KW' '975';\n"); - grammarBuilder.append("KW976 : 'KW' '976';\n"); - grammarBuilder.append("KW977 : 'KW' '977';\n"); - grammarBuilder.append("KW978 : 'KW' '978';\n"); - grammarBuilder.append("KW979 : 'KW' '979';\n"); - grammarBuilder.append("KW980 : 'KW' '980';\n"); - grammarBuilder.append("KW981 : 'KW' '981';\n"); - grammarBuilder.append("KW982 : 'KW' '982';\n"); - grammarBuilder.append("KW983 : 'KW' '983';\n"); - grammarBuilder.append("KW984 : 'KW' '984';\n"); - grammarBuilder.append("KW985 : 'KW' '985';\n"); - grammarBuilder.append("KW986 : 'KW' '986';\n"); - grammarBuilder.append("KW987 : 'KW' '987';\n"); - grammarBuilder.append("KW988 : 'KW' '988';\n"); - grammarBuilder.append("KW989 : 'KW' '989';\n"); - grammarBuilder.append("KW990 : 'KW' '990';\n"); - grammarBuilder.append("KW991 : 'KW' '991';\n"); - grammarBuilder.append("KW992 : 'KW' '992';\n"); - grammarBuilder.append("KW993 : 'KW' '993';\n"); - grammarBuilder.append("KW994 : 'KW' '994';\n"); - grammarBuilder.append("KW995 : 'KW' '995';\n"); - grammarBuilder.append("KW996 : 'KW' '996';\n"); - grammarBuilder.append("KW997 : 'KW' '997';\n"); - grammarBuilder.append("KW998 : 'KW' '998';\n"); - grammarBuilder.append("KW999 : 'KW' '999';\n"); - grammarBuilder.append("KW1000 : 'KW' '1000';\n"); - grammarBuilder.append("KW1001 : 'KW' '1001';\n"); - grammarBuilder.append("KW1002 : 'KW' '1002';\n"); - grammarBuilder.append("KW1003 : 'KW' '1003';\n"); - grammarBuilder.append("KW1004 : 'KW' '1004';\n"); - grammarBuilder.append("KW1005 : 'KW' '1005';\n"); - grammarBuilder.append("KW1006 : 'KW' '1006';\n"); - grammarBuilder.append("KW1007 : 'KW' '1007';\n"); - grammarBuilder.append("KW1008 : 'KW' '1008';\n"); - grammarBuilder.append("KW1009 : 'KW' '1009';\n"); - grammarBuilder.append("KW1010 : 'KW' '1010';\n"); - grammarBuilder.append("KW1011 : 'KW' '1011';\n"); - grammarBuilder.append("KW1012 : 'KW' '1012';\n"); - grammarBuilder.append("KW1013 : 'KW' '1013';\n"); - grammarBuilder.append("KW1014 : 'KW' '1014';\n"); - grammarBuilder.append("KW1015 : 'KW' '1015';\n"); - grammarBuilder.append("KW1016 : 'KW' '1016';\n"); - grammarBuilder.append("KW1017 : 'KW' '1017';\n"); - grammarBuilder.append("KW1018 : 'KW' '1018';\n"); - grammarBuilder.append("KW1019 : 'KW' '1019';\n"); - grammarBuilder.append("KW1020 : 'KW' '1020';\n"); - grammarBuilder.append("KW1021 : 'KW' '1021';\n"); - grammarBuilder.append("KW1022 : 'KW' '1022';\n"); - grammarBuilder.append("KW1023 : 'KW' '1023';\n"); - grammarBuilder.append("KW1024 : 'KW' '1024';\n"); - grammarBuilder.append("KW1025 : 'KW' '1025';\n"); - grammarBuilder.append("KW1026 : 'KW' '1026';\n"); - grammarBuilder.append("KW1027 : 'KW' '1027';\n"); - grammarBuilder.append("KW1028 : 'KW' '1028';\n"); - grammarBuilder.append("KW1029 : 'KW' '1029';\n"); - grammarBuilder.append("KW1030 : 'KW' '1030';\n"); - grammarBuilder.append("KW1031 : 'KW' '1031';\n"); - grammarBuilder.append("KW1032 : 'KW' '1032';\n"); - grammarBuilder.append("KW1033 : 'KW' '1033';\n"); - grammarBuilder.append("KW1034 : 'KW' '1034';\n"); - grammarBuilder.append("KW1035 : 'KW' '1035';\n"); - grammarBuilder.append("KW1036 : 'KW' '1036';\n"); - grammarBuilder.append("KW1037 : 'KW' '1037';\n"); - grammarBuilder.append("KW1038 : 'KW' '1038';\n"); - grammarBuilder.append("KW1039 : 'KW' '1039';\n"); - grammarBuilder.append("KW1040 : 'KW' '1040';\n"); - grammarBuilder.append("KW1041 : 'KW' '1041';\n"); - grammarBuilder.append("KW1042 : 'KW' '1042';\n"); - grammarBuilder.append("KW1043 : 'KW' '1043';\n"); - grammarBuilder.append("KW1044 : 'KW' '1044';\n"); - grammarBuilder.append("KW1045 : 'KW' '1045';\n"); - grammarBuilder.append("KW1046 : 'KW' '1046';\n"); - grammarBuilder.append("KW1047 : 'KW' '1047';\n"); - grammarBuilder.append("KW1048 : 'KW' '1048';\n"); - grammarBuilder.append("KW1049 : 'KW' '1049';\n"); - grammarBuilder.append("KW1050 : 'KW' '1050';\n"); - grammarBuilder.append("KW1051 : 'KW' '1051';\n"); - grammarBuilder.append("KW1052 : 'KW' '1052';\n"); - grammarBuilder.append("KW1053 : 'KW' '1053';\n"); - grammarBuilder.append("KW1054 : 'KW' '1054';\n"); - grammarBuilder.append("KW1055 : 'KW' '1055';\n"); - grammarBuilder.append("KW1056 : 'KW' '1056';\n"); - grammarBuilder.append("KW1057 : 'KW' '1057';\n"); - grammarBuilder.append("KW1058 : 'KW' '1058';\n"); - grammarBuilder.append("KW1059 : 'KW' '1059';\n"); - grammarBuilder.append("KW1060 : 'KW' '1060';\n"); - grammarBuilder.append("KW1061 : 'KW' '1061';\n"); - grammarBuilder.append("KW1062 : 'KW' '1062';\n"); - grammarBuilder.append("KW1063 : 'KW' '1063';\n"); - grammarBuilder.append("KW1064 : 'KW' '1064';\n"); - grammarBuilder.append("KW1065 : 'KW' '1065';\n"); - grammarBuilder.append("KW1066 : 'KW' '1066';\n"); - grammarBuilder.append("KW1067 : 'KW' '1067';\n"); - grammarBuilder.append("KW1068 : 'KW' '1068';\n"); - grammarBuilder.append("KW1069 : 'KW' '1069';\n"); - grammarBuilder.append("KW1070 : 'KW' '1070';\n"); - grammarBuilder.append("KW1071 : 'KW' '1071';\n"); - grammarBuilder.append("KW1072 : 'KW' '1072';\n"); - grammarBuilder.append("KW1073 : 'KW' '1073';\n"); - grammarBuilder.append("KW1074 : 'KW' '1074';\n"); - grammarBuilder.append("KW1075 : 'KW' '1075';\n"); - grammarBuilder.append("KW1076 : 'KW' '1076';\n"); - grammarBuilder.append("KW1077 : 'KW' '1077';\n"); - grammarBuilder.append("KW1078 : 'KW' '1078';\n"); - grammarBuilder.append("KW1079 : 'KW' '1079';\n"); - grammarBuilder.append("KW1080 : 'KW' '1080';\n"); - grammarBuilder.append("KW1081 : 'KW' '1081';\n"); - grammarBuilder.append("KW1082 : 'KW' '1082';\n"); - grammarBuilder.append("KW1083 : 'KW' '1083';\n"); - grammarBuilder.append("KW1084 : 'KW' '1084';\n"); - grammarBuilder.append("KW1085 : 'KW' '1085';\n"); - grammarBuilder.append("KW1086 : 'KW' '1086';\n"); - grammarBuilder.append("KW1087 : 'KW' '1087';\n"); - grammarBuilder.append("KW1088 : 'KW' '1088';\n"); - grammarBuilder.append("KW1089 : 'KW' '1089';\n"); - grammarBuilder.append("KW1090 : 'KW' '1090';\n"); - grammarBuilder.append("KW1091 : 'KW' '1091';\n"); - grammarBuilder.append("KW1092 : 'KW' '1092';\n"); - grammarBuilder.append("KW1093 : 'KW' '1093';\n"); - grammarBuilder.append("KW1094 : 'KW' '1094';\n"); - grammarBuilder.append("KW1095 : 'KW' '1095';\n"); - grammarBuilder.append("KW1096 : 'KW' '1096';\n"); - grammarBuilder.append("KW1097 : 'KW' '1097';\n"); - grammarBuilder.append("KW1098 : 'KW' '1098';\n"); - grammarBuilder.append("KW1099 : 'KW' '1099';\n"); - grammarBuilder.append("KW1100 : 'KW' '1100';\n"); - grammarBuilder.append("KW1101 : 'KW' '1101';\n"); - grammarBuilder.append("KW1102 : 'KW' '1102';\n"); - grammarBuilder.append("KW1103 : 'KW' '1103';\n"); - grammarBuilder.append("KW1104 : 'KW' '1104';\n"); - grammarBuilder.append("KW1105 : 'KW' '1105';\n"); - grammarBuilder.append("KW1106 : 'KW' '1106';\n"); - grammarBuilder.append("KW1107 : 'KW' '1107';\n"); - grammarBuilder.append("KW1108 : 'KW' '1108';\n"); - grammarBuilder.append("KW1109 : 'KW' '1109';\n"); - grammarBuilder.append("KW1110 : 'KW' '1110';\n"); - grammarBuilder.append("KW1111 : 'KW' '1111';\n"); - grammarBuilder.append("KW1112 : 'KW' '1112';\n"); - grammarBuilder.append("KW1113 : 'KW' '1113';\n"); - grammarBuilder.append("KW1114 : 'KW' '1114';\n"); - grammarBuilder.append("KW1115 : 'KW' '1115';\n"); - grammarBuilder.append("KW1116 : 'KW' '1116';\n"); - grammarBuilder.append("KW1117 : 'KW' '1117';\n"); - grammarBuilder.append("KW1118 : 'KW' '1118';\n"); - grammarBuilder.append("KW1119 : 'KW' '1119';\n"); - grammarBuilder.append("KW1120 : 'KW' '1120';\n"); - grammarBuilder.append("KW1121 : 'KW' '1121';\n"); - grammarBuilder.append("KW1122 : 'KW' '1122';\n"); - grammarBuilder.append("KW1123 : 'KW' '1123';\n"); - grammarBuilder.append("KW1124 : 'KW' '1124';\n"); - grammarBuilder.append("KW1125 : 'KW' '1125';\n"); - grammarBuilder.append("KW1126 : 'KW' '1126';\n"); - grammarBuilder.append("KW1127 : 'KW' '1127';\n"); - grammarBuilder.append("KW1128 : 'KW' '1128';\n"); - grammarBuilder.append("KW1129 : 'KW' '1129';\n"); - grammarBuilder.append("KW1130 : 'KW' '1130';\n"); - grammarBuilder.append("KW1131 : 'KW' '1131';\n"); - grammarBuilder.append("KW1132 : 'KW' '1132';\n"); - grammarBuilder.append("KW1133 : 'KW' '1133';\n"); - grammarBuilder.append("KW1134 : 'KW' '1134';\n"); - grammarBuilder.append("KW1135 : 'KW' '1135';\n"); - grammarBuilder.append("KW1136 : 'KW' '1136';\n"); - grammarBuilder.append("KW1137 : 'KW' '1137';\n"); - grammarBuilder.append("KW1138 : 'KW' '1138';\n"); - grammarBuilder.append("KW1139 : 'KW' '1139';\n"); - grammarBuilder.append("KW1140 : 'KW' '1140';\n"); - grammarBuilder.append("KW1141 : 'KW' '1141';\n"); - grammarBuilder.append("KW1142 : 'KW' '1142';\n"); - grammarBuilder.append("KW1143 : 'KW' '1143';\n"); - grammarBuilder.append("KW1144 : 'KW' '1144';\n"); - grammarBuilder.append("KW1145 : 'KW' '1145';\n"); - grammarBuilder.append("KW1146 : 'KW' '1146';\n"); - grammarBuilder.append("KW1147 : 'KW' '1147';\n"); - grammarBuilder.append("KW1148 : 'KW' '1148';\n"); - grammarBuilder.append("KW1149 : 'KW' '1149';\n"); - grammarBuilder.append("KW1150 : 'KW' '1150';\n"); - grammarBuilder.append("KW1151 : 'KW' '1151';\n"); - grammarBuilder.append("KW1152 : 'KW' '1152';\n"); - grammarBuilder.append("KW1153 : 'KW' '1153';\n"); - grammarBuilder.append("KW1154 : 'KW' '1154';\n"); - grammarBuilder.append("KW1155 : 'KW' '1155';\n"); - grammarBuilder.append("KW1156 : 'KW' '1156';\n"); - grammarBuilder.append("KW1157 : 'KW' '1157';\n"); - grammarBuilder.append("KW1158 : 'KW' '1158';\n"); - grammarBuilder.append("KW1159 : 'KW' '1159';\n"); - grammarBuilder.append("KW1160 : 'KW' '1160';\n"); - grammarBuilder.append("KW1161 : 'KW' '1161';\n"); - grammarBuilder.append("KW1162 : 'KW' '1162';\n"); - grammarBuilder.append("KW1163 : 'KW' '1163';\n"); - grammarBuilder.append("KW1164 : 'KW' '1164';\n"); - grammarBuilder.append("KW1165 : 'KW' '1165';\n"); - grammarBuilder.append("KW1166 : 'KW' '1166';\n"); - grammarBuilder.append("KW1167 : 'KW' '1167';\n"); - grammarBuilder.append("KW1168 : 'KW' '1168';\n"); - grammarBuilder.append("KW1169 : 'KW' '1169';\n"); - grammarBuilder.append("KW1170 : 'KW' '1170';\n"); - grammarBuilder.append("KW1171 : 'KW' '1171';\n"); - grammarBuilder.append("KW1172 : 'KW' '1172';\n"); - grammarBuilder.append("KW1173 : 'KW' '1173';\n"); - grammarBuilder.append("KW1174 : 'KW' '1174';\n"); - grammarBuilder.append("KW1175 : 'KW' '1175';\n"); - grammarBuilder.append("KW1176 : 'KW' '1176';\n"); - grammarBuilder.append("KW1177 : 'KW' '1177';\n"); - grammarBuilder.append("KW1178 : 'KW' '1178';\n"); - grammarBuilder.append("KW1179 : 'KW' '1179';\n"); - grammarBuilder.append("KW1180 : 'KW' '1180';\n"); - grammarBuilder.append("KW1181 : 'KW' '1181';\n"); - grammarBuilder.append("KW1182 : 'KW' '1182';\n"); - grammarBuilder.append("KW1183 : 'KW' '1183';\n"); - grammarBuilder.append("KW1184 : 'KW' '1184';\n"); - grammarBuilder.append("KW1185 : 'KW' '1185';\n"); - grammarBuilder.append("KW1186 : 'KW' '1186';\n"); - grammarBuilder.append("KW1187 : 'KW' '1187';\n"); - grammarBuilder.append("KW1188 : 'KW' '1188';\n"); - grammarBuilder.append("KW1189 : 'KW' '1189';\n"); - grammarBuilder.append("KW1190 : 'KW' '1190';\n"); - grammarBuilder.append("KW1191 : 'KW' '1191';\n"); - grammarBuilder.append("KW1192 : 'KW' '1192';\n"); - grammarBuilder.append("KW1193 : 'KW' '1193';\n"); - grammarBuilder.append("KW1194 : 'KW' '1194';\n"); - grammarBuilder.append("KW1195 : 'KW' '1195';\n"); - grammarBuilder.append("KW1196 : 'KW' '1196';\n"); - grammarBuilder.append("KW1197 : 'KW' '1197';\n"); - grammarBuilder.append("KW1198 : 'KW' '1198';\n"); - grammarBuilder.append("KW1199 : 'KW' '1199';\n"); - grammarBuilder.append("KW1200 : 'KW' '1200';\n"); - grammarBuilder.append("KW1201 : 'KW' '1201';\n"); - grammarBuilder.append("KW1202 : 'KW' '1202';\n"); - grammarBuilder.append("KW1203 : 'KW' '1203';\n"); - grammarBuilder.append("KW1204 : 'KW' '1204';\n"); - grammarBuilder.append("KW1205 : 'KW' '1205';\n"); - grammarBuilder.append("KW1206 : 'KW' '1206';\n"); - grammarBuilder.append("KW1207 : 'KW' '1207';\n"); - grammarBuilder.append("KW1208 : 'KW' '1208';\n"); - grammarBuilder.append("KW1209 : 'KW' '1209';\n"); - grammarBuilder.append("KW1210 : 'KW' '1210';\n"); - grammarBuilder.append("KW1211 : 'KW' '1211';\n"); - grammarBuilder.append("KW1212 : 'KW' '1212';\n"); - grammarBuilder.append("KW1213 : 'KW' '1213';\n"); - grammarBuilder.append("KW1214 : 'KW' '1214';\n"); - grammarBuilder.append("KW1215 : 'KW' '1215';\n"); - grammarBuilder.append("KW1216 : 'KW' '1216';\n"); - grammarBuilder.append("KW1217 : 'KW' '1217';\n"); - grammarBuilder.append("KW1218 : 'KW' '1218';\n"); - grammarBuilder.append("KW1219 : 'KW' '1219';\n"); - grammarBuilder.append("KW1220 : 'KW' '1220';\n"); - grammarBuilder.append("KW1221 : 'KW' '1221';\n"); - grammarBuilder.append("KW1222 : 'KW' '1222';\n"); - grammarBuilder.append("KW1223 : 'KW' '1223';\n"); - grammarBuilder.append("KW1224 : 'KW' '1224';\n"); - grammarBuilder.append("KW1225 : 'KW' '1225';\n"); - grammarBuilder.append("KW1226 : 'KW' '1226';\n"); - grammarBuilder.append("KW1227 : 'KW' '1227';\n"); - grammarBuilder.append("KW1228 : 'KW' '1228';\n"); - grammarBuilder.append("KW1229 : 'KW' '1229';\n"); - grammarBuilder.append("KW1230 : 'KW' '1230';\n"); - grammarBuilder.append("KW1231 : 'KW' '1231';\n"); - grammarBuilder.append("KW1232 : 'KW' '1232';\n"); - grammarBuilder.append("KW1233 : 'KW' '1233';\n"); - grammarBuilder.append("KW1234 : 'KW' '1234';\n"); - grammarBuilder.append("KW1235 : 'KW' '1235';\n"); - grammarBuilder.append("KW1236 : 'KW' '1236';\n"); - grammarBuilder.append("KW1237 : 'KW' '1237';\n"); - grammarBuilder.append("KW1238 : 'KW' '1238';\n"); - grammarBuilder.append("KW1239 : 'KW' '1239';\n"); - grammarBuilder.append("KW1240 : 'KW' '1240';\n"); - grammarBuilder.append("KW1241 : 'KW' '1241';\n"); - grammarBuilder.append("KW1242 : 'KW' '1242';\n"); - grammarBuilder.append("KW1243 : 'KW' '1243';\n"); - grammarBuilder.append("KW1244 : 'KW' '1244';\n"); - grammarBuilder.append("KW1245 : 'KW' '1245';\n"); - grammarBuilder.append("KW1246 : 'KW' '1246';\n"); - grammarBuilder.append("KW1247 : 'KW' '1247';\n"); - grammarBuilder.append("KW1248 : 'KW' '1248';\n"); - grammarBuilder.append("KW1249 : 'KW' '1249';\n"); - grammarBuilder.append("KW1250 : 'KW' '1250';\n"); - grammarBuilder.append("KW1251 : 'KW' '1251';\n"); - grammarBuilder.append("KW1252 : 'KW' '1252';\n"); - grammarBuilder.append("KW1253 : 'KW' '1253';\n"); - grammarBuilder.append("KW1254 : 'KW' '1254';\n"); - grammarBuilder.append("KW1255 : 'KW' '1255';\n"); - grammarBuilder.append("KW1256 : 'KW' '1256';\n"); - grammarBuilder.append("KW1257 : 'KW' '1257';\n"); - grammarBuilder.append("KW1258 : 'KW' '1258';\n"); - grammarBuilder.append("KW1259 : 'KW' '1259';\n"); - grammarBuilder.append("KW1260 : 'KW' '1260';\n"); - grammarBuilder.append("KW1261 : 'KW' '1261';\n"); - grammarBuilder.append("KW1262 : 'KW' '1262';\n"); - grammarBuilder.append("KW1263 : 'KW' '1263';\n"); - grammarBuilder.append("KW1264 : 'KW' '1264';\n"); - grammarBuilder.append("KW1265 : 'KW' '1265';\n"); - grammarBuilder.append("KW1266 : 'KW' '1266';\n"); - grammarBuilder.append("KW1267 : 'KW' '1267';\n"); - grammarBuilder.append("KW1268 : 'KW' '1268';\n"); - grammarBuilder.append("KW1269 : 'KW' '1269';\n"); - grammarBuilder.append("KW1270 : 'KW' '1270';\n"); - grammarBuilder.append("KW1271 : 'KW' '1271';\n"); - grammarBuilder.append("KW1272 : 'KW' '1272';\n"); - grammarBuilder.append("KW1273 : 'KW' '1273';\n"); - grammarBuilder.append("KW1274 : 'KW' '1274';\n"); - grammarBuilder.append("KW1275 : 'KW' '1275';\n"); - grammarBuilder.append("KW1276 : 'KW' '1276';\n"); - grammarBuilder.append("KW1277 : 'KW' '1277';\n"); - grammarBuilder.append("KW1278 : 'KW' '1278';\n"); - grammarBuilder.append("KW1279 : 'KW' '1279';\n"); - grammarBuilder.append("KW1280 : 'KW' '1280';\n"); - grammarBuilder.append("KW1281 : 'KW' '1281';\n"); - grammarBuilder.append("KW1282 : 'KW' '1282';\n"); - grammarBuilder.append("KW1283 : 'KW' '1283';\n"); - grammarBuilder.append("KW1284 : 'KW' '1284';\n"); - grammarBuilder.append("KW1285 : 'KW' '1285';\n"); - grammarBuilder.append("KW1286 : 'KW' '1286';\n"); - grammarBuilder.append("KW1287 : 'KW' '1287';\n"); - grammarBuilder.append("KW1288 : 'KW' '1288';\n"); - grammarBuilder.append("KW1289 : 'KW' '1289';\n"); - grammarBuilder.append("KW1290 : 'KW' '1290';\n"); - grammarBuilder.append("KW1291 : 'KW' '1291';\n"); - grammarBuilder.append("KW1292 : 'KW' '1292';\n"); - grammarBuilder.append("KW1293 : 'KW' '1293';\n"); - grammarBuilder.append("KW1294 : 'KW' '1294';\n"); - grammarBuilder.append("KW1295 : 'KW' '1295';\n"); - grammarBuilder.append("KW1296 : 'KW' '1296';\n"); - grammarBuilder.append("KW1297 : 'KW' '1297';\n"); - grammarBuilder.append("KW1298 : 'KW' '1298';\n"); - grammarBuilder.append("KW1299 : 'KW' '1299';\n"); - grammarBuilder.append("KW1300 : 'KW' '1300';\n"); - grammarBuilder.append("KW1301 : 'KW' '1301';\n"); - grammarBuilder.append("KW1302 : 'KW' '1302';\n"); - grammarBuilder.append("KW1303 : 'KW' '1303';\n"); - grammarBuilder.append("KW1304 : 'KW' '1304';\n"); - grammarBuilder.append("KW1305 : 'KW' '1305';\n"); - grammarBuilder.append("KW1306 : 'KW' '1306';\n"); - grammarBuilder.append("KW1307 : 'KW' '1307';\n"); - grammarBuilder.append("KW1308 : 'KW' '1308';\n"); - grammarBuilder.append("KW1309 : 'KW' '1309';\n"); - grammarBuilder.append("KW1310 : 'KW' '1310';\n"); - grammarBuilder.append("KW1311 : 'KW' '1311';\n"); - grammarBuilder.append("KW1312 : 'KW' '1312';\n"); - grammarBuilder.append("KW1313 : 'KW' '1313';\n"); - grammarBuilder.append("KW1314 : 'KW' '1314';\n"); - grammarBuilder.append("KW1315 : 'KW' '1315';\n"); - grammarBuilder.append("KW1316 : 'KW' '1316';\n"); - grammarBuilder.append("KW1317 : 'KW' '1317';\n"); - grammarBuilder.append("KW1318 : 'KW' '1318';\n"); - grammarBuilder.append("KW1319 : 'KW' '1319';\n"); - grammarBuilder.append("KW1320 : 'KW' '1320';\n"); - grammarBuilder.append("KW1321 : 'KW' '1321';\n"); - grammarBuilder.append("KW1322 : 'KW' '1322';\n"); - grammarBuilder.append("KW1323 : 'KW' '1323';\n"); - grammarBuilder.append("KW1324 : 'KW' '1324';\n"); - grammarBuilder.append("KW1325 : 'KW' '1325';\n"); - grammarBuilder.append("KW1326 : 'KW' '1326';\n"); - grammarBuilder.append("KW1327 : 'KW' '1327';\n"); - grammarBuilder.append("KW1328 : 'KW' '1328';\n"); - grammarBuilder.append("KW1329 : 'KW' '1329';\n"); - grammarBuilder.append("KW1330 : 'KW' '1330';\n"); - grammarBuilder.append("KW1331 : 'KW' '1331';\n"); - grammarBuilder.append("KW1332 : 'KW' '1332';\n"); - grammarBuilder.append("KW1333 : 'KW' '1333';\n"); - grammarBuilder.append("KW1334 : 'KW' '1334';\n"); - grammarBuilder.append("KW1335 : 'KW' '1335';\n"); - grammarBuilder.append("KW1336 : 'KW' '1336';\n"); - grammarBuilder.append("KW1337 : 'KW' '1337';\n"); - grammarBuilder.append("KW1338 : 'KW' '1338';\n"); - grammarBuilder.append("KW1339 : 'KW' '1339';\n"); - grammarBuilder.append("KW1340 : 'KW' '1340';\n"); - grammarBuilder.append("KW1341 : 'KW' '1341';\n"); - grammarBuilder.append("KW1342 : 'KW' '1342';\n"); - grammarBuilder.append("KW1343 : 'KW' '1343';\n"); - grammarBuilder.append("KW1344 : 'KW' '1344';\n"); - grammarBuilder.append("KW1345 : 'KW' '1345';\n"); - grammarBuilder.append("KW1346 : 'KW' '1346';\n"); - grammarBuilder.append("KW1347 : 'KW' '1347';\n"); - grammarBuilder.append("KW1348 : 'KW' '1348';\n"); - grammarBuilder.append("KW1349 : 'KW' '1349';\n"); - grammarBuilder.append("KW1350 : 'KW' '1350';\n"); - grammarBuilder.append("KW1351 : 'KW' '1351';\n"); - grammarBuilder.append("KW1352 : 'KW' '1352';\n"); - grammarBuilder.append("KW1353 : 'KW' '1353';\n"); - grammarBuilder.append("KW1354 : 'KW' '1354';\n"); - grammarBuilder.append("KW1355 : 'KW' '1355';\n"); - grammarBuilder.append("KW1356 : 'KW' '1356';\n"); - grammarBuilder.append("KW1357 : 'KW' '1357';\n"); - grammarBuilder.append("KW1358 : 'KW' '1358';\n"); - grammarBuilder.append("KW1359 : 'KW' '1359';\n"); - grammarBuilder.append("KW1360 : 'KW' '1360';\n"); - grammarBuilder.append("KW1361 : 'KW' '1361';\n"); - grammarBuilder.append("KW1362 : 'KW' '1362';\n"); - grammarBuilder.append("KW1363 : 'KW' '1363';\n"); - grammarBuilder.append("KW1364 : 'KW' '1364';\n"); - grammarBuilder.append("KW1365 : 'KW' '1365';\n"); - grammarBuilder.append("KW1366 : 'KW' '1366';\n"); - grammarBuilder.append("KW1367 : 'KW' '1367';\n"); - grammarBuilder.append("KW1368 : 'KW' '1368';\n"); - grammarBuilder.append("KW1369 : 'KW' '1369';\n"); - grammarBuilder.append("KW1370 : 'KW' '1370';\n"); - grammarBuilder.append("KW1371 : 'KW' '1371';\n"); - grammarBuilder.append("KW1372 : 'KW' '1372';\n"); - grammarBuilder.append("KW1373 : 'KW' '1373';\n"); - grammarBuilder.append("KW1374 : 'KW' '1374';\n"); - grammarBuilder.append("KW1375 : 'KW' '1375';\n"); - grammarBuilder.append("KW1376 : 'KW' '1376';\n"); - grammarBuilder.append("KW1377 : 'KW' '1377';\n"); - grammarBuilder.append("KW1378 : 'KW' '1378';\n"); - grammarBuilder.append("KW1379 : 'KW' '1379';\n"); - grammarBuilder.append("KW1380 : 'KW' '1380';\n"); - grammarBuilder.append("KW1381 : 'KW' '1381';\n"); - grammarBuilder.append("KW1382 : 'KW' '1382';\n"); - grammarBuilder.append("KW1383 : 'KW' '1383';\n"); - grammarBuilder.append("KW1384 : 'KW' '1384';\n"); - grammarBuilder.append("KW1385 : 'KW' '1385';\n"); - grammarBuilder.append("KW1386 : 'KW' '1386';\n"); - grammarBuilder.append("KW1387 : 'KW' '1387';\n"); - grammarBuilder.append("KW1388 : 'KW' '1388';\n"); - grammarBuilder.append("KW1389 : 'KW' '1389';\n"); - grammarBuilder.append("KW1390 : 'KW' '1390';\n"); - grammarBuilder.append("KW1391 : 'KW' '1391';\n"); - grammarBuilder.append("KW1392 : 'KW' '1392';\n"); - grammarBuilder.append("KW1393 : 'KW' '1393';\n"); - grammarBuilder.append("KW1394 : 'KW' '1394';\n"); - grammarBuilder.append("KW1395 : 'KW' '1395';\n"); - grammarBuilder.append("KW1396 : 'KW' '1396';\n"); - grammarBuilder.append("KW1397 : 'KW' '1397';\n"); - grammarBuilder.append("KW1398 : 'KW' '1398';\n"); - grammarBuilder.append("KW1399 : 'KW' '1399';\n"); - grammarBuilder.append("KW1400 : 'KW' '1400';\n"); - grammarBuilder.append("KW1401 : 'KW' '1401';\n"); - grammarBuilder.append("KW1402 : 'KW' '1402';\n"); - grammarBuilder.append("KW1403 : 'KW' '1403';\n"); - grammarBuilder.append("KW1404 : 'KW' '1404';\n"); - grammarBuilder.append("KW1405 : 'KW' '1405';\n"); - grammarBuilder.append("KW1406 : 'KW' '1406';\n"); - grammarBuilder.append("KW1407 : 'KW' '1407';\n"); - grammarBuilder.append("KW1408 : 'KW' '1408';\n"); - grammarBuilder.append("KW1409 : 'KW' '1409';\n"); - grammarBuilder.append("KW1410 : 'KW' '1410';\n"); - grammarBuilder.append("KW1411 : 'KW' '1411';\n"); - grammarBuilder.append("KW1412 : 'KW' '1412';\n"); - grammarBuilder.append("KW1413 : 'KW' '1413';\n"); - grammarBuilder.append("KW1414 : 'KW' '1414';\n"); - grammarBuilder.append("KW1415 : 'KW' '1415';\n"); - grammarBuilder.append("KW1416 : 'KW' '1416';\n"); - grammarBuilder.append("KW1417 : 'KW' '1417';\n"); - grammarBuilder.append("KW1418 : 'KW' '1418';\n"); - grammarBuilder.append("KW1419 : 'KW' '1419';\n"); - grammarBuilder.append("KW1420 : 'KW' '1420';\n"); - grammarBuilder.append("KW1421 : 'KW' '1421';\n"); - grammarBuilder.append("KW1422 : 'KW' '1422';\n"); - grammarBuilder.append("KW1423 : 'KW' '1423';\n"); - grammarBuilder.append("KW1424 : 'KW' '1424';\n"); - grammarBuilder.append("KW1425 : 'KW' '1425';\n"); - grammarBuilder.append("KW1426 : 'KW' '1426';\n"); - grammarBuilder.append("KW1427 : 'KW' '1427';\n"); - grammarBuilder.append("KW1428 : 'KW' '1428';\n"); - grammarBuilder.append("KW1429 : 'KW' '1429';\n"); - grammarBuilder.append("KW1430 : 'KW' '1430';\n"); - grammarBuilder.append("KW1431 : 'KW' '1431';\n"); - grammarBuilder.append("KW1432 : 'KW' '1432';\n"); - grammarBuilder.append("KW1433 : 'KW' '1433';\n"); - grammarBuilder.append("KW1434 : 'KW' '1434';\n"); - grammarBuilder.append("KW1435 : 'KW' '1435';\n"); - grammarBuilder.append("KW1436 : 'KW' '1436';\n"); - grammarBuilder.append("KW1437 : 'KW' '1437';\n"); - grammarBuilder.append("KW1438 : 'KW' '1438';\n"); - grammarBuilder.append("KW1439 : 'KW' '1439';\n"); - grammarBuilder.append("KW1440 : 'KW' '1440';\n"); - grammarBuilder.append("KW1441 : 'KW' '1441';\n"); - grammarBuilder.append("KW1442 : 'KW' '1442';\n"); - grammarBuilder.append("KW1443 : 'KW' '1443';\n"); - grammarBuilder.append("KW1444 : 'KW' '1444';\n"); - grammarBuilder.append("KW1445 : 'KW' '1445';\n"); - grammarBuilder.append("KW1446 : 'KW' '1446';\n"); - grammarBuilder.append("KW1447 : 'KW' '1447';\n"); - grammarBuilder.append("KW1448 : 'KW' '1448';\n"); - grammarBuilder.append("KW1449 : 'KW' '1449';\n"); - grammarBuilder.append("KW1450 : 'KW' '1450';\n"); - grammarBuilder.append("KW1451 : 'KW' '1451';\n"); - grammarBuilder.append("KW1452 : 'KW' '1452';\n"); - grammarBuilder.append("KW1453 : 'KW' '1453';\n"); - grammarBuilder.append("KW1454 : 'KW' '1454';\n"); - grammarBuilder.append("KW1455 : 'KW' '1455';\n"); - grammarBuilder.append("KW1456 : 'KW' '1456';\n"); - grammarBuilder.append("KW1457 : 'KW' '1457';\n"); - grammarBuilder.append("KW1458 : 'KW' '1458';\n"); - grammarBuilder.append("KW1459 : 'KW' '1459';\n"); - grammarBuilder.append("KW1460 : 'KW' '1460';\n"); - grammarBuilder.append("KW1461 : 'KW' '1461';\n"); - grammarBuilder.append("KW1462 : 'KW' '1462';\n"); - grammarBuilder.append("KW1463 : 'KW' '1463';\n"); - grammarBuilder.append("KW1464 : 'KW' '1464';\n"); - grammarBuilder.append("KW1465 : 'KW' '1465';\n"); - grammarBuilder.append("KW1466 : 'KW' '1466';\n"); - grammarBuilder.append("KW1467 : 'KW' '1467';\n"); - grammarBuilder.append("KW1468 : 'KW' '1468';\n"); - grammarBuilder.append("KW1469 : 'KW' '1469';\n"); - grammarBuilder.append("KW1470 : 'KW' '1470';\n"); - grammarBuilder.append("KW1471 : 'KW' '1471';\n"); - grammarBuilder.append("KW1472 : 'KW' '1472';\n"); - grammarBuilder.append("KW1473 : 'KW' '1473';\n"); - grammarBuilder.append("KW1474 : 'KW' '1474';\n"); - grammarBuilder.append("KW1475 : 'KW' '1475';\n"); - grammarBuilder.append("KW1476 : 'KW' '1476';\n"); - grammarBuilder.append("KW1477 : 'KW' '1477';\n"); - grammarBuilder.append("KW1478 : 'KW' '1478';\n"); - grammarBuilder.append("KW1479 : 'KW' '1479';\n"); - grammarBuilder.append("KW1480 : 'KW' '1480';\n"); - grammarBuilder.append("KW1481 : 'KW' '1481';\n"); - grammarBuilder.append("KW1482 : 'KW' '1482';\n"); - grammarBuilder.append("KW1483 : 'KW' '1483';\n"); - grammarBuilder.append("KW1484 : 'KW' '1484';\n"); - grammarBuilder.append("KW1485 : 'KW' '1485';\n"); - grammarBuilder.append("KW1486 : 'KW' '1486';\n"); - grammarBuilder.append("KW1487 : 'KW' '1487';\n"); - grammarBuilder.append("KW1488 : 'KW' '1488';\n"); - grammarBuilder.append("KW1489 : 'KW' '1489';\n"); - grammarBuilder.append("KW1490 : 'KW' '1490';\n"); - grammarBuilder.append("KW1491 : 'KW' '1491';\n"); - grammarBuilder.append("KW1492 : 'KW' '1492';\n"); - grammarBuilder.append("KW1493 : 'KW' '1493';\n"); - grammarBuilder.append("KW1494 : 'KW' '1494';\n"); - grammarBuilder.append("KW1495 : 'KW' '1495';\n"); - grammarBuilder.append("KW1496 : 'KW' '1496';\n"); - grammarBuilder.append("KW1497 : 'KW' '1497';\n"); - grammarBuilder.append("KW1498 : 'KW' '1498';\n"); - grammarBuilder.append("KW1499 : 'KW' '1499';\n"); - grammarBuilder.append("KW1500 : 'KW' '1500';\n"); - grammarBuilder.append("KW1501 : 'KW' '1501';\n"); - grammarBuilder.append("KW1502 : 'KW' '1502';\n"); - grammarBuilder.append("KW1503 : 'KW' '1503';\n"); - grammarBuilder.append("KW1504 : 'KW' '1504';\n"); - grammarBuilder.append("KW1505 : 'KW' '1505';\n"); - grammarBuilder.append("KW1506 : 'KW' '1506';\n"); - grammarBuilder.append("KW1507 : 'KW' '1507';\n"); - grammarBuilder.append("KW1508 : 'KW' '1508';\n"); - grammarBuilder.append("KW1509 : 'KW' '1509';\n"); - grammarBuilder.append("KW1510 : 'KW' '1510';\n"); - grammarBuilder.append("KW1511 : 'KW' '1511';\n"); - grammarBuilder.append("KW1512 : 'KW' '1512';\n"); - grammarBuilder.append("KW1513 : 'KW' '1513';\n"); - grammarBuilder.append("KW1514 : 'KW' '1514';\n"); - grammarBuilder.append("KW1515 : 'KW' '1515';\n"); - grammarBuilder.append("KW1516 : 'KW' '1516';\n"); - grammarBuilder.append("KW1517 : 'KW' '1517';\n"); - grammarBuilder.append("KW1518 : 'KW' '1518';\n"); - grammarBuilder.append("KW1519 : 'KW' '1519';\n"); - grammarBuilder.append("KW1520 : 'KW' '1520';\n"); - grammarBuilder.append("KW1521 : 'KW' '1521';\n"); - grammarBuilder.append("KW1522 : 'KW' '1522';\n"); - grammarBuilder.append("KW1523 : 'KW' '1523';\n"); - grammarBuilder.append("KW1524 : 'KW' '1524';\n"); - grammarBuilder.append("KW1525 : 'KW' '1525';\n"); - grammarBuilder.append("KW1526 : 'KW' '1526';\n"); - grammarBuilder.append("KW1527 : 'KW' '1527';\n"); - grammarBuilder.append("KW1528 : 'KW' '1528';\n"); - grammarBuilder.append("KW1529 : 'KW' '1529';\n"); - grammarBuilder.append("KW1530 : 'KW' '1530';\n"); - grammarBuilder.append("KW1531 : 'KW' '1531';\n"); - grammarBuilder.append("KW1532 : 'KW' '1532';\n"); - grammarBuilder.append("KW1533 : 'KW' '1533';\n"); - grammarBuilder.append("KW1534 : 'KW' '1534';\n"); - grammarBuilder.append("KW1535 : 'KW' '1535';\n"); - grammarBuilder.append("KW1536 : 'KW' '1536';\n"); - grammarBuilder.append("KW1537 : 'KW' '1537';\n"); - grammarBuilder.append("KW1538 : 'KW' '1538';\n"); - grammarBuilder.append("KW1539 : 'KW' '1539';\n"); - grammarBuilder.append("KW1540 : 'KW' '1540';\n"); - grammarBuilder.append("KW1541 : 'KW' '1541';\n"); - grammarBuilder.append("KW1542 : 'KW' '1542';\n"); - grammarBuilder.append("KW1543 : 'KW' '1543';\n"); - grammarBuilder.append("KW1544 : 'KW' '1544';\n"); - grammarBuilder.append("KW1545 : 'KW' '1545';\n"); - grammarBuilder.append("KW1546 : 'KW' '1546';\n"); - grammarBuilder.append("KW1547 : 'KW' '1547';\n"); - grammarBuilder.append("KW1548 : 'KW' '1548';\n"); - grammarBuilder.append("KW1549 : 'KW' '1549';\n"); - grammarBuilder.append("KW1550 : 'KW' '1550';\n"); - grammarBuilder.append("KW1551 : 'KW' '1551';\n"); - grammarBuilder.append("KW1552 : 'KW' '1552';\n"); - grammarBuilder.append("KW1553 : 'KW' '1553';\n"); - grammarBuilder.append("KW1554 : 'KW' '1554';\n"); - grammarBuilder.append("KW1555 : 'KW' '1555';\n"); - grammarBuilder.append("KW1556 : 'KW' '1556';\n"); - grammarBuilder.append("KW1557 : 'KW' '1557';\n"); - grammarBuilder.append("KW1558 : 'KW' '1558';\n"); - grammarBuilder.append("KW1559 : 'KW' '1559';\n"); - grammarBuilder.append("KW1560 : 'KW' '1560';\n"); - grammarBuilder.append("KW1561 : 'KW' '1561';\n"); - grammarBuilder.append("KW1562 : 'KW' '1562';\n"); - grammarBuilder.append("KW1563 : 'KW' '1563';\n"); - grammarBuilder.append("KW1564 : 'KW' '1564';\n"); - grammarBuilder.append("KW1565 : 'KW' '1565';\n"); - grammarBuilder.append("KW1566 : 'KW' '1566';\n"); - grammarBuilder.append("KW1567 : 'KW' '1567';\n"); - grammarBuilder.append("KW1568 : 'KW' '1568';\n"); - grammarBuilder.append("KW1569 : 'KW' '1569';\n"); - grammarBuilder.append("KW1570 : 'KW' '1570';\n"); - grammarBuilder.append("KW1571 : 'KW' '1571';\n"); - grammarBuilder.append("KW1572 : 'KW' '1572';\n"); - grammarBuilder.append("KW1573 : 'KW' '1573';\n"); - grammarBuilder.append("KW1574 : 'KW' '1574';\n"); - grammarBuilder.append("KW1575 : 'KW' '1575';\n"); - grammarBuilder.append("KW1576 : 'KW' '1576';\n"); - grammarBuilder.append("KW1577 : 'KW' '1577';\n"); - grammarBuilder.append("KW1578 : 'KW' '1578';\n"); - grammarBuilder.append("KW1579 : 'KW' '1579';\n"); - grammarBuilder.append("KW1580 : 'KW' '1580';\n"); - grammarBuilder.append("KW1581 : 'KW' '1581';\n"); - grammarBuilder.append("KW1582 : 'KW' '1582';\n"); - grammarBuilder.append("KW1583 : 'KW' '1583';\n"); - grammarBuilder.append("KW1584 : 'KW' '1584';\n"); - grammarBuilder.append("KW1585 : 'KW' '1585';\n"); - grammarBuilder.append("KW1586 : 'KW' '1586';\n"); - grammarBuilder.append("KW1587 : 'KW' '1587';\n"); - grammarBuilder.append("KW1588 : 'KW' '1588';\n"); - grammarBuilder.append("KW1589 : 'KW' '1589';\n"); - grammarBuilder.append("KW1590 : 'KW' '1590';\n"); - grammarBuilder.append("KW1591 : 'KW' '1591';\n"); - grammarBuilder.append("KW1592 : 'KW' '1592';\n"); - grammarBuilder.append("KW1593 : 'KW' '1593';\n"); - grammarBuilder.append("KW1594 : 'KW' '1594';\n"); - grammarBuilder.append("KW1595 : 'KW' '1595';\n"); - grammarBuilder.append("KW1596 : 'KW' '1596';\n"); - grammarBuilder.append("KW1597 : 'KW' '1597';\n"); - grammarBuilder.append("KW1598 : 'KW' '1598';\n"); - grammarBuilder.append("KW1599 : 'KW' '1599';\n"); - grammarBuilder.append("KW1600 : 'KW' '1600';\n"); - grammarBuilder.append("KW1601 : 'KW' '1601';\n"); - grammarBuilder.append("KW1602 : 'KW' '1602';\n"); - grammarBuilder.append("KW1603 : 'KW' '1603';\n"); - grammarBuilder.append("KW1604 : 'KW' '1604';\n"); - grammarBuilder.append("KW1605 : 'KW' '1605';\n"); - grammarBuilder.append("KW1606 : 'KW' '1606';\n"); - grammarBuilder.append("KW1607 : 'KW' '1607';\n"); - grammarBuilder.append("KW1608 : 'KW' '1608';\n"); - grammarBuilder.append("KW1609 : 'KW' '1609';\n"); - grammarBuilder.append("KW1610 : 'KW' '1610';\n"); - grammarBuilder.append("KW1611 : 'KW' '1611';\n"); - grammarBuilder.append("KW1612 : 'KW' '1612';\n"); - grammarBuilder.append("KW1613 : 'KW' '1613';\n"); - grammarBuilder.append("KW1614 : 'KW' '1614';\n"); - grammarBuilder.append("KW1615 : 'KW' '1615';\n"); - grammarBuilder.append("KW1616 : 'KW' '1616';\n"); - grammarBuilder.append("KW1617 : 'KW' '1617';\n"); - grammarBuilder.append("KW1618 : 'KW' '1618';\n"); - grammarBuilder.append("KW1619 : 'KW' '1619';\n"); - grammarBuilder.append("KW1620 : 'KW' '1620';\n"); - grammarBuilder.append("KW1621 : 'KW' '1621';\n"); - grammarBuilder.append("KW1622 : 'KW' '1622';\n"); - grammarBuilder.append("KW1623 : 'KW' '1623';\n"); - grammarBuilder.append("KW1624 : 'KW' '1624';\n"); - grammarBuilder.append("KW1625 : 'KW' '1625';\n"); - grammarBuilder.append("KW1626 : 'KW' '1626';\n"); - grammarBuilder.append("KW1627 : 'KW' '1627';\n"); - grammarBuilder.append("KW1628 : 'KW' '1628';\n"); - grammarBuilder.append("KW1629 : 'KW' '1629';\n"); - grammarBuilder.append("KW1630 : 'KW' '1630';\n"); - grammarBuilder.append("KW1631 : 'KW' '1631';\n"); - grammarBuilder.append("KW1632 : 'KW' '1632';\n"); - grammarBuilder.append("KW1633 : 'KW' '1633';\n"); - grammarBuilder.append("KW1634 : 'KW' '1634';\n"); - grammarBuilder.append("KW1635 : 'KW' '1635';\n"); - grammarBuilder.append("KW1636 : 'KW' '1636';\n"); - grammarBuilder.append("KW1637 : 'KW' '1637';\n"); - grammarBuilder.append("KW1638 : 'KW' '1638';\n"); - grammarBuilder.append("KW1639 : 'KW' '1639';\n"); - grammarBuilder.append("KW1640 : 'KW' '1640';\n"); - grammarBuilder.append("KW1641 : 'KW' '1641';\n"); - grammarBuilder.append("KW1642 : 'KW' '1642';\n"); - grammarBuilder.append("KW1643 : 'KW' '1643';\n"); - grammarBuilder.append("KW1644 : 'KW' '1644';\n"); - grammarBuilder.append("KW1645 : 'KW' '1645';\n"); - grammarBuilder.append("KW1646 : 'KW' '1646';\n"); - grammarBuilder.append("KW1647 : 'KW' '1647';\n"); - grammarBuilder.append("KW1648 : 'KW' '1648';\n"); - grammarBuilder.append("KW1649 : 'KW' '1649';\n"); - grammarBuilder.append("KW1650 : 'KW' '1650';\n"); - grammarBuilder.append("KW1651 : 'KW' '1651';\n"); - grammarBuilder.append("KW1652 : 'KW' '1652';\n"); - grammarBuilder.append("KW1653 : 'KW' '1653';\n"); - grammarBuilder.append("KW1654 : 'KW' '1654';\n"); - grammarBuilder.append("KW1655 : 'KW' '1655';\n"); - grammarBuilder.append("KW1656 : 'KW' '1656';\n"); - grammarBuilder.append("KW1657 : 'KW' '1657';\n"); - grammarBuilder.append("KW1658 : 'KW' '1658';\n"); - grammarBuilder.append("KW1659 : 'KW' '1659';\n"); - grammarBuilder.append("KW1660 : 'KW' '1660';\n"); - grammarBuilder.append("KW1661 : 'KW' '1661';\n"); - grammarBuilder.append("KW1662 : 'KW' '1662';\n"); - grammarBuilder.append("KW1663 : 'KW' '1663';\n"); - grammarBuilder.append("KW1664 : 'KW' '1664';\n"); - grammarBuilder.append("KW1665 : 'KW' '1665';\n"); - grammarBuilder.append("KW1666 : 'KW' '1666';\n"); - grammarBuilder.append("KW1667 : 'KW' '1667';\n"); - grammarBuilder.append("KW1668 : 'KW' '1668';\n"); - grammarBuilder.append("KW1669 : 'KW' '1669';\n"); - grammarBuilder.append("KW1670 : 'KW' '1670';\n"); - grammarBuilder.append("KW1671 : 'KW' '1671';\n"); - grammarBuilder.append("KW1672 : 'KW' '1672';\n"); - grammarBuilder.append("KW1673 : 'KW' '1673';\n"); - grammarBuilder.append("KW1674 : 'KW' '1674';\n"); - grammarBuilder.append("KW1675 : 'KW' '1675';\n"); - grammarBuilder.append("KW1676 : 'KW' '1676';\n"); - grammarBuilder.append("KW1677 : 'KW' '1677';\n"); - grammarBuilder.append("KW1678 : 'KW' '1678';\n"); - grammarBuilder.append("KW1679 : 'KW' '1679';\n"); - grammarBuilder.append("KW1680 : 'KW' '1680';\n"); - grammarBuilder.append("KW1681 : 'KW' '1681';\n"); - grammarBuilder.append("KW1682 : 'KW' '1682';\n"); - grammarBuilder.append("KW1683 : 'KW' '1683';\n"); - grammarBuilder.append("KW1684 : 'KW' '1684';\n"); - grammarBuilder.append("KW1685 : 'KW' '1685';\n"); - grammarBuilder.append("KW1686 : 'KW' '1686';\n"); - grammarBuilder.append("KW1687 : 'KW' '1687';\n"); - grammarBuilder.append("KW1688 : 'KW' '1688';\n"); - grammarBuilder.append("KW1689 : 'KW' '1689';\n"); - grammarBuilder.append("KW1690 : 'KW' '1690';\n"); - grammarBuilder.append("KW1691 : 'KW' '1691';\n"); - grammarBuilder.append("KW1692 : 'KW' '1692';\n"); - grammarBuilder.append("KW1693 : 'KW' '1693';\n"); - grammarBuilder.append("KW1694 : 'KW' '1694';\n"); - grammarBuilder.append("KW1695 : 'KW' '1695';\n"); - grammarBuilder.append("KW1696 : 'KW' '1696';\n"); - grammarBuilder.append("KW1697 : 'KW' '1697';\n"); - grammarBuilder.append("KW1698 : 'KW' '1698';\n"); - grammarBuilder.append("KW1699 : 'KW' '1699';\n"); - grammarBuilder.append("KW1700 : 'KW' '1700';\n"); - grammarBuilder.append("KW1701 : 'KW' '1701';\n"); - grammarBuilder.append("KW1702 : 'KW' '1702';\n"); - grammarBuilder.append("KW1703 : 'KW' '1703';\n"); - grammarBuilder.append("KW1704 : 'KW' '1704';\n"); - grammarBuilder.append("KW1705 : 'KW' '1705';\n"); - grammarBuilder.append("KW1706 : 'KW' '1706';\n"); - grammarBuilder.append("KW1707 : 'KW' '1707';\n"); - grammarBuilder.append("KW1708 : 'KW' '1708';\n"); - grammarBuilder.append("KW1709 : 'KW' '1709';\n"); - grammarBuilder.append("KW1710 : 'KW' '1710';\n"); - grammarBuilder.append("KW1711 : 'KW' '1711';\n"); - grammarBuilder.append("KW1712 : 'KW' '1712';\n"); - grammarBuilder.append("KW1713 : 'KW' '1713';\n"); - grammarBuilder.append("KW1714 : 'KW' '1714';\n"); - grammarBuilder.append("KW1715 : 'KW' '1715';\n"); - grammarBuilder.append("KW1716 : 'KW' '1716';\n"); - grammarBuilder.append("KW1717 : 'KW' '1717';\n"); - grammarBuilder.append("KW1718 : 'KW' '1718';\n"); - grammarBuilder.append("KW1719 : 'KW' '1719';\n"); - grammarBuilder.append("KW1720 : 'KW' '1720';\n"); - grammarBuilder.append("KW1721 : 'KW' '1721';\n"); - grammarBuilder.append("KW1722 : 'KW' '1722';\n"); - grammarBuilder.append("KW1723 : 'KW' '1723';\n"); - grammarBuilder.append("KW1724 : 'KW' '1724';\n"); - grammarBuilder.append("KW1725 : 'KW' '1725';\n"); - grammarBuilder.append("KW1726 : 'KW' '1726';\n"); - grammarBuilder.append("KW1727 : 'KW' '1727';\n"); - grammarBuilder.append("KW1728 : 'KW' '1728';\n"); - grammarBuilder.append("KW1729 : 'KW' '1729';\n"); - grammarBuilder.append("KW1730 : 'KW' '1730';\n"); - grammarBuilder.append("KW1731 : 'KW' '1731';\n"); - grammarBuilder.append("KW1732 : 'KW' '1732';\n"); - grammarBuilder.append("KW1733 : 'KW' '1733';\n"); - grammarBuilder.append("KW1734 : 'KW' '1734';\n"); - grammarBuilder.append("KW1735 : 'KW' '1735';\n"); - grammarBuilder.append("KW1736 : 'KW' '1736';\n"); - grammarBuilder.append("KW1737 : 'KW' '1737';\n"); - grammarBuilder.append("KW1738 : 'KW' '1738';\n"); - grammarBuilder.append("KW1739 : 'KW' '1739';\n"); - grammarBuilder.append("KW1740 : 'KW' '1740';\n"); - grammarBuilder.append("KW1741 : 'KW' '1741';\n"); - grammarBuilder.append("KW1742 : 'KW' '1742';\n"); - grammarBuilder.append("KW1743 : 'KW' '1743';\n"); - grammarBuilder.append("KW1744 : 'KW' '1744';\n"); - grammarBuilder.append("KW1745 : 'KW' '1745';\n"); - grammarBuilder.append("KW1746 : 'KW' '1746';\n"); - grammarBuilder.append("KW1747 : 'KW' '1747';\n"); - grammarBuilder.append("KW1748 : 'KW' '1748';\n"); - grammarBuilder.append("KW1749 : 'KW' '1749';\n"); - grammarBuilder.append("KW1750 : 'KW' '1750';\n"); - grammarBuilder.append("KW1751 : 'KW' '1751';\n"); - grammarBuilder.append("KW1752 : 'KW' '1752';\n"); - grammarBuilder.append("KW1753 : 'KW' '1753';\n"); - grammarBuilder.append("KW1754 : 'KW' '1754';\n"); - grammarBuilder.append("KW1755 : 'KW' '1755';\n"); - grammarBuilder.append("KW1756 : 'KW' '1756';\n"); - grammarBuilder.append("KW1757 : 'KW' '1757';\n"); - grammarBuilder.append("KW1758 : 'KW' '1758';\n"); - grammarBuilder.append("KW1759 : 'KW' '1759';\n"); - grammarBuilder.append("KW1760 : 'KW' '1760';\n"); - grammarBuilder.append("KW1761 : 'KW' '1761';\n"); - grammarBuilder.append("KW1762 : 'KW' '1762';\n"); - grammarBuilder.append("KW1763 : 'KW' '1763';\n"); - grammarBuilder.append("KW1764 : 'KW' '1764';\n"); - grammarBuilder.append("KW1765 : 'KW' '1765';\n"); - grammarBuilder.append("KW1766 : 'KW' '1766';\n"); - grammarBuilder.append("KW1767 : 'KW' '1767';\n"); - grammarBuilder.append("KW1768 : 'KW' '1768';\n"); - grammarBuilder.append("KW1769 : 'KW' '1769';\n"); - grammarBuilder.append("KW1770 : 'KW' '1770';\n"); - grammarBuilder.append("KW1771 : 'KW' '1771';\n"); - grammarBuilder.append("KW1772 : 'KW' '1772';\n"); - grammarBuilder.append("KW1773 : 'KW' '1773';\n"); - grammarBuilder.append("KW1774 : 'KW' '1774';\n"); - grammarBuilder.append("KW1775 : 'KW' '1775';\n"); - grammarBuilder.append("KW1776 : 'KW' '1776';\n"); - grammarBuilder.append("KW1777 : 'KW' '1777';\n"); - grammarBuilder.append("KW1778 : 'KW' '1778';\n"); - grammarBuilder.append("KW1779 : 'KW' '1779';\n"); - grammarBuilder.append("KW1780 : 'KW' '1780';\n"); - grammarBuilder.append("KW1781 : 'KW' '1781';\n"); - grammarBuilder.append("KW1782 : 'KW' '1782';\n"); - grammarBuilder.append("KW1783 : 'KW' '1783';\n"); - grammarBuilder.append("KW1784 : 'KW' '1784';\n"); - grammarBuilder.append("KW1785 : 'KW' '1785';\n"); - grammarBuilder.append("KW1786 : 'KW' '1786';\n"); - grammarBuilder.append("KW1787 : 'KW' '1787';\n"); - grammarBuilder.append("KW1788 : 'KW' '1788';\n"); - grammarBuilder.append("KW1789 : 'KW' '1789';\n"); - grammarBuilder.append("KW1790 : 'KW' '1790';\n"); - grammarBuilder.append("KW1791 : 'KW' '1791';\n"); - grammarBuilder.append("KW1792 : 'KW' '1792';\n"); - grammarBuilder.append("KW1793 : 'KW' '1793';\n"); - grammarBuilder.append("KW1794 : 'KW' '1794';\n"); - grammarBuilder.append("KW1795 : 'KW' '1795';\n"); - grammarBuilder.append("KW1796 : 'KW' '1796';\n"); - grammarBuilder.append("KW1797 : 'KW' '1797';\n"); - grammarBuilder.append("KW1798 : 'KW' '1798';\n"); - grammarBuilder.append("KW1799 : 'KW' '1799';\n"); - grammarBuilder.append("KW1800 : 'KW' '1800';\n"); - grammarBuilder.append("KW1801 : 'KW' '1801';\n"); - grammarBuilder.append("KW1802 : 'KW' '1802';\n"); - grammarBuilder.append("KW1803 : 'KW' '1803';\n"); - grammarBuilder.append("KW1804 : 'KW' '1804';\n"); - grammarBuilder.append("KW1805 : 'KW' '1805';\n"); - grammarBuilder.append("KW1806 : 'KW' '1806';\n"); - grammarBuilder.append("KW1807 : 'KW' '1807';\n"); - grammarBuilder.append("KW1808 : 'KW' '1808';\n"); - grammarBuilder.append("KW1809 : 'KW' '1809';\n"); - grammarBuilder.append("KW1810 : 'KW' '1810';\n"); - grammarBuilder.append("KW1811 : 'KW' '1811';\n"); - grammarBuilder.append("KW1812 : 'KW' '1812';\n"); - grammarBuilder.append("KW1813 : 'KW' '1813';\n"); - grammarBuilder.append("KW1814 : 'KW' '1814';\n"); - grammarBuilder.append("KW1815 : 'KW' '1815';\n"); - grammarBuilder.append("KW1816 : 'KW' '1816';\n"); - grammarBuilder.append("KW1817 : 'KW' '1817';\n"); - grammarBuilder.append("KW1818 : 'KW' '1818';\n"); - grammarBuilder.append("KW1819 : 'KW' '1819';\n"); - grammarBuilder.append("KW1820 : 'KW' '1820';\n"); - grammarBuilder.append("KW1821 : 'KW' '1821';\n"); - grammarBuilder.append("KW1822 : 'KW' '1822';\n"); - grammarBuilder.append("KW1823 : 'KW' '1823';\n"); - grammarBuilder.append("KW1824 : 'KW' '1824';\n"); - grammarBuilder.append("KW1825 : 'KW' '1825';\n"); - grammarBuilder.append("KW1826 : 'KW' '1826';\n"); - grammarBuilder.append("KW1827 : 'KW' '1827';\n"); - grammarBuilder.append("KW1828 : 'KW' '1828';\n"); - grammarBuilder.append("KW1829 : 'KW' '1829';\n"); - grammarBuilder.append("KW1830 : 'KW' '1830';\n"); - grammarBuilder.append("KW1831 : 'KW' '1831';\n"); - grammarBuilder.append("KW1832 : 'KW' '1832';\n"); - grammarBuilder.append("KW1833 : 'KW' '1833';\n"); - grammarBuilder.append("KW1834 : 'KW' '1834';\n"); - grammarBuilder.append("KW1835 : 'KW' '1835';\n"); - grammarBuilder.append("KW1836 : 'KW' '1836';\n"); - grammarBuilder.append("KW1837 : 'KW' '1837';\n"); - grammarBuilder.append("KW1838 : 'KW' '1838';\n"); - grammarBuilder.append("KW1839 : 'KW' '1839';\n"); - grammarBuilder.append("KW1840 : 'KW' '1840';\n"); - grammarBuilder.append("KW1841 : 'KW' '1841';\n"); - grammarBuilder.append("KW1842 : 'KW' '1842';\n"); - grammarBuilder.append("KW1843 : 'KW' '1843';\n"); - grammarBuilder.append("KW1844 : 'KW' '1844';\n"); - grammarBuilder.append("KW1845 : 'KW' '1845';\n"); - grammarBuilder.append("KW1846 : 'KW' '1846';\n"); - grammarBuilder.append("KW1847 : 'KW' '1847';\n"); - grammarBuilder.append("KW1848 : 'KW' '1848';\n"); - grammarBuilder.append("KW1849 : 'KW' '1849';\n"); - grammarBuilder.append("KW1850 : 'KW' '1850';\n"); - grammarBuilder.append("KW1851 : 'KW' '1851';\n"); - grammarBuilder.append("KW1852 : 'KW' '1852';\n"); - grammarBuilder.append("KW1853 : 'KW' '1853';\n"); - grammarBuilder.append("KW1854 : 'KW' '1854';\n"); - grammarBuilder.append("KW1855 : 'KW' '1855';\n"); - grammarBuilder.append("KW1856 : 'KW' '1856';\n"); - grammarBuilder.append("KW1857 : 'KW' '1857';\n"); - grammarBuilder.append("KW1858 : 'KW' '1858';\n"); - grammarBuilder.append("KW1859 : 'KW' '1859';\n"); - grammarBuilder.append("KW1860 : 'KW' '1860';\n"); - grammarBuilder.append("KW1861 : 'KW' '1861';\n"); - grammarBuilder.append("KW1862 : 'KW' '1862';\n"); - grammarBuilder.append("KW1863 : 'KW' '1863';\n"); - grammarBuilder.append("KW1864 : 'KW' '1864';\n"); - grammarBuilder.append("KW1865 : 'KW' '1865';\n"); - grammarBuilder.append("KW1866 : 'KW' '1866';\n"); - grammarBuilder.append("KW1867 : 'KW' '1867';\n"); - grammarBuilder.append("KW1868 : 'KW' '1868';\n"); - grammarBuilder.append("KW1869 : 'KW' '1869';\n"); - grammarBuilder.append("KW1870 : 'KW' '1870';\n"); - grammarBuilder.append("KW1871 : 'KW' '1871';\n"); - grammarBuilder.append("KW1872 : 'KW' '1872';\n"); - grammarBuilder.append("KW1873 : 'KW' '1873';\n"); - grammarBuilder.append("KW1874 : 'KW' '1874';\n"); - grammarBuilder.append("KW1875 : 'KW' '1875';\n"); - grammarBuilder.append("KW1876 : 'KW' '1876';\n"); - grammarBuilder.append("KW1877 : 'KW' '1877';\n"); - grammarBuilder.append("KW1878 : 'KW' '1878';\n"); - grammarBuilder.append("KW1879 : 'KW' '1879';\n"); - grammarBuilder.append("KW1880 : 'KW' '1880';\n"); - grammarBuilder.append("KW1881 : 'KW' '1881';\n"); - grammarBuilder.append("KW1882 : 'KW' '1882';\n"); - grammarBuilder.append("KW1883 : 'KW' '1883';\n"); - grammarBuilder.append("KW1884 : 'KW' '1884';\n"); - grammarBuilder.append("KW1885 : 'KW' '1885';\n"); - grammarBuilder.append("KW1886 : 'KW' '1886';\n"); - grammarBuilder.append("KW1887 : 'KW' '1887';\n"); - grammarBuilder.append("KW1888 : 'KW' '1888';\n"); - grammarBuilder.append("KW1889 : 'KW' '1889';\n"); - grammarBuilder.append("KW1890 : 'KW' '1890';\n"); - grammarBuilder.append("KW1891 : 'KW' '1891';\n"); - grammarBuilder.append("KW1892 : 'KW' '1892';\n"); - grammarBuilder.append("KW1893 : 'KW' '1893';\n"); - grammarBuilder.append("KW1894 : 'KW' '1894';\n"); - grammarBuilder.append("KW1895 : 'KW' '1895';\n"); - grammarBuilder.append("KW1896 : 'KW' '1896';\n"); - grammarBuilder.append("KW1897 : 'KW' '1897';\n"); - grammarBuilder.append("KW1898 : 'KW' '1898';\n"); - grammarBuilder.append("KW1899 : 'KW' '1899';\n"); - grammarBuilder.append("KW1900 : 'KW' '1900';\n"); - grammarBuilder.append("KW1901 : 'KW' '1901';\n"); - grammarBuilder.append("KW1902 : 'KW' '1902';\n"); - grammarBuilder.append("KW1903 : 'KW' '1903';\n"); - grammarBuilder.append("KW1904 : 'KW' '1904';\n"); - grammarBuilder.append("KW1905 : 'KW' '1905';\n"); - grammarBuilder.append("KW1906 : 'KW' '1906';\n"); - grammarBuilder.append("KW1907 : 'KW' '1907';\n"); - grammarBuilder.append("KW1908 : 'KW' '1908';\n"); - grammarBuilder.append("KW1909 : 'KW' '1909';\n"); - grammarBuilder.append("KW1910 : 'KW' '1910';\n"); - grammarBuilder.append("KW1911 : 'KW' '1911';\n"); - grammarBuilder.append("KW1912 : 'KW' '1912';\n"); - grammarBuilder.append("KW1913 : 'KW' '1913';\n"); - grammarBuilder.append("KW1914 : 'KW' '1914';\n"); - grammarBuilder.append("KW1915 : 'KW' '1915';\n"); - grammarBuilder.append("KW1916 : 'KW' '1916';\n"); - grammarBuilder.append("KW1917 : 'KW' '1917';\n"); - grammarBuilder.append("KW1918 : 'KW' '1918';\n"); - grammarBuilder.append("KW1919 : 'KW' '1919';\n"); - grammarBuilder.append("KW1920 : 'KW' '1920';\n"); - grammarBuilder.append("KW1921 : 'KW' '1921';\n"); - grammarBuilder.append("KW1922 : 'KW' '1922';\n"); - grammarBuilder.append("KW1923 : 'KW' '1923';\n"); - grammarBuilder.append("KW1924 : 'KW' '1924';\n"); - grammarBuilder.append("KW1925 : 'KW' '1925';\n"); - grammarBuilder.append("KW1926 : 'KW' '1926';\n"); - grammarBuilder.append("KW1927 : 'KW' '1927';\n"); - grammarBuilder.append("KW1928 : 'KW' '1928';\n"); - grammarBuilder.append("KW1929 : 'KW' '1929';\n"); - grammarBuilder.append("KW1930 : 'KW' '1930';\n"); - grammarBuilder.append("KW1931 : 'KW' '1931';\n"); - grammarBuilder.append("KW1932 : 'KW' '1932';\n"); - grammarBuilder.append("KW1933 : 'KW' '1933';\n"); - grammarBuilder.append("KW1934 : 'KW' '1934';\n"); - grammarBuilder.append("KW1935 : 'KW' '1935';\n"); - grammarBuilder.append("KW1936 : 'KW' '1936';\n"); - grammarBuilder.append("KW1937 : 'KW' '1937';\n"); - grammarBuilder.append("KW1938 : 'KW' '1938';\n"); - grammarBuilder.append("KW1939 : 'KW' '1939';\n"); - grammarBuilder.append("KW1940 : 'KW' '1940';\n"); - grammarBuilder.append("KW1941 : 'KW' '1941';\n"); - grammarBuilder.append("KW1942 : 'KW' '1942';\n"); - grammarBuilder.append("KW1943 : 'KW' '1943';\n"); - grammarBuilder.append("KW1944 : 'KW' '1944';\n"); - grammarBuilder.append("KW1945 : 'KW' '1945';\n"); - grammarBuilder.append("KW1946 : 'KW' '1946';\n"); - grammarBuilder.append("KW1947 : 'KW' '1947';\n"); - grammarBuilder.append("KW1948 : 'KW' '1948';\n"); - grammarBuilder.append("KW1949 : 'KW' '1949';\n"); - grammarBuilder.append("KW1950 : 'KW' '1950';\n"); - grammarBuilder.append("KW1951 : 'KW' '1951';\n"); - grammarBuilder.append("KW1952 : 'KW' '1952';\n"); - grammarBuilder.append("KW1953 : 'KW' '1953';\n"); - grammarBuilder.append("KW1954 : 'KW' '1954';\n"); - grammarBuilder.append("KW1955 : 'KW' '1955';\n"); - grammarBuilder.append("KW1956 : 'KW' '1956';\n"); - grammarBuilder.append("KW1957 : 'KW' '1957';\n"); - grammarBuilder.append("KW1958 : 'KW' '1958';\n"); - grammarBuilder.append("KW1959 : 'KW' '1959';\n"); - grammarBuilder.append("KW1960 : 'KW' '1960';\n"); - grammarBuilder.append("KW1961 : 'KW' '1961';\n"); - grammarBuilder.append("KW1962 : 'KW' '1962';\n"); - grammarBuilder.append("KW1963 : 'KW' '1963';\n"); - grammarBuilder.append("KW1964 : 'KW' '1964';\n"); - grammarBuilder.append("KW1965 : 'KW' '1965';\n"); - grammarBuilder.append("KW1966 : 'KW' '1966';\n"); - grammarBuilder.append("KW1967 : 'KW' '1967';\n"); - grammarBuilder.append("KW1968 : 'KW' '1968';\n"); - grammarBuilder.append("KW1969 : 'KW' '1969';\n"); - grammarBuilder.append("KW1970 : 'KW' '1970';\n"); - grammarBuilder.append("KW1971 : 'KW' '1971';\n"); - grammarBuilder.append("KW1972 : 'KW' '1972';\n"); - grammarBuilder.append("KW1973 : 'KW' '1973';\n"); - grammarBuilder.append("KW1974 : 'KW' '1974';\n"); - grammarBuilder.append("KW1975 : 'KW' '1975';\n"); - grammarBuilder.append("KW1976 : 'KW' '1976';\n"); - grammarBuilder.append("KW1977 : 'KW' '1977';\n"); - grammarBuilder.append("KW1978 : 'KW' '1978';\n"); - grammarBuilder.append("KW1979 : 'KW' '1979';\n"); - grammarBuilder.append("KW1980 : 'KW' '1980';\n"); - grammarBuilder.append("KW1981 : 'KW' '1981';\n"); - grammarBuilder.append("KW1982 : 'KW' '1982';\n"); - grammarBuilder.append("KW1983 : 'KW' '1983';\n"); - grammarBuilder.append("KW1984 : 'KW' '1984';\n"); - grammarBuilder.append("KW1985 : 'KW' '1985';\n"); - grammarBuilder.append("KW1986 : 'KW' '1986';\n"); - grammarBuilder.append("KW1987 : 'KW' '1987';\n"); - grammarBuilder.append("KW1988 : 'KW' '1988';\n"); - grammarBuilder.append("KW1989 : 'KW' '1989';\n"); - grammarBuilder.append("KW1990 : 'KW' '1990';\n"); - grammarBuilder.append("KW1991 : 'KW' '1991';\n"); - grammarBuilder.append("KW1992 : 'KW' '1992';\n"); - grammarBuilder.append("KW1993 : 'KW' '1993';\n"); - grammarBuilder.append("KW1994 : 'KW' '1994';\n"); - grammarBuilder.append("KW1995 : 'KW' '1995';\n"); - grammarBuilder.append("KW1996 : 'KW' '1996';\n"); - grammarBuilder.append("KW1997 : 'KW' '1997';\n"); - grammarBuilder.append("KW1998 : 'KW' '1998';\n"); - grammarBuilder.append("KW1999 : 'KW' '1999';\n"); - grammarBuilder.append("KW2000 : 'KW' '2000';\n"); - grammarBuilder.append("KW2001 : 'KW' '2001';\n"); - grammarBuilder.append("KW2002 : 'KW' '2002';\n"); - grammarBuilder.append("KW2003 : 'KW' '2003';\n"); - grammarBuilder.append("KW2004 : 'KW' '2004';\n"); - grammarBuilder.append("KW2005 : 'KW' '2005';\n"); - grammarBuilder.append("KW2006 : 'KW' '2006';\n"); - grammarBuilder.append("KW2007 : 'KW' '2007';\n"); - grammarBuilder.append("KW2008 : 'KW' '2008';\n"); - grammarBuilder.append("KW2009 : 'KW' '2009';\n"); - grammarBuilder.append("KW2010 : 'KW' '2010';\n"); - grammarBuilder.append("KW2011 : 'KW' '2011';\n"); - grammarBuilder.append("KW2012 : 'KW' '2012';\n"); - grammarBuilder.append("KW2013 : 'KW' '2013';\n"); - grammarBuilder.append("KW2014 : 'KW' '2014';\n"); - grammarBuilder.append("KW2015 : 'KW' '2015';\n"); - grammarBuilder.append("KW2016 : 'KW' '2016';\n"); - grammarBuilder.append("KW2017 : 'KW' '2017';\n"); - grammarBuilder.append("KW2018 : 'KW' '2018';\n"); - grammarBuilder.append("KW2019 : 'KW' '2019';\n"); - grammarBuilder.append("KW2020 : 'KW' '2020';\n"); - grammarBuilder.append("KW2021 : 'KW' '2021';\n"); - grammarBuilder.append("KW2022 : 'KW' '2022';\n"); - grammarBuilder.append("KW2023 : 'KW' '2023';\n"); - grammarBuilder.append("KW2024 : 'KW' '2024';\n"); - grammarBuilder.append("KW2025 : 'KW' '2025';\n"); - grammarBuilder.append("KW2026 : 'KW' '2026';\n"); - grammarBuilder.append("KW2027 : 'KW' '2027';\n"); - grammarBuilder.append("KW2028 : 'KW' '2028';\n"); - grammarBuilder.append("KW2029 : 'KW' '2029';\n"); - grammarBuilder.append("KW2030 : 'KW' '2030';\n"); - grammarBuilder.append("KW2031 : 'KW' '2031';\n"); - grammarBuilder.append("KW2032 : 'KW' '2032';\n"); - grammarBuilder.append("KW2033 : 'KW' '2033';\n"); - grammarBuilder.append("KW2034 : 'KW' '2034';\n"); - grammarBuilder.append("KW2035 : 'KW' '2035';\n"); - grammarBuilder.append("KW2036 : 'KW' '2036';\n"); - grammarBuilder.append("KW2037 : 'KW' '2037';\n"); - grammarBuilder.append("KW2038 : 'KW' '2038';\n"); - grammarBuilder.append("KW2039 : 'KW' '2039';\n"); - grammarBuilder.append("KW2040 : 'KW' '2040';\n"); - grammarBuilder.append("KW2041 : 'KW' '2041';\n"); - grammarBuilder.append("KW2042 : 'KW' '2042';\n"); - grammarBuilder.append("KW2043 : 'KW' '2043';\n"); - grammarBuilder.append("KW2044 : 'KW' '2044';\n"); - grammarBuilder.append("KW2045 : 'KW' '2045';\n"); - grammarBuilder.append("KW2046 : 'KW' '2046';\n"); - grammarBuilder.append("KW2047 : 'KW' '2047';\n"); - grammarBuilder.append("KW2048 : 'KW' '2048';\n"); - grammarBuilder.append("KW2049 : 'KW' '2049';\n"); - grammarBuilder.append("KW2050 : 'KW' '2050';\n"); - grammarBuilder.append("KW2051 : 'KW' '2051';\n"); - grammarBuilder.append("KW2052 : 'KW' '2052';\n"); - grammarBuilder.append("KW2053 : 'KW' '2053';\n"); - grammarBuilder.append("KW2054 : 'KW' '2054';\n"); - grammarBuilder.append("KW2055 : 'KW' '2055';\n"); - grammarBuilder.append("KW2056 : 'KW' '2056';\n"); - grammarBuilder.append("KW2057 : 'KW' '2057';\n"); - grammarBuilder.append("KW2058 : 'KW' '2058';\n"); - grammarBuilder.append("KW2059 : 'KW' '2059';\n"); - grammarBuilder.append("KW2060 : 'KW' '2060';\n"); - grammarBuilder.append("KW2061 : 'KW' '2061';\n"); - grammarBuilder.append("KW2062 : 'KW' '2062';\n"); - grammarBuilder.append("KW2063 : 'KW' '2063';\n"); - grammarBuilder.append("KW2064 : 'KW' '2064';\n"); - grammarBuilder.append("KW2065 : 'KW' '2065';\n"); - grammarBuilder.append("KW2066 : 'KW' '2066';\n"); - grammarBuilder.append("KW2067 : 'KW' '2067';\n"); - grammarBuilder.append("KW2068 : 'KW' '2068';\n"); - grammarBuilder.append("KW2069 : 'KW' '2069';\n"); - grammarBuilder.append("KW2070 : 'KW' '2070';\n"); - grammarBuilder.append("KW2071 : 'KW' '2071';\n"); - grammarBuilder.append("KW2072 : 'KW' '2072';\n"); - grammarBuilder.append("KW2073 : 'KW' '2073';\n"); - grammarBuilder.append("KW2074 : 'KW' '2074';\n"); - grammarBuilder.append("KW2075 : 'KW' '2075';\n"); - grammarBuilder.append("KW2076 : 'KW' '2076';\n"); - grammarBuilder.append("KW2077 : 'KW' '2077';\n"); - grammarBuilder.append("KW2078 : 'KW' '2078';\n"); - grammarBuilder.append("KW2079 : 'KW' '2079';\n"); - grammarBuilder.append("KW2080 : 'KW' '2080';\n"); - grammarBuilder.append("KW2081 : 'KW' '2081';\n"); - grammarBuilder.append("KW2082 : 'KW' '2082';\n"); - grammarBuilder.append("KW2083 : 'KW' '2083';\n"); - grammarBuilder.append("KW2084 : 'KW' '2084';\n"); - grammarBuilder.append("KW2085 : 'KW' '2085';\n"); - grammarBuilder.append("KW2086 : 'KW' '2086';\n"); - grammarBuilder.append("KW2087 : 'KW' '2087';\n"); - grammarBuilder.append("KW2088 : 'KW' '2088';\n"); - grammarBuilder.append("KW2089 : 'KW' '2089';\n"); - grammarBuilder.append("KW2090 : 'KW' '2090';\n"); - grammarBuilder.append("KW2091 : 'KW' '2091';\n"); - grammarBuilder.append("KW2092 : 'KW' '2092';\n"); - grammarBuilder.append("KW2093 : 'KW' '2093';\n"); - grammarBuilder.append("KW2094 : 'KW' '2094';\n"); - grammarBuilder.append("KW2095 : 'KW' '2095';\n"); - grammarBuilder.append("KW2096 : 'KW' '2096';\n"); - grammarBuilder.append("KW2097 : 'KW' '2097';\n"); - grammarBuilder.append("KW2098 : 'KW' '2098';\n"); - grammarBuilder.append("KW2099 : 'KW' '2099';\n"); - grammarBuilder.append("KW2100 : 'KW' '2100';\n"); - grammarBuilder.append("KW2101 : 'KW' '2101';\n"); - grammarBuilder.append("KW2102 : 'KW' '2102';\n"); - grammarBuilder.append("KW2103 : 'KW' '2103';\n"); - grammarBuilder.append("KW2104 : 'KW' '2104';\n"); - grammarBuilder.append("KW2105 : 'KW' '2105';\n"); - grammarBuilder.append("KW2106 : 'KW' '2106';\n"); - grammarBuilder.append("KW2107 : 'KW' '2107';\n"); - grammarBuilder.append("KW2108 : 'KW' '2108';\n"); - grammarBuilder.append("KW2109 : 'KW' '2109';\n"); - grammarBuilder.append("KW2110 : 'KW' '2110';\n"); - grammarBuilder.append("KW2111 : 'KW' '2111';\n"); - grammarBuilder.append("KW2112 : 'KW' '2112';\n"); - grammarBuilder.append("KW2113 : 'KW' '2113';\n"); - grammarBuilder.append("KW2114 : 'KW' '2114';\n"); - grammarBuilder.append("KW2115 : 'KW' '2115';\n"); - grammarBuilder.append("KW2116 : 'KW' '2116';\n"); - grammarBuilder.append("KW2117 : 'KW' '2117';\n"); - grammarBuilder.append("KW2118 : 'KW' '2118';\n"); - grammarBuilder.append("KW2119 : 'KW' '2119';\n"); - grammarBuilder.append("KW2120 : 'KW' '2120';\n"); - grammarBuilder.append("KW2121 : 'KW' '2121';\n"); - grammarBuilder.append("KW2122 : 'KW' '2122';\n"); - grammarBuilder.append("KW2123 : 'KW' '2123';\n"); - grammarBuilder.append("KW2124 : 'KW' '2124';\n"); - grammarBuilder.append("KW2125 : 'KW' '2125';\n"); - grammarBuilder.append("KW2126 : 'KW' '2126';\n"); - grammarBuilder.append("KW2127 : 'KW' '2127';\n"); - grammarBuilder.append("KW2128 : 'KW' '2128';\n"); - grammarBuilder.append("KW2129 : 'KW' '2129';\n"); - grammarBuilder.append("KW2130 : 'KW' '2130';\n"); - grammarBuilder.append("KW2131 : 'KW' '2131';\n"); - grammarBuilder.append("KW2132 : 'KW' '2132';\n"); - grammarBuilder.append("KW2133 : 'KW' '2133';\n"); - grammarBuilder.append("KW2134 : 'KW' '2134';\n"); - grammarBuilder.append("KW2135 : 'KW' '2135';\n"); - grammarBuilder.append("KW2136 : 'KW' '2136';\n"); - grammarBuilder.append("KW2137 : 'KW' '2137';\n"); - grammarBuilder.append("KW2138 : 'KW' '2138';\n"); - grammarBuilder.append("KW2139 : 'KW' '2139';\n"); - grammarBuilder.append("KW2140 : 'KW' '2140';\n"); - grammarBuilder.append("KW2141 : 'KW' '2141';\n"); - grammarBuilder.append("KW2142 : 'KW' '2142';\n"); - grammarBuilder.append("KW2143 : 'KW' '2143';\n"); - grammarBuilder.append("KW2144 : 'KW' '2144';\n"); - grammarBuilder.append("KW2145 : 'KW' '2145';\n"); - grammarBuilder.append("KW2146 : 'KW' '2146';\n"); - grammarBuilder.append("KW2147 : 'KW' '2147';\n"); - grammarBuilder.append("KW2148 : 'KW' '2148';\n"); - grammarBuilder.append("KW2149 : 'KW' '2149';\n"); - grammarBuilder.append("KW2150 : 'KW' '2150';\n"); - grammarBuilder.append("KW2151 : 'KW' '2151';\n"); - grammarBuilder.append("KW2152 : 'KW' '2152';\n"); - grammarBuilder.append("KW2153 : 'KW' '2153';\n"); - grammarBuilder.append("KW2154 : 'KW' '2154';\n"); - grammarBuilder.append("KW2155 : 'KW' '2155';\n"); - grammarBuilder.append("KW2156 : 'KW' '2156';\n"); - grammarBuilder.append("KW2157 : 'KW' '2157';\n"); - grammarBuilder.append("KW2158 : 'KW' '2158';\n"); - grammarBuilder.append("KW2159 : 'KW' '2159';\n"); - grammarBuilder.append("KW2160 : 'KW' '2160';\n"); - grammarBuilder.append("KW2161 : 'KW' '2161';\n"); - grammarBuilder.append("KW2162 : 'KW' '2162';\n"); - grammarBuilder.append("KW2163 : 'KW' '2163';\n"); - grammarBuilder.append("KW2164 : 'KW' '2164';\n"); - grammarBuilder.append("KW2165 : 'KW' '2165';\n"); - grammarBuilder.append("KW2166 : 'KW' '2166';\n"); - grammarBuilder.append("KW2167 : 'KW' '2167';\n"); - grammarBuilder.append("KW2168 : 'KW' '2168';\n"); - grammarBuilder.append("KW2169 : 'KW' '2169';\n"); - grammarBuilder.append("KW2170 : 'KW' '2170';\n"); - grammarBuilder.append("KW2171 : 'KW' '2171';\n"); - grammarBuilder.append("KW2172 : 'KW' '2172';\n"); - grammarBuilder.append("KW2173 : 'KW' '2173';\n"); - grammarBuilder.append("KW2174 : 'KW' '2174';\n"); - grammarBuilder.append("KW2175 : 'KW' '2175';\n"); - grammarBuilder.append("KW2176 : 'KW' '2176';\n"); - grammarBuilder.append("KW2177 : 'KW' '2177';\n"); - grammarBuilder.append("KW2178 : 'KW' '2178';\n"); - grammarBuilder.append("KW2179 : 'KW' '2179';\n"); - grammarBuilder.append("KW2180 : 'KW' '2180';\n"); - grammarBuilder.append("KW2181 : 'KW' '2181';\n"); - grammarBuilder.append("KW2182 : 'KW' '2182';\n"); - grammarBuilder.append("KW2183 : 'KW' '2183';\n"); - grammarBuilder.append("KW2184 : 'KW' '2184';\n"); - grammarBuilder.append("KW2185 : 'KW' '2185';\n"); - grammarBuilder.append("KW2186 : 'KW' '2186';\n"); - grammarBuilder.append("KW2187 : 'KW' '2187';\n"); - grammarBuilder.append("KW2188 : 'KW' '2188';\n"); - grammarBuilder.append("KW2189 : 'KW' '2189';\n"); - grammarBuilder.append("KW2190 : 'KW' '2190';\n"); - grammarBuilder.append("KW2191 : 'KW' '2191';\n"); - grammarBuilder.append("KW2192 : 'KW' '2192';\n"); - grammarBuilder.append("KW2193 : 'KW' '2193';\n"); - grammarBuilder.append("KW2194 : 'KW' '2194';\n"); - grammarBuilder.append("KW2195 : 'KW' '2195';\n"); - grammarBuilder.append("KW2196 : 'KW' '2196';\n"); - grammarBuilder.append("KW2197 : 'KW' '2197';\n"); - grammarBuilder.append("KW2198 : 'KW' '2198';\n"); - grammarBuilder.append("KW2199 : 'KW' '2199';\n"); - grammarBuilder.append("KW2200 : 'KW' '2200';\n"); - grammarBuilder.append("KW2201 : 'KW' '2201';\n"); - grammarBuilder.append("KW2202 : 'KW' '2202';\n"); - grammarBuilder.append("KW2203 : 'KW' '2203';\n"); - grammarBuilder.append("KW2204 : 'KW' '2204';\n"); - grammarBuilder.append("KW2205 : 'KW' '2205';\n"); - grammarBuilder.append("KW2206 : 'KW' '2206';\n"); - grammarBuilder.append("KW2207 : 'KW' '2207';\n"); - grammarBuilder.append("KW2208 : 'KW' '2208';\n"); - grammarBuilder.append("KW2209 : 'KW' '2209';\n"); - grammarBuilder.append("KW2210 : 'KW' '2210';\n"); - grammarBuilder.append("KW2211 : 'KW' '2211';\n"); - grammarBuilder.append("KW2212 : 'KW' '2212';\n"); - grammarBuilder.append("KW2213 : 'KW' '2213';\n"); - grammarBuilder.append("KW2214 : 'KW' '2214';\n"); - grammarBuilder.append("KW2215 : 'KW' '2215';\n"); - grammarBuilder.append("KW2216 : 'KW' '2216';\n"); - grammarBuilder.append("KW2217 : 'KW' '2217';\n"); - grammarBuilder.append("KW2218 : 'KW' '2218';\n"); - grammarBuilder.append("KW2219 : 'KW' '2219';\n"); - grammarBuilder.append("KW2220 : 'KW' '2220';\n"); - grammarBuilder.append("KW2221 : 'KW' '2221';\n"); - grammarBuilder.append("KW2222 : 'KW' '2222';\n"); - grammarBuilder.append("KW2223 : 'KW' '2223';\n"); - grammarBuilder.append("KW2224 : 'KW' '2224';\n"); - grammarBuilder.append("KW2225 : 'KW' '2225';\n"); - grammarBuilder.append("KW2226 : 'KW' '2226';\n"); - grammarBuilder.append("KW2227 : 'KW' '2227';\n"); - grammarBuilder.append("KW2228 : 'KW' '2228';\n"); - grammarBuilder.append("KW2229 : 'KW' '2229';\n"); - grammarBuilder.append("KW2230 : 'KW' '2230';\n"); - grammarBuilder.append("KW2231 : 'KW' '2231';\n"); - grammarBuilder.append("KW2232 : 'KW' '2232';\n"); - grammarBuilder.append("KW2233 : 'KW' '2233';\n"); - grammarBuilder.append("KW2234 : 'KW' '2234';\n"); - grammarBuilder.append("KW2235 : 'KW' '2235';\n"); - grammarBuilder.append("KW2236 : 'KW' '2236';\n"); - grammarBuilder.append("KW2237 : 'KW' '2237';\n"); - grammarBuilder.append("KW2238 : 'KW' '2238';\n"); - grammarBuilder.append("KW2239 : 'KW' '2239';\n"); - grammarBuilder.append("KW2240 : 'KW' '2240';\n"); - grammarBuilder.append("KW2241 : 'KW' '2241';\n"); - grammarBuilder.append("KW2242 : 'KW' '2242';\n"); - grammarBuilder.append("KW2243 : 'KW' '2243';\n"); - grammarBuilder.append("KW2244 : 'KW' '2244';\n"); - grammarBuilder.append("KW2245 : 'KW' '2245';\n"); - grammarBuilder.append("KW2246 : 'KW' '2246';\n"); - grammarBuilder.append("KW2247 : 'KW' '2247';\n"); - grammarBuilder.append("KW2248 : 'KW' '2248';\n"); - grammarBuilder.append("KW2249 : 'KW' '2249';\n"); - grammarBuilder.append("KW2250 : 'KW' '2250';\n"); - grammarBuilder.append("KW2251 : 'KW' '2251';\n"); - grammarBuilder.append("KW2252 : 'KW' '2252';\n"); - grammarBuilder.append("KW2253 : 'KW' '2253';\n"); - grammarBuilder.append("KW2254 : 'KW' '2254';\n"); - grammarBuilder.append("KW2255 : 'KW' '2255';\n"); - grammarBuilder.append("KW2256 : 'KW' '2256';\n"); - grammarBuilder.append("KW2257 : 'KW' '2257';\n"); - grammarBuilder.append("KW2258 : 'KW' '2258';\n"); - grammarBuilder.append("KW2259 : 'KW' '2259';\n"); - grammarBuilder.append("KW2260 : 'KW' '2260';\n"); - grammarBuilder.append("KW2261 : 'KW' '2261';\n"); - grammarBuilder.append("KW2262 : 'KW' '2262';\n"); - grammarBuilder.append("KW2263 : 'KW' '2263';\n"); - grammarBuilder.append("KW2264 : 'KW' '2264';\n"); - grammarBuilder.append("KW2265 : 'KW' '2265';\n"); - grammarBuilder.append("KW2266 : 'KW' '2266';\n"); - grammarBuilder.append("KW2267 : 'KW' '2267';\n"); - grammarBuilder.append("KW2268 : 'KW' '2268';\n"); - grammarBuilder.append("KW2269 : 'KW' '2269';\n"); - grammarBuilder.append("KW2270 : 'KW' '2270';\n"); - grammarBuilder.append("KW2271 : 'KW' '2271';\n"); - grammarBuilder.append("KW2272 : 'KW' '2272';\n"); - grammarBuilder.append("KW2273 : 'KW' '2273';\n"); - grammarBuilder.append("KW2274 : 'KW' '2274';\n"); - grammarBuilder.append("KW2275 : 'KW' '2275';\n"); - grammarBuilder.append("KW2276 : 'KW' '2276';\n"); - grammarBuilder.append("KW2277 : 'KW' '2277';\n"); - grammarBuilder.append("KW2278 : 'KW' '2278';\n"); - grammarBuilder.append("KW2279 : 'KW' '2279';\n"); - grammarBuilder.append("KW2280 : 'KW' '2280';\n"); - grammarBuilder.append("KW2281 : 'KW' '2281';\n"); - grammarBuilder.append("KW2282 : 'KW' '2282';\n"); - grammarBuilder.append("KW2283 : 'KW' '2283';\n"); - grammarBuilder.append("KW2284 : 'KW' '2284';\n"); - grammarBuilder.append("KW2285 : 'KW' '2285';\n"); - grammarBuilder.append("KW2286 : 'KW' '2286';\n"); - grammarBuilder.append("KW2287 : 'KW' '2287';\n"); - grammarBuilder.append("KW2288 : 'KW' '2288';\n"); - grammarBuilder.append("KW2289 : 'KW' '2289';\n"); - grammarBuilder.append("KW2290 : 'KW' '2290';\n"); - grammarBuilder.append("KW2291 : 'KW' '2291';\n"); - grammarBuilder.append("KW2292 : 'KW' '2292';\n"); - grammarBuilder.append("KW2293 : 'KW' '2293';\n"); - grammarBuilder.append("KW2294 : 'KW' '2294';\n"); - grammarBuilder.append("KW2295 : 'KW' '2295';\n"); - grammarBuilder.append("KW2296 : 'KW' '2296';\n"); - grammarBuilder.append("KW2297 : 'KW' '2297';\n"); - grammarBuilder.append("KW2298 : 'KW' '2298';\n"); - grammarBuilder.append("KW2299 : 'KW' '2299';\n"); - grammarBuilder.append("KW2300 : 'KW' '2300';\n"); - grammarBuilder.append("KW2301 : 'KW' '2301';\n"); - grammarBuilder.append("KW2302 : 'KW' '2302';\n"); - grammarBuilder.append("KW2303 : 'KW' '2303';\n"); - grammarBuilder.append("KW2304 : 'KW' '2304';\n"); - grammarBuilder.append("KW2305 : 'KW' '2305';\n"); - grammarBuilder.append("KW2306 : 'KW' '2306';\n"); - grammarBuilder.append("KW2307 : 'KW' '2307';\n"); - grammarBuilder.append("KW2308 : 'KW' '2308';\n"); - grammarBuilder.append("KW2309 : 'KW' '2309';\n"); - grammarBuilder.append("KW2310 : 'KW' '2310';\n"); - grammarBuilder.append("KW2311 : 'KW' '2311';\n"); - grammarBuilder.append("KW2312 : 'KW' '2312';\n"); - grammarBuilder.append("KW2313 : 'KW' '2313';\n"); - grammarBuilder.append("KW2314 : 'KW' '2314';\n"); - grammarBuilder.append("KW2315 : 'KW' '2315';\n"); - grammarBuilder.append("KW2316 : 'KW' '2316';\n"); - grammarBuilder.append("KW2317 : 'KW' '2317';\n"); - grammarBuilder.append("KW2318 : 'KW' '2318';\n"); - grammarBuilder.append("KW2319 : 'KW' '2319';\n"); - grammarBuilder.append("KW2320 : 'KW' '2320';\n"); - grammarBuilder.append("KW2321 : 'KW' '2321';\n"); - grammarBuilder.append("KW2322 : 'KW' '2322';\n"); - grammarBuilder.append("KW2323 : 'KW' '2323';\n"); - grammarBuilder.append("KW2324 : 'KW' '2324';\n"); - grammarBuilder.append("KW2325 : 'KW' '2325';\n"); - grammarBuilder.append("KW2326 : 'KW' '2326';\n"); - grammarBuilder.append("KW2327 : 'KW' '2327';\n"); - grammarBuilder.append("KW2328 : 'KW' '2328';\n"); - grammarBuilder.append("KW2329 : 'KW' '2329';\n"); - grammarBuilder.append("KW2330 : 'KW' '2330';\n"); - grammarBuilder.append("KW2331 : 'KW' '2331';\n"); - grammarBuilder.append("KW2332 : 'KW' '2332';\n"); - grammarBuilder.append("KW2333 : 'KW' '2333';\n"); - grammarBuilder.append("KW2334 : 'KW' '2334';\n"); - grammarBuilder.append("KW2335 : 'KW' '2335';\n"); - grammarBuilder.append("KW2336 : 'KW' '2336';\n"); - grammarBuilder.append("KW2337 : 'KW' '2337';\n"); - grammarBuilder.append("KW2338 : 'KW' '2338';\n"); - grammarBuilder.append("KW2339 : 'KW' '2339';\n"); - grammarBuilder.append("KW2340 : 'KW' '2340';\n"); - grammarBuilder.append("KW2341 : 'KW' '2341';\n"); - grammarBuilder.append("KW2342 : 'KW' '2342';\n"); - grammarBuilder.append("KW2343 : 'KW' '2343';\n"); - grammarBuilder.append("KW2344 : 'KW' '2344';\n"); - grammarBuilder.append("KW2345 : 'KW' '2345';\n"); - grammarBuilder.append("KW2346 : 'KW' '2346';\n"); - grammarBuilder.append("KW2347 : 'KW' '2347';\n"); - grammarBuilder.append("KW2348 : 'KW' '2348';\n"); - grammarBuilder.append("KW2349 : 'KW' '2349';\n"); - grammarBuilder.append("KW2350 : 'KW' '2350';\n"); - grammarBuilder.append("KW2351 : 'KW' '2351';\n"); - grammarBuilder.append("KW2352 : 'KW' '2352';\n"); - grammarBuilder.append("KW2353 : 'KW' '2353';\n"); - grammarBuilder.append("KW2354 : 'KW' '2354';\n"); - grammarBuilder.append("KW2355 : 'KW' '2355';\n"); - grammarBuilder.append("KW2356 : 'KW' '2356';\n"); - grammarBuilder.append("KW2357 : 'KW' '2357';\n"); - grammarBuilder.append("KW2358 : 'KW' '2358';\n"); - grammarBuilder.append("KW2359 : 'KW' '2359';\n"); - grammarBuilder.append("KW2360 : 'KW' '2360';\n"); - grammarBuilder.append("KW2361 : 'KW' '2361';\n"); - grammarBuilder.append("KW2362 : 'KW' '2362';\n"); - grammarBuilder.append("KW2363 : 'KW' '2363';\n"); - grammarBuilder.append("KW2364 : 'KW' '2364';\n"); - grammarBuilder.append("KW2365 : 'KW' '2365';\n"); - grammarBuilder.append("KW2366 : 'KW' '2366';\n"); - grammarBuilder.append("KW2367 : 'KW' '2367';\n"); - grammarBuilder.append("KW2368 : 'KW' '2368';\n"); - grammarBuilder.append("KW2369 : 'KW' '2369';\n"); - grammarBuilder.append("KW2370 : 'KW' '2370';\n"); - grammarBuilder.append("KW2371 : 'KW' '2371';\n"); - grammarBuilder.append("KW2372 : 'KW' '2372';\n"); - grammarBuilder.append("KW2373 : 'KW' '2373';\n"); - grammarBuilder.append("KW2374 : 'KW' '2374';\n"); - grammarBuilder.append("KW2375 : 'KW' '2375';\n"); - grammarBuilder.append("KW2376 : 'KW' '2376';\n"); - grammarBuilder.append("KW2377 : 'KW' '2377';\n"); - grammarBuilder.append("KW2378 : 'KW' '2378';\n"); - grammarBuilder.append("KW2379 : 'KW' '2379';\n"); - grammarBuilder.append("KW2380 : 'KW' '2380';\n"); - grammarBuilder.append("KW2381 : 'KW' '2381';\n"); - grammarBuilder.append("KW2382 : 'KW' '2382';\n"); - grammarBuilder.append("KW2383 : 'KW' '2383';\n"); - grammarBuilder.append("KW2384 : 'KW' '2384';\n"); - grammarBuilder.append("KW2385 : 'KW' '2385';\n"); - grammarBuilder.append("KW2386 : 'KW' '2386';\n"); - grammarBuilder.append("KW2387 : 'KW' '2387';\n"); - grammarBuilder.append("KW2388 : 'KW' '2388';\n"); - grammarBuilder.append("KW2389 : 'KW' '2389';\n"); - grammarBuilder.append("KW2390 : 'KW' '2390';\n"); - grammarBuilder.append("KW2391 : 'KW' '2391';\n"); - grammarBuilder.append("KW2392 : 'KW' '2392';\n"); - grammarBuilder.append("KW2393 : 'KW' '2393';\n"); - grammarBuilder.append("KW2394 : 'KW' '2394';\n"); - grammarBuilder.append("KW2395 : 'KW' '2395';\n"); - grammarBuilder.append("KW2396 : 'KW' '2396';\n"); - grammarBuilder.append("KW2397 : 'KW' '2397';\n"); - grammarBuilder.append("KW2398 : 'KW' '2398';\n"); - grammarBuilder.append("KW2399 : 'KW' '2399';\n"); - grammarBuilder.append("KW2400 : 'KW' '2400';\n"); - grammarBuilder.append("KW2401 : 'KW' '2401';\n"); - grammarBuilder.append("KW2402 : 'KW' '2402';\n"); - grammarBuilder.append("KW2403 : 'KW' '2403';\n"); - grammarBuilder.append("KW2404 : 'KW' '2404';\n"); - grammarBuilder.append("KW2405 : 'KW' '2405';\n"); - grammarBuilder.append("KW2406 : 'KW' '2406';\n"); - grammarBuilder.append("KW2407 : 'KW' '2407';\n"); - grammarBuilder.append("KW2408 : 'KW' '2408';\n"); - grammarBuilder.append("KW2409 : 'KW' '2409';\n"); - grammarBuilder.append("KW2410 : 'KW' '2410';\n"); - grammarBuilder.append("KW2411 : 'KW' '2411';\n"); - grammarBuilder.append("KW2412 : 'KW' '2412';\n"); - grammarBuilder.append("KW2413 : 'KW' '2413';\n"); - grammarBuilder.append("KW2414 : 'KW' '2414';\n"); - grammarBuilder.append("KW2415 : 'KW' '2415';\n"); - grammarBuilder.append("KW2416 : 'KW' '2416';\n"); - grammarBuilder.append("KW2417 : 'KW' '2417';\n"); - grammarBuilder.append("KW2418 : 'KW' '2418';\n"); - grammarBuilder.append("KW2419 : 'KW' '2419';\n"); - grammarBuilder.append("KW2420 : 'KW' '2420';\n"); - grammarBuilder.append("KW2421 : 'KW' '2421';\n"); - grammarBuilder.append("KW2422 : 'KW' '2422';\n"); - grammarBuilder.append("KW2423 : 'KW' '2423';\n"); - grammarBuilder.append("KW2424 : 'KW' '2424';\n"); - grammarBuilder.append("KW2425 : 'KW' '2425';\n"); - grammarBuilder.append("KW2426 : 'KW' '2426';\n"); - grammarBuilder.append("KW2427 : 'KW' '2427';\n"); - grammarBuilder.append("KW2428 : 'KW' '2428';\n"); - grammarBuilder.append("KW2429 : 'KW' '2429';\n"); - grammarBuilder.append("KW2430 : 'KW' '2430';\n"); - grammarBuilder.append("KW2431 : 'KW' '2431';\n"); - grammarBuilder.append("KW2432 : 'KW' '2432';\n"); - grammarBuilder.append("KW2433 : 'KW' '2433';\n"); - grammarBuilder.append("KW2434 : 'KW' '2434';\n"); - grammarBuilder.append("KW2435 : 'KW' '2435';\n"); - grammarBuilder.append("KW2436 : 'KW' '2436';\n"); - grammarBuilder.append("KW2437 : 'KW' '2437';\n"); - grammarBuilder.append("KW2438 : 'KW' '2438';\n"); - grammarBuilder.append("KW2439 : 'KW' '2439';\n"); - grammarBuilder.append("KW2440 : 'KW' '2440';\n"); - grammarBuilder.append("KW2441 : 'KW' '2441';\n"); - grammarBuilder.append("KW2442 : 'KW' '2442';\n"); - grammarBuilder.append("KW2443 : 'KW' '2443';\n"); - grammarBuilder.append("KW2444 : 'KW' '2444';\n"); - grammarBuilder.append("KW2445 : 'KW' '2445';\n"); - grammarBuilder.append("KW2446 : 'KW' '2446';\n"); - grammarBuilder.append("KW2447 : 'KW' '2447';\n"); - grammarBuilder.append("KW2448 : 'KW' '2448';\n"); - grammarBuilder.append("KW2449 : 'KW' '2449';\n"); - grammarBuilder.append("KW2450 : 'KW' '2450';\n"); - grammarBuilder.append("KW2451 : 'KW' '2451';\n"); - grammarBuilder.append("KW2452 : 'KW' '2452';\n"); - grammarBuilder.append("KW2453 : 'KW' '2453';\n"); - grammarBuilder.append("KW2454 : 'KW' '2454';\n"); - grammarBuilder.append("KW2455 : 'KW' '2455';\n"); - grammarBuilder.append("KW2456 : 'KW' '2456';\n"); - grammarBuilder.append("KW2457 : 'KW' '2457';\n"); - grammarBuilder.append("KW2458 : 'KW' '2458';\n"); - grammarBuilder.append("KW2459 : 'KW' '2459';\n"); - grammarBuilder.append("KW2460 : 'KW' '2460';\n"); - grammarBuilder.append("KW2461 : 'KW' '2461';\n"); - grammarBuilder.append("KW2462 : 'KW' '2462';\n"); - grammarBuilder.append("KW2463 : 'KW' '2463';\n"); - grammarBuilder.append("KW2464 : 'KW' '2464';\n"); - grammarBuilder.append("KW2465 : 'KW' '2465';\n"); - grammarBuilder.append("KW2466 : 'KW' '2466';\n"); - grammarBuilder.append("KW2467 : 'KW' '2467';\n"); - grammarBuilder.append("KW2468 : 'KW' '2468';\n"); - grammarBuilder.append("KW2469 : 'KW' '2469';\n"); - grammarBuilder.append("KW2470 : 'KW' '2470';\n"); - grammarBuilder.append("KW2471 : 'KW' '2471';\n"); - grammarBuilder.append("KW2472 : 'KW' '2472';\n"); - grammarBuilder.append("KW2473 : 'KW' '2473';\n"); - grammarBuilder.append("KW2474 : 'KW' '2474';\n"); - grammarBuilder.append("KW2475 : 'KW' '2475';\n"); - grammarBuilder.append("KW2476 : 'KW' '2476';\n"); - grammarBuilder.append("KW2477 : 'KW' '2477';\n"); - grammarBuilder.append("KW2478 : 'KW' '2478';\n"); - grammarBuilder.append("KW2479 : 'KW' '2479';\n"); - grammarBuilder.append("KW2480 : 'KW' '2480';\n"); - grammarBuilder.append("KW2481 : 'KW' '2481';\n"); - grammarBuilder.append("KW2482 : 'KW' '2482';\n"); - grammarBuilder.append("KW2483 : 'KW' '2483';\n"); - grammarBuilder.append("KW2484 : 'KW' '2484';\n"); - grammarBuilder.append("KW2485 : 'KW' '2485';\n"); - grammarBuilder.append("KW2486 : 'KW' '2486';\n"); - grammarBuilder.append("KW2487 : 'KW' '2487';\n"); - grammarBuilder.append("KW2488 : 'KW' '2488';\n"); - grammarBuilder.append("KW2489 : 'KW' '2489';\n"); - grammarBuilder.append("KW2490 : 'KW' '2490';\n"); - grammarBuilder.append("KW2491 : 'KW' '2491';\n"); - grammarBuilder.append("KW2492 : 'KW' '2492';\n"); - grammarBuilder.append("KW2493 : 'KW' '2493';\n"); - grammarBuilder.append("KW2494 : 'KW' '2494';\n"); - grammarBuilder.append("KW2495 : 'KW' '2495';\n"); - grammarBuilder.append("KW2496 : 'KW' '2496';\n"); - grammarBuilder.append("KW2497 : 'KW' '2497';\n"); - grammarBuilder.append("KW2498 : 'KW' '2498';\n"); - grammarBuilder.append("KW2499 : 'KW' '2499';\n"); - grammarBuilder.append("KW2500 : 'KW' '2500';\n"); - grammarBuilder.append("KW2501 : 'KW' '2501';\n"); - grammarBuilder.append("KW2502 : 'KW' '2502';\n"); - grammarBuilder.append("KW2503 : 'KW' '2503';\n"); - grammarBuilder.append("KW2504 : 'KW' '2504';\n"); - grammarBuilder.append("KW2505 : 'KW' '2505';\n"); - grammarBuilder.append("KW2506 : 'KW' '2506';\n"); - grammarBuilder.append("KW2507 : 'KW' '2507';\n"); - grammarBuilder.append("KW2508 : 'KW' '2508';\n"); - grammarBuilder.append("KW2509 : 'KW' '2509';\n"); - grammarBuilder.append("KW2510 : 'KW' '2510';\n"); - grammarBuilder.append("KW2511 : 'KW' '2511';\n"); - grammarBuilder.append("KW2512 : 'KW' '2512';\n"); - grammarBuilder.append("KW2513 : 'KW' '2513';\n"); - grammarBuilder.append("KW2514 : 'KW' '2514';\n"); - grammarBuilder.append("KW2515 : 'KW' '2515';\n"); - grammarBuilder.append("KW2516 : 'KW' '2516';\n"); - grammarBuilder.append("KW2517 : 'KW' '2517';\n"); - grammarBuilder.append("KW2518 : 'KW' '2518';\n"); - grammarBuilder.append("KW2519 : 'KW' '2519';\n"); - grammarBuilder.append("KW2520 : 'KW' '2520';\n"); - grammarBuilder.append("KW2521 : 'KW' '2521';\n"); - grammarBuilder.append("KW2522 : 'KW' '2522';\n"); - grammarBuilder.append("KW2523 : 'KW' '2523';\n"); - grammarBuilder.append("KW2524 : 'KW' '2524';\n"); - grammarBuilder.append("KW2525 : 'KW' '2525';\n"); - grammarBuilder.append("KW2526 : 'KW' '2526';\n"); - grammarBuilder.append("KW2527 : 'KW' '2527';\n"); - grammarBuilder.append("KW2528 : 'KW' '2528';\n"); - grammarBuilder.append("KW2529 : 'KW' '2529';\n"); - grammarBuilder.append("KW2530 : 'KW' '2530';\n"); - grammarBuilder.append("KW2531 : 'KW' '2531';\n"); - grammarBuilder.append("KW2532 : 'KW' '2532';\n"); - grammarBuilder.append("KW2533 : 'KW' '2533';\n"); - grammarBuilder.append("KW2534 : 'KW' '2534';\n"); - grammarBuilder.append("KW2535 : 'KW' '2535';\n"); - grammarBuilder.append("KW2536 : 'KW' '2536';\n"); - grammarBuilder.append("KW2537 : 'KW' '2537';\n"); - grammarBuilder.append("KW2538 : 'KW' '2538';\n"); - grammarBuilder.append("KW2539 : 'KW' '2539';\n"); - grammarBuilder.append("KW2540 : 'KW' '2540';\n"); - grammarBuilder.append("KW2541 : 'KW' '2541';\n"); - grammarBuilder.append("KW2542 : 'KW' '2542';\n"); - grammarBuilder.append("KW2543 : 'KW' '2543';\n"); - grammarBuilder.append("KW2544 : 'KW' '2544';\n"); - grammarBuilder.append("KW2545 : 'KW' '2545';\n"); - grammarBuilder.append("KW2546 : 'KW' '2546';\n"); - grammarBuilder.append("KW2547 : 'KW' '2547';\n"); - grammarBuilder.append("KW2548 : 'KW' '2548';\n"); - grammarBuilder.append("KW2549 : 'KW' '2549';\n"); - grammarBuilder.append("KW2550 : 'KW' '2550';\n"); - grammarBuilder.append("KW2551 : 'KW' '2551';\n"); - grammarBuilder.append("KW2552 : 'KW' '2552';\n"); - grammarBuilder.append("KW2553 : 'KW' '2553';\n"); - grammarBuilder.append("KW2554 : 'KW' '2554';\n"); - grammarBuilder.append("KW2555 : 'KW' '2555';\n"); - grammarBuilder.append("KW2556 : 'KW' '2556';\n"); - grammarBuilder.append("KW2557 : 'KW' '2557';\n"); - grammarBuilder.append("KW2558 : 'KW' '2558';\n"); - grammarBuilder.append("KW2559 : 'KW' '2559';\n"); - grammarBuilder.append("KW2560 : 'KW' '2560';\n"); - grammarBuilder.append("KW2561 : 'KW' '2561';\n"); - grammarBuilder.append("KW2562 : 'KW' '2562';\n"); - grammarBuilder.append("KW2563 : 'KW' '2563';\n"); - grammarBuilder.append("KW2564 : 'KW' '2564';\n"); - grammarBuilder.append("KW2565 : 'KW' '2565';\n"); - grammarBuilder.append("KW2566 : 'KW' '2566';\n"); - grammarBuilder.append("KW2567 : 'KW' '2567';\n"); - grammarBuilder.append("KW2568 : 'KW' '2568';\n"); - grammarBuilder.append("KW2569 : 'KW' '2569';\n"); - grammarBuilder.append("KW2570 : 'KW' '2570';\n"); - grammarBuilder.append("KW2571 : 'KW' '2571';\n"); - grammarBuilder.append("KW2572 : 'KW' '2572';\n"); - grammarBuilder.append("KW2573 : 'KW' '2573';\n"); - grammarBuilder.append("KW2574 : 'KW' '2574';\n"); - grammarBuilder.append("KW2575 : 'KW' '2575';\n"); - grammarBuilder.append("KW2576 : 'KW' '2576';\n"); - grammarBuilder.append("KW2577 : 'KW' '2577';\n"); - grammarBuilder.append("KW2578 : 'KW' '2578';\n"); - grammarBuilder.append("KW2579 : 'KW' '2579';\n"); - grammarBuilder.append("KW2580 : 'KW' '2580';\n"); - grammarBuilder.append("KW2581 : 'KW' '2581';\n"); - grammarBuilder.append("KW2582 : 'KW' '2582';\n"); - grammarBuilder.append("KW2583 : 'KW' '2583';\n"); - grammarBuilder.append("KW2584 : 'KW' '2584';\n"); - grammarBuilder.append("KW2585 : 'KW' '2585';\n"); - grammarBuilder.append("KW2586 : 'KW' '2586';\n"); - grammarBuilder.append("KW2587 : 'KW' '2587';\n"); - grammarBuilder.append("KW2588 : 'KW' '2588';\n"); - grammarBuilder.append("KW2589 : 'KW' '2589';\n"); - grammarBuilder.append("KW2590 : 'KW' '2590';\n"); - grammarBuilder.append("KW2591 : 'KW' '2591';\n"); - grammarBuilder.append("KW2592 : 'KW' '2592';\n"); - grammarBuilder.append("KW2593 : 'KW' '2593';\n"); - grammarBuilder.append("KW2594 : 'KW' '2594';\n"); - grammarBuilder.append("KW2595 : 'KW' '2595';\n"); - grammarBuilder.append("KW2596 : 'KW' '2596';\n"); - grammarBuilder.append("KW2597 : 'KW' '2597';\n"); - grammarBuilder.append("KW2598 : 'KW' '2598';\n"); - grammarBuilder.append("KW2599 : 'KW' '2599';\n"); - grammarBuilder.append("KW2600 : 'KW' '2600';\n"); - grammarBuilder.append("KW2601 : 'KW' '2601';\n"); - grammarBuilder.append("KW2602 : 'KW' '2602';\n"); - grammarBuilder.append("KW2603 : 'KW' '2603';\n"); - grammarBuilder.append("KW2604 : 'KW' '2604';\n"); - grammarBuilder.append("KW2605 : 'KW' '2605';\n"); - grammarBuilder.append("KW2606 : 'KW' '2606';\n"); - grammarBuilder.append("KW2607 : 'KW' '2607';\n"); - grammarBuilder.append("KW2608 : 'KW' '2608';\n"); - grammarBuilder.append("KW2609 : 'KW' '2609';\n"); - grammarBuilder.append("KW2610 : 'KW' '2610';\n"); - grammarBuilder.append("KW2611 : 'KW' '2611';\n"); - grammarBuilder.append("KW2612 : 'KW' '2612';\n"); - grammarBuilder.append("KW2613 : 'KW' '2613';\n"); - grammarBuilder.append("KW2614 : 'KW' '2614';\n"); - grammarBuilder.append("KW2615 : 'KW' '2615';\n"); - grammarBuilder.append("KW2616 : 'KW' '2616';\n"); - grammarBuilder.append("KW2617 : 'KW' '2617';\n"); - grammarBuilder.append("KW2618 : 'KW' '2618';\n"); - grammarBuilder.append("KW2619 : 'KW' '2619';\n"); - grammarBuilder.append("KW2620 : 'KW' '2620';\n"); - grammarBuilder.append("KW2621 : 'KW' '2621';\n"); - grammarBuilder.append("KW2622 : 'KW' '2622';\n"); - grammarBuilder.append("KW2623 : 'KW' '2623';\n"); - grammarBuilder.append("KW2624 : 'KW' '2624';\n"); - grammarBuilder.append("KW2625 : 'KW' '2625';\n"); - grammarBuilder.append("KW2626 : 'KW' '2626';\n"); - grammarBuilder.append("KW2627 : 'KW' '2627';\n"); - grammarBuilder.append("KW2628 : 'KW' '2628';\n"); - grammarBuilder.append("KW2629 : 'KW' '2629';\n"); - grammarBuilder.append("KW2630 : 'KW' '2630';\n"); - grammarBuilder.append("KW2631 : 'KW' '2631';\n"); - grammarBuilder.append("KW2632 : 'KW' '2632';\n"); - grammarBuilder.append("KW2633 : 'KW' '2633';\n"); - grammarBuilder.append("KW2634 : 'KW' '2634';\n"); - grammarBuilder.append("KW2635 : 'KW' '2635';\n"); - grammarBuilder.append("KW2636 : 'KW' '2636';\n"); - grammarBuilder.append("KW2637 : 'KW' '2637';\n"); - grammarBuilder.append("KW2638 : 'KW' '2638';\n"); - grammarBuilder.append("KW2639 : 'KW' '2639';\n"); - grammarBuilder.append("KW2640 : 'KW' '2640';\n"); - grammarBuilder.append("KW2641 : 'KW' '2641';\n"); - grammarBuilder.append("KW2642 : 'KW' '2642';\n"); - grammarBuilder.append("KW2643 : 'KW' '2643';\n"); - grammarBuilder.append("KW2644 : 'KW' '2644';\n"); - grammarBuilder.append("KW2645 : 'KW' '2645';\n"); - grammarBuilder.append("KW2646 : 'KW' '2646';\n"); - grammarBuilder.append("KW2647 : 'KW' '2647';\n"); - grammarBuilder.append("KW2648 : 'KW' '2648';\n"); - grammarBuilder.append("KW2649 : 'KW' '2649';\n"); - grammarBuilder.append("KW2650 : 'KW' '2650';\n"); - grammarBuilder.append("KW2651 : 'KW' '2651';\n"); - grammarBuilder.append("KW2652 : 'KW' '2652';\n"); - grammarBuilder.append("KW2653 : 'KW' '2653';\n"); - grammarBuilder.append("KW2654 : 'KW' '2654';\n"); - grammarBuilder.append("KW2655 : 'KW' '2655';\n"); - grammarBuilder.append("KW2656 : 'KW' '2656';\n"); - grammarBuilder.append("KW2657 : 'KW' '2657';\n"); - grammarBuilder.append("KW2658 : 'KW' '2658';\n"); - grammarBuilder.append("KW2659 : 'KW' '2659';\n"); - grammarBuilder.append("KW2660 : 'KW' '2660';\n"); - grammarBuilder.append("KW2661 : 'KW' '2661';\n"); - grammarBuilder.append("KW2662 : 'KW' '2662';\n"); - grammarBuilder.append("KW2663 : 'KW' '2663';\n"); - grammarBuilder.append("KW2664 : 'KW' '2664';\n"); - grammarBuilder.append("KW2665 : 'KW' '2665';\n"); - grammarBuilder.append("KW2666 : 'KW' '2666';\n"); - grammarBuilder.append("KW2667 : 'KW' '2667';\n"); - grammarBuilder.append("KW2668 : 'KW' '2668';\n"); - grammarBuilder.append("KW2669 : 'KW' '2669';\n"); - grammarBuilder.append("KW2670 : 'KW' '2670';\n"); - grammarBuilder.append("KW2671 : 'KW' '2671';\n"); - grammarBuilder.append("KW2672 : 'KW' '2672';\n"); - grammarBuilder.append("KW2673 : 'KW' '2673';\n"); - grammarBuilder.append("KW2674 : 'KW' '2674';\n"); - grammarBuilder.append("KW2675 : 'KW' '2675';\n"); - grammarBuilder.append("KW2676 : 'KW' '2676';\n"); - grammarBuilder.append("KW2677 : 'KW' '2677';\n"); - grammarBuilder.append("KW2678 : 'KW' '2678';\n"); - grammarBuilder.append("KW2679 : 'KW' '2679';\n"); - grammarBuilder.append("KW2680 : 'KW' '2680';\n"); - grammarBuilder.append("KW2681 : 'KW' '2681';\n"); - grammarBuilder.append("KW2682 : 'KW' '2682';\n"); - grammarBuilder.append("KW2683 : 'KW' '2683';\n"); - grammarBuilder.append("KW2684 : 'KW' '2684';\n"); - grammarBuilder.append("KW2685 : 'KW' '2685';\n"); - grammarBuilder.append("KW2686 : 'KW' '2686';\n"); - grammarBuilder.append("KW2687 : 'KW' '2687';\n"); - grammarBuilder.append("KW2688 : 'KW' '2688';\n"); - grammarBuilder.append("KW2689 : 'KW' '2689';\n"); - grammarBuilder.append("KW2690 : 'KW' '2690';\n"); - grammarBuilder.append("KW2691 : 'KW' '2691';\n"); - grammarBuilder.append("KW2692 : 'KW' '2692';\n"); - grammarBuilder.append("KW2693 : 'KW' '2693';\n"); - grammarBuilder.append("KW2694 : 'KW' '2694';\n"); - grammarBuilder.append("KW2695 : 'KW' '2695';\n"); - grammarBuilder.append("KW2696 : 'KW' '2696';\n"); - grammarBuilder.append("KW2697 : 'KW' '2697';\n"); - grammarBuilder.append("KW2698 : 'KW' '2698';\n"); - grammarBuilder.append("KW2699 : 'KW' '2699';\n"); - grammarBuilder.append("KW2700 : 'KW' '2700';\n"); - grammarBuilder.append("KW2701 : 'KW' '2701';\n"); - grammarBuilder.append("KW2702 : 'KW' '2702';\n"); - grammarBuilder.append("KW2703 : 'KW' '2703';\n"); - grammarBuilder.append("KW2704 : 'KW' '2704';\n"); - grammarBuilder.append("KW2705 : 'KW' '2705';\n"); - grammarBuilder.append("KW2706 : 'KW' '2706';\n"); - grammarBuilder.append("KW2707 : 'KW' '2707';\n"); - grammarBuilder.append("KW2708 : 'KW' '2708';\n"); - grammarBuilder.append("KW2709 : 'KW' '2709';\n"); - grammarBuilder.append("KW2710 : 'KW' '2710';\n"); - grammarBuilder.append("KW2711 : 'KW' '2711';\n"); - grammarBuilder.append("KW2712 : 'KW' '2712';\n"); - grammarBuilder.append("KW2713 : 'KW' '2713';\n"); - grammarBuilder.append("KW2714 : 'KW' '2714';\n"); - grammarBuilder.append("KW2715 : 'KW' '2715';\n"); - grammarBuilder.append("KW2716 : 'KW' '2716';\n"); - grammarBuilder.append("KW2717 : 'KW' '2717';\n"); - grammarBuilder.append("KW2718 : 'KW' '2718';\n"); - grammarBuilder.append("KW2719 : 'KW' '2719';\n"); - grammarBuilder.append("KW2720 : 'KW' '2720';\n"); - grammarBuilder.append("KW2721 : 'KW' '2721';\n"); - grammarBuilder.append("KW2722 : 'KW' '2722';\n"); - grammarBuilder.append("KW2723 : 'KW' '2723';\n"); - grammarBuilder.append("KW2724 : 'KW' '2724';\n"); - grammarBuilder.append("KW2725 : 'KW' '2725';\n"); - grammarBuilder.append("KW2726 : 'KW' '2726';\n"); - grammarBuilder.append("KW2727 : 'KW' '2727';\n"); - grammarBuilder.append("KW2728 : 'KW' '2728';\n"); - grammarBuilder.append("KW2729 : 'KW' '2729';\n"); - grammarBuilder.append("KW2730 : 'KW' '2730';\n"); - grammarBuilder.append("KW2731 : 'KW' '2731';\n"); - grammarBuilder.append("KW2732 : 'KW' '2732';\n"); - grammarBuilder.append("KW2733 : 'KW' '2733';\n"); - grammarBuilder.append("KW2734 : 'KW' '2734';\n"); - grammarBuilder.append("KW2735 : 'KW' '2735';\n"); - grammarBuilder.append("KW2736 : 'KW' '2736';\n"); - grammarBuilder.append("KW2737 : 'KW' '2737';\n"); - grammarBuilder.append("KW2738 : 'KW' '2738';\n"); - grammarBuilder.append("KW2739 : 'KW' '2739';\n"); - grammarBuilder.append("KW2740 : 'KW' '2740';\n"); - grammarBuilder.append("KW2741 : 'KW' '2741';\n"); - grammarBuilder.append("KW2742 : 'KW' '2742';\n"); - grammarBuilder.append("KW2743 : 'KW' '2743';\n"); - grammarBuilder.append("KW2744 : 'KW' '2744';\n"); - grammarBuilder.append("KW2745 : 'KW' '2745';\n"); - grammarBuilder.append("KW2746 : 'KW' '2746';\n"); - grammarBuilder.append("KW2747 : 'KW' '2747';\n"); - grammarBuilder.append("KW2748 : 'KW' '2748';\n"); - grammarBuilder.append("KW2749 : 'KW' '2749';\n"); - grammarBuilder.append("KW2750 : 'KW' '2750';\n"); - grammarBuilder.append("KW2751 : 'KW' '2751';\n"); - grammarBuilder.append("KW2752 : 'KW' '2752';\n"); - grammarBuilder.append("KW2753 : 'KW' '2753';\n"); - grammarBuilder.append("KW2754 : 'KW' '2754';\n"); - grammarBuilder.append("KW2755 : 'KW' '2755';\n"); - grammarBuilder.append("KW2756 : 'KW' '2756';\n"); - grammarBuilder.append("KW2757 : 'KW' '2757';\n"); - grammarBuilder.append("KW2758 : 'KW' '2758';\n"); - grammarBuilder.append("KW2759 : 'KW' '2759';\n"); - grammarBuilder.append("KW2760 : 'KW' '2760';\n"); - grammarBuilder.append("KW2761 : 'KW' '2761';\n"); - grammarBuilder.append("KW2762 : 'KW' '2762';\n"); - grammarBuilder.append("KW2763 : 'KW' '2763';\n"); - grammarBuilder.append("KW2764 : 'KW' '2764';\n"); - grammarBuilder.append("KW2765 : 'KW' '2765';\n"); - grammarBuilder.append("KW2766 : 'KW' '2766';\n"); - grammarBuilder.append("KW2767 : 'KW' '2767';\n"); - grammarBuilder.append("KW2768 : 'KW' '2768';\n"); - grammarBuilder.append("KW2769 : 'KW' '2769';\n"); - grammarBuilder.append("KW2770 : 'KW' '2770';\n"); - grammarBuilder.append("KW2771 : 'KW' '2771';\n"); - grammarBuilder.append("KW2772 : 'KW' '2772';\n"); - grammarBuilder.append("KW2773 : 'KW' '2773';\n"); - grammarBuilder.append("KW2774 : 'KW' '2774';\n"); - grammarBuilder.append("KW2775 : 'KW' '2775';\n"); - grammarBuilder.append("KW2776 : 'KW' '2776';\n"); - grammarBuilder.append("KW2777 : 'KW' '2777';\n"); - grammarBuilder.append("KW2778 : 'KW' '2778';\n"); - grammarBuilder.append("KW2779 : 'KW' '2779';\n"); - grammarBuilder.append("KW2780 : 'KW' '2780';\n"); - grammarBuilder.append("KW2781 : 'KW' '2781';\n"); - grammarBuilder.append("KW2782 : 'KW' '2782';\n"); - grammarBuilder.append("KW2783 : 'KW' '2783';\n"); - grammarBuilder.append("KW2784 : 'KW' '2784';\n"); - grammarBuilder.append("KW2785 : 'KW' '2785';\n"); - grammarBuilder.append("KW2786 : 'KW' '2786';\n"); - grammarBuilder.append("KW2787 : 'KW' '2787';\n"); - grammarBuilder.append("KW2788 : 'KW' '2788';\n"); - grammarBuilder.append("KW2789 : 'KW' '2789';\n"); - grammarBuilder.append("KW2790 : 'KW' '2790';\n"); - grammarBuilder.append("KW2791 : 'KW' '2791';\n"); - grammarBuilder.append("KW2792 : 'KW' '2792';\n"); - grammarBuilder.append("KW2793 : 'KW' '2793';\n"); - grammarBuilder.append("KW2794 : 'KW' '2794';\n"); - grammarBuilder.append("KW2795 : 'KW' '2795';\n"); - grammarBuilder.append("KW2796 : 'KW' '2796';\n"); - grammarBuilder.append("KW2797 : 'KW' '2797';\n"); - grammarBuilder.append("KW2798 : 'KW' '2798';\n"); - grammarBuilder.append("KW2799 : 'KW' '2799';\n"); - grammarBuilder.append("KW2800 : 'KW' '2800';\n"); - grammarBuilder.append("KW2801 : 'KW' '2801';\n"); - grammarBuilder.append("KW2802 : 'KW' '2802';\n"); - grammarBuilder.append("KW2803 : 'KW' '2803';\n"); - grammarBuilder.append("KW2804 : 'KW' '2804';\n"); - grammarBuilder.append("KW2805 : 'KW' '2805';\n"); - grammarBuilder.append("KW2806 : 'KW' '2806';\n"); - grammarBuilder.append("KW2807 : 'KW' '2807';\n"); - grammarBuilder.append("KW2808 : 'KW' '2808';\n"); - grammarBuilder.append("KW2809 : 'KW' '2809';\n"); - grammarBuilder.append("KW2810 : 'KW' '2810';\n"); - grammarBuilder.append("KW2811 : 'KW' '2811';\n"); - grammarBuilder.append("KW2812 : 'KW' '2812';\n"); - grammarBuilder.append("KW2813 : 'KW' '2813';\n"); - grammarBuilder.append("KW2814 : 'KW' '2814';\n"); - grammarBuilder.append("KW2815 : 'KW' '2815';\n"); - grammarBuilder.append("KW2816 : 'KW' '2816';\n"); - grammarBuilder.append("KW2817 : 'KW' '2817';\n"); - grammarBuilder.append("KW2818 : 'KW' '2818';\n"); - grammarBuilder.append("KW2819 : 'KW' '2819';\n"); - grammarBuilder.append("KW2820 : 'KW' '2820';\n"); - grammarBuilder.append("KW2821 : 'KW' '2821';\n"); - grammarBuilder.append("KW2822 : 'KW' '2822';\n"); - grammarBuilder.append("KW2823 : 'KW' '2823';\n"); - grammarBuilder.append("KW2824 : 'KW' '2824';\n"); - grammarBuilder.append("KW2825 : 'KW' '2825';\n"); - grammarBuilder.append("KW2826 : 'KW' '2826';\n"); - grammarBuilder.append("KW2827 : 'KW' '2827';\n"); - grammarBuilder.append("KW2828 : 'KW' '2828';\n"); - grammarBuilder.append("KW2829 : 'KW' '2829';\n"); - grammarBuilder.append("KW2830 : 'KW' '2830';\n"); - grammarBuilder.append("KW2831 : 'KW' '2831';\n"); - grammarBuilder.append("KW2832 : 'KW' '2832';\n"); - grammarBuilder.append("KW2833 : 'KW' '2833';\n"); - grammarBuilder.append("KW2834 : 'KW' '2834';\n"); - grammarBuilder.append("KW2835 : 'KW' '2835';\n"); - grammarBuilder.append("KW2836 : 'KW' '2836';\n"); - grammarBuilder.append("KW2837 : 'KW' '2837';\n"); - grammarBuilder.append("KW2838 : 'KW' '2838';\n"); - grammarBuilder.append("KW2839 : 'KW' '2839';\n"); - grammarBuilder.append("KW2840 : 'KW' '2840';\n"); - grammarBuilder.append("KW2841 : 'KW' '2841';\n"); - grammarBuilder.append("KW2842 : 'KW' '2842';\n"); - grammarBuilder.append("KW2843 : 'KW' '2843';\n"); - grammarBuilder.append("KW2844 : 'KW' '2844';\n"); - grammarBuilder.append("KW2845 : 'KW' '2845';\n"); - grammarBuilder.append("KW2846 : 'KW' '2846';\n"); - grammarBuilder.append("KW2847 : 'KW' '2847';\n"); - grammarBuilder.append("KW2848 : 'KW' '2848';\n"); - grammarBuilder.append("KW2849 : 'KW' '2849';\n"); - grammarBuilder.append("KW2850 : 'KW' '2850';\n"); - grammarBuilder.append("KW2851 : 'KW' '2851';\n"); - grammarBuilder.append("KW2852 : 'KW' '2852';\n"); - grammarBuilder.append("KW2853 : 'KW' '2853';\n"); - grammarBuilder.append("KW2854 : 'KW' '2854';\n"); - grammarBuilder.append("KW2855 : 'KW' '2855';\n"); - grammarBuilder.append("KW2856 : 'KW' '2856';\n"); - grammarBuilder.append("KW2857 : 'KW' '2857';\n"); - grammarBuilder.append("KW2858 : 'KW' '2858';\n"); - grammarBuilder.append("KW2859 : 'KW' '2859';\n"); - grammarBuilder.append("KW2860 : 'KW' '2860';\n"); - grammarBuilder.append("KW2861 : 'KW' '2861';\n"); - grammarBuilder.append("KW2862 : 'KW' '2862';\n"); - grammarBuilder.append("KW2863 : 'KW' '2863';\n"); - grammarBuilder.append("KW2864 : 'KW' '2864';\n"); - grammarBuilder.append("KW2865 : 'KW' '2865';\n"); - grammarBuilder.append("KW2866 : 'KW' '2866';\n"); - grammarBuilder.append("KW2867 : 'KW' '2867';\n"); - grammarBuilder.append("KW2868 : 'KW' '2868';\n"); - grammarBuilder.append("KW2869 : 'KW' '2869';\n"); - grammarBuilder.append("KW2870 : 'KW' '2870';\n"); - grammarBuilder.append("KW2871 : 'KW' '2871';\n"); - grammarBuilder.append("KW2872 : 'KW' '2872';\n"); - grammarBuilder.append("KW2873 : 'KW' '2873';\n"); - grammarBuilder.append("KW2874 : 'KW' '2874';\n"); - grammarBuilder.append("KW2875 : 'KW' '2875';\n"); - grammarBuilder.append("KW2876 : 'KW' '2876';\n"); - grammarBuilder.append("KW2877 : 'KW' '2877';\n"); - grammarBuilder.append("KW2878 : 'KW' '2878';\n"); - grammarBuilder.append("KW2879 : 'KW' '2879';\n"); - grammarBuilder.append("KW2880 : 'KW' '2880';\n"); - grammarBuilder.append("KW2881 : 'KW' '2881';\n"); - grammarBuilder.append("KW2882 : 'KW' '2882';\n"); - grammarBuilder.append("KW2883 : 'KW' '2883';\n"); - grammarBuilder.append("KW2884 : 'KW' '2884';\n"); - grammarBuilder.append("KW2885 : 'KW' '2885';\n"); - grammarBuilder.append("KW2886 : 'KW' '2886';\n"); - grammarBuilder.append("KW2887 : 'KW' '2887';\n"); - grammarBuilder.append("KW2888 : 'KW' '2888';\n"); - grammarBuilder.append("KW2889 : 'KW' '2889';\n"); - grammarBuilder.append("KW2890 : 'KW' '2890';\n"); - grammarBuilder.append("KW2891 : 'KW' '2891';\n"); - grammarBuilder.append("KW2892 : 'KW' '2892';\n"); - grammarBuilder.append("KW2893 : 'KW' '2893';\n"); - grammarBuilder.append("KW2894 : 'KW' '2894';\n"); - grammarBuilder.append("KW2895 : 'KW' '2895';\n"); - grammarBuilder.append("KW2896 : 'KW' '2896';\n"); - grammarBuilder.append("KW2897 : 'KW' '2897';\n"); - grammarBuilder.append("KW2898 : 'KW' '2898';\n"); - grammarBuilder.append("KW2899 : 'KW' '2899';\n"); - grammarBuilder.append("KW2900 : 'KW' '2900';\n"); - grammarBuilder.append("KW2901 : 'KW' '2901';\n"); - grammarBuilder.append("KW2902 : 'KW' '2902';\n"); - grammarBuilder.append("KW2903 : 'KW' '2903';\n"); - grammarBuilder.append("KW2904 : 'KW' '2904';\n"); - grammarBuilder.append("KW2905 : 'KW' '2905';\n"); - grammarBuilder.append("KW2906 : 'KW' '2906';\n"); - grammarBuilder.append("KW2907 : 'KW' '2907';\n"); - grammarBuilder.append("KW2908 : 'KW' '2908';\n"); - grammarBuilder.append("KW2909 : 'KW' '2909';\n"); - grammarBuilder.append("KW2910 : 'KW' '2910';\n"); - grammarBuilder.append("KW2911 : 'KW' '2911';\n"); - grammarBuilder.append("KW2912 : 'KW' '2912';\n"); - grammarBuilder.append("KW2913 : 'KW' '2913';\n"); - grammarBuilder.append("KW2914 : 'KW' '2914';\n"); - grammarBuilder.append("KW2915 : 'KW' '2915';\n"); - grammarBuilder.append("KW2916 : 'KW' '2916';\n"); - grammarBuilder.append("KW2917 : 'KW' '2917';\n"); - grammarBuilder.append("KW2918 : 'KW' '2918';\n"); - grammarBuilder.append("KW2919 : 'KW' '2919';\n"); - grammarBuilder.append("KW2920 : 'KW' '2920';\n"); - grammarBuilder.append("KW2921 : 'KW' '2921';\n"); - grammarBuilder.append("KW2922 : 'KW' '2922';\n"); - grammarBuilder.append("KW2923 : 'KW' '2923';\n"); - grammarBuilder.append("KW2924 : 'KW' '2924';\n"); - grammarBuilder.append("KW2925 : 'KW' '2925';\n"); - grammarBuilder.append("KW2926 : 'KW' '2926';\n"); - grammarBuilder.append("KW2927 : 'KW' '2927';\n"); - grammarBuilder.append("KW2928 : 'KW' '2928';\n"); - grammarBuilder.append("KW2929 : 'KW' '2929';\n"); - grammarBuilder.append("KW2930 : 'KW' '2930';\n"); - grammarBuilder.append("KW2931 : 'KW' '2931';\n"); - grammarBuilder.append("KW2932 : 'KW' '2932';\n"); - grammarBuilder.append("KW2933 : 'KW' '2933';\n"); - grammarBuilder.append("KW2934 : 'KW' '2934';\n"); - grammarBuilder.append("KW2935 : 'KW' '2935';\n"); - grammarBuilder.append("KW2936 : 'KW' '2936';\n"); - grammarBuilder.append("KW2937 : 'KW' '2937';\n"); - grammarBuilder.append("KW2938 : 'KW' '2938';\n"); - grammarBuilder.append("KW2939 : 'KW' '2939';\n"); - grammarBuilder.append("KW2940 : 'KW' '2940';\n"); - grammarBuilder.append("KW2941 : 'KW' '2941';\n"); - grammarBuilder.append("KW2942 : 'KW' '2942';\n"); - grammarBuilder.append("KW2943 : 'KW' '2943';\n"); - grammarBuilder.append("KW2944 : 'KW' '2944';\n"); - grammarBuilder.append("KW2945 : 'KW' '2945';\n"); - grammarBuilder.append("KW2946 : 'KW' '2946';\n"); - grammarBuilder.append("KW2947 : 'KW' '2947';\n"); - grammarBuilder.append("KW2948 : 'KW' '2948';\n"); - grammarBuilder.append("KW2949 : 'KW' '2949';\n"); - grammarBuilder.append("KW2950 : 'KW' '2950';\n"); - grammarBuilder.append("KW2951 : 'KW' '2951';\n"); - grammarBuilder.append("KW2952 : 'KW' '2952';\n"); - grammarBuilder.append("KW2953 : 'KW' '2953';\n"); - grammarBuilder.append("KW2954 : 'KW' '2954';\n"); - grammarBuilder.append("KW2955 : 'KW' '2955';\n"); - grammarBuilder.append("KW2956 : 'KW' '2956';\n"); - grammarBuilder.append("KW2957 : 'KW' '2957';\n"); - grammarBuilder.append("KW2958 : 'KW' '2958';\n"); - grammarBuilder.append("KW2959 : 'KW' '2959';\n"); - grammarBuilder.append("KW2960 : 'KW' '2960';\n"); - grammarBuilder.append("KW2961 : 'KW' '2961';\n"); - grammarBuilder.append("KW2962 : 'KW' '2962';\n"); - grammarBuilder.append("KW2963 : 'KW' '2963';\n"); - grammarBuilder.append("KW2964 : 'KW' '2964';\n"); - grammarBuilder.append("KW2965 : 'KW' '2965';\n"); - grammarBuilder.append("KW2966 : 'KW' '2966';\n"); - grammarBuilder.append("KW2967 : 'KW' '2967';\n"); - grammarBuilder.append("KW2968 : 'KW' '2968';\n"); - grammarBuilder.append("KW2969 : 'KW' '2969';\n"); - grammarBuilder.append("KW2970 : 'KW' '2970';\n"); - grammarBuilder.append("KW2971 : 'KW' '2971';\n"); - grammarBuilder.append("KW2972 : 'KW' '2972';\n"); - grammarBuilder.append("KW2973 : 'KW' '2973';\n"); - grammarBuilder.append("KW2974 : 'KW' '2974';\n"); - grammarBuilder.append("KW2975 : 'KW' '2975';\n"); - grammarBuilder.append("KW2976 : 'KW' '2976';\n"); - grammarBuilder.append("KW2977 : 'KW' '2977';\n"); - grammarBuilder.append("KW2978 : 'KW' '2978';\n"); - grammarBuilder.append("KW2979 : 'KW' '2979';\n"); - grammarBuilder.append("KW2980 : 'KW' '2980';\n"); - grammarBuilder.append("KW2981 : 'KW' '2981';\n"); - grammarBuilder.append("KW2982 : 'KW' '2982';\n"); - grammarBuilder.append("KW2983 : 'KW' '2983';\n"); - grammarBuilder.append("KW2984 : 'KW' '2984';\n"); - grammarBuilder.append("KW2985 : 'KW' '2985';\n"); - grammarBuilder.append("KW2986 : 'KW' '2986';\n"); - grammarBuilder.append("KW2987 : 'KW' '2987';\n"); - grammarBuilder.append("KW2988 : 'KW' '2988';\n"); - grammarBuilder.append("KW2989 : 'KW' '2989';\n"); - grammarBuilder.append("KW2990 : 'KW' '2990';\n"); - grammarBuilder.append("KW2991 : 'KW' '2991';\n"); - grammarBuilder.append("KW2992 : 'KW' '2992';\n"); - grammarBuilder.append("KW2993 : 'KW' '2993';\n"); - grammarBuilder.append("KW2994 : 'KW' '2994';\n"); - grammarBuilder.append("KW2995 : 'KW' '2995';\n"); - grammarBuilder.append("KW2996 : 'KW' '2996';\n"); - grammarBuilder.append("KW2997 : 'KW' '2997';\n"); - grammarBuilder.append("KW2998 : 'KW' '2998';\n"); - grammarBuilder.append("KW2999 : 'KW' '2999';\n"); - grammarBuilder.append("KW3000 : 'KW' '3000';\n"); - grammarBuilder.append("KW3001 : 'KW' '3001';\n"); - grammarBuilder.append("KW3002 : 'KW' '3002';\n"); - grammarBuilder.append("KW3003 : 'KW' '3003';\n"); - grammarBuilder.append("KW3004 : 'KW' '3004';\n"); - grammarBuilder.append("KW3005 : 'KW' '3005';\n"); - grammarBuilder.append("KW3006 : 'KW' '3006';\n"); - grammarBuilder.append("KW3007 : 'KW' '3007';\n"); - grammarBuilder.append("KW3008 : 'KW' '3008';\n"); - grammarBuilder.append("KW3009 : 'KW' '3009';\n"); - grammarBuilder.append("KW3010 : 'KW' '3010';\n"); - grammarBuilder.append("KW3011 : 'KW' '3011';\n"); - grammarBuilder.append("KW3012 : 'KW' '3012';\n"); - grammarBuilder.append("KW3013 : 'KW' '3013';\n"); - grammarBuilder.append("KW3014 : 'KW' '3014';\n"); - grammarBuilder.append("KW3015 : 'KW' '3015';\n"); - grammarBuilder.append("KW3016 : 'KW' '3016';\n"); - grammarBuilder.append("KW3017 : 'KW' '3017';\n"); - grammarBuilder.append("KW3018 : 'KW' '3018';\n"); - grammarBuilder.append("KW3019 : 'KW' '3019';\n"); - grammarBuilder.append("KW3020 : 'KW' '3020';\n"); - grammarBuilder.append("KW3021 : 'KW' '3021';\n"); - grammarBuilder.append("KW3022 : 'KW' '3022';\n"); - grammarBuilder.append("KW3023 : 'KW' '3023';\n"); - grammarBuilder.append("KW3024 : 'KW' '3024';\n"); - grammarBuilder.append("KW3025 : 'KW' '3025';\n"); - grammarBuilder.append("KW3026 : 'KW' '3026';\n"); - grammarBuilder.append("KW3027 : 'KW' '3027';\n"); - grammarBuilder.append("KW3028 : 'KW' '3028';\n"); - grammarBuilder.append("KW3029 : 'KW' '3029';\n"); - grammarBuilder.append("KW3030 : 'KW' '3030';\n"); - grammarBuilder.append("KW3031 : 'KW' '3031';\n"); - grammarBuilder.append("KW3032 : 'KW' '3032';\n"); - grammarBuilder.append("KW3033 : 'KW' '3033';\n"); - grammarBuilder.append("KW3034 : 'KW' '3034';\n"); - grammarBuilder.append("KW3035 : 'KW' '3035';\n"); - grammarBuilder.append("KW3036 : 'KW' '3036';\n"); - grammarBuilder.append("KW3037 : 'KW' '3037';\n"); - grammarBuilder.append("KW3038 : 'KW' '3038';\n"); - grammarBuilder.append("KW3039 : 'KW' '3039';\n"); - grammarBuilder.append("KW3040 : 'KW' '3040';\n"); - grammarBuilder.append("KW3041 : 'KW' '3041';\n"); - grammarBuilder.append("KW3042 : 'KW' '3042';\n"); - grammarBuilder.append("KW3043 : 'KW' '3043';\n"); - grammarBuilder.append("KW3044 : 'KW' '3044';\n"); - grammarBuilder.append("KW3045 : 'KW' '3045';\n"); - grammarBuilder.append("KW3046 : 'KW' '3046';\n"); - grammarBuilder.append("KW3047 : 'KW' '3047';\n"); - grammarBuilder.append("KW3048 : 'KW' '3048';\n"); - grammarBuilder.append("KW3049 : 'KW' '3049';\n"); - grammarBuilder.append("KW3050 : 'KW' '3050';\n"); - grammarBuilder.append("KW3051 : 'KW' '3051';\n"); - grammarBuilder.append("KW3052 : 'KW' '3052';\n"); - grammarBuilder.append("KW3053 : 'KW' '3053';\n"); - grammarBuilder.append("KW3054 : 'KW' '3054';\n"); - grammarBuilder.append("KW3055 : 'KW' '3055';\n"); - grammarBuilder.append("KW3056 : 'KW' '3056';\n"); - grammarBuilder.append("KW3057 : 'KW' '3057';\n"); - grammarBuilder.append("KW3058 : 'KW' '3058';\n"); - grammarBuilder.append("KW3059 : 'KW' '3059';\n"); - grammarBuilder.append("KW3060 : 'KW' '3060';\n"); - grammarBuilder.append("KW3061 : 'KW' '3061';\n"); - grammarBuilder.append("KW3062 : 'KW' '3062';\n"); - grammarBuilder.append("KW3063 : 'KW' '3063';\n"); - grammarBuilder.append("KW3064 : 'KW' '3064';\n"); - grammarBuilder.append("KW3065 : 'KW' '3065';\n"); - grammarBuilder.append("KW3066 : 'KW' '3066';\n"); - grammarBuilder.append("KW3067 : 'KW' '3067';\n"); - grammarBuilder.append("KW3068 : 'KW' '3068';\n"); - grammarBuilder.append("KW3069 : 'KW' '3069';\n"); - grammarBuilder.append("KW3070 : 'KW' '3070';\n"); - grammarBuilder.append("KW3071 : 'KW' '3071';\n"); - grammarBuilder.append("KW3072 : 'KW' '3072';\n"); - grammarBuilder.append("KW3073 : 'KW' '3073';\n"); - grammarBuilder.append("KW3074 : 'KW' '3074';\n"); - grammarBuilder.append("KW3075 : 'KW' '3075';\n"); - grammarBuilder.append("KW3076 : 'KW' '3076';\n"); - grammarBuilder.append("KW3077 : 'KW' '3077';\n"); - grammarBuilder.append("KW3078 : 'KW' '3078';\n"); - grammarBuilder.append("KW3079 : 'KW' '3079';\n"); - grammarBuilder.append("KW3080 : 'KW' '3080';\n"); - grammarBuilder.append("KW3081 : 'KW' '3081';\n"); - grammarBuilder.append("KW3082 : 'KW' '3082';\n"); - grammarBuilder.append("KW3083 : 'KW' '3083';\n"); - grammarBuilder.append("KW3084 : 'KW' '3084';\n"); - grammarBuilder.append("KW3085 : 'KW' '3085';\n"); - grammarBuilder.append("KW3086 : 'KW' '3086';\n"); - grammarBuilder.append("KW3087 : 'KW' '3087';\n"); - grammarBuilder.append("KW3088 : 'KW' '3088';\n"); - grammarBuilder.append("KW3089 : 'KW' '3089';\n"); - grammarBuilder.append("KW3090 : 'KW' '3090';\n"); - grammarBuilder.append("KW3091 : 'KW' '3091';\n"); - grammarBuilder.append("KW3092 : 'KW' '3092';\n"); - grammarBuilder.append("KW3093 : 'KW' '3093';\n"); - grammarBuilder.append("KW3094 : 'KW' '3094';\n"); - grammarBuilder.append("KW3095 : 'KW' '3095';\n"); - grammarBuilder.append("KW3096 : 'KW' '3096';\n"); - grammarBuilder.append("KW3097 : 'KW' '3097';\n"); - grammarBuilder.append("KW3098 : 'KW' '3098';\n"); - grammarBuilder.append("KW3099 : 'KW' '3099';\n"); - grammarBuilder.append("KW3100 : 'KW' '3100';\n"); - grammarBuilder.append("KW3101 : 'KW' '3101';\n"); - grammarBuilder.append("KW3102 : 'KW' '3102';\n"); - grammarBuilder.append("KW3103 : 'KW' '3103';\n"); - grammarBuilder.append("KW3104 : 'KW' '3104';\n"); - grammarBuilder.append("KW3105 : 'KW' '3105';\n"); - grammarBuilder.append("KW3106 : 'KW' '3106';\n"); - grammarBuilder.append("KW3107 : 'KW' '3107';\n"); - grammarBuilder.append("KW3108 : 'KW' '3108';\n"); - grammarBuilder.append("KW3109 : 'KW' '3109';\n"); - grammarBuilder.append("KW3110 : 'KW' '3110';\n"); - grammarBuilder.append("KW3111 : 'KW' '3111';\n"); - grammarBuilder.append("KW3112 : 'KW' '3112';\n"); - grammarBuilder.append("KW3113 : 'KW' '3113';\n"); - grammarBuilder.append("KW3114 : 'KW' '3114';\n"); - grammarBuilder.append("KW3115 : 'KW' '3115';\n"); - grammarBuilder.append("KW3116 : 'KW' '3116';\n"); - grammarBuilder.append("KW3117 : 'KW' '3117';\n"); - grammarBuilder.append("KW3118 : 'KW' '3118';\n"); - grammarBuilder.append("KW3119 : 'KW' '3119';\n"); - grammarBuilder.append("KW3120 : 'KW' '3120';\n"); - grammarBuilder.append("KW3121 : 'KW' '3121';\n"); - grammarBuilder.append("KW3122 : 'KW' '3122';\n"); - grammarBuilder.append("KW3123 : 'KW' '3123';\n"); - grammarBuilder.append("KW3124 : 'KW' '3124';\n"); - grammarBuilder.append("KW3125 : 'KW' '3125';\n"); - grammarBuilder.append("KW3126 : 'KW' '3126';\n"); - grammarBuilder.append("KW3127 : 'KW' '3127';\n"); - grammarBuilder.append("KW3128 : 'KW' '3128';\n"); - grammarBuilder.append("KW3129 : 'KW' '3129';\n"); - grammarBuilder.append("KW3130 : 'KW' '3130';\n"); - grammarBuilder.append("KW3131 : 'KW' '3131';\n"); - grammarBuilder.append("KW3132 : 'KW' '3132';\n"); - grammarBuilder.append("KW3133 : 'KW' '3133';\n"); - grammarBuilder.append("KW3134 : 'KW' '3134';\n"); - grammarBuilder.append("KW3135 : 'KW' '3135';\n"); - grammarBuilder.append("KW3136 : 'KW' '3136';\n"); - grammarBuilder.append("KW3137 : 'KW' '3137';\n"); - grammarBuilder.append("KW3138 : 'KW' '3138';\n"); - grammarBuilder.append("KW3139 : 'KW' '3139';\n"); - grammarBuilder.append("KW3140 : 'KW' '3140';\n"); - grammarBuilder.append("KW3141 : 'KW' '3141';\n"); - grammarBuilder.append("KW3142 : 'KW' '3142';\n"); - grammarBuilder.append("KW3143 : 'KW' '3143';\n"); - grammarBuilder.append("KW3144 : 'KW' '3144';\n"); - grammarBuilder.append("KW3145 : 'KW' '3145';\n"); - grammarBuilder.append("KW3146 : 'KW' '3146';\n"); - grammarBuilder.append("KW3147 : 'KW' '3147';\n"); - grammarBuilder.append("KW3148 : 'KW' '3148';\n"); - grammarBuilder.append("KW3149 : 'KW' '3149';\n"); - grammarBuilder.append("KW3150 : 'KW' '3150';\n"); - grammarBuilder.append("KW3151 : 'KW' '3151';\n"); - grammarBuilder.append("KW3152 : 'KW' '3152';\n"); - grammarBuilder.append("KW3153 : 'KW' '3153';\n"); - grammarBuilder.append("KW3154 : 'KW' '3154';\n"); - grammarBuilder.append("KW3155 : 'KW' '3155';\n"); - grammarBuilder.append("KW3156 : 'KW' '3156';\n"); - grammarBuilder.append("KW3157 : 'KW' '3157';\n"); - grammarBuilder.append("KW3158 : 'KW' '3158';\n"); - grammarBuilder.append("KW3159 : 'KW' '3159';\n"); - grammarBuilder.append("KW3160 : 'KW' '3160';\n"); - grammarBuilder.append("KW3161 : 'KW' '3161';\n"); - grammarBuilder.append("KW3162 : 'KW' '3162';\n"); - grammarBuilder.append("KW3163 : 'KW' '3163';\n"); - grammarBuilder.append("KW3164 : 'KW' '3164';\n"); - grammarBuilder.append("KW3165 : 'KW' '3165';\n"); - grammarBuilder.append("KW3166 : 'KW' '3166';\n"); - grammarBuilder.append("KW3167 : 'KW' '3167';\n"); - grammarBuilder.append("KW3168 : 'KW' '3168';\n"); - grammarBuilder.append("KW3169 : 'KW' '3169';\n"); - grammarBuilder.append("KW3170 : 'KW' '3170';\n"); - grammarBuilder.append("KW3171 : 'KW' '3171';\n"); - grammarBuilder.append("KW3172 : 'KW' '3172';\n"); - grammarBuilder.append("KW3173 : 'KW' '3173';\n"); - grammarBuilder.append("KW3174 : 'KW' '3174';\n"); - grammarBuilder.append("KW3175 : 'KW' '3175';\n"); - grammarBuilder.append("KW3176 : 'KW' '3176';\n"); - grammarBuilder.append("KW3177 : 'KW' '3177';\n"); - grammarBuilder.append("KW3178 : 'KW' '3178';\n"); - grammarBuilder.append("KW3179 : 'KW' '3179';\n"); - grammarBuilder.append("KW3180 : 'KW' '3180';\n"); - grammarBuilder.append("KW3181 : 'KW' '3181';\n"); - grammarBuilder.append("KW3182 : 'KW' '3182';\n"); - grammarBuilder.append("KW3183 : 'KW' '3183';\n"); - grammarBuilder.append("KW3184 : 'KW' '3184';\n"); - grammarBuilder.append("KW3185 : 'KW' '3185';\n"); - grammarBuilder.append("KW3186 : 'KW' '3186';\n"); - grammarBuilder.append("KW3187 : 'KW' '3187';\n"); - grammarBuilder.append("KW3188 : 'KW' '3188';\n"); - grammarBuilder.append("KW3189 : 'KW' '3189';\n"); - grammarBuilder.append("KW3190 : 'KW' '3190';\n"); - grammarBuilder.append("KW3191 : 'KW' '3191';\n"); - grammarBuilder.append("KW3192 : 'KW' '3192';\n"); - grammarBuilder.append("KW3193 : 'KW' '3193';\n"); - grammarBuilder.append("KW3194 : 'KW' '3194';\n"); - grammarBuilder.append("KW3195 : 'KW' '3195';\n"); - grammarBuilder.append("KW3196 : 'KW' '3196';\n"); - grammarBuilder.append("KW3197 : 'KW' '3197';\n"); - grammarBuilder.append("KW3198 : 'KW' '3198';\n"); - grammarBuilder.append("KW3199 : 'KW' '3199';\n"); - grammarBuilder.append("KW3200 : 'KW' '3200';\n"); - grammarBuilder.append("KW3201 : 'KW' '3201';\n"); - grammarBuilder.append("KW3202 : 'KW' '3202';\n"); - grammarBuilder.append("KW3203 : 'KW' '3203';\n"); - grammarBuilder.append("KW3204 : 'KW' '3204';\n"); - grammarBuilder.append("KW3205 : 'KW' '3205';\n"); - grammarBuilder.append("KW3206 : 'KW' '3206';\n"); - grammarBuilder.append("KW3207 : 'KW' '3207';\n"); - grammarBuilder.append("KW3208 : 'KW' '3208';\n"); - grammarBuilder.append("KW3209 : 'KW' '3209';\n"); - grammarBuilder.append("KW3210 : 'KW' '3210';\n"); - grammarBuilder.append("KW3211 : 'KW' '3211';\n"); - grammarBuilder.append("KW3212 : 'KW' '3212';\n"); - grammarBuilder.append("KW3213 : 'KW' '3213';\n"); - grammarBuilder.append("KW3214 : 'KW' '3214';\n"); - grammarBuilder.append("KW3215 : 'KW' '3215';\n"); - grammarBuilder.append("KW3216 : 'KW' '3216';\n"); - grammarBuilder.append("KW3217 : 'KW' '3217';\n"); - grammarBuilder.append("KW3218 : 'KW' '3218';\n"); - grammarBuilder.append("KW3219 : 'KW' '3219';\n"); - grammarBuilder.append("KW3220 : 'KW' '3220';\n"); - grammarBuilder.append("KW3221 : 'KW' '3221';\n"); - grammarBuilder.append("KW3222 : 'KW' '3222';\n"); - grammarBuilder.append("KW3223 : 'KW' '3223';\n"); - grammarBuilder.append("KW3224 : 'KW' '3224';\n"); - grammarBuilder.append("KW3225 : 'KW' '3225';\n"); - grammarBuilder.append("KW3226 : 'KW' '3226';\n"); - grammarBuilder.append("KW3227 : 'KW' '3227';\n"); - grammarBuilder.append("KW3228 : 'KW' '3228';\n"); - grammarBuilder.append("KW3229 : 'KW' '3229';\n"); - grammarBuilder.append("KW3230 : 'KW' '3230';\n"); - grammarBuilder.append("KW3231 : 'KW' '3231';\n"); - grammarBuilder.append("KW3232 : 'KW' '3232';\n"); - grammarBuilder.append("KW3233 : 'KW' '3233';\n"); - grammarBuilder.append("KW3234 : 'KW' '3234';\n"); - grammarBuilder.append("KW3235 : 'KW' '3235';\n"); - grammarBuilder.append("KW3236 : 'KW' '3236';\n"); - grammarBuilder.append("KW3237 : 'KW' '3237';\n"); - grammarBuilder.append("KW3238 : 'KW' '3238';\n"); - grammarBuilder.append("KW3239 : 'KW' '3239';\n"); - grammarBuilder.append("KW3240 : 'KW' '3240';\n"); - grammarBuilder.append("KW3241 : 'KW' '3241';\n"); - grammarBuilder.append("KW3242 : 'KW' '3242';\n"); - grammarBuilder.append("KW3243 : 'KW' '3243';\n"); - grammarBuilder.append("KW3244 : 'KW' '3244';\n"); - grammarBuilder.append("KW3245 : 'KW' '3245';\n"); - grammarBuilder.append("KW3246 : 'KW' '3246';\n"); - grammarBuilder.append("KW3247 : 'KW' '3247';\n"); - grammarBuilder.append("KW3248 : 'KW' '3248';\n"); - grammarBuilder.append("KW3249 : 'KW' '3249';\n"); - grammarBuilder.append("KW3250 : 'KW' '3250';\n"); - grammarBuilder.append("KW3251 : 'KW' '3251';\n"); - grammarBuilder.append("KW3252 : 'KW' '3252';\n"); - grammarBuilder.append("KW3253 : 'KW' '3253';\n"); - grammarBuilder.append("KW3254 : 'KW' '3254';\n"); - grammarBuilder.append("KW3255 : 'KW' '3255';\n"); - grammarBuilder.append("KW3256 : 'KW' '3256';\n"); - grammarBuilder.append("KW3257 : 'KW' '3257';\n"); - grammarBuilder.append("KW3258 : 'KW' '3258';\n"); - grammarBuilder.append("KW3259 : 'KW' '3259';\n"); - grammarBuilder.append("KW3260 : 'KW' '3260';\n"); - grammarBuilder.append("KW3261 : 'KW' '3261';\n"); - grammarBuilder.append("KW3262 : 'KW' '3262';\n"); - grammarBuilder.append("KW3263 : 'KW' '3263';\n"); - grammarBuilder.append("KW3264 : 'KW' '3264';\n"); - grammarBuilder.append("KW3265 : 'KW' '3265';\n"); - grammarBuilder.append("KW3266 : 'KW' '3266';\n"); - grammarBuilder.append("KW3267 : 'KW' '3267';\n"); - grammarBuilder.append("KW3268 : 'KW' '3268';\n"); - grammarBuilder.append("KW3269 : 'KW' '3269';\n"); - grammarBuilder.append("KW3270 : 'KW' '3270';\n"); - grammarBuilder.append("KW3271 : 'KW' '3271';\n"); - grammarBuilder.append("KW3272 : 'KW' '3272';\n"); - grammarBuilder.append("KW3273 : 'KW' '3273';\n"); - grammarBuilder.append("KW3274 : 'KW' '3274';\n"); - grammarBuilder.append("KW3275 : 'KW' '3275';\n"); - grammarBuilder.append("KW3276 : 'KW' '3276';\n"); - grammarBuilder.append("KW3277 : 'KW' '3277';\n"); - grammarBuilder.append("KW3278 : 'KW' '3278';\n"); - grammarBuilder.append("KW3279 : 'KW' '3279';\n"); - grammarBuilder.append("KW3280 : 'KW' '3280';\n"); - grammarBuilder.append("KW3281 : 'KW' '3281';\n"); - grammarBuilder.append("KW3282 : 'KW' '3282';\n"); - grammarBuilder.append("KW3283 : 'KW' '3283';\n"); - grammarBuilder.append("KW3284 : 'KW' '3284';\n"); - grammarBuilder.append("KW3285 : 'KW' '3285';\n"); - grammarBuilder.append("KW3286 : 'KW' '3286';\n"); - grammarBuilder.append("KW3287 : 'KW' '3287';\n"); - grammarBuilder.append("KW3288 : 'KW' '3288';\n"); - grammarBuilder.append("KW3289 : 'KW' '3289';\n"); - grammarBuilder.append("KW3290 : 'KW' '3290';\n"); - grammarBuilder.append("KW3291 : 'KW' '3291';\n"); - grammarBuilder.append("KW3292 : 'KW' '3292';\n"); - grammarBuilder.append("KW3293 : 'KW' '3293';\n"); - grammarBuilder.append("KW3294 : 'KW' '3294';\n"); - grammarBuilder.append("KW3295 : 'KW' '3295';\n"); - grammarBuilder.append("KW3296 : 'KW' '3296';\n"); - grammarBuilder.append("KW3297 : 'KW' '3297';\n"); - grammarBuilder.append("KW3298 : 'KW' '3298';\n"); - grammarBuilder.append("KW3299 : 'KW' '3299';\n"); - grammarBuilder.append("KW3300 : 'KW' '3300';\n"); - grammarBuilder.append("KW3301 : 'KW' '3301';\n"); - grammarBuilder.append("KW3302 : 'KW' '3302';\n"); - grammarBuilder.append("KW3303 : 'KW' '3303';\n"); - grammarBuilder.append("KW3304 : 'KW' '3304';\n"); - grammarBuilder.append("KW3305 : 'KW' '3305';\n"); - grammarBuilder.append("KW3306 : 'KW' '3306';\n"); - grammarBuilder.append("KW3307 : 'KW' '3307';\n"); - grammarBuilder.append("KW3308 : 'KW' '3308';\n"); - grammarBuilder.append("KW3309 : 'KW' '3309';\n"); - grammarBuilder.append("KW3310 : 'KW' '3310';\n"); - grammarBuilder.append("KW3311 : 'KW' '3311';\n"); - grammarBuilder.append("KW3312 : 'KW' '3312';\n"); - grammarBuilder.append("KW3313 : 'KW' '3313';\n"); - grammarBuilder.append("KW3314 : 'KW' '3314';\n"); - grammarBuilder.append("KW3315 : 'KW' '3315';\n"); - grammarBuilder.append("KW3316 : 'KW' '3316';\n"); - grammarBuilder.append("KW3317 : 'KW' '3317';\n"); - grammarBuilder.append("KW3318 : 'KW' '3318';\n"); - grammarBuilder.append("KW3319 : 'KW' '3319';\n"); - grammarBuilder.append("KW3320 : 'KW' '3320';\n"); - grammarBuilder.append("KW3321 : 'KW' '3321';\n"); - grammarBuilder.append("KW3322 : 'KW' '3322';\n"); - grammarBuilder.append("KW3323 : 'KW' '3323';\n"); - grammarBuilder.append("KW3324 : 'KW' '3324';\n"); - grammarBuilder.append("KW3325 : 'KW' '3325';\n"); - grammarBuilder.append("KW3326 : 'KW' '3326';\n"); - grammarBuilder.append("KW3327 : 'KW' '3327';\n"); - grammarBuilder.append("KW3328 : 'KW' '3328';\n"); - grammarBuilder.append("KW3329 : 'KW' '3329';\n"); - grammarBuilder.append("KW3330 : 'KW' '3330';\n"); - grammarBuilder.append("KW3331 : 'KW' '3331';\n"); - grammarBuilder.append("KW3332 : 'KW' '3332';\n"); - grammarBuilder.append("KW3333 : 'KW' '3333';\n"); - grammarBuilder.append("KW3334 : 'KW' '3334';\n"); - grammarBuilder.append("KW3335 : 'KW' '3335';\n"); - grammarBuilder.append("KW3336 : 'KW' '3336';\n"); - grammarBuilder.append("KW3337 : 'KW' '3337';\n"); - grammarBuilder.append("KW3338 : 'KW' '3338';\n"); - grammarBuilder.append("KW3339 : 'KW' '3339';\n"); - grammarBuilder.append("KW3340 : 'KW' '3340';\n"); - grammarBuilder.append("KW3341 : 'KW' '3341';\n"); - grammarBuilder.append("KW3342 : 'KW' '3342';\n"); - grammarBuilder.append("KW3343 : 'KW' '3343';\n"); - grammarBuilder.append("KW3344 : 'KW' '3344';\n"); - grammarBuilder.append("KW3345 : 'KW' '3345';\n"); - grammarBuilder.append("KW3346 : 'KW' '3346';\n"); - grammarBuilder.append("KW3347 : 'KW' '3347';\n"); - grammarBuilder.append("KW3348 : 'KW' '3348';\n"); - grammarBuilder.append("KW3349 : 'KW' '3349';\n"); - grammarBuilder.append("KW3350 : 'KW' '3350';\n"); - grammarBuilder.append("KW3351 : 'KW' '3351';\n"); - grammarBuilder.append("KW3352 : 'KW' '3352';\n"); - grammarBuilder.append("KW3353 : 'KW' '3353';\n"); - grammarBuilder.append("KW3354 : 'KW' '3354';\n"); - grammarBuilder.append("KW3355 : 'KW' '3355';\n"); - grammarBuilder.append("KW3356 : 'KW' '3356';\n"); - grammarBuilder.append("KW3357 : 'KW' '3357';\n"); - grammarBuilder.append("KW3358 : 'KW' '3358';\n"); - grammarBuilder.append("KW3359 : 'KW' '3359';\n"); - grammarBuilder.append("KW3360 : 'KW' '3360';\n"); - grammarBuilder.append("KW3361 : 'KW' '3361';\n"); - grammarBuilder.append("KW3362 : 'KW' '3362';\n"); - grammarBuilder.append("KW3363 : 'KW' '3363';\n"); - grammarBuilder.append("KW3364 : 'KW' '3364';\n"); - grammarBuilder.append("KW3365 : 'KW' '3365';\n"); - grammarBuilder.append("KW3366 : 'KW' '3366';\n"); - grammarBuilder.append("KW3367 : 'KW' '3367';\n"); - grammarBuilder.append("KW3368 : 'KW' '3368';\n"); - grammarBuilder.append("KW3369 : 'KW' '3369';\n"); - grammarBuilder.append("KW3370 : 'KW' '3370';\n"); - grammarBuilder.append("KW3371 : 'KW' '3371';\n"); - grammarBuilder.append("KW3372 : 'KW' '3372';\n"); - grammarBuilder.append("KW3373 : 'KW' '3373';\n"); - grammarBuilder.append("KW3374 : 'KW' '3374';\n"); - grammarBuilder.append("KW3375 : 'KW' '3375';\n"); - grammarBuilder.append("KW3376 : 'KW' '3376';\n"); - grammarBuilder.append("KW3377 : 'KW' '3377';\n"); - grammarBuilder.append("KW3378 : 'KW' '3378';\n"); - grammarBuilder.append("KW3379 : 'KW' '3379';\n"); - grammarBuilder.append("KW3380 : 'KW' '3380';\n"); - grammarBuilder.append("KW3381 : 'KW' '3381';\n"); - grammarBuilder.append("KW3382 : 'KW' '3382';\n"); - grammarBuilder.append("KW3383 : 'KW' '3383';\n"); - grammarBuilder.append("KW3384 : 'KW' '3384';\n"); - grammarBuilder.append("KW3385 : 'KW' '3385';\n"); - grammarBuilder.append("KW3386 : 'KW' '3386';\n"); - grammarBuilder.append("KW3387 : 'KW' '3387';\n"); - grammarBuilder.append("KW3388 : 'KW' '3388';\n"); - grammarBuilder.append("KW3389 : 'KW' '3389';\n"); - grammarBuilder.append("KW3390 : 'KW' '3390';\n"); - grammarBuilder.append("KW3391 : 'KW' '3391';\n"); - grammarBuilder.append("KW3392 : 'KW' '3392';\n"); - grammarBuilder.append("KW3393 : 'KW' '3393';\n"); - grammarBuilder.append("KW3394 : 'KW' '3394';\n"); - grammarBuilder.append("KW3395 : 'KW' '3395';\n"); - grammarBuilder.append("KW3396 : 'KW' '3396';\n"); - grammarBuilder.append("KW3397 : 'KW' '3397';\n"); - grammarBuilder.append("KW3398 : 'KW' '3398';\n"); - grammarBuilder.append("KW3399 : 'KW' '3399';\n"); - grammarBuilder.append("KW3400 : 'KW' '3400';\n"); - grammarBuilder.append("KW3401 : 'KW' '3401';\n"); - grammarBuilder.append("KW3402 : 'KW' '3402';\n"); - grammarBuilder.append("KW3403 : 'KW' '3403';\n"); - grammarBuilder.append("KW3404 : 'KW' '3404';\n"); - grammarBuilder.append("KW3405 : 'KW' '3405';\n"); - grammarBuilder.append("KW3406 : 'KW' '3406';\n"); - grammarBuilder.append("KW3407 : 'KW' '3407';\n"); - grammarBuilder.append("KW3408 : 'KW' '3408';\n"); - grammarBuilder.append("KW3409 : 'KW' '3409';\n"); - grammarBuilder.append("KW3410 : 'KW' '3410';\n"); - grammarBuilder.append("KW3411 : 'KW' '3411';\n"); - grammarBuilder.append("KW3412 : 'KW' '3412';\n"); - grammarBuilder.append("KW3413 : 'KW' '3413';\n"); - grammarBuilder.append("KW3414 : 'KW' '3414';\n"); - grammarBuilder.append("KW3415 : 'KW' '3415';\n"); - grammarBuilder.append("KW3416 : 'KW' '3416';\n"); - grammarBuilder.append("KW3417 : 'KW' '3417';\n"); - grammarBuilder.append("KW3418 : 'KW' '3418';\n"); - grammarBuilder.append("KW3419 : 'KW' '3419';\n"); - grammarBuilder.append("KW3420 : 'KW' '3420';\n"); - grammarBuilder.append("KW3421 : 'KW' '3421';\n"); - grammarBuilder.append("KW3422 : 'KW' '3422';\n"); - grammarBuilder.append("KW3423 : 'KW' '3423';\n"); - grammarBuilder.append("KW3424 : 'KW' '3424';\n"); - grammarBuilder.append("KW3425 : 'KW' '3425';\n"); - grammarBuilder.append("KW3426 : 'KW' '3426';\n"); - grammarBuilder.append("KW3427 : 'KW' '3427';\n"); - grammarBuilder.append("KW3428 : 'KW' '3428';\n"); - grammarBuilder.append("KW3429 : 'KW' '3429';\n"); - grammarBuilder.append("KW3430 : 'KW' '3430';\n"); - grammarBuilder.append("KW3431 : 'KW' '3431';\n"); - grammarBuilder.append("KW3432 : 'KW' '3432';\n"); - grammarBuilder.append("KW3433 : 'KW' '3433';\n"); - grammarBuilder.append("KW3434 : 'KW' '3434';\n"); - grammarBuilder.append("KW3435 : 'KW' '3435';\n"); - grammarBuilder.append("KW3436 : 'KW' '3436';\n"); - grammarBuilder.append("KW3437 : 'KW' '3437';\n"); - grammarBuilder.append("KW3438 : 'KW' '3438';\n"); - grammarBuilder.append("KW3439 : 'KW' '3439';\n"); - grammarBuilder.append("KW3440 : 'KW' '3440';\n"); - grammarBuilder.append("KW3441 : 'KW' '3441';\n"); - grammarBuilder.append("KW3442 : 'KW' '3442';\n"); - grammarBuilder.append("KW3443 : 'KW' '3443';\n"); - grammarBuilder.append("KW3444 : 'KW' '3444';\n"); - grammarBuilder.append("KW3445 : 'KW' '3445';\n"); - grammarBuilder.append("KW3446 : 'KW' '3446';\n"); - grammarBuilder.append("KW3447 : 'KW' '3447';\n"); - grammarBuilder.append("KW3448 : 'KW' '3448';\n"); - grammarBuilder.append("KW3449 : 'KW' '3449';\n"); - grammarBuilder.append("KW3450 : 'KW' '3450';\n"); - grammarBuilder.append("KW3451 : 'KW' '3451';\n"); - grammarBuilder.append("KW3452 : 'KW' '3452';\n"); - grammarBuilder.append("KW3453 : 'KW' '3453';\n"); - grammarBuilder.append("KW3454 : 'KW' '3454';\n"); - grammarBuilder.append("KW3455 : 'KW' '3455';\n"); - grammarBuilder.append("KW3456 : 'KW' '3456';\n"); - grammarBuilder.append("KW3457 : 'KW' '3457';\n"); - grammarBuilder.append("KW3458 : 'KW' '3458';\n"); - grammarBuilder.append("KW3459 : 'KW' '3459';\n"); - grammarBuilder.append("KW3460 : 'KW' '3460';\n"); - grammarBuilder.append("KW3461 : 'KW' '3461';\n"); - grammarBuilder.append("KW3462 : 'KW' '3462';\n"); - grammarBuilder.append("KW3463 : 'KW' '3463';\n"); - grammarBuilder.append("KW3464 : 'KW' '3464';\n"); - grammarBuilder.append("KW3465 : 'KW' '3465';\n"); - grammarBuilder.append("KW3466 : 'KW' '3466';\n"); - grammarBuilder.append("KW3467 : 'KW' '3467';\n"); - grammarBuilder.append("KW3468 : 'KW' '3468';\n"); - grammarBuilder.append("KW3469 : 'KW' '3469';\n"); - grammarBuilder.append("KW3470 : 'KW' '3470';\n"); - grammarBuilder.append("KW3471 : 'KW' '3471';\n"); - grammarBuilder.append("KW3472 : 'KW' '3472';\n"); - grammarBuilder.append("KW3473 : 'KW' '3473';\n"); - grammarBuilder.append("KW3474 : 'KW' '3474';\n"); - grammarBuilder.append("KW3475 : 'KW' '3475';\n"); - grammarBuilder.append("KW3476 : 'KW' '3476';\n"); - grammarBuilder.append("KW3477 : 'KW' '3477';\n"); - grammarBuilder.append("KW3478 : 'KW' '3478';\n"); - grammarBuilder.append("KW3479 : 'KW' '3479';\n"); - grammarBuilder.append("KW3480 : 'KW' '3480';\n"); - grammarBuilder.append("KW3481 : 'KW' '3481';\n"); - grammarBuilder.append("KW3482 : 'KW' '3482';\n"); - grammarBuilder.append("KW3483 : 'KW' '3483';\n"); - grammarBuilder.append("KW3484 : 'KW' '3484';\n"); - grammarBuilder.append("KW3485 : 'KW' '3485';\n"); - grammarBuilder.append("KW3486 : 'KW' '3486';\n"); - grammarBuilder.append("KW3487 : 'KW' '3487';\n"); - grammarBuilder.append("KW3488 : 'KW' '3488';\n"); - grammarBuilder.append("KW3489 : 'KW' '3489';\n"); - grammarBuilder.append("KW3490 : 'KW' '3490';\n"); - grammarBuilder.append("KW3491 : 'KW' '3491';\n"); - grammarBuilder.append("KW3492 : 'KW' '3492';\n"); - grammarBuilder.append("KW3493 : 'KW' '3493';\n"); - grammarBuilder.append("KW3494 : 'KW' '3494';\n"); - grammarBuilder.append("KW3495 : 'KW' '3495';\n"); - grammarBuilder.append("KW3496 : 'KW' '3496';\n"); - grammarBuilder.append("KW3497 : 'KW' '3497';\n"); - grammarBuilder.append("KW3498 : 'KW' '3498';\n"); - grammarBuilder.append("KW3499 : 'KW' '3499';\n"); - grammarBuilder.append("KW3500 : 'KW' '3500';\n"); - grammarBuilder.append("KW3501 : 'KW' '3501';\n"); - grammarBuilder.append("KW3502 : 'KW' '3502';\n"); - grammarBuilder.append("KW3503 : 'KW' '3503';\n"); - grammarBuilder.append("KW3504 : 'KW' '3504';\n"); - grammarBuilder.append("KW3505 : 'KW' '3505';\n"); - grammarBuilder.append("KW3506 : 'KW' '3506';\n"); - grammarBuilder.append("KW3507 : 'KW' '3507';\n"); - grammarBuilder.append("KW3508 : 'KW' '3508';\n"); - grammarBuilder.append("KW3509 : 'KW' '3509';\n"); - grammarBuilder.append("KW3510 : 'KW' '3510';\n"); - grammarBuilder.append("KW3511 : 'KW' '3511';\n"); - grammarBuilder.append("KW3512 : 'KW' '3512';\n"); - grammarBuilder.append("KW3513 : 'KW' '3513';\n"); - grammarBuilder.append("KW3514 : 'KW' '3514';\n"); - grammarBuilder.append("KW3515 : 'KW' '3515';\n"); - grammarBuilder.append("KW3516 : 'KW' '3516';\n"); - grammarBuilder.append("KW3517 : 'KW' '3517';\n"); - grammarBuilder.append("KW3518 : 'KW' '3518';\n"); - grammarBuilder.append("KW3519 : 'KW' '3519';\n"); - grammarBuilder.append("KW3520 : 'KW' '3520';\n"); - grammarBuilder.append("KW3521 : 'KW' '3521';\n"); - grammarBuilder.append("KW3522 : 'KW' '3522';\n"); - grammarBuilder.append("KW3523 : 'KW' '3523';\n"); - grammarBuilder.append("KW3524 : 'KW' '3524';\n"); - grammarBuilder.append("KW3525 : 'KW' '3525';\n"); - grammarBuilder.append("KW3526 : 'KW' '3526';\n"); - grammarBuilder.append("KW3527 : 'KW' '3527';\n"); - grammarBuilder.append("KW3528 : 'KW' '3528';\n"); - grammarBuilder.append("KW3529 : 'KW' '3529';\n"); - grammarBuilder.append("KW3530 : 'KW' '3530';\n"); - grammarBuilder.append("KW3531 : 'KW' '3531';\n"); - grammarBuilder.append("KW3532 : 'KW' '3532';\n"); - grammarBuilder.append("KW3533 : 'KW' '3533';\n"); - grammarBuilder.append("KW3534 : 'KW' '3534';\n"); - grammarBuilder.append("KW3535 : 'KW' '3535';\n"); - grammarBuilder.append("KW3536 : 'KW' '3536';\n"); - grammarBuilder.append("KW3537 : 'KW' '3537';\n"); - grammarBuilder.append("KW3538 : 'KW' '3538';\n"); - grammarBuilder.append("KW3539 : 'KW' '3539';\n"); - grammarBuilder.append("KW3540 : 'KW' '3540';\n"); - grammarBuilder.append("KW3541 : 'KW' '3541';\n"); - grammarBuilder.append("KW3542 : 'KW' '3542';\n"); - grammarBuilder.append("KW3543 : 'KW' '3543';\n"); - grammarBuilder.append("KW3544 : 'KW' '3544';\n"); - grammarBuilder.append("KW3545 : 'KW' '3545';\n"); - grammarBuilder.append("KW3546 : 'KW' '3546';\n"); - grammarBuilder.append("KW3547 : 'KW' '3547';\n"); - grammarBuilder.append("KW3548 : 'KW' '3548';\n"); - grammarBuilder.append("KW3549 : 'KW' '3549';\n"); - grammarBuilder.append("KW3550 : 'KW' '3550';\n"); - grammarBuilder.append("KW3551 : 'KW' '3551';\n"); - grammarBuilder.append("KW3552 : 'KW' '3552';\n"); - grammarBuilder.append("KW3553 : 'KW' '3553';\n"); - grammarBuilder.append("KW3554 : 'KW' '3554';\n"); - grammarBuilder.append("KW3555 : 'KW' '3555';\n"); - grammarBuilder.append("KW3556 : 'KW' '3556';\n"); - grammarBuilder.append("KW3557 : 'KW' '3557';\n"); - grammarBuilder.append("KW3558 : 'KW' '3558';\n"); - grammarBuilder.append("KW3559 : 'KW' '3559';\n"); - grammarBuilder.append("KW3560 : 'KW' '3560';\n"); - grammarBuilder.append("KW3561 : 'KW' '3561';\n"); - grammarBuilder.append("KW3562 : 'KW' '3562';\n"); - grammarBuilder.append("KW3563 : 'KW' '3563';\n"); - grammarBuilder.append("KW3564 : 'KW' '3564';\n"); - grammarBuilder.append("KW3565 : 'KW' '3565';\n"); - grammarBuilder.append("KW3566 : 'KW' '3566';\n"); - grammarBuilder.append("KW3567 : 'KW' '3567';\n"); - grammarBuilder.append("KW3568 : 'KW' '3568';\n"); - grammarBuilder.append("KW3569 : 'KW' '3569';\n"); - grammarBuilder.append("KW3570 : 'KW' '3570';\n"); - grammarBuilder.append("KW3571 : 'KW' '3571';\n"); - grammarBuilder.append("KW3572 : 'KW' '3572';\n"); - grammarBuilder.append("KW3573 : 'KW' '3573';\n"); - grammarBuilder.append("KW3574 : 'KW' '3574';\n"); - grammarBuilder.append("KW3575 : 'KW' '3575';\n"); - grammarBuilder.append("KW3576 : 'KW' '3576';\n"); - grammarBuilder.append("KW3577 : 'KW' '3577';\n"); - grammarBuilder.append("KW3578 : 'KW' '3578';\n"); - grammarBuilder.append("KW3579 : 'KW' '3579';\n"); - grammarBuilder.append("KW3580 : 'KW' '3580';\n"); - grammarBuilder.append("KW3581 : 'KW' '3581';\n"); - grammarBuilder.append("KW3582 : 'KW' '3582';\n"); - grammarBuilder.append("KW3583 : 'KW' '3583';\n"); - grammarBuilder.append("KW3584 : 'KW' '3584';\n"); - grammarBuilder.append("KW3585 : 'KW' '3585';\n"); - grammarBuilder.append("KW3586 : 'KW' '3586';\n"); - grammarBuilder.append("KW3587 : 'KW' '3587';\n"); - grammarBuilder.append("KW3588 : 'KW' '3588';\n"); - grammarBuilder.append("KW3589 : 'KW' '3589';\n"); - grammarBuilder.append("KW3590 : 'KW' '3590';\n"); - grammarBuilder.append("KW3591 : 'KW' '3591';\n"); - grammarBuilder.append("KW3592 : 'KW' '3592';\n"); - grammarBuilder.append("KW3593 : 'KW' '3593';\n"); - grammarBuilder.append("KW3594 : 'KW' '3594';\n"); - grammarBuilder.append("KW3595 : 'KW' '3595';\n"); - grammarBuilder.append("KW3596 : 'KW' '3596';\n"); - grammarBuilder.append("KW3597 : 'KW' '3597';\n"); - grammarBuilder.append("KW3598 : 'KW' '3598';\n"); - grammarBuilder.append("KW3599 : 'KW' '3599';\n"); - grammarBuilder.append("KW3600 : 'KW' '3600';\n"); - grammarBuilder.append("KW3601 : 'KW' '3601';\n"); - grammarBuilder.append("KW3602 : 'KW' '3602';\n"); - grammarBuilder.append("KW3603 : 'KW' '3603';\n"); - grammarBuilder.append("KW3604 : 'KW' '3604';\n"); - grammarBuilder.append("KW3605 : 'KW' '3605';\n"); - grammarBuilder.append("KW3606 : 'KW' '3606';\n"); - grammarBuilder.append("KW3607 : 'KW' '3607';\n"); - grammarBuilder.append("KW3608 : 'KW' '3608';\n"); - grammarBuilder.append("KW3609 : 'KW' '3609';\n"); - grammarBuilder.append("KW3610 : 'KW' '3610';\n"); - grammarBuilder.append("KW3611 : 'KW' '3611';\n"); - grammarBuilder.append("KW3612 : 'KW' '3612';\n"); - grammarBuilder.append("KW3613 : 'KW' '3613';\n"); - grammarBuilder.append("KW3614 : 'KW' '3614';\n"); - grammarBuilder.append("KW3615 : 'KW' '3615';\n"); - grammarBuilder.append("KW3616 : 'KW' '3616';\n"); - grammarBuilder.append("KW3617 : 'KW' '3617';\n"); - grammarBuilder.append("KW3618 : 'KW' '3618';\n"); - grammarBuilder.append("KW3619 : 'KW' '3619';\n"); - grammarBuilder.append("KW3620 : 'KW' '3620';\n"); - grammarBuilder.append("KW3621 : 'KW' '3621';\n"); - grammarBuilder.append("KW3622 : 'KW' '3622';\n"); - grammarBuilder.append("KW3623 : 'KW' '3623';\n"); - grammarBuilder.append("KW3624 : 'KW' '3624';\n"); - grammarBuilder.append("KW3625 : 'KW' '3625';\n"); - grammarBuilder.append("KW3626 : 'KW' '3626';\n"); - grammarBuilder.append("KW3627 : 'KW' '3627';\n"); - grammarBuilder.append("KW3628 : 'KW' '3628';\n"); - grammarBuilder.append("KW3629 : 'KW' '3629';\n"); - grammarBuilder.append("KW3630 : 'KW' '3630';\n"); - grammarBuilder.append("KW3631 : 'KW' '3631';\n"); - grammarBuilder.append("KW3632 : 'KW' '3632';\n"); - grammarBuilder.append("KW3633 : 'KW' '3633';\n"); - grammarBuilder.append("KW3634 : 'KW' '3634';\n"); - grammarBuilder.append("KW3635 : 'KW' '3635';\n"); - grammarBuilder.append("KW3636 : 'KW' '3636';\n"); - grammarBuilder.append("KW3637 : 'KW' '3637';\n"); - grammarBuilder.append("KW3638 : 'KW' '3638';\n"); - grammarBuilder.append("KW3639 : 'KW' '3639';\n"); - grammarBuilder.append("KW3640 : 'KW' '3640';\n"); - grammarBuilder.append("KW3641 : 'KW' '3641';\n"); - grammarBuilder.append("KW3642 : 'KW' '3642';\n"); - grammarBuilder.append("KW3643 : 'KW' '3643';\n"); - grammarBuilder.append("KW3644 : 'KW' '3644';\n"); - grammarBuilder.append("KW3645 : 'KW' '3645';\n"); - grammarBuilder.append("KW3646 : 'KW' '3646';\n"); - grammarBuilder.append("KW3647 : 'KW' '3647';\n"); - grammarBuilder.append("KW3648 : 'KW' '3648';\n"); - grammarBuilder.append("KW3649 : 'KW' '3649';\n"); - grammarBuilder.append("KW3650 : 'KW' '3650';\n"); - grammarBuilder.append("KW3651 : 'KW' '3651';\n"); - grammarBuilder.append("KW3652 : 'KW' '3652';\n"); - grammarBuilder.append("KW3653 : 'KW' '3653';\n"); - grammarBuilder.append("KW3654 : 'KW' '3654';\n"); - grammarBuilder.append("KW3655 : 'KW' '3655';\n"); - grammarBuilder.append("KW3656 : 'KW' '3656';\n"); - grammarBuilder.append("KW3657 : 'KW' '3657';\n"); - grammarBuilder.append("KW3658 : 'KW' '3658';\n"); - grammarBuilder.append("KW3659 : 'KW' '3659';\n"); - grammarBuilder.append("KW3660 : 'KW' '3660';\n"); - grammarBuilder.append("KW3661 : 'KW' '3661';\n"); - grammarBuilder.append("KW3662 : 'KW' '3662';\n"); - grammarBuilder.append("KW3663 : 'KW' '3663';\n"); - grammarBuilder.append("KW3664 : 'KW' '3664';\n"); - grammarBuilder.append("KW3665 : 'KW' '3665';\n"); - grammarBuilder.append("KW3666 : 'KW' '3666';\n"); - grammarBuilder.append("KW3667 : 'KW' '3667';\n"); - grammarBuilder.append("KW3668 : 'KW' '3668';\n"); - grammarBuilder.append("KW3669 : 'KW' '3669';\n"); - grammarBuilder.append("KW3670 : 'KW' '3670';\n"); - grammarBuilder.append("KW3671 : 'KW' '3671';\n"); - grammarBuilder.append("KW3672 : 'KW' '3672';\n"); - grammarBuilder.append("KW3673 : 'KW' '3673';\n"); - grammarBuilder.append("KW3674 : 'KW' '3674';\n"); - grammarBuilder.append("KW3675 : 'KW' '3675';\n"); - grammarBuilder.append("KW3676 : 'KW' '3676';\n"); - grammarBuilder.append("KW3677 : 'KW' '3677';\n"); - grammarBuilder.append("KW3678 : 'KW' '3678';\n"); - grammarBuilder.append("KW3679 : 'KW' '3679';\n"); - grammarBuilder.append("KW3680 : 'KW' '3680';\n"); - grammarBuilder.append("KW3681 : 'KW' '3681';\n"); - grammarBuilder.append("KW3682 : 'KW' '3682';\n"); - grammarBuilder.append("KW3683 : 'KW' '3683';\n"); - grammarBuilder.append("KW3684 : 'KW' '3684';\n"); - grammarBuilder.append("KW3685 : 'KW' '3685';\n"); - grammarBuilder.append("KW3686 : 'KW' '3686';\n"); - grammarBuilder.append("KW3687 : 'KW' '3687';\n"); - grammarBuilder.append("KW3688 : 'KW' '3688';\n"); - grammarBuilder.append("KW3689 : 'KW' '3689';\n"); - grammarBuilder.append("KW3690 : 'KW' '3690';\n"); - grammarBuilder.append("KW3691 : 'KW' '3691';\n"); - grammarBuilder.append("KW3692 : 'KW' '3692';\n"); - grammarBuilder.append("KW3693 : 'KW' '3693';\n"); - grammarBuilder.append("KW3694 : 'KW' '3694';\n"); - grammarBuilder.append("KW3695 : 'KW' '3695';\n"); - grammarBuilder.append("KW3696 : 'KW' '3696';\n"); - grammarBuilder.append("KW3697 : 'KW' '3697';\n"); - grammarBuilder.append("KW3698 : 'KW' '3698';\n"); - grammarBuilder.append("KW3699 : 'KW' '3699';\n"); - grammarBuilder.append("KW3700 : 'KW' '3700';\n"); - grammarBuilder.append("KW3701 : 'KW' '3701';\n"); - grammarBuilder.append("KW3702 : 'KW' '3702';\n"); - grammarBuilder.append("KW3703 : 'KW' '3703';\n"); - grammarBuilder.append("KW3704 : 'KW' '3704';\n"); - grammarBuilder.append("KW3705 : 'KW' '3705';\n"); - grammarBuilder.append("KW3706 : 'KW' '3706';\n"); - grammarBuilder.append("KW3707 : 'KW' '3707';\n"); - grammarBuilder.append("KW3708 : 'KW' '3708';\n"); - grammarBuilder.append("KW3709 : 'KW' '3709';\n"); - grammarBuilder.append("KW3710 : 'KW' '3710';\n"); - grammarBuilder.append("KW3711 : 'KW' '3711';\n"); - grammarBuilder.append("KW3712 : 'KW' '3712';\n"); - grammarBuilder.append("KW3713 : 'KW' '3713';\n"); - grammarBuilder.append("KW3714 : 'KW' '3714';\n"); - grammarBuilder.append("KW3715 : 'KW' '3715';\n"); - grammarBuilder.append("KW3716 : 'KW' '3716';\n"); - grammarBuilder.append("KW3717 : 'KW' '3717';\n"); - grammarBuilder.append("KW3718 : 'KW' '3718';\n"); - grammarBuilder.append("KW3719 : 'KW' '3719';\n"); - grammarBuilder.append("KW3720 : 'KW' '3720';\n"); - grammarBuilder.append("KW3721 : 'KW' '3721';\n"); - grammarBuilder.append("KW3722 : 'KW' '3722';\n"); - grammarBuilder.append("KW3723 : 'KW' '3723';\n"); - grammarBuilder.append("KW3724 : 'KW' '3724';\n"); - grammarBuilder.append("KW3725 : 'KW' '3725';\n"); - grammarBuilder.append("KW3726 : 'KW' '3726';\n"); - grammarBuilder.append("KW3727 : 'KW' '3727';\n"); - grammarBuilder.append("KW3728 : 'KW' '3728';\n"); - grammarBuilder.append("KW3729 : 'KW' '3729';\n"); - grammarBuilder.append("KW3730 : 'KW' '3730';\n"); - grammarBuilder.append("KW3731 : 'KW' '3731';\n"); - grammarBuilder.append("KW3732 : 'KW' '3732';\n"); - grammarBuilder.append("KW3733 : 'KW' '3733';\n"); - grammarBuilder.append("KW3734 : 'KW' '3734';\n"); - grammarBuilder.append("KW3735 : 'KW' '3735';\n"); - grammarBuilder.append("KW3736 : 'KW' '3736';\n"); - grammarBuilder.append("KW3737 : 'KW' '3737';\n"); - grammarBuilder.append("KW3738 : 'KW' '3738';\n"); - grammarBuilder.append("KW3739 : 'KW' '3739';\n"); - grammarBuilder.append("KW3740 : 'KW' '3740';\n"); - grammarBuilder.append("KW3741 : 'KW' '3741';\n"); - grammarBuilder.append("KW3742 : 'KW' '3742';\n"); - grammarBuilder.append("KW3743 : 'KW' '3743';\n"); - grammarBuilder.append("KW3744 : 'KW' '3744';\n"); - grammarBuilder.append("KW3745 : 'KW' '3745';\n"); - grammarBuilder.append("KW3746 : 'KW' '3746';\n"); - grammarBuilder.append("KW3747 : 'KW' '3747';\n"); - grammarBuilder.append("KW3748 : 'KW' '3748';\n"); - grammarBuilder.append("KW3749 : 'KW' '3749';\n"); - grammarBuilder.append("KW3750 : 'KW' '3750';\n"); - grammarBuilder.append("KW3751 : 'KW' '3751';\n"); - grammarBuilder.append("KW3752 : 'KW' '3752';\n"); - grammarBuilder.append("KW3753 : 'KW' '3753';\n"); - grammarBuilder.append("KW3754 : 'KW' '3754';\n"); - grammarBuilder.append("KW3755 : 'KW' '3755';\n"); - grammarBuilder.append("KW3756 : 'KW' '3756';\n"); - grammarBuilder.append("KW3757 : 'KW' '3757';\n"); - grammarBuilder.append("KW3758 : 'KW' '3758';\n"); - grammarBuilder.append("KW3759 : 'KW' '3759';\n"); - grammarBuilder.append("KW3760 : 'KW' '3760';\n"); - grammarBuilder.append("KW3761 : 'KW' '3761';\n"); - grammarBuilder.append("KW3762 : 'KW' '3762';\n"); - grammarBuilder.append("KW3763 : 'KW' '3763';\n"); - grammarBuilder.append("KW3764 : 'KW' '3764';\n"); - grammarBuilder.append("KW3765 : 'KW' '3765';\n"); - grammarBuilder.append("KW3766 : 'KW' '3766';\n"); - grammarBuilder.append("KW3767 : 'KW' '3767';\n"); - grammarBuilder.append("KW3768 : 'KW' '3768';\n"); - grammarBuilder.append("KW3769 : 'KW' '3769';\n"); - grammarBuilder.append("KW3770 : 'KW' '3770';\n"); - grammarBuilder.append("KW3771 : 'KW' '3771';\n"); - grammarBuilder.append("KW3772 : 'KW' '3772';\n"); - grammarBuilder.append("KW3773 : 'KW' '3773';\n"); - grammarBuilder.append("KW3774 : 'KW' '3774';\n"); - grammarBuilder.append("KW3775 : 'KW' '3775';\n"); - grammarBuilder.append("KW3776 : 'KW' '3776';\n"); - grammarBuilder.append("KW3777 : 'KW' '3777';\n"); - grammarBuilder.append("KW3778 : 'KW' '3778';\n"); - grammarBuilder.append("KW3779 : 'KW' '3779';\n"); - grammarBuilder.append("KW3780 : 'KW' '3780';\n"); - grammarBuilder.append("KW3781 : 'KW' '3781';\n"); - grammarBuilder.append("KW3782 : 'KW' '3782';\n"); - grammarBuilder.append("KW3783 : 'KW' '3783';\n"); - grammarBuilder.append("KW3784 : 'KW' '3784';\n"); - grammarBuilder.append("KW3785 : 'KW' '3785';\n"); - grammarBuilder.append("KW3786 : 'KW' '3786';\n"); - grammarBuilder.append("KW3787 : 'KW' '3787';\n"); - grammarBuilder.append("KW3788 : 'KW' '3788';\n"); - grammarBuilder.append("KW3789 : 'KW' '3789';\n"); - grammarBuilder.append("KW3790 : 'KW' '3790';\n"); - grammarBuilder.append("KW3791 : 'KW' '3791';\n"); - grammarBuilder.append("KW3792 : 'KW' '3792';\n"); - grammarBuilder.append("KW3793 : 'KW' '3793';\n"); - grammarBuilder.append("KW3794 : 'KW' '3794';\n"); - grammarBuilder.append("KW3795 : 'KW' '3795';\n"); - grammarBuilder.append("KW3796 : 'KW' '3796';\n"); - grammarBuilder.append("KW3797 : 'KW' '3797';\n"); - grammarBuilder.append("KW3798 : 'KW' '3798';\n"); - grammarBuilder.append("KW3799 : 'KW' '3799';\n"); - grammarBuilder.append("KW3800 : 'KW' '3800';\n"); - grammarBuilder.append("KW3801 : 'KW' '3801';\n"); - grammarBuilder.append("KW3802 : 'KW' '3802';\n"); - grammarBuilder.append("KW3803 : 'KW' '3803';\n"); - grammarBuilder.append("KW3804 : 'KW' '3804';\n"); - grammarBuilder.append("KW3805 : 'KW' '3805';\n"); - grammarBuilder.append("KW3806 : 'KW' '3806';\n"); - grammarBuilder.append("KW3807 : 'KW' '3807';\n"); - grammarBuilder.append("KW3808 : 'KW' '3808';\n"); - grammarBuilder.append("KW3809 : 'KW' '3809';\n"); - grammarBuilder.append("KW3810 : 'KW' '3810';\n"); - grammarBuilder.append("KW3811 : 'KW' '3811';\n"); - grammarBuilder.append("KW3812 : 'KW' '3812';\n"); - grammarBuilder.append("KW3813 : 'KW' '3813';\n"); - grammarBuilder.append("KW3814 : 'KW' '3814';\n"); - grammarBuilder.append("KW3815 : 'KW' '3815';\n"); - grammarBuilder.append("KW3816 : 'KW' '3816';\n"); - grammarBuilder.append("KW3817 : 'KW' '3817';\n"); - grammarBuilder.append("KW3818 : 'KW' '3818';\n"); - grammarBuilder.append("KW3819 : 'KW' '3819';\n"); - grammarBuilder.append("KW3820 : 'KW' '3820';\n"); - grammarBuilder.append("KW3821 : 'KW' '3821';\n"); - grammarBuilder.append("KW3822 : 'KW' '3822';\n"); - grammarBuilder.append("KW3823 : 'KW' '3823';\n"); - grammarBuilder.append("KW3824 : 'KW' '3824';\n"); - grammarBuilder.append("KW3825 : 'KW' '3825';\n"); - grammarBuilder.append("KW3826 : 'KW' '3826';\n"); - grammarBuilder.append("KW3827 : 'KW' '3827';\n"); - grammarBuilder.append("KW3828 : 'KW' '3828';\n"); - grammarBuilder.append("KW3829 : 'KW' '3829';\n"); - grammarBuilder.append("KW3830 : 'KW' '3830';\n"); - grammarBuilder.append("KW3831 : 'KW' '3831';\n"); - grammarBuilder.append("KW3832 : 'KW' '3832';\n"); - grammarBuilder.append("KW3833 : 'KW' '3833';\n"); - grammarBuilder.append("KW3834 : 'KW' '3834';\n"); - grammarBuilder.append("KW3835 : 'KW' '3835';\n"); - grammarBuilder.append("KW3836 : 'KW' '3836';\n"); - grammarBuilder.append("KW3837 : 'KW' '3837';\n"); - grammarBuilder.append("KW3838 : 'KW' '3838';\n"); - grammarBuilder.append("KW3839 : 'KW' '3839';\n"); - grammarBuilder.append("KW3840 : 'KW' '3840';\n"); - grammarBuilder.append("KW3841 : 'KW' '3841';\n"); - grammarBuilder.append("KW3842 : 'KW' '3842';\n"); - grammarBuilder.append("KW3843 : 'KW' '3843';\n"); - grammarBuilder.append("KW3844 : 'KW' '3844';\n"); - grammarBuilder.append("KW3845 : 'KW' '3845';\n"); - grammarBuilder.append("KW3846 : 'KW' '3846';\n"); - grammarBuilder.append("KW3847 : 'KW' '3847';\n"); - grammarBuilder.append("KW3848 : 'KW' '3848';\n"); - grammarBuilder.append("KW3849 : 'KW' '3849';\n"); - grammarBuilder.append("KW3850 : 'KW' '3850';\n"); - grammarBuilder.append("KW3851 : 'KW' '3851';\n"); - grammarBuilder.append("KW3852 : 'KW' '3852';\n"); - grammarBuilder.append("KW3853 : 'KW' '3853';\n"); - grammarBuilder.append("KW3854 : 'KW' '3854';\n"); - grammarBuilder.append("KW3855 : 'KW' '3855';\n"); - grammarBuilder.append("KW3856 : 'KW' '3856';\n"); - grammarBuilder.append("KW3857 : 'KW' '3857';\n"); - grammarBuilder.append("KW3858 : 'KW' '3858';\n"); - grammarBuilder.append("KW3859 : 'KW' '3859';\n"); - grammarBuilder.append("KW3860 : 'KW' '3860';\n"); - grammarBuilder.append("KW3861 : 'KW' '3861';\n"); - grammarBuilder.append("KW3862 : 'KW' '3862';\n"); - grammarBuilder.append("KW3863 : 'KW' '3863';\n"); - grammarBuilder.append("KW3864 : 'KW' '3864';\n"); - grammarBuilder.append("KW3865 : 'KW' '3865';\n"); - grammarBuilder.append("KW3866 : 'KW' '3866';\n"); - grammarBuilder.append("KW3867 : 'KW' '3867';\n"); - grammarBuilder.append("KW3868 : 'KW' '3868';\n"); - grammarBuilder.append("KW3869 : 'KW' '3869';\n"); - grammarBuilder.append("KW3870 : 'KW' '3870';\n"); - grammarBuilder.append("KW3871 : 'KW' '3871';\n"); - grammarBuilder.append("KW3872 : 'KW' '3872';\n"); - grammarBuilder.append("KW3873 : 'KW' '3873';\n"); - grammarBuilder.append("KW3874 : 'KW' '3874';\n"); - grammarBuilder.append("KW3875 : 'KW' '3875';\n"); - grammarBuilder.append("KW3876 : 'KW' '3876';\n"); - grammarBuilder.append("KW3877 : 'KW' '3877';\n"); - grammarBuilder.append("KW3878 : 'KW' '3878';\n"); - grammarBuilder.append("KW3879 : 'KW' '3879';\n"); - grammarBuilder.append("KW3880 : 'KW' '3880';\n"); - grammarBuilder.append("KW3881 : 'KW' '3881';\n"); - grammarBuilder.append("KW3882 : 'KW' '3882';\n"); - grammarBuilder.append("KW3883 : 'KW' '3883';\n"); - grammarBuilder.append("KW3884 : 'KW' '3884';\n"); - grammarBuilder.append("KW3885 : 'KW' '3885';\n"); - grammarBuilder.append("KW3886 : 'KW' '3886';\n"); - grammarBuilder.append("KW3887 : 'KW' '3887';\n"); - grammarBuilder.append("KW3888 : 'KW' '3888';\n"); - grammarBuilder.append("KW3889 : 'KW' '3889';\n"); - grammarBuilder.append("KW3890 : 'KW' '3890';\n"); - grammarBuilder.append("KW3891 : 'KW' '3891';\n"); - grammarBuilder.append("KW3892 : 'KW' '3892';\n"); - grammarBuilder.append("KW3893 : 'KW' '3893';\n"); - grammarBuilder.append("KW3894 : 'KW' '3894';\n"); - grammarBuilder.append("KW3895 : 'KW' '3895';\n"); - grammarBuilder.append("KW3896 : 'KW' '3896';\n"); - grammarBuilder.append("KW3897 : 'KW' '3897';\n"); - grammarBuilder.append("KW3898 : 'KW' '3898';\n"); - grammarBuilder.append("KW3899 : 'KW' '3899';\n"); - grammarBuilder.append("KW3900 : 'KW' '3900';\n"); - grammarBuilder.append("KW3901 : 'KW' '3901';\n"); - grammarBuilder.append("KW3902 : 'KW' '3902';\n"); - grammarBuilder.append("KW3903 : 'KW' '3903';\n"); - grammarBuilder.append("KW3904 : 'KW' '3904';\n"); - grammarBuilder.append("KW3905 : 'KW' '3905';\n"); - grammarBuilder.append("KW3906 : 'KW' '3906';\n"); - grammarBuilder.append("KW3907 : 'KW' '3907';\n"); - grammarBuilder.append("KW3908 : 'KW' '3908';\n"); - grammarBuilder.append("KW3909 : 'KW' '3909';\n"); - grammarBuilder.append("KW3910 : 'KW' '3910';\n"); - grammarBuilder.append("KW3911 : 'KW' '3911';\n"); - grammarBuilder.append("KW3912 : 'KW' '3912';\n"); - grammarBuilder.append("KW3913 : 'KW' '3913';\n"); - grammarBuilder.append("KW3914 : 'KW' '3914';\n"); - grammarBuilder.append("KW3915 : 'KW' '3915';\n"); - grammarBuilder.append("KW3916 : 'KW' '3916';\n"); - grammarBuilder.append("KW3917 : 'KW' '3917';\n"); - grammarBuilder.append("KW3918 : 'KW' '3918';\n"); - grammarBuilder.append("KW3919 : 'KW' '3919';\n"); - grammarBuilder.append("KW3920 : 'KW' '3920';\n"); - grammarBuilder.append("KW3921 : 'KW' '3921';\n"); - grammarBuilder.append("KW3922 : 'KW' '3922';\n"); - grammarBuilder.append("KW3923 : 'KW' '3923';\n"); - grammarBuilder.append("KW3924 : 'KW' '3924';\n"); - grammarBuilder.append("KW3925 : 'KW' '3925';\n"); - grammarBuilder.append("KW3926 : 'KW' '3926';\n"); - grammarBuilder.append("KW3927 : 'KW' '3927';\n"); - grammarBuilder.append("KW3928 : 'KW' '3928';\n"); - grammarBuilder.append("KW3929 : 'KW' '3929';\n"); - grammarBuilder.append("KW3930 : 'KW' '3930';\n"); - grammarBuilder.append("KW3931 : 'KW' '3931';\n"); - grammarBuilder.append("KW3932 : 'KW' '3932';\n"); - grammarBuilder.append("KW3933 : 'KW' '3933';\n"); - grammarBuilder.append("KW3934 : 'KW' '3934';\n"); - grammarBuilder.append("KW3935 : 'KW' '3935';\n"); - grammarBuilder.append("KW3936 : 'KW' '3936';\n"); - grammarBuilder.append("KW3937 : 'KW' '3937';\n"); - grammarBuilder.append("KW3938 : 'KW' '3938';\n"); - grammarBuilder.append("KW3939 : 'KW' '3939';\n"); - grammarBuilder.append("KW3940 : 'KW' '3940';\n"); - grammarBuilder.append("KW3941 : 'KW' '3941';\n"); - grammarBuilder.append("KW3942 : 'KW' '3942';\n"); - grammarBuilder.append("KW3943 : 'KW' '3943';\n"); - grammarBuilder.append("KW3944 : 'KW' '3944';\n"); - grammarBuilder.append("KW3945 : 'KW' '3945';\n"); - grammarBuilder.append("KW3946 : 'KW' '3946';\n"); - grammarBuilder.append("KW3947 : 'KW' '3947';\n"); - grammarBuilder.append("KW3948 : 'KW' '3948';\n"); - grammarBuilder.append("KW3949 : 'KW' '3949';\n"); - grammarBuilder.append("KW3950 : 'KW' '3950';\n"); - grammarBuilder.append("KW3951 : 'KW' '3951';\n"); - grammarBuilder.append("KW3952 : 'KW' '3952';\n"); - grammarBuilder.append("KW3953 : 'KW' '3953';\n"); - grammarBuilder.append("KW3954 : 'KW' '3954';\n"); - grammarBuilder.append("KW3955 : 'KW' '3955';\n"); - grammarBuilder.append("KW3956 : 'KW' '3956';\n"); - grammarBuilder.append("KW3957 : 'KW' '3957';\n"); - grammarBuilder.append("KW3958 : 'KW' '3958';\n"); - grammarBuilder.append("KW3959 : 'KW' '3959';\n"); - grammarBuilder.append("KW3960 : 'KW' '3960';\n"); - grammarBuilder.append("KW3961 : 'KW' '3961';\n"); - grammarBuilder.append("KW3962 : 'KW' '3962';\n"); - grammarBuilder.append("KW3963 : 'KW' '3963';\n"); - grammarBuilder.append("KW3964 : 'KW' '3964';\n"); - grammarBuilder.append("KW3965 : 'KW' '3965';\n"); - grammarBuilder.append("KW3966 : 'KW' '3966';\n"); - grammarBuilder.append("KW3967 : 'KW' '3967';\n"); - grammarBuilder.append("KW3968 : 'KW' '3968';\n"); - grammarBuilder.append("KW3969 : 'KW' '3969';\n"); - grammarBuilder.append("KW3970 : 'KW' '3970';\n"); - grammarBuilder.append("KW3971 : 'KW' '3971';\n"); - grammarBuilder.append("KW3972 : 'KW' '3972';\n"); - grammarBuilder.append("KW3973 : 'KW' '3973';\n"); - grammarBuilder.append("KW3974 : 'KW' '3974';\n"); - grammarBuilder.append("KW3975 : 'KW' '3975';\n"); - grammarBuilder.append("KW3976 : 'KW' '3976';\n"); - grammarBuilder.append("KW3977 : 'KW' '3977';\n"); - grammarBuilder.append("KW3978 : 'KW' '3978';\n"); - grammarBuilder.append("KW3979 : 'KW' '3979';\n"); - grammarBuilder.append("KW3980 : 'KW' '3980';\n"); - grammarBuilder.append("KW3981 : 'KW' '3981';\n"); - grammarBuilder.append("KW3982 : 'KW' '3982';\n"); - grammarBuilder.append("KW3983 : 'KW' '3983';\n"); - grammarBuilder.append("KW3984 : 'KW' '3984';\n"); - grammarBuilder.append("KW3985 : 'KW' '3985';\n"); - grammarBuilder.append("KW3986 : 'KW' '3986';\n"); - grammarBuilder.append("KW3987 : 'KW' '3987';\n"); - grammarBuilder.append("KW3988 : 'KW' '3988';\n"); - grammarBuilder.append("KW3989 : 'KW' '3989';\n"); - grammarBuilder.append("KW3990 : 'KW' '3990';\n"); - grammarBuilder.append("KW3991 : 'KW' '3991';\n"); - grammarBuilder.append("KW3992 : 'KW' '3992';\n"); - grammarBuilder.append("KW3993 : 'KW' '3993';\n"); - grammarBuilder.append("KW3994 : 'KW' '3994';\n"); - grammarBuilder.append("KW3995 : 'KW' '3995';\n"); - grammarBuilder.append("KW3996 : 'KW' '3996';\n"); - grammarBuilder.append("KW3997 : 'KW' '3997';\n"); - grammarBuilder.append("KW3998 : 'KW' '3998';\n"); - grammarBuilder.append("KW3999 : 'KW' '3999';"); - String grammar = grammarBuilder.toString(); - String input ="KW400"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='KW400',<402>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(136); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : .*? ('a' | 'ab') {Console.WriteLine(this.Text);} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : . {Console.WriteLine(this.Text);};"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "a\n" + - "b\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:1='b',<3>,1:1]\n" + - "[@2,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); - String grammar = grammarBuilder.toString(); - String input ="\"hi\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:3='\"hi\"',<1>,1:0]\n" + - "[@1,4:8='\"mom\"',<1>,1:4]\n" + - "[@2,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); - String grammar = grammarBuilder.toString(); - String input ="\"\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParentheses() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("START_BLOCK: '-.-.-';\n"); - grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); - grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); - grammarBuilder.append("fragment L_A: '.-';\n"); - grammarBuilder.append("fragment L_K: '-.-';\n"); - grammarBuilder.append("SEPARATOR: '!';"); - String grammar = grammarBuilder.toString(); - String input ="-.-.-!"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='-.-.-',<1>,1:0]\n" + - "[@1,5:5='!',<3>,1:5]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPositionAdjustingLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2208); - grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("public override IToken NextToken() {\n"); - grammarBuilder.append(" if (!(Interpreter is PositionAdjustingLexerATNSimulator)) {\n"); - grammarBuilder.append(" Interpreter = new PositionAdjustingLexerATNSimulator(this, _ATN);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return base.NextToken();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("public override IToken Emit() {\n"); - grammarBuilder.append(" switch (Type) {\n"); - grammarBuilder.append(" case TOKENS:\n"); - grammarBuilder.append(" HandleAcceptPositionForKeyword(\"tokens\");\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" case LABEL:\n"); - grammarBuilder.append(" HandleAcceptPositionForIdentifier();\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" default:\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return base.Emit();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("private bool HandleAcceptPositionForIdentifier() {\n"); - grammarBuilder.append(" string tokenText = this.Text;\n"); - grammarBuilder.append(" int identifierLength = 0;\n"); - grammarBuilder.append(" while (identifierLength < tokenText.Length && IsIdentifierChar(tokenText[identifierLength])) {\n"); - grammarBuilder.append(" identifierLength++;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" if (InputStream.Index > TokenStartCharIndex + identifierLength) {\n"); - grammarBuilder.append(" int offset = identifierLength - 1;\n"); - grammarBuilder.append(" getInterpreter().ResetAcceptPosition((ICharStream)InputStream, TokenStartCharIndex + offset, TokenStartLine, TokenStartColumn + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("private bool HandleAcceptPositionForKeyword(string keyword) {\n"); - grammarBuilder.append(" if (InputStream.Index > TokenStartCharIndex + keyword.Length) {\n"); - grammarBuilder.append(" int offset = keyword.Length - 1;\n"); - grammarBuilder.append(" getInterpreter().ResetAcceptPosition((ICharStream)InputStream, TokenStartCharIndex + offset, TokenStartLine, TokenStartColumn + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("public PositionAdjustingLexerATNSimulator getInterpreter() {\n"); - grammarBuilder.append(" return (PositionAdjustingLexerATNSimulator)base.Interpreter;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("private static bool IsIdentifierChar(char c) {\n"); - grammarBuilder.append(" return Char.IsLetterOrDigit(c) || c == '_';\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("public class PositionAdjustingLexerATNSimulator : LexerATNSimulator {\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" public PositionAdjustingLexerATNSimulator(Lexer recog, ATN atn)\n"); - grammarBuilder.append(" : base(recog, atn)\n"); - grammarBuilder.append(" {\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" public void ResetAcceptPosition(ICharStream input, int index, int line, int column) {\n"); - grammarBuilder.append(" input.Seek(index);\n"); - grammarBuilder.append(" this.Line = line;\n"); - grammarBuilder.append(" this.Column = column;\n"); - grammarBuilder.append(" Consume(input);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ASSIGN : '=' ;\n"); - grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); - grammarBuilder.append("LCURLY: '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// 'tokens' followed by '{'\n"); - grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); - grammarBuilder.append("LABEL\n"); - grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("IDENTIFIER\n"); - grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("IGNORED\n"); - grammarBuilder.append(" : [ \\t\\r\\n]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("NEWLINE\n"); - grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS\n"); - grammarBuilder.append(" : [ \\t]+ -> skip\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input = - "tokens\n" + - "tokens {\n" + - "notLabel\n" + - "label1 =\n" + - "label2 +=\n" + - "notLabel\n"; - String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); - assertEquals( - "[@0,0:5='tokens',<6>,1:0]\n" + - "[@1,7:12='tokens',<4>,2:0]\n" + - "[@2,14:14='{',<3>,2:7]\n" + - "[@3,16:23='notLabel',<6>,3:0]\n" + - "[@4,25:30='label1',<5>,4:0]\n" + - "[@5,32:32='=',<1>,4:7]\n" + - "[@6,34:39='label2',<5>,5:0]\n" + - "[@7,41:42='+=',<2>,5:7]\n" + - "[@8,44:51='notLabel',<6>,6:0]\n" + - "[@9,53:52='',<-1>,7:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testQuoteTranslation() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); - String grammar = grammarBuilder.toString(); - String input ="\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\"',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : '-' I ;\n"); - grammarBuilder.append("I : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 -21 3"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='34',<2>,1:0]\n" + - "[@1,3:5='-21',<1>,1:3]\n" + - "[@2,7:7='3',<2>,1:7]\n" + - "[@3,8:7='',<-1>,1:8]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSlashes() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("Backslash : '\\\\';\n"); - grammarBuilder.append("Slash : '/';\n"); - grammarBuilder.append("Vee : '\\\\/';\n"); - grammarBuilder.append("Wedge : '/\\\\';\n"); - grammarBuilder.append("WS : [ \\t] -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="\\ / \\/ /\\"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\\',<1>,1:0]\n" + - "[@1,2:2='/',<2>,1:2]\n" + - "[@2,4:5='\\/',<3>,1:4]\n" + - "[@3,7:8='/\\',<4>,1:7]\n" + - "[@4,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testZeroLengthToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("BeginString\n"); - grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("mode StringMode;\n"); - grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); - grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); - grammarBuilder.append("mode EndStringMode; \n"); - grammarBuilder.append(" EndString : '\\'' -> popMode;"); - String grammar = grammarBuilder.toString(); - String input ="'xxx'"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4=''xxx'',<1>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestListeners.java index 3c912e1a9..b8be2f967 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestListeners.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestListeners.java @@ -1,336 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestListeners extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(438); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class LeafListener : TBaseListener {\n"); - grammarBuilder.append(" public override void VisitTerminal(ITerminalNode node) {\n"); - grammarBuilder.append(" Console.WriteLine(node.Symbol.Text);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1\n" + - "2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(592); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class LeafListener : TBaseListener {\n"); - grammarBuilder.append(" public override void ExitE(TParser.EContext ctx) {\n"); - grammarBuilder.append(" if (ctx.ChildCount==3) {\n"); - grammarBuilder.append(" Console.Write(\"{0} {1} {2}\\n\",ctx.e(0).Start.Text,\n"); - grammarBuilder.append(" ctx.e(1).Start.Text, ctx.e()[0].Start.Text);\n"); - grammarBuilder.append(" } else\n"); - grammarBuilder.append(" Console.WriteLine(ctx.INT().Symbol.Text);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1\n" + - "2\n" + - "3\n" + - "2 3 2\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(616); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class LeafListener : TBaseListener {\n"); - grammarBuilder.append(" public override void ExitCall(TParser.CallContext ctx) {\n"); - grammarBuilder.append(" Console.Write(\"{0} {1}\",ctx.e().Start.Text,ctx.eList());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" public override void ExitInt(TParser.IntContext ctx) {\n"); - grammarBuilder.append(" Console.WriteLine(ctx.INT().Symbol.Text);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1\n" + - "2\n" + - "3\n" + - "1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(614); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class LeafListener : TBaseListener {\n"); - grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.ChildCount==2) {\n"); - grammarBuilder.append(" Console.Write(\"{0} {1} {2}\",ctx.b(0).Start.Text,\n"); - grammarBuilder.append(" ctx.b(1).Start.Text,ctx.b()[0].Start.Text);\n"); - grammarBuilder.append(" } else\n"); - grammarBuilder.append(" Console.WriteLine(ctx.b(0).Start.Text);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(614); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class LeafListener : TBaseListener {\n"); - grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.ChildCount==2) {\n"); - grammarBuilder.append(" Console.Write(\"{0} {1} {2}\",ctx.b(0).Start.Text,\n"); - grammarBuilder.append(" ctx.b(1).Start.Text,ctx.b()[0].Start.Text);\n"); - grammarBuilder.append(" } else\n"); - grammarBuilder.append(" Console.WriteLine(ctx.b(0).Start.Text);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(781); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class LeafListener : TBaseListener {\n"); - grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.ChildCount==2)\n"); - grammarBuilder.append(" {\n"); - grammarBuilder.append(" StringBuilder sb = new StringBuilder (\"[\");\n"); - grammarBuilder.append(" foreach (ITerminalNode node in ctx.INT ()) {\n"); - grammarBuilder.append(" sb.Append (node.ToString ());\n"); - grammarBuilder.append(" sb.Append (\", \");\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" sb.Length = sb.Length - 2;\n"); - grammarBuilder.append(" sb.Append (\"]\");\n"); - grammarBuilder.append(" Console.Write (\"{0} {1} {2}\", ctx.INT (0).Symbol.Text,\n"); - grammarBuilder.append(" ctx.INT (1).Symbol.Text, sb.ToString());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" else\n"); - grammarBuilder.append(" Console.WriteLine(ctx.ID().Symbol);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(781); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class LeafListener : TBaseListener {\n"); - grammarBuilder.append(" public override void ExitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.ChildCount==2)\n"); - grammarBuilder.append(" {\n"); - grammarBuilder.append(" StringBuilder sb = new StringBuilder (\"[\");\n"); - grammarBuilder.append(" foreach (ITerminalNode node in ctx.INT ()) {\n"); - grammarBuilder.append(" sb.Append (node.ToString ());\n"); - grammarBuilder.append(" sb.Append (\", \");\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" sb.Length = sb.Length - 2;\n"); - grammarBuilder.append(" sb.Append (\"]\");\n"); - grammarBuilder.append(" Console.Write (\"{0} {1} {2}\", ctx.INT (0).Symbol.Text,\n"); - grammarBuilder.append(" ctx.INT (1).Symbol.Text, sb.ToString());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" else\n"); - grammarBuilder.append(" Console.WriteLine(ctx.ID().Symbol);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.Walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParseTrees.java index 3ff7bb4e1..3363fa156 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParseTrees.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParseTrees.java @@ -1,253 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestParseTrees extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2AltLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xyyxyxz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x y y x y x z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2Alts() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAltNum() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(547); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public class MyRuleNode : ParserRuleContext {\n"); - grammarBuilder.append(" public int altNum;\n"); - grammarBuilder.append(" public MyRuleNode(ParserRuleContext parent, int invokingStateNumber): base(parent, invokingStateNumber)\n"); - grammarBuilder.append(" {\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" public override int getAltNumber() { return altNum; }\n"); - grammarBuilder.append(" public override void setAltNumber(int altNum) { this.altNum = altNum; }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("a : 'f'\n"); - grammarBuilder.append(" | 'g'\n"); - grammarBuilder.append(" | 'x' b 'z'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'e' {} | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xyz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a:3 x (b:2 y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExtraToken() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(148); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - String input ="xzy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x z y)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - String input ="z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a z)\n", found); - - assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleRef() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(144); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b 'x'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'y' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="yx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a (b y) x)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSync() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(151); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'* '!'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xzyy!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x z y y !)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToken2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(133); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenAndRuleContextString() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.BuildParseTree = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($r.ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' { \n"); - grammarBuilder.append("Console.WriteLine(GetRuleInvocationStackAsString());\n"); - grammarBuilder.append("} ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "[a, s]\n" + - "(a x)\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserErrors.java index a6675e43a..3dabedda9 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserErrors.java @@ -1,557 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestParserErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpToken() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x='b' {Console.WriteLine(\"conjured=\" + $x);} 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpTokenFromSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(75); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x=('b'|'c') {Console.WriteLine(\"conjured=\" + $x);} 'd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testContextListGetters() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(187); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members{\n"); - grammarBuilder.append("void foo() {\n"); - grammarBuilder.append(" SContext s = null;\n"); - grammarBuilder.append(" AContext[] a = s.a();\n"); - grammarBuilder.append(" BContext[] b = s.b();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : (a | b)+;\n"); - grammarBuilder.append("a : 'a' {Console.Write(\"a\");};\n"); - grammarBuilder.append("b : 'b' {Console.Write(\"b\");};"); - String grammar = grammarBuilder.toString(); - String input ="abab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("abab\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xxxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidATNStateRemoval() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input ="x:x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidEmptyInput() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID+;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - - assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1ErrorInfo() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(305); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); - grammarBuilder.append("animal : (DOG | CAT );\n"); - grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); - grammarBuilder.append("AND : 'and';\n"); - grammarBuilder.append("DOG : 'dog';\n"); - grammarBuilder.append("CAT : 'cat';\n"); - grammarBuilder.append("HARDWARE: 'hardware';\n"); - grammarBuilder.append("SOFTWARE: 'software';\n"); - grammarBuilder.append("WS : ' ' -> skip ;\n"); - grammarBuilder.append("acClass\n"); - grammarBuilder.append("@init\n"); - grammarBuilder.append("{Console.WriteLine(this.GetExpectedTokens().ToString(this.Vocabulary));}\n"); - grammarBuilder.append(" : ;"); - String grammar = grammarBuilder.toString(); - String input ="dog and software"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals("{'hardware', 'software'}\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'\n"); - grammarBuilder.append(" | 'a' 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="ae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(55); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c'\n"); - grammarBuilder.append(" | 'a' 'b' 'd'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="abe"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLLStar() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="aaae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c';"); - String grammar = grammarBuilder.toString(); - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); - String grammar = grammarBuilder.toString(); - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAltAvoidance() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e '!' ;\n"); - grammarBuilder.append("e : 'a' 'b'\n"); - grammarBuilder.append(" | 'a'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a."; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(34); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertionConsumption() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {Console.WriteLine(\"\" + $myset.stop);} ; "); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("[@0,0:0='a',<3>,1:0]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('b' | 'c')\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'a'\n"); - grammarBuilder.append(";"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(25); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* ;"); - String grammar = grammarBuilder.toString(); - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(32); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); - String grammar = grammarBuilder.toString(); - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforePredict() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="caaab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionConsumption() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {Console.WriteLine(\"\" + $myset.stop);} ; "); - String grammar = grammarBuilder.toString(); - String input ="aabd"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("[@2,2:2='b',<1>,1:2]\n", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionExpectingSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenInsertion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); - grammarBuilder.append("expr: ID '=' STR ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="( ~FORCE_ERROR~ "; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - - assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserExec.java index 5c74af082..5ee235c5c 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestParserExec.java @@ -1,628 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestParserExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAPlus() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID+ {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAPlus() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)+ {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorB() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(148); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID {\n"); - grammarBuilder.append("Console.WriteLine(\"alt 1\");\n"); - grammarBuilder.append("} | INT {\n"); - grammarBuilder.append("Console.WriteLine(\"alt 2\");\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBPlus() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})+ {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(111); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID INT {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc34\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFInClosure() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : stat EOF;\n"); - grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(199); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(199); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(200); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(199); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(116); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(116); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("Console.WriteLine($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(183); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : a* EOF;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : label=subrule {Console.WriteLine($label.text);} #One\n"); - grammarBuilder.append(" | label='y' {Console.WriteLine($label.text);} #Two\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("subrule : 'x';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "x\n" + - "y\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabels() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); - grammarBuilder.append("b : id_=ID val+=INT*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelForClosureContext() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(479); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("ifStatement\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.Collections.IList __ttt__ = $ctx.elseIfStatement();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : 'if' expression\n"); - grammarBuilder.append(" ( ( 'then'\n"); - grammarBuilder.append(" executableStatement*\n"); - grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); - grammarBuilder.append(" elseStatement?\n"); - grammarBuilder.append(" 'end' 'if'\n"); - grammarBuilder.append(" ) | executableStatement )\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("elseIfStatement\n"); - grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expression : 'a' ;\n"); - grammarBuilder.append("executableStatement : 'a' ;\n"); - grammarBuilder.append("elseStatement : 'a' ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "expression", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelsOnSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b b* ';' ;\n"); - grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleEOFHandling() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(42); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserProperty() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(163); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("bool Property() {\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("a : {$parser.Property()}? ID {Console.WriteLine(\"valid\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("valid\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedIfIfElse() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(180); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : stmt EOF ;\n"); - grammarBuilder.append("stmt : ifStmt | ID;\n"); - grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { this.InputStream.La(1)!=TParser.ELSE }?);\n"); - grammarBuilder.append("ELSE : 'else';\n"); - grammarBuilder.append("ID : [a-zA-Z]+;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="if x if x a else b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredictionIssue334() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_ @init{\n"); - grammarBuilder.append("ErrorHandler = new BailErrorStrategy();\n"); - grammarBuilder.append("} \n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); - grammarBuilder.append("item : A B?;\n"); - grammarBuilder.append("SEMICOLON: ';';\n"); - grammarBuilder.append("A : 'a'|'A';\n"); - grammarBuilder.append("B : 'b'|'B';\n"); - grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "file_", input, false); - assertEquals("(file_ (item a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {Console.WriteLine($text);} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {Console.WriteLine($text);} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestPerformance.java index aab9beec4..93d2c9e64 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestPerformance.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestPerformance.java @@ -1,205 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestPerformance extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalLexer.java index 712370d95..7ccad61bf 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalLexer.java @@ -1,201 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestSemPredEvalLexer extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisableRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("E1 : 'enum' { false }? ;\n"); - grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<3>,1:5]\n" + - "[@2,8:7='',<-1>,1:8]\n" + - "s0-' '->:s5=>4\n" + - "s0-'a'->:s6=>3\n" + - "s0-'e'->:s1=>3\n" + - ":s1=>3-'n'->:s2=>3\n" + - ":s2=>3-'u'->:s3=>3\n" + - ":s6=>3-'b'->:s6=>3\n" + - ":s6=>3-'c'->:s6=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnumNotID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(103); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { this.Text.Equals(\"enum\") }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<1>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s3=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDnotEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s2=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDvsEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s5=>3\n" + - "s0-'a'->:s4=>2\n" + - "s0-'e'->:s1=>2\n" + - ":s1=>2-'n'->:s2=>2\n" + - ":s2=>2-'u'->:s3=>2\n" + - ":s4=>2-'b'->:s4=>2\n" + - ":s4=>2-'c'->:s4=>2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndent() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(147); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { this.TokenStartColumn==0 }?\n"); - grammarBuilder.append(" { Console.WriteLine(\"INDENT\"); } ;\n"); - grammarBuilder.append("NL : '\\n';\n"); - grammarBuilder.append("WS : [ \\t]+ ;"); - String grammar = grammarBuilder.toString(); - String input = - "abc\n" + - " def \n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "INDENT\n" + - "[@0,0:2='abc',<1>,1:0]\n" + - "[@1,3:3='\\n',<3>,1:3]\n" + - "[@2,4:5=' ',<2>,2:0]\n" + - "[@3,6:8='def',<1>,2:2]\n" + - "[@4,9:10=' ',<4>,2:5]\n" + - "[@5,11:11='\\n',<3>,2:7]\n" + - "[@6,12:11='',<-1>,3:0]\n" + - "s0-'\n" + - "'->:s2=>3\n" + - "s0-'a'->:s1=>1\n" + - "s0-'d'->:s1=>1\n" + - ":s1=>1-'b'->:s1=>1\n" + - ":s1=>1-'c'->:s1=>1\n" + - ":s1=>1-'e'->:s1=>1\n" + - ":s1=>1-'f'->:s1=>1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerInputPositionSensitivePredicates() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(232); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WORD1 : ID1+ { Console.WriteLine(this.Text); } ;\n"); - grammarBuilder.append("WORD2 : ID2+ { Console.WriteLine(this.Text); } ;\n"); - grammarBuilder.append("fragment ID1 : { this.Column < 2 }? [a-zA-Z];\n"); - grammarBuilder.append("fragment ID2 : { this.Column >= 2 }? [a-zA-Z];\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input = - "a cde\n" + - "abcde\n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "a\n" + - "cde\n" + - "ab\n" + - "cde\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:4='cde',<2>,1:2]\n" + - "[@2,6:7='ab',<1>,2:0]\n" + - "[@3,8:10='cde',<2>,2:2]\n" + - "[@4,12:11='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedKeywords() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(175); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { this.Text.Equals(\"enum\") }? { Console.WriteLine(\"enum!\"); } ;\n"); - grammarBuilder.append("ID : [a-z]+ { Console.WriteLine(\"ID \" + this.Text); } ;\n"); - grammarBuilder.append("WS : [ \\n] -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="enum enu a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "enum!\n" + - "ID enu\n" + - "ID a\n" + - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='enu',<2>,1:5]\n" + - "[@2,9:9='a',<2>,1:9]\n" + - "[@3,10:9='',<-1>,1:10]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalParser.java index b70ef1b29..8254f789d 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSemPredEvalParser.java @@ -1,630 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestSemPredEvalParser extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAlts() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(311); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;} a ';' a; // do 2x: once in ATN, next in DFA\n"); - grammarBuilder.append("a : ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" | {false}? ID {Console.WriteLine(\"alt 3\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - - assertEquals( - "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + - "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(369); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;} a ';' a ';' a;\n"); - grammarBuilder.append("a : INT {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | ID {Console.WriteLine(\"alt 2\");} // must pick this one for ID since pred is false\n"); - grammarBuilder.append(" | ID {Console.WriteLine(\"alt 3\");}\n"); - grammarBuilder.append(" | {false}? ID {Console.WriteLine(\"alt 4\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34; x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "alt 1\n" + - "alt 2\n" + - "alt 2\n", found); - - assertEquals( - "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + - "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionHidesPreds() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(245); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a+ ;\n"); - grammarBuilder.append("a : {this.i = 1;} ID {this.i == 1}? {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {this.i = 2;} ID {this.i == 2}? {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionsHidePredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(312); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); - grammarBuilder.append(" Console.WriteLine(\"eval=\"+v.ToString().ToLower());\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {} {this.pred(true)}? {Console.WriteLine(\"parse\");} '!' ;\n"); - grammarBuilder.append("t : e {} {this.pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAtomWithClosureInTranslatedLRRule() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : e[0] EOF;\n"); - grammarBuilder.append("e[int _p]\n"); - grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); - grammarBuilder.append(" ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b+a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDepedentPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(335); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); - grammarBuilder.append(" Console.WriteLine(\"eval=\"+v.ToString().ToLower());\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : a[99] ;\n"); - grammarBuilder.append("a[int i] : e {this.pred($i==99)}? {Console.WriteLine(\"parse\");} '!' ;\n"); - grammarBuilder.append("b[int i] : e {this.pred($i==99)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(282); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); - grammarBuilder.append("b[int i] : a[i] ;\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {$i==2}? ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisabledAlternative() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); - grammarBuilder.append("content: anything | {false}? .;\n"); - grammarBuilder.append("anything: ANY_CHAR;\n"); - grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); - String grammar = grammarBuilder.toString(); - String input ="hello"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "cppCompilationUnit", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(195); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b ';' | b '.' ;\n"); - grammarBuilder.append("b : a ;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoTruePredsThrowsNoViableAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(183); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {false}? ID INT {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {false}? ID INT {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOrder() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(309); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); - grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); - grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); - grammarBuilder.append("a : ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {Console.WriteLine($ctx.ToStringTree(this));}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{this.InputStream.La(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - String input = - "s\n" + - "\n" + - "\n" + - "x\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); - - assertEquals( - "line 5:0 mismatched input '' expecting '\n" + - "'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {Console.WriteLine($ctx.ToStringTree(this));}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{this.InputStream.La(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - String input = - "s\n" + - "\n" + - "\n" + - "x\n" + - "\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(221); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {Console.WriteLine(\"ID \"+$ID.text);}\n"); - grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {Console.WriteLine(\"enum\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "primary", input, false); - assertEquals("ID abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(221); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {bool enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {Console.WriteLine(\"ID \"+$ID.text);}\n"); - grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {Console.WriteLine(\"enum\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="enum"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "primary", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(220); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {$i==2}? ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID \n"); - grammarBuilder.append(" | {$i==2}? ID \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(306); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); - grammarBuilder.append(" Console.WriteLine(\"eval=\"+v.ToString().ToLower());\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {this.pred(true)}? {Console.WriteLine(\"parse\");} '!' ;\n"); - grammarBuilder.append("t : e {this.pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRewindBeforePredEval() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(251); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {this.TokenStream.Lt(1).Text.Equals(\"x\")}? ID INT {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {this.TokenStream.Lt(1).Text.Equals(\"y\")}? ID INT {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(274); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); - grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" | INT {Console.WriteLine(\"alt 3\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y 3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(176); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(179); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a;\n"); - grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="3 4 x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n", found); - - assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeft() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(176); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append(" s : a+ ;\n"); - grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeftWithVaryingPredicate() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : ({this.i += 1;\n"); - grammarBuilder.append("Console.Write(\"i=\");\n"); - grammarBuilder.append("Console.WriteLine(this.i);} a)+ ;\n"); - grammarBuilder.append("a : {this.i % 2 == 0}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {this.i % 2 != 0}? ID {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "i=1\n" + - "alt 2\n" + - "i=2\n" + - "alt 1\n" + - "i=3\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testUnpredicatedPathsInAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(195); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | b {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("a : {false}? ID INT\n"); - grammarBuilder.append(" | ID INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testValidateInDFA() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(344); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ';' a;\n"); - grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); - grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); - grammarBuilder.append("// throws an exception if the validating predicate fails\n"); - grammarBuilder.append("a : {false}? ID {Console.WriteLine(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {Console.WriteLine(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x ; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 no viable alternative at input 'x'\n" + - "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSets.java index 2b734b8a5..1ab34822f 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestSets.java @@ -1,359 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestSets extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetLiteral() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (A {Console.WriteLine($A.text);})+ ;\n"); - grammarBuilder.append("A : [AaBb] ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="A a B b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals( - "A\n" + - "a\n" + - "B\n" + - "b\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testComplementSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("parse : ~NEW_LINE;\n"); - grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "parse", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 token recognition error at: 'a'\n" + - "line 1:1 missing {} at ''\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerOptionalSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')? 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerPlusSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerStarSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotChar() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); - grammarBuilder.append("A : ~'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(65); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); - grammarBuilder.append("A : ~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithLabel() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(67); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); - grammarBuilder.append("A : h=~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithRuleRef3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine($A.text);} ;\n"); - grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("B : ~('a'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalLexerSingleElement() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : 'b'? 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {Console.WriteLine(this.TokenStream.GetText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSingleElement() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~('x'|'y') 'z' {Console.WriteLine($t.text);} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotToken() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(74); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {Console.WriteLine(this.TokenStream.GetText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("zz\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotTokenWithLabel() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~'x' 'z' {Console.WriteLine($t.text);} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=('x'|'y') {Console.WriteLine($t.text);} ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusLexerSingleElement() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : 'b'+ 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {Console.WriteLine(this.TokenStream.GetText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleAsSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(87); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {Console.WriteLine(this.TokenStream.GetText());} : 'a' | 'b' |'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("b\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSeqDoesNotBecomeSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(124); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("fragment A : '1' | '2';\n"); - grammarBuilder.append("fragment B : '3' '4';\n"); - grammarBuilder.append("C : A | B;"); - String grammar = grammarBuilder.toString(); - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("34\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {Console.WriteLine(this.TokenStream.GetText());} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {Console.WriteLine(this.TokenStream.GetText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestVisitors.java index 7431d748a..2eb5c8c83 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestVisitors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/TestVisitors.java @@ -1,260 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.csharp; -import org.junit.Ignore; -import org.junit.Test; - -@SuppressWarnings("unused") -public class TestVisitors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testBasic() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(223); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "[ '1', '2' ]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLR() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1,,2,,32 3 21 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(278); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1,,2,,3,1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - ",1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(223); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - ",1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(223); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("Console.WriteLine($ctx.r.ToStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseCSharpTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "CSharp"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeLexersDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeLexersDescriptors.java new file mode 100644 index 000000000..2ef5f1306 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeLexersDescriptors.java @@ -0,0 +1,92 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.runtime.misc.Pair; +import org.antlr.v4.test.runtime.BaseCompositeLexerTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +import java.util.ArrayList; +import java.util.List; + +public class CompositeLexersDescriptors { + public static class LexerDelegatorInvokesDelegateRule extends BaseCompositeLexerTestDescriptor { + public String input = "abc"; + /** + S.A + [@0,0:0='a',<3>,1:0] + [@1,1:1='b',<1>,1:1] + [@2,2:2='c',<4>,1:2] + [@3,3:2='',<-1>,1:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "M"; + + /** + lexer grammar M; + import S; + B : 'b'; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + lexer grammar S; + A : 'a' {}; + C : 'c' ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",slaveGrammarS)); + + return slaves; + } + } + + public static class LexerDelegatorRuleOverridesDelegate extends BaseCompositeLexerTestDescriptor { + public String input = "ab"; + /** + M.A + [@0,0:1='ab',<1>,1:0] + [@1,2:1='',<-1>,1:2] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "M"; + + /** + lexer grammar M; + import S; + A : 'a' B {} ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + lexer grammar S; + A : 'a' {} ; + B : 'b' {} ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",slaveGrammarS)); + + return slaves; + } + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeParsersDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeParsersDescriptors.java new file mode 100644 index 000000000..618d34459 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/CompositeParsersDescriptors.java @@ -0,0 +1,605 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.runtime.misc.Pair; +import org.antlr.v4.test.runtime.BaseCompositeParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +import java.util.ArrayList; +import java.util.List; + +public class CompositeParsersDescriptors { + public static class BringInLiteralsFromDelegate extends BaseCompositeParserTestDescriptor { + public String input = "=a"; + public String output = "S.a\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; + import S; + s : a ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + a : '=' 'a' {}; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class CombinedImportsCombined extends BaseCompositeParserTestDescriptor { + public String input = "x 34 9"; + public String output = "S.x\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + new Grammar(tmpdir+"/M.g4", grammar, equeue); + assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); + */ + @CommentHasStringValue + public String afterGrammar; + + /** + grammar M; + import S; + s : x INT; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + tokens { A, B, C } + x : 'x' INT {}; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatesSeeSameTokenType extends BaseCompositeParserTestDescriptor { + public String input = "aa"; + /** + S.x + T.y + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + writeFile(tmpdir, "M.g4", grammar); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); + String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; + String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; + String expectedTypeToTokenList = "[B, A, C, WS]"; + assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); + assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); + assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); + */ + @CommentHasStringValue + public String afterGrammar; + + /** + // The lexer will create rules to match letters a, b, c. + // The associated token types A, B, C must have the same value + // and all import'd parsers. Since ANTLR regenerates all imports + // for use with the delegator M, it can generate the same token type + // mapping in each parser: + // public static final int C=6; + // public static final int EOF=-1; + // public static final int B=5; + // public static final int WS=7; + // public static final int A=4; + grammar M; + import S,T; + s : x y ; // matches AA, which should be 'aa' + B : 'b' ; // another order: B, A, C + A : 'a' ; + C : 'c' ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar T; + tokens { C, B, A } // reverse order + y : A {}; + */ + @CommentHasStringValue + public String slaveGrammarT; + /** + parser grammar S; + tokens { A, B, C } + x : A {}; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("T",stringIndentation(slaveGrammarT))); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorAccessesDelegateMembers extends BaseCompositeParserTestDescriptor { + public String input = "b"; + public String output = "foo\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; // uses no rules from the import + import S; + s : 'b' {} ; // gS is import pointer + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + @parser::members { + + } + a : B; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorInvokesDelegateRule extends BaseCompositeParserTestDescriptor { + public String input = "b"; + public String output = "S.a\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; + import S; + s : a ; + B : 'b' ; // defines B from inherited token space + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + a : B {}; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorInvokesDelegateRuleWithArgs extends BaseCompositeParserTestDescriptor { + public String input = "b"; + public String output = "S.a1000\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; + import S; + s : label=a[3] {} ; + B : 'b' ; // defines B from inherited token space + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + a[int x] returns [int y] : B {} {$y=1000;} ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorInvokesDelegateRuleWithReturnStruct extends BaseCompositeParserTestDescriptor { + public String input = "b"; + public String output = "S.ab\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; + import S; + s : a {} ; + B : 'b' ; // defines B from inherited token space + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + a : B {} ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorInvokesFirstVersionOfDelegateRule extends BaseCompositeParserTestDescriptor { + public String input = "b"; + public String output = "S.a\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; + import S,T; + s : a ; + B : 'b' ; // defines B from inherited token space + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar T; + a : B {}; + */ + @CommentHasStringValue + public String slaveGrammarT; + /** + parser grammar S; + a : b {}; + b : B; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("T",stringIndentation(slaveGrammarT))); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorRuleOverridesDelegate extends BaseCompositeParserTestDescriptor { + public String input = "c"; + public String output = "S.a\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "M"; + + /** + grammar M; + import S; + b : 'b'|'c'; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + a : b {}; + b : B ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorRuleOverridesDelegates extends BaseCompositeParserTestDescriptor { + public String input = "c"; + /** + M.b + S.a + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "a"; + public String grammarName = "M"; + + /** + grammar M; + import S, T; + b : 'b'|'c' {}|B|A; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar T; + tokens { A } + b : 'b' {}; + */ + @CommentHasStringValue + public String slaveGrammarT; + /** + parser grammar S; + a : b {}; + b : 'b' ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("T",stringIndentation(slaveGrammarT))); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class DelegatorRuleOverridesLookaheadInDelegate extends BaseCompositeParserTestDescriptor { + public String input = "float x = 3;"; + public String output = "JavaDecl: floatx=3;\n"; + public String errors = ""; + public String startRule = "prog"; + public String grammarName = "M"; + + /** + grammar M; + import S; + prog : decl ; + type_ : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + type_ : 'int' ; + decl : type_ ID ';' + | type_ ID init ';' {}; + init : '=' INT; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + /* + * This is a regression test for antlr/antlr4#248 "Including grammar with only + * fragments breaks generated lexer". + * https://github.com/antlr/antlr4/issues/248 + */ + public static class ImportLexerWithOnlyFragmentRules extends BaseCompositeParserTestDescriptor { + public String input = "test test"; + public String output = ""; + public String errors = ""; + public String startRule = "program"; + public String grammarName = "Test"; + + /** + grammar Test; + import Unicode; + + program : 'test' 'test'; + + WS : (UNICODE_CLASS_Zs)+ -> skip; + + */ + @CommentHasStringValue + public String grammar; + + /** + lexer grammar Unicode; + + fragment + UNICODE_CLASS_Zs : '\u0020' | '\u00A0' | '\u1680' | '\u180E' + | '\u2000'..'\u200A' + | '\u202F' | '\u205F' | '\u3000' + ; + + */ + @CommentHasStringValue + public String slaveGrammarUnicode; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("Unicode",stringIndentation(slaveGrammarUnicode))); + + return slaves; + } + } + + public static class ImportedGrammarWithEmptyOptions extends BaseCompositeParserTestDescriptor { + public String input = "b"; + public String output = ""; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; + import S; + s : a ; + B : 'b' ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + options {} + a : B ; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class ImportedRuleWithAction extends BaseCompositeParserTestDescriptor { + public String input = "b"; + public String output = ""; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "M"; + + /** + grammar M; + import S; + s : a; + B : 'b'; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + parser grammar S; + a @after {} : B; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } + + public static class KeywordVSIDOrder extends BaseCompositeParserTestDescriptor { + public String input = "abc"; + /** + M.A + M.a: [@0,0:2='abc',<1>,1:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "a"; + public String grammarName = "M"; + + /** + grammar M; + import S; + a : A {}; + A : 'abc' {}; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + /** + lexer grammar S; + ID : 'a'..'z'+; + */ + @CommentHasStringValue + public String slaveGrammarS; + + @Override + public List> getSlaveGrammars() { + List> slaves = new ArrayList>(); + slaves.add(new Pair("S",stringIndentation(slaveGrammarS))); + + return slaves; + } + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/FullContextParsingDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/FullContextParsingDescriptors.java new file mode 100644 index 000000000..3445e1ef5 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/FullContextParsingDescriptors.java @@ -0,0 +1,419 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseDebugParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class FullContextParsingDescriptors { + public static class AmbigYieldsCtxSensitiveDFA extends BaseDebugParserTestDescriptor { + public String input = "abc"; + /** + Decision 0: + s0-ID->:s1^=>1 + */ + @CommentHasStringValue + public String output; + + public String errors = "line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} + : ID | ID {} ; + ID : 'a'..'z'+; + WS : (' '|'\t'|'\n')+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + } + + public static class AmbiguityNoLoop extends BaseDebugParserTestDescriptor { + public String input = "a@"; + public String output = "alt 1\n"; + /** + line 1:2 reportAttemptingFullContext d=0 (prog), input='a@' + line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@' + line 1:2 reportAttemptingFullContext d=1 (expr), input='a@' + line 1:2 reportContextSensitivity d=1 (expr), input='a@' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "prog"; + public String grammarName = "T"; + + /** + grammar T; + prog + @init {} + : expr expr {} + | expr + ; + expr: '@' + | ID '@' + | ID + ; + ID : [a-z]+ ; + WS : [ \r\n\t]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + } + + public static class CtxSensitiveDFATwoDiffInput extends BaseDebugParserTestDescriptor { + public String input = "$ 34 abc @ 34 abc"; + /** + Decision 2: + s0-INT->s1 + s1-ID->:s2^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:5 reportAttemptingFullContext d=2 (e), input='34abc' + line 1:2 reportContextSensitivity d=2 (e), input='34' + line 1:14 reportAttemptingFullContext d=2 (e), input='34abc' + line 1:14 reportContextSensitivity d=2 (e), input='34abc' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} + : ('$' a | '@' b)+ ; + a : e ID ; + b : e INT ID ; + e : INT | ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\t'|'\n')+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class CtxSensitiveDFA extends BaseDebugParserTestDescriptor { + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} + : '$' a | '@' b ; + a : e ID ; + b : e INT ID ; + e : INT | ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\t'|'\n')+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class CtxSensitiveDFA_1 extends CtxSensitiveDFA { + public String input = "$ 34 abc"; + /** + Decision 1: + s0-INT->s1 + s1-ID->:s2^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:5 reportAttemptingFullContext d=1 (e), input='34abc' + line 1:2 reportContextSensitivity d=1 (e), input='34' + */ + @CommentHasStringValue + public String errors; + + } + + public static class CtxSensitiveDFA_2 extends CtxSensitiveDFA { + public String input = "@ 34 abc"; + /** + Decision 1: + s0-INT->s1 + s1-ID->:s2^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:5 reportAttemptingFullContext d=1 (e), input='34abc' + line 1:5 reportContextSensitivity d=1 (e), input='34abc' + */ + @CommentHasStringValue + public String errors; + } + + public static abstract class ExprAmbiguity extends BaseDebugParserTestDescriptor { + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init {} + : expr[0] {}; + expr[int _p] + : ID + ( + {5 >= $_p}? '*' expr[6] + | {4 >= $_p}? '+' expr[5] + )* + ; + ID : [a-zA-Z]+ ; + WS : [ \r\n\t]+ -> skip ; + + */ + @CommentHasStringValue + public String grammar; + } + + public static class ExprAmbiguity_1 extends ExprAmbiguity { + public String input = "a+b"; + public String output = "(expr a + (expr b))\n"; + /** + line 1:1 reportAttemptingFullContext d=1 (expr), input='+' + line 1:2 reportContextSensitivity d=1 (expr), input='+b' + */ + @CommentHasStringValue + public String errors; + } + + public static class ExprAmbiguity_2 extends ExprAmbiguity { + public String input = "a+b*c"; + public String output = "(expr a + (expr b * (expr c)))\n"; + /** + line 1:1 reportAttemptingFullContext d=1 (expr), input='+' + line 1:2 reportContextSensitivity d=1 (expr), input='+b' + line 1:3 reportAttemptingFullContext d=1 (expr), input='*' + line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c' + */ + @CommentHasStringValue + public String errors; + } + + public static abstract class FullContextIF_THEN_ELSEParse extends BaseDebugParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init {} + @after {} + : '{' stat* '}' ; + stat: 'if' ID 'then' stat ('else' ID)? + | 'return' + ; + ID : 'a'..'z'+ ; + WS : (' '|'\t'|'\n')+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class FullContextIF_THEN_ELSEParse_1 extends FullContextIF_THEN_ELSEParse { + public String input = "{ if x then return }"; + /** + Decision 1: + s0-'}'->:s1=>2 + */ + @CommentHasStringValue + public String output; + } + + public static class FullContextIF_THEN_ELSEParse_2 extends FullContextIF_THEN_ELSEParse { + public String input = "{ if x then return else foo }"; + /** + Decision 1: + s0-'else'->:s1^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:19 reportAttemptingFullContext d=1 (stat), input='else' + line 1:19 reportContextSensitivity d=1 (stat), input='else' + */ + @CommentHasStringValue + public String errors; + } + + public static class FullContextIF_THEN_ELSEParse_3 extends FullContextIF_THEN_ELSEParse { + public String input = "{ if x then if y then return else foo }"; + /** + Decision 1: + s0-'}'->:s2=>2 + s0-'else'->:s1^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:29 reportAttemptingFullContext d=1 (stat), input='else' + line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}' + */ + @CommentHasStringValue + public String errors; + } + + public static class FullContextIF_THEN_ELSEParse_4 extends FullContextIF_THEN_ELSEParse { + public String input = "{ if x then if y then return else foo else bar }"; + /** + Decision 1: + s0-'else'->:s1^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:29 reportAttemptingFullContext d=1 (stat), input='else' + line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse' + line 1:38 reportAttemptingFullContext d=1 (stat), input='else' + line 1:38 reportContextSensitivity d=1 (stat), input='else' + */ + @CommentHasStringValue + public String errors; + } + + public static class FullContextIF_THEN_ELSEParse_5 extends FullContextIF_THEN_ELSEParse { + /** + { if x then return else foo + if x then if y then return else foo } + */ + @CommentHasStringValue + public String input; + + /** + Decision 1: + s0-'}'->:s2=>2 + s0-'else'->:s1^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:19 reportAttemptingFullContext d=1 (stat), input='else' + line 1:19 reportContextSensitivity d=1 (stat), input='else' + line 2:27 reportAttemptingFullContext d=1 (stat), input='else' + line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}' + */ + @CommentHasStringValue + public String errors; + } + + public static class FullContextIF_THEN_ELSEParse_6 extends FullContextIF_THEN_ELSEParse { + /** + { if x then return else foo + if x then if y then return else foo } + */ + @CommentHasStringValue + public String input; + + /** + Decision 1: + s0-'}'->:s2=>2 + s0-'else'->:s1^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:19 reportAttemptingFullContext d=1 (stat), input='else' + line 1:19 reportContextSensitivity d=1 (stat), input='else' + line 2:27 reportAttemptingFullContext d=1 (stat), input='else' + line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}' + */ + @CommentHasStringValue + public String errors; + } + + /* + * Tests predictions for the following case involving closures. + * http://www.antlr.org/wiki/display/~admin/2011/12/29/Flaw+in+ANTLR+v3+LL(*)+analysis+algorithm + */ + public static class LoopsSimulateTailRecursion extends BaseDebugParserTestDescriptor { + public String input = "a(i)<-x"; + public String output = "pass: a(i)<-x\n"; + /** + line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)' + line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "prog"; + public String grammarName = "T"; + + /** + grammar T; + prog + @init {} + : expr_or_assign*; + expr_or_assign + : expr '++' {} + | expr {} + ; + expr: expr_primary ('\<-' ID)?; + expr_primary + : '(' ID ')' + | ID '(' ID ')' + | ID + ; + ID : [a-z]+ ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SLLSeesEOFInLLGrammar extends BaseDebugParserTestDescriptor { + public String input = "34 abc"; + /** + Decision 0: + s0-INT->s1 + s1-ID->:s2^=>1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:3 reportAttemptingFullContext d=0 (e), input='34abc' + line 1:0 reportContextSensitivity d=0 (e), input='34' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} + : a; + a : e ID ; + b : e INT ID ; + e : INT | ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\t'|'\n')+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LeftRecursionDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LeftRecursionDescriptors.java new file mode 100644 index 000000000..f78ef51c0 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LeftRecursionDescriptors.java @@ -0,0 +1,1139 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class LeftRecursionDescriptors { + public static abstract class AmbigLR extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "prog"; + public String grammarName = "Expr"; + + /** + grammar Expr; + prog: stat ; + stat: expr NEWLINE # printExpr + | ID '=' expr NEWLINE # assign + | NEWLINE # blank + ; + expr: expr ('*'|'/') expr # MulDiv + | expr ('+'|'-') expr # AddSub + | INT # int + | ID # id + | '(' expr ')' # parens + ; + + MUL : '*' ; // assigns token name to '*' used above in grammar + DIV : '/' ; + ADD : '+' ; + SUB : '-' ; + ID : [a-zA-Z]+ ; // match identifiers + INT : [0-9]+ ; // match integers + NEWLINE:'\r'? '\n' ; // return newlines to parser (is end-statement signal) + WS : [ \t]+ -> skip ; // toss out whitespace + */ + @CommentHasStringValue + public String grammar; + } + + public static class AmbigLR_1 extends AmbigLR { + public String input = "1\n"; + public String output = ""; + } + + public static class AmbigLR_2 extends AmbigLR { + public String input = "a = 5\n"; + public String output = ""; + } + + public static class AmbigLR_3 extends AmbigLR { + public String input = "b = 6\n"; + public String output = ""; + } + + public static class AmbigLR_4 extends AmbigLR { + public String input = "a+b*2\n"; + public String output = ""; + } + + public static class AmbigLR_5 extends AmbigLR { + public String input = "(1+2)*3\n"; + public String output = ""; + } + + public static abstract class Declarations extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : declarator EOF ; // must indicate EOF can follow + declarator + : declarator '[' e ']' + | declarator '[' ']' + | declarator '(' ')' + | '*' declarator // binds less tight than suffixes + | '(' declarator ')' + | ID + ; + e : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Declarations_1 extends Declarations { + public String input = "a"; + public String output = "(s (declarator a) )\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : declarator EOF ; // must indicate EOF can follow + declarator + : declarator '[' e ']' + | declarator '[' ']' + | declarator '(' ')' + | '*' declarator // binds less tight than suffixes + | '(' declarator ')' + | ID + ; + e : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Declarations_2 extends Declarations { + public String input = "*a"; + public String output = "(s (declarator * (declarator a)) )\n"; + } + + public static class Declarations_3 extends Declarations { + public String input = "**a"; + public String output = "(s (declarator * (declarator * (declarator a))) )\n"; + } + + public static class Declarations_4 extends Declarations { + public String input = "a[3]"; + public String output = "(s (declarator (declarator a) [ (e 3) ]) )\n"; + } + + public static class Declarations_5 extends Declarations { + public String input = "b[]"; + public String output = "(s (declarator (declarator b) [ ]) )\n"; + } + + public static class Declarations_6 extends Declarations { + public String input = "(a)"; + public String output = "(s (declarator ( (declarator a) )) )\n"; + } + + public static class Declarations_7 extends Declarations { + public String input = "a[]()"; + public String output = "(s (declarator (declarator (declarator a) [ ]) ( )) )\n"; + } + + public static class Declarations_8 extends Declarations { + public String input = "a[][]"; + public String output = "(s (declarator (declarator (declarator a) [ ]) [ ]) )\n"; + } + + public static class Declarations_9 extends Declarations { + public String input = "*a[]"; + public String output = "(s (declarator * (declarator (declarator a) [ ])) )\n"; + } + + public static class Declarations_10 extends Declarations { + public String input = "(*a)[]"; + public String output = "(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n"; + } + + /* + * This is a regression test for "Support direct calls to left-recursive + * rules". + * https://github.com/antlr/antlr4/issues/161 + */ + public static abstract class DirectCallToLeftRecursiveRule extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a @after {} : a ID + | ID + ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class DirectCallToLeftRecursiveRule_1 extends DirectCallToLeftRecursiveRule { + public String input = "x"; + public String output = "(a x)\n"; + } + + public static class DirectCallToLeftRecursiveRule_2 extends DirectCallToLeftRecursiveRule { + public String input = "x y"; + public String output = "(a (a x) y)\n"; + } + + public static class DirectCallToLeftRecursiveRule_3 extends DirectCallToLeftRecursiveRule { + public String input = "x y z"; + public String output = "(a (a (a x) y) z)\n"; + } + + public static abstract class Expressions extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : e EOF ; // must indicate EOF can follow + e : e '.' ID + | e '.' 'this' + | '-' e + | e '*' e + | e ('+'|'-') e + | INT + | ID + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Expressions_1 extends Expressions { + public String input = "a"; + public String output = "(s (e a) )\n"; + } + + public static class Expressions_2 extends Expressions { + public String input = "1"; + public String output = "(s (e 1) )\n"; + } + + public static class Expressions_3 extends Expressions { + public String input = "a-1"; + public String output = "(s (e (e a) - (e 1)) )\n"; + } + + public static class Expressions_4 extends Expressions { + public String input = "a.b"; + public String output = "(s (e (e a) . b) )\n"; + } + + public static class Expressions_5 extends Expressions { + public String input = "a.this"; + public String output = "(s (e (e a) . this) )\n"; + } + + public static class Expressions_6 extends Expressions { + public String input = "-a"; + public String output = "(s (e - (e a)) )\n"; + } + + public static class Expressions_7 extends Expressions { + public String input = "-a+b"; + public String output = "(s (e (e - (e a)) + (e b)) )\n"; + } + + public static abstract class JavaExpressions extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : e EOF ; // must indicate EOF can follow + expressionList + : e (',' e)* + ; + e : '(' e ')' + | 'this' + | 'super' + | INT + | ID + | typespec '.' 'class' + | e '.' ID + | e '.' 'this' + | e '.' 'super' '(' expressionList? ')' + | e '.' 'new' ID '(' expressionList? ')' + | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+) + | e '[' e ']' + | '(' typespec ')' e + | e ('++' | '--') + | e '(' expressionList? ')' + | ('+'|'-'|'++'|'--') e + | ('~'|'!') e + | e ('*'|'/'|'%') e + | e ('+'|'-') e + | e ('\<\<' | '>>>' | '>>') e + | e ('\<=' | '>=' | '>' | '\<') e + | e 'instanceof' e + | e ('==' | '!=') e + | e '&' e + |\ e '^' e + | e '|' e + | e '&&' e + | e '||' e + | e '?' e ':' e + |\ + e ('=' + |'+=' + |'-=' + |'*=' + |'/=' + |'&=' + |'|=' + |'^=' + |'>>=' + |'>>>=' + |'\<\<=' + |'%=') e + ; + typespec + : ID + | ID '[' ']' + | 'int' + | 'int' '[' ']' + ; + ID : ('a'..'z'|'A'..'Z'|'_'|'$')+; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class JavaExpressions_1 extends JavaExpressions { + public String input = "a|b&c"; + public String output = "(s (e (e a) | (e (e b) & (e c))) )\n"; + } + + public static class JavaExpressions_2 extends JavaExpressions { + public String input = "(a|b)&c"; + public String output = "(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n"; + } + + public static class JavaExpressions_3 extends JavaExpressions { + public String input = "a > b"; + public String output = "(s (e (e a) > (e b)) )\n"; + } + + public static class JavaExpressions_4 extends JavaExpressions { + public String input = "a >> b"; + public String output = "(s (e (e a) >> (e b)) )\n"; + } + + public static class JavaExpressions_5 extends JavaExpressions { + public String input = "a=b=c"; + public String output = "(s (e (e a) = (e (e b) = (e c))) )\n"; + } + + public static class JavaExpressions_6 extends JavaExpressions { + public String input = "a^b^c"; + public String output = "(s (e (e a) ^ (e (e b) ^ (e c))) )\n"; + } + + public static class JavaExpressions_7 extends JavaExpressions { + public String input = "(T)x"; + public String output = "(s (e ( (typespec T) ) (e x)) )\n"; + } + + public static class JavaExpressions_8 extends JavaExpressions { + public String input = "new A().b"; + public String output = "(s (e (e new (typespec A) ( )) . b) )\n"; + } + + public static class JavaExpressions_9 extends JavaExpressions { + public String input = "(T)t.f()"; + public String output = "(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n"; + } + + public static class JavaExpressions_10 extends JavaExpressions { + public String input = "a.f(x)==T.c"; + public String output = "(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n"; + } + + public static class JavaExpressions_11 extends JavaExpressions { + public String input = "a.f().g(x,1)"; + public String output = "(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n"; + } + + public static class JavaExpressions_12 extends JavaExpressions { + public String input = "new T[((n-1) * x) + 1]"; + public String output = "(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n"; + } + + public static abstract class LabelsOnOpSubrule extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : e; + e : a=e op=('*'|'/') b=e {} + | INT {} + | '(' x=e ')' {} + ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LabelsOnOpSubrule_1 extends LabelsOnOpSubrule { + public String input = "4"; + public String output = "(s (e 4))\n"; + } + + public static class LabelsOnOpSubrule_2 extends LabelsOnOpSubrule { + public String input = "1*2/3"; + public String output = "(s (e (e (e 1) * (e 2)) / (e 3)))\n"; + } + + public static class LabelsOnOpSubrule_3 extends LabelsOnOpSubrule { + public String input = "(1/2)*3"; + public String output = "(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n"; + } + + /* + * This is a regression test for antlr/antlr4#625 "Duplicate action breaks + * operator precedence" + * https://github.com/antlr/antlr4/issues/625 + */ + public static abstract class MultipleActionsPredicatesOptions extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : e ; + e : a=e op=('*'|'/') b=e {}{}? + | a=e op=('+'|'-') b=e {}\{}?\ + | INT {}{} + | '(' x=e ')' {}{} + ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class MultipleActionsPredicatesOptions_1 extends MultipleActionsPredicatesOptions { + public String input = "4"; + public String output = "(s (e 4))\n"; + } + + public static class MultipleActionsPredicatesOptions_2 extends MultipleActionsPredicatesOptions { + public String input = "1*2/3"; + public String output = "(s (e (e (e 1) * (e 2)) / (e 3)))\n"; + } + + public static class MultipleActionsPredicatesOptions_3 extends MultipleActionsPredicatesOptions { + public String input = "(1/2)*3"; + public String output = "(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n"; + } + + /* + * This is a regression test for antlr/antlr4#625 "Duplicate action breaks + * operator precedence" + * https://github.com/antlr/antlr4/issues/625 + */ + public static abstract class MultipleActions extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : e ; + e : a=e op=('*'|'/') b=e {}{} + | INT {}{} + | '(' x=e ')' {}{} + ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class MultipleActions_1 extends MultipleActions { + public String input = "4"; + public String output = "(s (e 4))\n"; + public String errors = ""; + } + + public static class MultipleActions_2 extends MultipleActions { + public String input = "1*2/3"; + public String output = "(s (e (e (e 1) * (e 2)) / (e 3)))\n"; + } + + public static class MultipleActions_3 extends MultipleActions { + public String input = "(1/2)*3"; + public String output = "(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n"; + } + + /* + * This is a regression test for antlr/antlr4#433 "Not all context accessor + * methods are generated when an alternative rule label is used for multiple + * alternatives". + * https://github.com/antlr/antlr4/issues/433 + */ + public static abstract class MultipleAlternativesWithCommonLabel extends BaseParserTestDescriptor { + public String startRule = "s"; + public String grammarName = "T"; + public String errors = ""; + + /** + grammar T; + s : e {}; + e returns [int v] + : e '*' e {$v = (0)}, {})> * (1)}, {})>;} # binary + | e '+' e {$v = (0)}, {})> + (1)}, {})>;} # binary + | INT {$v = $INT.int;} # anInt + | '(' e ')' {$v = $e.v;} # parens + | left=e INC {$v = $left.v + 1;} # unary + | left=e DEC {$v = $left.v - 1;} # unary + | ID {} # anID + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + INC : '++' ; + DEC : '--' ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class MultipleAlternativesWithCommonLabel_1 extends MultipleAlternativesWithCommonLabel { + public String input = "4"; + public String output = "4\n"; + } + + public static class MultipleAlternativesWithCommonLabel_2 extends MultipleAlternativesWithCommonLabel { + public String input = "1+2"; + public String output = "3\n"; + } + + public static class MultipleAlternativesWithCommonLabel_3 extends MultipleAlternativesWithCommonLabel { + public String input = "1+2*3"; + public String output = "7\n"; + } + + public static class MultipleAlternativesWithCommonLabel_4 extends MultipleAlternativesWithCommonLabel { + public String input = "i++*3"; + public String output = "12\n"; + } + + /** + * This is a regression test for antlr/antlr4#509 "Incorrect rule chosen in + * unambiguous grammar". + * https://github.com/antlr/antlr4/issues/509 + */ + public static class PrecedenceFilterConsidersContext extends BaseParserTestDescriptor { + public String input = "aa"; + public String output = "(prog (statement (letterA a)) (statement (letterA a)) )\n"; + public String errors = ""; + public String startRule = "prog"; + public String grammarName = "T"; + + /** + grammar T; + prog + @after {} + : statement* EOF {}; + statement: letterA | statement letterA 'b' ; + letterA: 'a'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class PrefixAndOtherAlt extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : expr EOF ; + expr : literal + | op expr + | expr op expr + ; + literal : '-'? Integer ; + op : '+' | '-' ; + Integer : [0-9]+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class PrefixAndOtherAlt_1 extends PrefixAndOtherAlt { + public String input = "-1"; + public String output = "(s (expr (literal - 1)) )\n"; + } + + public static class PrefixAndOtherAlt_2 extends PrefixAndOtherAlt { + public String input = "-1 + -1"; + public String output = "(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n"; + } + + public static abstract class PrefixOpWithActionAndLabel extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : e {} ; + e returns [ result] + : ID '=' e1=e {$result = "(" + $ID.text + "=" + $e1.result + ")";} + | ID {$result = $ID.text;} + | e1=e '+' e2=e {$result = "(" + $e1.result + "+" + $e2.result + ")";} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class PrefixOpWithActionAndLabel_1 extends PrefixOpWithActionAndLabel { + public String input = "a"; + public String output = "a\n"; + } + + public static class PrefixOpWithActionAndLabel_2 extends PrefixOpWithActionAndLabel { + public String input = "a+b"; + public String output = "(a+b)\n"; + } + + public static class PrefixOpWithActionAndLabel_3 extends PrefixOpWithActionAndLabel { + public String input = "a=b+c"; + public String output = "((a=b)+c)\n"; + } + + public static abstract class ReturnValueAndActionsAndLabels extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : q=e {}; + e returns [int v] + : a=e op='*' b=e {$v = $a.v * $b.v;} # mult + | a=e '+' b=e {$v = $a.v + $b.v;} # add + | INT {$v = $INT.int;} # anInt + | '(' x=e ')' {$v = $x.v;} # parens + | x=e '++' {$v = $x.v+1;} # inc + | e '--' # dec + | ID {$v = 3;} # anID + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ReturnValueAndActionsAndLabels_1 extends ReturnValueAndActionsAndLabels { + public String input = "4"; + public String output = "4\n"; + } + + public static class ReturnValueAndActionsAndLabels_2 extends ReturnValueAndActionsAndLabels { + public String input = "1+2"; + public String output = "3\n"; + } + + public static class ReturnValueAndActionsAndLabels_3 extends ReturnValueAndActionsAndLabels { + public String input = "1+2*3"; + public String output = "7\n"; + } + + public static class ReturnValueAndActionsAndLabels_4 extends ReturnValueAndActionsAndLabels { + public String input = "i++*3"; + public String output = "12\n"; + } + + /* + * This is a regression test for antlr/antlr4#677 "labels not working in grammar + * file". + * https://github.com/antlr/antlr4/issues/677 + * + * This test treats `,` and `>>` as part of a single compound operator (similar + * to a ternary operator). + */ + public static abstract class ReturnValueAndActionsList extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : expr EOF; + expr: + a=expr '*' a=expr #Factor + | b+=expr (',' b+=expr)* '>>' c=expr #Send + | ID #JustId //semantic check on modifiers + ; + + ID : ('a'..'z'|'A'..'Z'|'_') + ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ReturnValueAndActionsList1_1 extends ReturnValueAndActionsList { + public String input = "a*b"; + public String output = "(s (expr (expr a) * (expr b)) )\n"; + } + + public static class ReturnValueAndActionsList1_2 extends ReturnValueAndActionsList { + public String input = "a,c>>x"; + public String output = "(s (expr (expr a) , (expr c) >> (expr x)) )\n"; + } + + public static class ReturnValueAndActionsList1_3 extends ReturnValueAndActionsList { + public String input = "x"; + public String output = "(s (expr x) )\n"; + } + + public static class ReturnValueAndActionsList1_4 extends ReturnValueAndActionsList { + public String input = "a*b,c,x*y>>r"; + public String output = "(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n"; + } + + /* + * This is a regression test for antlr/antlr4#677 "labels not working in grammar + * file". + * https://github.com/antlr/antlr4/issues/677 + * + * This test treats the `,` and `>>` operators separately. + */ + public static abstract class ReturnValueAndActionsList2 extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : expr EOF; + expr: + a=expr '*' a=expr #Factor + | b+=expr ',' b+=expr #Comma + | b+=expr '>>' c=expr #Send + | ID #JustId //semantic check on modifiers + ; + ID : ('a'..'z'|'A'..'Z'|'_') + ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ReturnValueAndActionsList2_1 extends ReturnValueAndActionsList2 { + public String input = "a*b"; + public String output = "(s (expr (expr a) * (expr b)) )\n"; + } + + public static class ReturnValueAndActionsList2_2 extends ReturnValueAndActionsList2 { + public String input = "a,c>>x"; + public String output = "(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n"; + } + + public static class ReturnValueAndActionsList2_3 extends ReturnValueAndActionsList2 { + public String input = "x"; + public String output = "(s (expr x) )\n"; + } + + public static class ReturnValueAndActionsList2_4 extends ReturnValueAndActionsList2 { + public String input = "a*b,c,x*y>>r"; + public String output = "(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n"; + } + + public static abstract class ReturnValueAndActions extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : e {}; + e returns [int v, ignored] + : a=e '*' b=e {$v = $a.v * $b.v;} + | a=e '+' b=e {$v = $a.v + $b.v;} + | INT {$v = $INT.int;} + | '(' x=e ')' {$v = $x.v;} + ; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ReturnValueAndActions_1 extends ReturnValueAndActions { + public String input = "4"; + public String output = "4\n"; + } + + public static class ReturnValueAndActions_2 extends ReturnValueAndActions { + public String input = "1+2"; + public String output = "3\n"; + } + + public static class ReturnValueAndActions_3 extends ReturnValueAndActions { + public String input = "1+2*3"; + public String output = "7\n"; + } + + public static class ReturnValueAndActions_4 extends ReturnValueAndActions { + public String input = "(1+2)*3"; + public String output = "9\n"; + } + + public static class SemPred extends BaseParserTestDescriptor { + public String input = "x y z"; + public String output = "(s (a (a (a x) y) z))\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : a ; + a : a {}? ID + | ID + ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SemPredFailOption extends BaseParserTestDescriptor { + public String input = "x y z"; + public String output = "(s (a (a x) y z))\n"; + public String errors = "line 1:4 rule a custom message\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : a ; + a : a ID {}?\ + | ID + ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class Simple extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : a ; + a : a ID + | ID + ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Simple_1 extends Simple { + public String input = "x"; + public String output = "(s (a x))\n"; + } + + public static class Simple_2 extends Simple { + public String input = "x y"; + public String output = "(s (a (a x) y))\n"; + } + + public static class Simple_3 extends Simple { + public String input = "x y z"; + public String output = "(s (a (a (a x) y) z))\n"; + } + + /** + * This is a regression test for antlr/antlr4#542 "First alternative cannot + * be right-associative". + * https://github.com/antlr/antlr4/issues/542 + */ + public static abstract class TernaryExprExplicitAssociativity extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : e EOF; // must indicate EOF can follow or 'a\' won't match + e :\ e '*' e + |\ e '+' e + |\ e '?' e ':' e + |\ e '=' e + | ID + ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TernaryExprExplicitAssociativity_1 extends TernaryExprExplicitAssociativity { + public String input = "a"; + public String output = "(s (e a) )\n"; + } + + public static class TernaryExprExplicitAssociativity_2 extends TernaryExprExplicitAssociativity { + public String input = "a+b"; + public String output = "(s (e (e a) + (e b)) )\n"; + } + + public static class TernaryExprExplicitAssociativity_3 extends TernaryExprExplicitAssociativity { + public String input = "a*b"; + public String output = "(s (e (e a) * (e b)) )\n"; + } + + public static class TernaryExprExplicitAssociativity_4 extends TernaryExprExplicitAssociativity { + public String input = "a?b:c"; + public String output = "(s (e (e a) ? (e b) : (e c)) )\n"; + } + + public static class TernaryExprExplicitAssociativity_5 extends TernaryExprExplicitAssociativity { + public String input = "a=b=c"; + public String output = "(s (e (e a) = (e (e b) = (e c))) )\n"; + } + + public static class TernaryExprExplicitAssociativity_6 extends TernaryExprExplicitAssociativity { + public String input = "a?b+c:d"; + public String output = "(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n"; + } + + public static class TernaryExprExplicitAssociativity_7 extends TernaryExprExplicitAssociativity { + public String input = "a?b=c:d"; + public String output = "(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n"; + } + + public static class TernaryExprExplicitAssociativity_8 extends TernaryExprExplicitAssociativity { + public String input = "a? b?c:d : e"; + public String output = "(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n"; + } + + public static class TernaryExprExplicitAssociativity_9 extends TernaryExprExplicitAssociativity { + public String input = "a?b: c?d:e"; + public String output = "(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n"; + } + + public static abstract class TernaryExpr extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s @after {} : e EOF ; // must indicate EOF can follow or 'a\' won't match + e : e '*' e + | e '+' e + |\ e '?' e ':' e + |\ e '=' e + | ID + ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TernaryExpr_1 extends TernaryExpr { + public String input = "a"; + public String output = "(s (e a) )\n"; + } + + public static class TernaryExpr_2 extends TernaryExpr { + public String input = "a+b"; + public String output = "(s (e (e a) + (e b)) )\n"; + } + + public static class TernaryExpr_3 extends TernaryExpr { + public String input = "a*b"; + public String output = "(s (e (e a) * (e b)) )\n"; + } + + public static class TernaryExpr_4 extends TernaryExpr { + public String input = "a?b:c"; + public String output = "(s (e (e a) ? (e b) : (e c)) )\n"; + } + + public static class TernaryExpr_5 extends TernaryExpr { + public String input = "a=b=c"; + public String output = "(s (e (e a) = (e (e b) = (e c))) )\n"; + } + + public static class TernaryExpr_6 extends TernaryExpr { + public String input = "a?b+c:d"; + public String output = "(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n"; + } + + public static class TernaryExpr_7 extends TernaryExpr { + public String input = "a?b=c:d"; + public String output = "(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n"; + } + + public static class TernaryExpr_8 extends TernaryExpr { + public String input = "a? b?c:d : e"; + public String output = "(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n"; + } + + public static class TernaryExpr_9 extends TernaryExpr { + public String input = "a?b: c?d:e"; + public String output = "(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n"; + } + + /* + * This is a regression test for #239 "recoursive parser using implicit tokens + * ignore white space lexer rule". + * https://github.com/antlr/antlr4/issues/239 + */ + public static abstract class WhitespaceInfluence extends BaseParserTestDescriptor { + public String input = "Test(1,3)"; + public String output = ""; + public String errors = ""; + public String startRule = "prog"; + public String grammarName = "Expr"; + + /** + grammar Expr; + prog : expression EOF; + expression + : ID '(' expression (',' expression)* ')' # doFunction + | '(' expression ')' # doParenthesis + | '!' expression # doNot + | '-' expression # doNegate + | '+' expression # doPositiv + | expression '^' expression # doPower + | expression '*' expression # doMultipy + | expression '/' expression # doDivide + | expression '%' expression # doModulo + | expression '-' expression # doMinus + | expression '+' expression # doPlus + | expression '=' expression # doEqual + | expression '!=' expression # doNotEqual + | expression '>' expression # doGreather + | expression '>=' expression # doGreatherEqual + | expression '\<' expression # doLesser + | expression '\<=' expression # doLesserEqual + | expression K_IN '(' expression (',' expression)* ')' # doIn + | expression ( '&' | K_AND) expression # doAnd + | expression ( '|' | K_OR) expression # doOr + | '[' expression (',' expression)* ']' # newArray + | K_TRUE # newTrueBoolean + | K_FALSE # newFalseBoolean + | NUMBER # newNumber + | DATE # newDateTime + | ID # newIdentifier + | SQ_STRING # newString + | K_NULL # newNull + ; + + // Fragments + fragment DIGIT : '0' .. '9'; + fragment UPPER : 'A' .. 'Z'; + fragment LOWER : 'a' .. 'z'; + fragment LETTER : LOWER | UPPER; + fragment WORD : LETTER | '_' | '$' | '#' | '.'; + fragment ALPHANUM : WORD | DIGIT; + + // Tokens + ID : LETTER ALPHANUM*; + NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?; + DATE : '\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\''; + SQ_STRING : '\'' ('\'\'' | ~'\'')* '\''; + DQ_STRING : '"' ('\\\\"' | ~'"')* '"'; + WS : [ \t\n\r]+ -> skip ; + COMMENTS : ('/*' .*? '*' '/' | '//' ~'\n'* '\n' ) -> skip; + */ + @CommentHasStringValue + public String grammar; + } + + public static class WhitespaceInfluence_1 extends WhitespaceInfluence { + public String input = "Test(1,3)"; + public String output = ""; + } + + public static class WhitespaceInfluence_2 extends WhitespaceInfluence { + public String input = "Test(1, 3)"; + public String output = ""; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerErrorsDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerErrorsDescriptors.java new file mode 100644 index 000000000..225c3b7c5 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerErrorsDescriptors.java @@ -0,0 +1,245 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseLexerTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class LexerErrorsDescriptors { + public static class DFAToATNThatFailsBackToDFA extends BaseLexerTestDescriptor { + public String input = "ababx"; + /** + [@0,0:1='ab',<1>,1:0] + [@1,2:3='ab',<1>,1:2] + [@2,5:4='',<-1>,1:5] + */ + @CommentHasStringValue + public String output; + + public String errors = "line 1:4 token recognition error at: 'x'\n"; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'ab' ; + B : 'abc' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class DFAToATNThatMatchesThenFailsInATN extends BaseLexerTestDescriptor { + public String input = "ababcx"; + /** + [@0,0:1='ab',<1>,1:0] + [@1,2:4='abc',<2>,1:2] + [@2,6:5='',<-1>,1:6] + */ + @CommentHasStringValue + public String output; + + public String errors = "line 1:5 token recognition error at: 'x'\n"; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'ab' ; + B : 'abc' ; + C : 'abcd' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class EnforcedGreedyNestedBraces extends BaseLexerTestDescriptor { + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + ACTION : '{' (ACTION | ~[{}])* '}'; + WS : [ \r\n\t]+ -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class EnforcedGreedyNestedBraces_1 extends EnforcedGreedyNestedBraces { + public String input = "{ { } }"; + /** + [@0,0:6='{ { } }',<1>,1:0] + [@1,7:6='',<-1>,1:7] + */ + @CommentHasStringValue + public String output; + } + + public static class EnforcedGreedyNestedBraces_2 extends EnforcedGreedyNestedBraces { + public String input = "{ { }"; + public String output = "[@0,5:4='',<-1>,1:5]\n"; + public String errors = "line 1:0 token recognition error at: '{ { }'\n"; + } + + public static class ErrorInMiddle extends BaseLexerTestDescriptor { + public String input = "abx"; + public String output = "[@0,3:2='',<-1>,1:3]\n"; + public String errors = "line 1:0 token recognition error at: 'abx'\n"; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'abc' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class InvalidCharAtStart extends BaseLexerTestDescriptor { + public String input = "x"; + public String output = "[@0,1:0='',<-1>,1:1]\n"; + public String errors = "line 1:0 token recognition error at: 'x'\n"; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'a' 'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class InvalidCharAtStartAfterDFACache extends BaseLexerTestDescriptor { + public String input = "abx"; + /** + [@0,0:1='ab',<1>,1:0] + [@1,3:2='',<-1>,1:3] + */ + @CommentHasStringValue + public String output; + + public String errors = "line 1:2 token recognition error at: 'x'\n"; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'a' 'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class InvalidCharInToken extends BaseLexerTestDescriptor { + public String input = "ax"; + public String output = "[@0,2:1='',<-1>,1:2]\n"; + public String errors = "line 1:0 token recognition error at: 'ax'\n"; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'a' 'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class InvalidCharInTokenAfterDFACache extends BaseLexerTestDescriptor { + public String input = "abax"; + /** + [@0,0:1='ab',<1>,1:0] + [@1,4:3='',<-1>,1:4] + */ + @CommentHasStringValue + public String output; + + public String errors = "line 1:2 token recognition error at: 'ax'\n"; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'a' 'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for #45 "NullPointerException in LexerATNSimulator.execDFA". + * https://github.com/antlr/antlr4/issues/46 + */ + public static class LexerExecDFA extends BaseLexerTestDescriptor { + public String input = "x : x"; + /** + [@0,0:0='x',<3>,1:0] + [@1,2:2=':',<1>,1:2] + [@2,4:4='x',<3>,1:4] + [@3,5:4='',<-1>,1:5] + */ + @CommentHasStringValue + public String output; + + /** + line 1:1 token recognition error at: ' ' + line 1:3 token recognition error at: ' ' + */ + @CommentHasStringValue + public String errors; + + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + COLON : ':' ; + PTR : '->' ; + ID : [a-z]+; + */ + @CommentHasStringValue + public String grammar; + } + + public static abstract class StringsEmbeddedInActions extends BaseLexerTestDescriptor { + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + ACTION2 : '[' (STRING | ~'"')*? ']'; + STRING : '"' ('\\"' | .)*? '"'; + WS : [ \t\r\n]+ -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class StringsEmbeddedInActions_1 extends StringsEmbeddedInActions { + public String input = "[\"foo\"]"; + /** + [@0,0:6='["foo"]',<1>,1:0] + [@1,7:6='',<-1>,1:7] + */ + @CommentHasStringValue + public String output; + } + + public static class StringsEmbeddedInActions_2 extends StringsEmbeddedInActions { + public String input = "[\"foo]"; + public String output = "[@0,6:5='',<-1>,1:6]\n"; + public String errors = "line 1:0 token recognition error at: '[\"foo]'\n"; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerExecDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerExecDescriptors.java new file mode 100644 index 000000000..64ddbac5c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/LexerExecDescriptors.java @@ -0,0 +1,1075 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.runtime.misc.Pair; +import org.antlr.v4.test.runtime.BaseLexerTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class LexerExecDescriptors { + public static class ActionPlacement extends BaseLexerTestDescriptor { + public String input = "ab"; + /** + stuff0: + stuff1: a + stuff2: ab + ab + [@0,0:1='ab',<1>,1:0] + [@1,2:1='',<-1>,1:2] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : ({} 'a' + | {} + 'a' {} + 'b' {}) + {} ; + WS : (' '|'\n') -> skip ; + J : .; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class CharSet extends BaseLexerTestDescriptor { + public String input = "34\n 34"; + /** + I + I + [@0,0:1='34',<1>,1:0] + [@1,4:5='34',<1>,2:1] + [@2,6:5='',<-1>,2:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : '0'..'9'+ {} ; + WS : [ \n\\u000D] -> skip ; + */ // needs escape on u000D otherwise java converts even in comment + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetInSet extends BaseLexerTestDescriptor { + public String input = "a x"; + /** + I + I + [@0,0:0='a',<1>,1:0] + [@1,2:2='x',<1>,1:2] + [@2,3:2='',<-1>,1:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : (~[ab \\n]|'a') {} ; + WS : [ \n\\u000D]+ -> skip ; + */ // needs escape on u000D otherwise java converts even in comment + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetNot extends BaseLexerTestDescriptor { + public String input = "xaf"; + /** + I + [@0,0:2='xaf',<1>,1:0] + [@1,3:2='',<-1>,1:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : ~[ab \n] ~[ \ncd]* {} ; + WS : [ \n\\u000D]+ -> skip ; + */ // needs escape on u000D otherwise java converts even in comment + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetPlus extends BaseLexerTestDescriptor { + public String input = "34\n 34"; + /** + I + I + [@0,0:1='34',<1>,1:0] + [@1,4:5='34',<1>,2:1] + [@2,6:5='',<-1>,2:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : '0'..'9'+ {} ; + WS : [ \n\\u000D]+ -> skip ; + */ // needs escape on u000D otherwise java converts even in comment + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetRange extends BaseLexerTestDescriptor { + public String input = "34\n 34 a2 abc \n "; + /** + I + I + ID + ID + [@0,0:1='34',<1>,1:0] + [@1,4:5='34',<1>,2:1] + [@2,7:8='a2',<2>,2:4] + [@3,10:12='abc',<2>,2:7] + [@4,18:17='',<-1>,3:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : [0-9]+ {} ; + ID : [a-zA-Z] [a-zA-Z0-9]* {} ; + WS : [ \n\\u0009\r]+ -> skip ; + */ // needs escape on u0009 otherwise java converts even in comment + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetWithEscapedChar extends BaseLexerTestDescriptor { + public String input = "- ] "; + /** + DASHBRACK + DASHBRACK + [@0,0:0='-',<1>,1:0] + [@1,2:2=']',<1>,1:2] + [@2,4:3='',<-1>,1:4] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + DASHBRACK : [\\-\]]+ {} ; + WS : [ \n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetWithMissingEndRange extends BaseLexerTestDescriptor { + public String input = "00\n"; + /** + I + [@0,0:1='00',<1>,1:0] + [@1,3:2='',<-1>,2:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : [0-]+ {} ; + WS : [ \n\\u000D]+ -> skip ; + */ // needs escape on u000D otherwise java converts even in comment + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetWithMissingEscapeChar extends BaseLexerTestDescriptor { + public String input = "34 "; + /** + I + [@0,0:1='34',<1>,1:0] + [@1,3:2='',<-1>,1:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : [0-9]+ {} ; + WS : [ \n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetWithQuote1 extends BaseLexerTestDescriptor { + public String input = "b\"a"; + /** + A + [@0,0:2='b"a',<1>,1:0] + [@1,3:2='',<-1>,1:3] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : ["a-z]+ {} ; + WS : [ \n\t]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetWithQuote2 extends BaseLexerTestDescriptor { + public String input = "b\"\\a"; + /** + A + [@0,0:3='b"\a',<1>,1:0] + [@1,4:3='',<-1>,1:4] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : ["\\\\ab]+ {} ; + WS : [ \n\t]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class CharSetWithReversedRange extends BaseLexerTestDescriptor { + public String input = "9"; + /** + A + [@0,0:0='9',<1>,1:0] + [@1,1:0='',<-1>,1:1] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : [z-a9]+ {} ; + WS : [ \n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class EOFByItself extends BaseLexerTestDescriptor { + public String input = ""; + /** + [@0,0:-1='',<1>,1:0] + [@1,0:-1='',<-1>,1:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + DONE : EOF ; + A : 'a'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class EOFSuffixInFirstRule extends BaseLexerTestDescriptor { + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : 'a' EOF ; + B : 'a'; + C : 'c'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class EOFSuffixInFirstRule_1 extends EOFSuffixInFirstRule { + public String input = ""; + public String output = "[@0,0:-1='',<-1>,1:0]\n"; + } + + public static class EOFSuffixInFirstRule_2 extends EOFSuffixInFirstRule { + public String input = "a"; + /** + [@0,0:0='a',<1>,1:0] + [@1,1:0='',<-1>,1:1] + */ + @CommentHasStringValue + public String output; + } + + public static class GreedyClosure extends BaseLexerTestDescriptor { + /** + //blah + //blah + */ + @CommentHasStringValue + public String input; + + /** + [@0,0:13='//blah\n//blah\n',<1>,1:0] + [@1,14:13='',<-1>,3:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : '//' .*? '\n' CMT*; + WS : (' '|'\t')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class GreedyConfigs extends BaseLexerTestDescriptor { + public String input = "ab"; + /** + ab + [@0,0:1='ab',<1>,1:0] + [@1,2:1='',<-1>,1:2] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : ('a' | 'ab') {} ; + WS : (' '|'\n') -> skip ; + J : .; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class GreedyOptional extends BaseLexerTestDescriptor { + /** + //blah + //blah + */ + @CommentHasStringValue + public String input; + + /** + [@0,0:13='//blah\n//blah\n',<1>,1:0] + [@1,14:13='',<-1>,3:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : '//' .*? '\n' CMT?; + WS : (' '|'\t')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class GreedyPositiveClosure extends BaseLexerTestDescriptor { + /** + //blah + //blah + */ + @CommentHasStringValue + public String input; + + /** + [@0,0:13='//blah\n//blah\n',<1>,1:0] + [@1,14:13='',<-1>,3:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : ('//' .*? '\n')+; + WS : (' '|'\t')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class HexVsID extends BaseLexerTestDescriptor { + public String input = "x 0 1 a.b a.l"; + /** + [@0,0:0='x',<5>,1:0] + [@1,1:1=' ',<6>,1:1] + [@2,2:2='0',<2>,1:2] + [@3,3:3=' ',<6>,1:3] + [@4,4:4='1',<2>,1:4] + [@5,5:5=' ',<6>,1:5] + [@6,6:6='a',<5>,1:6] + [@7,7:7='.',<4>,1:7] + [@8,8:8='b',<5>,1:8] + [@9,9:9=' ',<6>,1:9] + [@10,10:10='a',<5>,1:10] + [@11,11:11='.',<4>,1:11] + [@12,12:12='l',<5>,1:12] + [@13,13:12='',<-1>,1:13] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + HexLiteral : '0' ('x'|'X') HexDigit+ ; + DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ; + FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ; + DOT : '.' ; + ID : 'a'..'z'+ ; + fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ; + WS : (' '|'\n')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class KeywordID extends BaseLexerTestDescriptor { + public String input = "end eend ending a"; + /** + [@0,0:2='end',<1>,1:0] + [@1,3:3=' ',<3>,1:3] + [@2,4:7='eend',<2>,1:4] + [@3,8:8=' ',<3>,1:8] + [@4,9:14='ending',<2>,1:9] + [@5,15:15=' ',<3>,1:15] + [@6,16:16='a',<2>,1:16] + [@7,17:16='',<-1>,1:17] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + KEND : 'end' ; // has priority + ID : 'a'..'z'+ ; + WS : (' '|'\n')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NonGreedyClosure extends BaseLexerTestDescriptor { + /** + //blah + //blah + */ + @CommentHasStringValue + public String input; + + /** + [@0,0:6='//blah\n',<1>,1:0] + [@1,7:13='//blah\n',<1>,2:0] + [@2,14:13='',<-1>,3:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : '//' .*? '\n' CMT*?; + WS : (' '|'\t')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NonGreedyConfigs extends BaseLexerTestDescriptor { + public String input = "ab"; + /** + a + b + [@0,0:0='a',<1>,1:0] + [@1,1:1='b',<3>,1:1] + [@2,2:1='',<-1>,1:2] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + I : .*? ('a' | 'ab') {} ; + WS : (' '|'\n') -> skip ; + J : . {}; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NonGreedyOptional extends BaseLexerTestDescriptor { + /** + //blah + //blah + */ + @CommentHasStringValue + public String input; + + /** + [@0,0:6='//blah\n',<1>,1:0] + [@1,7:13='//blah\n',<1>,2:0] + [@2,14:13='',<-1>,3:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : '//' .*? '\n' CMT??; + WS : (' '|'\t')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NonGreedyPositiveClosure extends BaseLexerTestDescriptor { + /** + //blah + //blah + */ + @CommentHasStringValue + public String input; + + /** + [@0,0:6='//blah\n',<1>,1:0] + [@1,7:13='//blah\n',<1>,2:0] + [@2,14:13='',<-1>,3:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : ('//' .*? '\n')+?; + WS : (' '|'\t')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NonGreedyTermination1 extends BaseLexerTestDescriptor { + public String input = "\"hi\"\"mom\""; + /** + [@0,0:3='"hi"',<1>,1:0] + [@1,4:8='"mom"',<1>,1:4] + [@2,9:8='',<-1>,1:9] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + STRING : '"' ('""' | .)*? '"'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NonGreedyTermination2 extends BaseLexerTestDescriptor { + public String input = "\"\"\"mom\""; + /** + [@0,0:6='"""mom"',<1>,1:0] + [@1,7:6='',<-1>,1:7] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + STRING : '"' ('""' | .)+? '"'; + */ + @CommentHasStringValue + public String grammar; + + } + + /* + * This is a regression test for antlr/antlr4#224: "Parentheses without + * quantifier in lexer rules have unclear effect". + * https://github.com/antlr/antlr4/issues/224 + */ + public static class Parentheses extends BaseLexerTestDescriptor { + public String input = "-.-.-!"; + /** + [@0,0:4='-.-.-',<1>,1:0] + [@1,5:5='!',<3>,1:5] + [@2,6:5='',<-1>,1:6] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + START_BLOCK: '-.-.-'; + ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+; + fragment LETTER: L_A|L_K; + fragment L_A: '.-'; + fragment L_K: '-.-'; + SEPARATOR: '!'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class PositionAdjustingLexer extends BaseLexerTestDescriptor { + /** + tokens + tokens { + notLabel + label1 = + label2 += + notLabel + */ + @CommentHasStringValue + public String input; + + /** + [@0,0:5='tokens',<6>,1:0] + [@1,7:12='tokens',<4>,2:0] + [@2,14:14='{',<3>,2:7] + [@3,16:23='notLabel',<6>,3:0] + [@4,25:30='label1',<5>,4:0] + [@5,32:32='=',<1>,4:7] + [@6,34:39='label2',<5>,5:0] + [@7,41:42='+=',<2>,5:7] + [@8,44:51='notLabel',<6>,6:0] + [@9,53:52='',<-1>,7:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "PositionAdjustingLexer"; + + /** + lexer grammar PositionAdjustingLexer; + + @members { + + } + + ASSIGN : '=' ; + PLUS_ASSIGN : '+=' ; + LCURLY: '{'; + + // 'tokens' followed by '{' + TOKENS : 'tokens' IGNORED '{'; + + // IDENTIFIER followed by '+=' or '=' + LABEL + : IDENTIFIER IGNORED '+'? '=' + ; + + IDENTIFIER + : [a-zA-Z_] [a-zA-Z0-9_]* + ; + + fragment + IGNORED + : [ \t\r\n]* + ; + + NEWLINE + : [\r\n]+ -> skip + ; + + WS + : [ \t]+ -> skip + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class QuoteTranslation extends BaseLexerTestDescriptor { + public String input = "\""; + /** + [@0,0:0='"',<1>,1:0] + [@1,1:0='',<-1>,1:1] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + QUOTE : '"' ; // make sure this compiles + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class RecursiveLexerRuleRefWithWildcardPlus extends BaseLexerTestDescriptor { + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : '/*' (CMT | .)+? '*' '/' ; + WS : (' '|'\n')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class RecursiveLexerRuleRefWithWildcardPlus_1 extends RecursiveLexerRuleRefWithWildcardPlus { + public String input = + "/* ick */\n"+ + "/* /* */\n"+ + "/* /*nested*/ */\n"; // stuff on end of comment matches another rule + + public String output = + "[@0,0:8='/* ick */',<1>,1:0]\n"+ + "[@1,9:9='\\n',<2>,1:9]\n"+ + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n"+ + "[@3,35:35='\\n',<2>,3:16]\n"+ + "[@4,36:35='',<-1>,4:0]\n"; + } + + public static class RecursiveLexerRuleRefWithWildcardPlus_2 extends RecursiveLexerRuleRefWithWildcardPlus { + public String input = + "/* ick */x\n"+ + "/* /* */x\n"+ + "/* /*nested*/ */x\n"; + + public String output = + "[@0,0:8='/* ick */',<1>,1:0]\n"+ + "[@1,10:10='\\n',<2>,1:10]\n"+ + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n"+ + "[@3,38:38='\\n',<2>,3:17]\n"+ + "[@4,39:38='',<-1>,4:0]\n"; + + /** + line 1:9 token recognition error at: 'x' + line 3:16 token recognition error at: 'x' + */ + @CommentHasStringValue + public String errors; + } + + public static abstract class RecursiveLexerRuleRefWithWildcardStar extends BaseLexerTestDescriptor { + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + CMT : '/*' (CMT | .)*? '*' '/' ; + WS : (' '|'\n')+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class RecursiveLexerRuleRefWithWildcardStar_1 extends RecursiveLexerRuleRefWithWildcardStar { + public String input = + "/* ick */\n"+ + "/* /* */\n"+ + "/* /*nested*/ */\n"; + + public String output = + "[@0,0:8='/* ick */',<1>,1:0]\n"+ + "[@1,9:9='\\n',<2>,1:9]\n"+ + "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n"+ + "[@3,35:35='\\n',<2>,3:16]\n"+ + "[@4,36:35='',<-1>,4:0]\n"; + } + + public static class RecursiveLexerRuleRefWithWildcardStar_2 extends RecursiveLexerRuleRefWithWildcardStar { + public String input = + "/* ick */x\n"+ + "/* /* */x\n"+ + "/* /*nested*/ */x\n"; + + public String output = + "[@0,0:8='/* ick */',<1>,1:0]\n"+ + "[@1,10:10='\\n',<2>,1:10]\n"+ + "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n"+ + "[@3,38:38='\\n',<2>,3:17]\n"+ + "[@4,39:38='',<-1>,4:0]\n"; + + /** + line 1:9 token recognition error at: 'x' + line 3:16 token recognition error at: 'x' + */ + @CommentHasStringValue + public String errors; + } + + public static class RefToRuleDoesNotSetTokenNorEmitAnother extends BaseLexerTestDescriptor { + public String input = "34 -21 3"; + + // EOF has no length so range is 8:7 not 8:8 + /** + [@0,0:1='34',<2>,1:0] + [@1,3:5='-21',<1>,1:3] + [@2,7:7='3',<2>,1:7] + [@3,8:7='',<-1>,1:8] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + A : '-' I ; + I : '0'..'9'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Slashes extends BaseLexerTestDescriptor { + public String input = "\\ / \\/ /\\"; + /** + [@0,0:0='\',<1>,1:0] + [@1,2:2='/',<2>,1:2] + [@2,4:5='\/',<3>,1:4] + [@3,7:8='/\',<4>,1:7] + [@4,9:8='',<-1>,1:9] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + Backslash : '\\\\'; + Slash : '/'; + Vee : '\\\\/'; + Wedge : '/\\\\'; + WS : [ \t] -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + /* + * This is a regression test for antlr/antlr4#687 "Empty zero-length tokens + * cannot have lexer commands" and antlr/antlr4#688 "Lexer cannot match + * zero-length tokens" + * https://github.com/antlr/antlr4/issues/687 + * https://github.com/antlr/antlr4/issues/688 + */ + public static class ZeroLengthToken extends BaseLexerTestDescriptor { + public String input = "'xxx'"; + /** + [@0,0:4=''xxx'',<1>,1:0] + [@1,5:4='',<-1>,1:5] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + BeginString + : '\'' -> more, pushMode(StringMode) + ; + mode StringMode; + StringMode_X : 'x' -> more; + StringMode_Done : -> more, mode(EndStringMode); + mode EndStringMode; + EndString : '\'' -> popMode; + */ + @CommentHasStringValue + public String grammar; + } + + /** + * This is a regression test for antlr/antlr4#76 "Serialized ATN strings + * should be split when longer than 2^16 bytes (class file limitation)" + * https://github.com/antlr/antlr4/issues/76 + */ + public static class LargeLexer extends BaseLexerTestDescriptor { + public String input = "KW400"; + /** + [@0,0:4='KW400',<402>,1:0] + [@1,5:4='',<-1>,1:5] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** Look for grammar as resource */ + @Override + public Pair getGrammar() { + String grammar = null; + + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL stuff = loader.getResource("org/antlr/v4/test/runtime/LargeLexer.g4"); + try { + grammar = new String(Files.readAllBytes(Paths.get(stuff.toURI()))); + } + catch (Exception e) { + System.err.println("Cannot find grammar org/antlr/v4/test/runtime/LarseLexer.g4"); + } + + return new Pair<>(grammarName, grammar); + } + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ListenersDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ListenersDescriptors.java new file mode 100644 index 000000000..26bde38ae --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ListenersDescriptors.java @@ -0,0 +1,236 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class ListenersDescriptors { + public static class Basic extends BaseParserTestDescriptor { + public String input = "1 2"; + /** + (a 1 2) + 1 + 2 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + + + + + s + @after { + + + } + : r=a ; + a : INT INT + | ID + ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LR extends BaseParserTestDescriptor { + public String input = "1+2*3"; + /** + (e (e 1) + (e (e 2) * (e 3))) + 1 + 2 + 3 + 2 3 2 + 1 2 1 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + + + + + s + @after { + + + } + : r=e ; + e : e op='*' e + | e op='+' e + | INT + ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LRWithLabels extends BaseParserTestDescriptor { + public String input = "1(2,3)"; + /** + (e (e 1) ( (eList (e 2) , (e 3)) )) + 1 + 2 + 3 + 1 [13 6] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + + + + + s + @after { + + + } + : r=e ; + e : e '(' eList ')' # Call + | INT # Int + ; + eList : e (',' e)* ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class RuleGetters extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + + + + + s + @after { + + + } + : r=a ; + a : b b // forces list + | b // a list still + ; + b : ID | INT; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class RuleGetters_1 extends RuleGetters { + public String input = "1 2"; + /** + (a (b 1) (b 2)) + 1 2 1 + */ + @CommentHasStringValue + public String output; + } + + public static class RuleGetters_2 extends RuleGetters { + public String input = "abc"; + /** + (a (b abc)) + abc + */ + @CommentHasStringValue + public String output; + } + + public static abstract class TokenGetters extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + + + + + s + @after { + + + } + : r=a ; + a : INT INT + | ID + ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TokenGetters_1 extends TokenGetters { + public String input = "1 2"; + /** + (a 1 2) + 1 2 [1, 2] + */ + @CommentHasStringValue + public String output; + } + + public static class TokenGetters_2 extends TokenGetters { + public String input = "abc"; + /** + (a abc) + [@0,0:2='abc',<4>,1:0] + */ + @CommentHasStringValue + public String output; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParseTreesDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParseTreesDescriptors.java new file mode 100644 index 000000000..c9c6cdb99 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParseTreesDescriptors.java @@ -0,0 +1,259 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class ParseTreesDescriptors { + public static class AltNum extends BaseParserTestDescriptor { + public String input = "xyz"; + public String output = "(a:3 x (b:2 y) z)\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + + options { contextSuperClass=MyRuleNode; } + + + + + s + @init { + + } + @after { + + } + : r=a ; + + a : 'f' + | 'g' + | 'x' b 'z' + ; + b : 'e' {} | 'y' + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ExtraToken extends BaseParserTestDescriptor { + public String input = "xzy"; + public String output = "(a x z y)\n"; + public String errors = "line 1:1 extraneous input 'z' expecting 'y'\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : 'x' 'y' + ; + Z : 'z' + ; + + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NoViableAlt extends BaseParserTestDescriptor { + public String input = "z"; + public String output = "(a z)\n"; + public String errors = "line 1:0 mismatched input 'z' expecting {'x', 'y'}\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : 'x' | 'y' + ; + Z : 'z' + ; + + */ + @CommentHasStringValue + public String grammar; + + } + + public static class RuleRef extends BaseParserTestDescriptor { + public String input = "yx"; + public String output = "(a (b y) x)\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : b 'x' + ; + b : 'y' + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Sync extends BaseParserTestDescriptor { + public String input = "xzyy!"; + public String output = "(a x z y y !)\n"; + public String errors = "line 1:1 extraneous input 'z' expecting {'y', '!'}\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : 'x' 'y'* '!' + ; + Z : 'z' + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Token2 extends BaseParserTestDescriptor { + public String input = "xy"; + public String output = "(a x y)\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : 'x' 'y' + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TokenAndRuleContextString extends BaseParserTestDescriptor { + public String input = "x"; + /** + [a, s] + (a x) + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : 'x' { + + } ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TwoAltLoop extends BaseParserTestDescriptor { + public String input = "xyyxyxz"; + public String output = "(a x y y x y x z)\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : ('x' | 'y')* 'z' + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TwoAlts extends BaseParserTestDescriptor { + public String input = "y"; + public String output = "(a y)\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s + @init { + + } + @after { + + } + : r=a ; + a : 'x' | 'y' + ; + */ + @CommentHasStringValue + public String grammar; + + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserErrorsDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserErrorsDescriptors.java new file mode 100644 index 000000000..dc28535e7 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserErrorsDescriptors.java @@ -0,0 +1,578 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class ParserErrorsDescriptors { + public static class ConjuringUpToken extends BaseParserTestDescriptor { + public String input = "ac"; + public String output = "conjured=[@-1,-1:-1='',<2>,1:1]\n"; + public String errors = "line 1:1 missing 'b' at 'c'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' x='b' {} 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ConjuringUpTokenFromSet extends BaseParserTestDescriptor { + public String input = "ad"; + public String output = "conjured=[@-1,-1:-1='',<2>,1:1]\n"; + public String errors = "line 1:1 missing {'b', 'c'} at 'd'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' x=('b'|'c') {} 'd' ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * Regression test for "Getter for context is not a list when it should be". + * https://github.com/antlr/antlr4/issues/19 + */ + public static class ContextListGetters extends BaseParserTestDescriptor { + public String input = "abab"; + public String output = "abab\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members{ + + } + s : (a | b)+; + a : 'a' {}; + b : 'b' {}; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class DuplicatedLeftRecursiveCall extends BaseParserTestDescriptor { + public String output = ""; + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : expr EOF; + expr : 'x' + | expr expr + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class DuplicatedLeftRecursiveCall_1 extends DuplicatedLeftRecursiveCall { + public String input = "x"; + } + + public static class DuplicatedLeftRecursiveCall_2 extends DuplicatedLeftRecursiveCall { + public String input = "xx"; + } + + public static class DuplicatedLeftRecursiveCall_3 extends DuplicatedLeftRecursiveCall { + public String input = "xxx"; + } + + public static class DuplicatedLeftRecursiveCall_4 extends DuplicatedLeftRecursiveCall { + public String input = "xxxx"; + } + + /** + * This is a regression test for #45 "NullPointerException in ATNConfig.hashCode". + * https://github.com/antlr/antlr4/issues/45 + *

+ * The original cause of this issue was an error in the tool's ATN state optimization, + * which is now detected early in {@link ATNSerializer} by ensuring that all + * serialized transitions point to states which were not removed. + */ + public static class InvalidATNStateRemoval extends BaseParserTestDescriptor { + public String input = "x:x"; + public String output = ""; + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : ID ':' expr; + expr : primary expr? {} | expr '->' ID; + primary : ID; + ID : [a-z]+; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for #6 "NullPointerException in getMissingSymbol". + * https://github.com/antlr/antlr4/issues/6 + */ + public static class InvalidEmptyInput extends BaseParserTestDescriptor { + public String input = ""; + public String output = ""; + public String errors = "line 1:0 missing ID at ''\n"; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : ID+; + ID : [a-z]+; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LL1ErrorInfo extends BaseParserTestDescriptor { + public String input = "dog and software"; + public String output = "{'hardware', 'software'}\n"; + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : animal (AND acClass)? service EOF; + animal : (DOG | CAT ); + service : (HARDWARE | SOFTWARE) ; + AND : 'and'; + DOG : 'dog'; + CAT : 'cat'; + HARDWARE: 'hardware'; + SOFTWARE: 'software'; + WS : ' ' -> skip ; + acClass + @init + {} + : ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LL2 extends BaseParserTestDescriptor { + public String input = "ae"; + public String output = ""; + public String errors = "line 1:1 no viable alternative at input 'ae'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b' + | 'a' 'c' + ; + q : 'e' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LL3 extends BaseParserTestDescriptor { + public String input = "abe"; + public String output = ""; + public String errors = "line 1:2 no viable alternative at input 'abe'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b'* 'c' + | 'a' 'b' 'd' + ; + q : 'e' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LLStar extends BaseParserTestDescriptor { + public String input = "aaae"; + public String output = ""; + public String errors = "line 1:3 no viable alternative at input 'aaae'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a'+ 'b' + | 'a'+ 'c' + ; + q : 'e' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class MultiTokenDeletionBeforeLoop extends BaseParserTestDescriptor { + public String input = "aacabc"; + public String output = ""; + public String errors = "line 1:1 extraneous input 'a' expecting {'b', 'c'}\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b'* 'c'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class MultiTokenDeletionBeforeLoop2 extends BaseParserTestDescriptor { + public String input = "aacabc"; + public String output = ""; + public String errors = "line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' ('b'|'z'{})* 'c'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class MultiTokenDeletionDuringLoop extends BaseParserTestDescriptor { + public String input = "abaaababc"; + public String output = ""; + /** + line 1:2 extraneous input 'a' expecting {'b', 'c'} + line 1:6 extraneous input 'a' expecting {'b', 'c'} + */ + @CommentHasStringValue + public String errors; + + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b'* 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class MultiTokenDeletionDuringLoop2 extends BaseParserTestDescriptor { + public String input = "abaaababc"; + public String output = ""; + /** + line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'} + line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'} + */ + @CommentHasStringValue + public String errors; + + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' ('b'|'z'{})* 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NoViableAltAvoidance extends BaseParserTestDescriptor { + public String input = "a."; + public String output = ""; + public String errors = "line 1:1 mismatched input '.' expecting '!'\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : e '!' ; + e : 'a' 'b' + | 'a' + ; + DOT : '.' ; + WS : [ \t\r\n]+ -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleSetInsertion extends BaseParserTestDescriptor { + public String input = "ad"; + public String output = ""; + public String errors = "line 1:1 missing {'b', 'c'} at 'd'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' ('b'|'c') 'd' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleSetInsertionConsumption extends BaseParserTestDescriptor { + public String input = "ad"; + public String output = "[@0,0:0='a',<3>,1:0]\n"; + public String errors = "line 1:1 missing {'b', 'c'} at 'd'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + myset: ('b'|'c') ; + a: 'a' myset 'd' {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletion extends BaseParserTestDescriptor { + public String input = "aab"; + public String output = ""; + public String errors = "line 1:1 extraneous input 'a' expecting 'b'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionBeforeAlt extends BaseParserTestDescriptor { + public String input = "ac"; + public String output = ""; + public String errors = "line 1:0 extraneous input 'a' expecting {'b', 'c'}\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ('b' | 'c') + ; + q : 'a' + ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionBeforeLoop extends BaseParserTestDescriptor { + public String input = "aabc"; + public String output = ""; + /** + line 1:1 extraneous input 'a' expecting {, 'b'} + line 1:3 token recognition error at: 'c' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b'* ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionBeforeLoop2 extends BaseParserTestDescriptor { + public String input = "aabc"; + public String output = ""; + /** + line 1:1 extraneous input 'a' expecting {, 'b', 'z'} + line 1:3 token recognition error at: 'c' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' ('b'|'z'{})*; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionBeforePredict extends BaseParserTestDescriptor { + public String input = "caaab"; + public String output = ""; + public String errors = "line 1:0 extraneous input 'c' expecting 'a'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a'+ 'b' + | 'a'+ 'c' + ; + q : 'e' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionConsumption extends BaseParserTestDescriptor { + public String input = "aabd"; + public String output = "[@2,2:2='b',<1>,1:2]\n"; + public String errors = "line 1:1 extraneous input 'a' expecting {'b', 'c'}\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + myset: ('b'|'c') ; + a: 'a' myset 'd' {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionDuringLoop extends BaseParserTestDescriptor { + public String input = "ababbc"; + public String output = ""; + public String errors = "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b'* 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionDuringLoop2 extends BaseParserTestDescriptor { + public String input = "ababbc"; + public String output = ""; + public String errors = "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' ('b'|'z'{})* 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenDeletionExpectingSet extends BaseParserTestDescriptor { + public String input = "aab"; + public String output = ""; + public String errors = "line 1:1 extraneous input 'a' expecting {'b', 'c'}\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' ('b'|'c') ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SingleTokenInsertion extends BaseParserTestDescriptor { + public String input = "ac"; + public String output = ""; + public String errors = "line 1:1 missing 'b' at 'c'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b' 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TokenMismatch extends BaseParserTestDescriptor { + public String input = "aa"; + public String output = ""; + public String errors = "line 1:1 mismatched input 'a' expecting 'b'\n"; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : 'a' 'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TokenMismatch2 extends BaseParserTestDescriptor { + public String input = "( ~FORCE_ERROR~ "; + public String output = ""; + public String errors = "line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n"; + public String startRule = "stat"; + public String grammarName = "T"; + + /** + grammar T; + + stat: ( '(' expr? ')' )? EOF ; + expr: ID '=' STR ; + + ERR : '~FORCE_ERROR~' ; + ID : [a-zA-Z]+ ; + STR : '"' ~["]* '"' ; + WS : [ \t\r\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserExecDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserExecDescriptors.java new file mode 100644 index 000000000..eef145a01 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/ParserExecDescriptors.java @@ -0,0 +1,752 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class ParserExecDescriptors { + public static class APlus extends BaseParserTestDescriptor { + public String input = "a b c"; + public String output = "abc\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ID+ { + + }; + ID : 'a'..'z'+; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AStar_1 extends BaseParserTestDescriptor { + public String input = ""; + public String output = "\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ID* { + + }; + ID : 'a'..'z'+; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AStar_2 extends BaseParserTestDescriptor { + public String input = "a b c"; + public String output = "abc\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ID* { + + }; + ID : 'a'..'z'+; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AorAPlus extends BaseParserTestDescriptor { + public String input = "a b c"; + public String output = "abc\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|ID)+ { + + }; + ID : 'a'..'z'+; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AorAStar_1 extends BaseParserTestDescriptor { + public String input = ""; + public String output = "\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|ID)* { + + }; + ID : 'a'..'z'+; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AorAStar_2 extends BaseParserTestDescriptor { + public String input = "a b c"; + public String output = "abc\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|ID)* { + + }; + ID : 'a'..'z'+; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AorB extends BaseParserTestDescriptor { + public String input = "34"; + public String output = "alt 2\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ID { + + } | INT { + + }; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AorBPlus extends BaseParserTestDescriptor { + public String input = "a 34 c"; + public String output = "a34c\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|INT{ + })+ { + + }; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AorBStar_1 extends BaseParserTestDescriptor { + public String input = ""; + public String output = "\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|INT{ + })* { + + }; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class AorBStar_2 extends BaseParserTestDescriptor { + public String input = "a 34 c"; + public String output = "a34c\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|INT{ + })* { + + }; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Basic extends BaseParserTestDescriptor { + public String input = "abc 34"; + public String output = "abc34\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ID INT { + + }; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This test ensures that {@link ParserATNSimulator} does not produce a + * {@link StackOverflowError} when it encounters an {@code EOF} transition + * inside a closure. + */ + public static class EOFInClosure extends BaseParserTestDescriptor { + public String input = "x"; + public String output = ""; + public String errors = ""; + public String startRule = "prog"; + public String grammarName = "T"; + + /** + grammar T; + prog : stat EOF; + stat : 'x' ('y' | EOF)*?; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class IfIfElseGreedyBinding1 extends BaseParserTestDescriptor { + public String input = "if y if y x else x"; + /** + if y x else x + if y if y x else x + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : statement+ ; + statement : 'x' | ifStatement; + ifStatement : 'if' 'y' statement ('else' statement)? { + + }; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> channel(HIDDEN); + */ + @CommentHasStringValue + public String grammar; + + } + + public static class IfIfElseGreedyBinding2 extends BaseParserTestDescriptor { + public String input = "if y if y x else x"; + /** + if y x else x + if y if y x else x + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : statement+ ; + statement : 'x' | ifStatement; + ifStatement : 'if' 'y' statement ('else' statement|) { + + }; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> channel(HIDDEN); + */ + @CommentHasStringValue + public String grammar; + + } + + public static class IfIfElseNonGreedyBinding1 extends BaseParserTestDescriptor { + public String input = "if y if y x else x"; + /** + if y x + if y if y x else x + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : statement+ ; + statement : 'x' | ifStatement; + ifStatement : 'if' 'y' statement ('else' statement)?? { + + }; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> channel(HIDDEN); + */ + @CommentHasStringValue + public String grammar; + + } + + public static class IfIfElseNonGreedyBinding2 extends BaseParserTestDescriptor { + public String input = "if y if y x else x"; + /** + if y x + if y if y x else x + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : statement+ ; + statement : 'x' | ifStatement; + ifStatement : 'if' 'y' statement (|'else' statement) { + + }; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> channel(HIDDEN); + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LL1OptionalBlock_1 extends BaseParserTestDescriptor { + public String input = ""; + public String output = "\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|{}INT)? { + + }; + ID : 'a'..'z'+; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LL1OptionalBlock_2 extends BaseParserTestDescriptor { + public String input = "a"; + public String output = "a\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|{}INT)? { + + }; + ID : 'a'..'z'+; + INT : '0'..'9'+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for antlr/antlr4#195 "label 'label' type + * mismatch with previous definition: TOKEN_LABEL!=RULE_LABEL" + * https://github.com/antlr/antlr4/issues/195 + */ + public static class LabelAliasingAcrossLabeledAlternatives extends BaseParserTestDescriptor { + public String input = "xy"; + /** + x + y + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : a* EOF; + a + : label=subrule {} #One + | label='y' {} #Two + ; + subrule : 'x'; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Labels extends BaseParserTestDescriptor { + public String input = "abc 34;"; + public String output = ""; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : b1=b b2+=b* b3+=';' ; + b : id_=ID val+=INT*; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for antlr/antlr4#299 "Repeating subtree not + * accessible in visitor". + * https://github.com/antlr/antlr4/issues/299 + */ + public static class ListLabelForClosureContext extends BaseParserTestDescriptor { + public String input = "a"; + public String output = ""; + public String errors = ""; + public String startRule = "expression"; + public String grammarName = "T"; + + /** + grammar T; + ifStatement + @after { + })> + } + : 'if' expression + ( ( 'then' + executableStatement* + elseIfStatement* // \<--- problem is here; should yield a list not node + elseStatement? + 'end' 'if' + ) | executableStatement ) + ; + + elseIfStatement + : 'else' 'if' expression 'then' executableStatement* + ; + expression : 'a' ; + executableStatement : 'a' ; + elseStatement : 'a' ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for #270 "Fix operator += applied to a set of + * tokens". + * https://github.com/antlr/antlr4/issues/270 + */ + public static class ListLabelsOnSet extends BaseParserTestDescriptor { + public String input = "abc 34;"; + public String output = ""; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : b b* ';' ; + b : ID val+=(INT | FLOAT)*; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + FLOAT : [0-9]+ '.' [0-9]+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This test ensures that {@link ParserATNSimulator} produces a correct + * result when the grammar contains multiple explicit references to + * {@code EOF} inside of parser rules. + */ + public static class MultipleEOFHandling extends BaseParserTestDescriptor { + public String input = "x"; + public String output = ""; + public String errors = ""; + public String startRule = "prog"; + public String grammarName = "T"; + + /** + grammar T; + prog : ('x' | 'x' 'y') EOF EOF; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This test is meant to detect regressions of bug antlr/antlr4#41. + * https://github.com/antlr/antlr4/issues/41 + */ + public static class Optional_1 extends BaseParserTestDescriptor { + public String input = "x"; + public String output = ""; + public String errors = ""; + public String startRule = "stat"; + public String grammarName = "T"; + + /** + grammar T; + stat : ifstat | 'x'; + ifstat : 'if' stat ('else' stat)?; + WS : [ \n\t]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Optional_2 extends BaseParserTestDescriptor { + public String input = "if x"; + public String output = ""; + public String errors = ""; + public String startRule = "stat"; + public String grammarName = "T"; + + /** + grammar T; + stat : ifstat | 'x'; + ifstat : 'if' stat ('else' stat)?; + WS : [ \n\t]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Optional_3 extends BaseParserTestDescriptor { + public String input = "if x else x"; + public String output = ""; + public String errors = ""; + public String startRule = "stat"; + public String grammarName = "T"; + + /** + grammar T; + stat : ifstat | 'x'; + ifstat : 'if' stat ('else' stat)?; + WS : [ \n\t]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Optional_4 extends BaseParserTestDescriptor { + public String input = "if if x else x"; + public String output = ""; + public String errors = ""; + public String startRule = "stat"; + public String grammarName = "T"; + + /** + grammar T; + stat : ifstat | 'x'; + ifstat : 'if' stat ('else' stat)?; + WS : [ \n\t]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /* + * This is a regression test for antlr/antlr4#561 "Issue with parser + * generation in 4.2.2" + * https://github.com/antlr/antlr4/issues/561 + */ + public static class ParserProperty extends BaseParserTestDescriptor { + public String input = "abc"; + public String output = "valid\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + + a : {}? ID {} + ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This test is meant to test the expected solution to antlr/antlr4#42. + * https://github.com/antlr/antlr4/issues/42 + */ + public static class PredicatedIfIfElse extends BaseParserTestDescriptor { + public String input = "if x if x a else b"; + public String output = ""; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : stmt EOF ; + stmt : ifStmt | ID; + ifStmt : 'if' ID stmt ('else' stmt | { })> }?); + ELSE : 'else'; + ID : [a-zA-Z]+; + WS : [ \\n\\t]+ -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for antlr/antlr4#334 "BailErrorStrategy: bails + * out on proper input". + * https://github.com/antlr/antlr4/issues/334 + */ + public static class PredictionIssue334 extends BaseParserTestDescriptor { + public String input = "a"; + public String output = "(file_ (item a) )\n"; + public String errors = ""; + public String startRule = "file_"; + public String grammarName = "T"; + + /** + grammar T; + file_ @init{ + + } + @after { + + } + : item (SEMICOLON item)* SEMICOLON? EOF ; + item : A B?; + SEMICOLON: ';'; + A : 'a'|'A'; + B : 'b'|'B'; + WS : [ \r\t\n]+ -> skip; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for antlr/antlr4#561 "Issue with parser + * generation in 4.2.2" + * https://github.com/antlr/antlr4/issues/561 + */ + public static class ReferenceToATN_1 extends BaseParserTestDescriptor { + public String input = ""; + public String output = "\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|ATN)* ATN? {} ; + ID : 'a'..'z'+ ; + ATN : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ReferenceToATN_2 extends BaseParserTestDescriptor { + public String input = "a 34 c"; + public String output = "a34c\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (ID|ATN)* ATN? {} ; + ID : 'a'..'z'+ ; + ATN : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/PerformanceDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/PerformanceDescriptors.java new file mode 100644 index 000000000..36ad855a9 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/PerformanceDescriptors.java @@ -0,0 +1,75 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class PerformanceDescriptors { + /* + * This is a regression test for antlr/antlr4#192 "Poor performance of + * expression parsing". + * https://github.com/antlr/antlr4/issues/192 + */ + public static abstract class ExpressionGrammar extends BaseParserTestDescriptor { + public String output = ""; + public String errors = ""; + public String startRule = "program"; + public String grammarName = "Expr"; + + /** + grammar Expr; + + program: expr EOF; + + expr + : ID + | 'not' expr + | expr 'and' expr + | expr 'or' expr + ; + + ID: [a-zA-Z_][a-zA-Z_0-9]*; + WS: [ \t\n\r\f]+ -> skip; + ERROR: .; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ExpressionGrammar_1 extends ExpressionGrammar { + /** + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 + */ + @CommentHasStringValue + public String input; + } + + public static class ExpressionGrammar_2 extends ExpressionGrammar { + /** + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or + not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 + */ + @CommentHasStringValue + public String input; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalLexerDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalLexerDescriptors.java new file mode 100644 index 000000000..cdccf550e --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalLexerDescriptors.java @@ -0,0 +1,242 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseLexerTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class SemPredEvalLexerDescriptors { + public static class DisableRule extends BaseLexerTestDescriptor { + public String input = "enum abc"; + /** + [@0,0:3='enum',<2>,1:0] + [@1,5:7='abc',<3>,1:5] + [@2,8:7='',<-1>,1:8] + s0-' '->:s5=>4 + s0-'a'->:s6=>3 + s0-'e'->:s1=>3 + :s1=>3-'n'->:s2=>3 + :s2=>3-'u'->:s3=>3 + :s6=>3-'b'->:s6=>3 + :s6=>3-'c'->:s6=>3 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + E1 : 'enum' { }? ; + E2 : 'enum' { }? ; // winner not E1 or ID + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDFA() { return true; } + } + + public static class EnumNotID extends BaseLexerTestDescriptor { + public String input = "enum abc enum"; + /** + [@0,0:3='enum',<1>,1:0] + [@1,5:7='abc',<2>,1:5] + [@2,9:12='enum',<1>,1:9] + [@3,13:12='',<-1>,1:13] + s0-' '->:s3=>3 + */ + @CommentHasStringValue // + + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + ENUM : [a-z]+ { }? ; + ID : [a-z]+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDFA() { return true; } + } + + public static class IDnotEnum extends BaseLexerTestDescriptor { + public String input = "enum abc enum"; + /** + [@0,0:3='enum',<2>,1:0] + [@1,5:7='abc',<2>,1:5] + [@2,9:12='enum',<2>,1:9] + [@3,13:12='',<-1>,1:13] + s0-' '->:s2=>3 + */ + @CommentHasStringValue // + + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + ENUM : [a-z]+ { }? ; + ID : [a-z]+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDFA() { return true; } + } + + public static class IDvsEnum extends BaseLexerTestDescriptor { + public String input = "enum abc enum"; + + /** + [@0,0:3='enum',<2>,1:0] + [@1,5:7='abc',<2>,1:5] + [@2,9:12='enum',<2>,1:9] + [@3,13:12='',<-1>,1:13] + s0-' '->:s5=>3 + s0-'a'->:s4=>2 + s0-'e'->:s1=>2 + :s1=>2-'n'->:s2=>2 + :s2=>2-'u'->:s3=>2 + :s4=>2-'b'->:s4=>2 + :s4=>2-'c'->:s4=>2 + */ + @CommentHasStringValue // no 'm'-> transition...conflicts with pred + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + ENUM : 'enum' { }? ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDFA() { return true; } + } + + public static class Indent extends BaseLexerTestDescriptor { + public String input = "abc\n def \n"; + /** + INDENT + [@0,0:2='abc',<1>,1:0] + [@1,3:3='\n',<3>,1:3] + [@2,4:5=' ',<2>,2:0] + [@3,6:8='def',<1>,2:2] + [@4,9:10=' ',<4>,2:5] + [@5,11:11='\n',<3>,2:7] + [@6,12:11='',<-1>,3:0] + s0-' + '->:s2=>3 + s0-'a'->:s1=>1 + s0-'d'->:s1=>1 + :s1=>1-'b'->:s1=>1 + :s1=>1-'c'->:s1=>1 + :s1=>1-'e'->:s1=>1 + :s1=>1-'f'->:s1=>1 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + ID : [a-z]+ ; + INDENT : [ \t]+ { }? + { } ; + NL : '\n'; + WS : [ \t]+ ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDFA() { return true; } + } + + public static class LexerInputPositionSensitivePredicates extends BaseLexerTestDescriptor { + public String input = "a cde\nabcde\n"; + /** + a + cde + ab + cde + [@0,0:0='a',<1>,1:0] + [@1,2:4='cde',<2>,1:2] + [@2,6:7='ab',<1>,2:0] + [@3,8:10='cde',<2>,2:2] + [@4,12:11='',<-1>,3:0] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + WORD1 : ID1+ { } ; + WORD2 : ID2+ { } ; + fragment ID1 : { \< 2 }? [a-zA-Z]; + fragment ID2 : { >= 2 }? [a-zA-Z]; + WS : (' '|'\n') -> skip; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDFA() { return true; } + } + + public static class PredicatedKeywords extends BaseLexerTestDescriptor { + public String input = "enum enu a"; + /** + enum! + ID enu + ID a + [@0,0:3='enum',<1>,1:0] + [@1,5:7='enu',<2>,1:5] + [@2,9:9='a',<2>,1:9] + [@3,10:9='',<-1>,1:10] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = ""; + public String grammarName = "L"; + + /** + lexer grammar L; + ENUM : [a-z]+ { }? { } ; + ID : [a-z]+ { } ; + WS : [ \n] -> skip ; + */ + @CommentHasStringValue + public String grammar; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalParserDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalParserDescriptors.java new file mode 100644 index 000000000..5dddfaee0 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SemPredEvalParserDescriptors.java @@ -0,0 +1,740 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class SemPredEvalParserDescriptors { + public static class ActionHidesPreds extends BaseParserTestDescriptor { + public String input = "x x y"; + /** + alt 1 + alt 1 + alt 1 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members {} + s : a+ ; + a : {} ID {}? {} + | {} ID {}? {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** Regular non-forced actions can create side effects used by semantic + * predicates and so we cannot evaluate any semantic predicate + * encountered after having seen a regular action. This includes + * during global follow operations. + */ + public static class ActionsHidePredsInGlobalFOLLOW extends BaseParserTestDescriptor { + public String input = "a!"; + /** + eval=true + parse + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members { + + } + s : e {} {}? {} '!' ; + t : e {} {}? ID ; + e : ID | ; // non-LL(1) so we use ATN + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for antlr/antlr4#196 + * "element+ in expression grammar doesn't parse properly" + * https://github.com/antlr/antlr4/issues/196 + */ + public static class AtomWithClosureInTranslatedLRRule extends BaseParserTestDescriptor { + public String input = "a+b+a"; + public String output = ""; + public String errors = ""; + public String startRule = "start"; + public String grammarName = "T"; + + /** + grammar T; + start : e[0] EOF; + e[int _p] + : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )* + ; + + */ + @CommentHasStringValue + public String grammar; + + } + + /** We cannot collect predicates that are dependent on local context if + * we are doing a global follow. They appear as if they were not there at all. + */ + public static class DepedentPredsInGlobalFOLLOW extends BaseParserTestDescriptor { + public String input = "a!"; + /** + eval=true + parse + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members { + + } + s : a[99] ; + a[int i] : e {}? {} '!' ; + b[int i] : e {}? ID ; + e : ID | ; // non-LL(1) so we use ATN + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class DependentPredNotInOuterCtxShouldBeIgnored extends BaseParserTestDescriptor { + public String input = "a;"; + public String output = "alt 2\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a; + b[int i] : a[i] ; + a[int i] + : {}? ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * This is a regression test for antlr/antlr4#218 "ANTLR4 EOF Related Bug". + * https://github.com/antlr/antlr4/issues/218 + */ + public static class DisabledAlternative extends BaseParserTestDescriptor { + public String input = "hello"; + public String output = ""; + public String errors = ""; + public String startRule = "cppCompilationUnit"; + public String grammarName = "T"; + + /** + grammar T; + cppCompilationUnit : content+ EOF; + content: anything | {}? .; + anything: ANY_CHAR; + ANY_CHAR: [_a-zA-Z0-9]; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class IndependentPredNotPassedOuterCtxToAvoidCastException extends BaseParserTestDescriptor { + public String input = "a;"; + public String output = "alt 2\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : b ';' | b '.' ; + b : a ; + a + : {}? ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NoTruePredsThrowsNoViableAlt extends BaseParserTestDescriptor { + public String input = "y 3 x 4"; + public String output = ""; + public String errors = "line 1:0 no viable alternative at input 'y'\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a a; + a : {}? ID INT {} + | {}? ID INT {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Order extends BaseParserTestDescriptor { + public String input = "x y"; + /** + alt 1 + alt 1 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a {} a; // do 2x: once in ATN, next in DFA; + // action blocks lookahead from falling off of 'a' + // and looking into 2nd 'a' ref. !ctx dependent pred + a : ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** Loopback doesn't eval predicate at start of alt */ + public static abstract class PredFromAltTestedInLoopBack extends BaseParserTestDescriptor { + public String startRule = "file_"; + public String grammarName = "T"; + + /** + grammar T; + file_ + @after {} + : para para EOF ; + para: paraContent NL NL ; + paraContent : ('s'|'x'|{})>}? NL)+ ; + NL : '\n' ; + s : 's' ; + X : 'x' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class PredFromAltTestedInLoopBack_1 extends PredFromAltTestedInLoopBack { + public String input = "s\n\n\nx\n"; + public String output = "(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n"; + /** + line 5:0 mismatched input '' expecting ' + ' + */ + @CommentHasStringValue + public String errors; + } + + public static class PredFromAltTestedInLoopBack_2 extends PredFromAltTestedInLoopBack { + public String input = "s\n\n\nx\n\n"; + public String output = "(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n"; + public String errors = ""; + } + + public static abstract class PredTestedEvenWhenUnAmbig extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "primary"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members {} + primary + : ID {} + | {}? 'enum' {} + ; + ID : [a-z]+ ; + WS : [ \t\n\r]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class PredTestedEvenWhenUnAmbig_1 extends PredTestedEvenWhenUnAmbig { + public String input = "abc"; + public String output = "ID abc\n"; + } + + public static class PredTestedEvenWhenUnAmbig_2 extends PredTestedEvenWhenUnAmbig { + public String input = "enum"; + public String output = ""; + public String errors = "line 1:0 no viable alternative at input 'enum'\n"; + } + + /** + * In this case, we're passing a parameter into a rule that uses that + * information to predict the alternatives. This is the special case + * where we know exactly which context we are in. The context stack + * is empty and we have not dipped into the outer context to make a decision. + */ + public static class PredicateDependentOnArg extends BaseParserTestDescriptor { + public String input = "a b"; + /** + alt 2 + alt 1 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members {} + s : a[2] a[1]; + a[int i] + : {}? ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** + * In this case, we have to ensure that the predicates are not tested + * during the closure after recognizing the 1st ID. The closure will + * fall off the end of 'a' 1st time and reach into the a[1] rule + * invocation. It should not execute predicates because it does not know + * what the parameter is. The context stack will not be empty and so + * they should be ignored. It will not affect recognition, however. We + * are really making sure the ATN simulation doesn't crash with context + * object issues when it encounters preds during FOLLOW. + */ + public static class PredicateDependentOnArg2 extends BaseParserTestDescriptor { + public String input = "a b"; + public String output = ""; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members {} + s : a[2] a[1]; + a[int i] + : {}? ID + | {}? ID + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** During a global follow operation, we still collect semantic + * predicates as long as they are not dependent on local context + */ + public static class PredsInGlobalFOLLOW extends BaseParserTestDescriptor { + public String input = "a!"; + /** + eval=true + parse + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members { + + } + s : e {}? {} '!' ; + t : e {}? ID ; + e : ID | ; // non-LL(1) so we use ATN + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class RewindBeforePredEval extends BaseParserTestDescriptor { + public String input = "y 3 x 4"; + /** + alt 2 + alt 1 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a a; + a : {}? ID INT {} + | {}? ID INT {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class Simple extends BaseParserTestDescriptor { + public String input = "x y 3"; + /** + alt 2 + alt 2 + alt 3 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN + a : {}? ID {} + | {}? ID {} + | INT {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SimpleValidate extends BaseParserTestDescriptor { + public String input = "x"; + public String output = ""; + public String errors = "line 1:0 no viable alternative at input 'x'\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a ; + a : {}? ID {} + | {}? INT {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SimpleValidate2 extends BaseParserTestDescriptor { + public String input = "3 4 x"; + /** + alt 2 + alt 2 + */ + @CommentHasStringValue + public String output; + + public String errors = "line 1:4 no viable alternative at input 'x'\n"; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a a a; + a : {}? ID {} + | {}? INT {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ToLeft extends BaseParserTestDescriptor { + public String input = "x x y"; + /** + alt 2 + alt 2 + alt 2 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a+ ; + a : {}? ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + /** In this case, we use predicates that depend on global information + * like we would do for a symbol table. We simply execute + * the predicates assuming that all necessary information is available. + * The i++ action is done outside of the prediction and so it is executed. + */ + public static class ToLeftWithVaryingPredicate extends BaseParserTestDescriptor { + public String input = "x x y"; + /** + i=1 + alt 2 + i=2 + alt 1 + i=3 + alt 2 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::members {} + s : ({ + + } a)+ ; + a : {}? ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class TwoUnpredicatedAlts extends BaseParserTestDescriptor { + public String input = "x; y"; + /** + alt 1 + alt 1 + */ + @CommentHasStringValue + public String output; + + /** + line 1:0 reportAttemptingFullContext d=0 (a), input='x' + line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x' + line 1:3 reportAttemptingFullContext d=0 (a), input='y' + line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : {} a ';' a; // do 2x: once in ATN, next in DFA + a : ID {} + | ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDiagnosticErrors() { return true; } + } + + public static class TwoUnpredicatedAltsAndOneOrthogonalAlt extends BaseParserTestDescriptor { + public String input = "34; x; y"; + /** + alt 1 + alt 2 + alt 2 + */ + @CommentHasStringValue + public String output; + + /** + line 1:4 reportAttemptingFullContext d=0 (a), input='x' + line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x' + line 1:7 reportAttemptingFullContext d=0 (a), input='y' + line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : {} a ';' a ';' a; + a : INT {} + | ID {} // must pick this one for ID since pred is false + | ID {} + | {}? ID {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean showDiagnosticErrors() { return true; } + } + + public static class UnpredicatedPathsInAlt extends BaseParserTestDescriptor { + public String input = "x 4"; + public String output = "alt 1\n"; + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a {} + | b {} + ; + a : {}? ID INT + | ID INT + ; + b : ID ID + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ValidateInDFA extends BaseParserTestDescriptor { + public String input = "x ; y"; + public String output = ""; + /** + line 1:0 no viable alternative at input 'x' + line 1:4 no viable alternative at input 'y' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + s : a ';' a; + // ';' helps us to resynchronize without consuming + // 2nd 'a' reference. We our testing that the DFA also + // throws an exception if the validating predicate fails + a : {}? ID {} + | {}? INT {} + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SetsDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SetsDescriptors.java new file mode 100644 index 000000000..0c7e98af1 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/SetsDescriptors.java @@ -0,0 +1,399 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +public class SetsDescriptors { + public static class CharSetLiteral extends BaseParserTestDescriptor { + public String input = "A a B b"; + /** + A + a + B + b + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : (A {})+ ; + A : [AaBb] ; + WS : (' '|'\n')+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ComplementSet extends BaseParserTestDescriptor { + public String input = "a"; + public String output = ""; + /** + line 1:0 token recognition error at: 'a' + line 1:1 missing {} at '' + */ + @CommentHasStringValue + public String errors; + + public String startRule = "parse"; + public String grammarName = "T"; + + /** + grammar T; + parse : ~NEW_LINE; + NEW_LINE: '\\r'? '\\n'; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LexerOptionalSet extends BaseParserTestDescriptor { + public String input = "ac"; + public String output = "ac\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : ('a'|'b')? 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LexerPlusSet extends BaseParserTestDescriptor { + public String input = "abaac"; + public String output = "abaac\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : ('a'|'b')+ 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class LexerStarSet extends BaseParserTestDescriptor { + public String input = "abaac"; + public String output = "abaac\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : ('a'|'b')* 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NotChar extends BaseParserTestDescriptor { + public String input = "x"; + public String output = "x\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : ~'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NotCharSet extends BaseParserTestDescriptor { + public String input = "x"; + public String output = "x\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : ~('b'|'c') ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NotCharSetWithLabel extends BaseParserTestDescriptor { + public String input = "x"; + public String output = "x\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : h=~('b'|'c') ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class NotCharSetWithRuleRef3 extends BaseParserTestDescriptor { + public String input = "x"; + public String output = "x\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : ('a'|B) ; // this doesn't collapse to set but works + fragment + B : ~('a'|'c') ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class OptionalLexerSingleElement extends BaseParserTestDescriptor { + public String input = "bc"; + public String output = "bc\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : 'b'? 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class OptionalSet extends BaseParserTestDescriptor { + public String input = "ac"; + public String output = "ac\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ('a'|'b')? 'c' {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class OptionalSingleElement extends BaseParserTestDescriptor { + public String input = "bc"; + public String output = "bc\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A? 'c' {} ; + A : 'b' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ParserNotSet extends BaseParserTestDescriptor { + public String input = "zz"; + public String output = "z\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : t=~('x'|'y') 'z' {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ParserNotToken extends BaseParserTestDescriptor { + public String input = "zz"; + public String output = "zz\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ~'x' 'z' {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ParserNotTokenWithLabel extends BaseParserTestDescriptor { + public String input = "zz"; + public String output = "z\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : t=~'x' 'z' {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class ParserSet extends BaseParserTestDescriptor { + public String input = "x"; + public String output = "x\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : t=('x'|'y') {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class PlusLexerSingleElement extends BaseParserTestDescriptor { + public String input = "bbbbc"; + public String output = "bbbbc\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : 'b'+ 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class PlusSet extends BaseParserTestDescriptor { + public String input = "abaac"; + public String output = "abaac\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ('a'|'b')+ 'c' {} ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class RuleAsSet extends BaseParserTestDescriptor { + public String input = "b"; + public String output = "b\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a @after {} : 'a' | 'b' |'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class SeqDoesNotBecomeSet extends BaseParserTestDescriptor { + public String input = "34"; + public String output = "34\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : C {} ; + fragment A : '1' | '2'; + fragment B : '3' '4'; + C : A | B; + */ + @CommentHasStringValue + public String grammar; + + } + + public static abstract class StarLexerSingleElement extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : A {} ; + A : 'b'* 'c' ; + */ + @CommentHasStringValue + public String grammar; + + } + + public static class StarLexerSingleElement_1 extends StarLexerSingleElement { + public String input = "bbbbc"; + public String output = "bbbbc\n"; + } + + public static class StarLexerSingleElement_2 extends StarLexerSingleElement { + public String input = "c"; + public String output = "c\n"; + } + + public static class StarSet extends BaseParserTestDescriptor { + public String input = "abaac"; + public String output = "abaac\n"; + public String errors = ""; + public String startRule = "a"; + public String grammarName = "T"; + + /** + grammar T; + a : ('a'|'b')* 'c' {} ; + */ + @CommentHasStringValue + public String grammar; + + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/VisitorsDescriptors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/VisitorsDescriptors.java new file mode 100644 index 000000000..9d2faa5ec --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/descriptors/VisitorsDescriptors.java @@ -0,0 +1,267 @@ +package org.antlr.v4.test.runtime.descriptors; + +import org.antlr.v4.test.runtime.BaseParserTestDescriptor; +import org.antlr.v4.test.runtime.CommentHasStringValue; + +import java.util.Arrays; + +import static org.antlr.v4.test.runtime.BaseRuntimeTest.JavaScriptTargets; + +public class VisitorsDescriptors { + public static boolean isJavaScriptTarget(String targetName) { + boolean isJavaScriptTarget = Arrays.binarySearch(JavaScriptTargets, targetName)>=0; + return isJavaScriptTarget; + } + + public static class Basic extends BaseParserTestDescriptor { + public String input = "1 2"; + /** + (a 1 2) + [ '1', '2' ] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::header { + + } + + @parser::members { + + } + + s + @after { + + + } + : r=a ; + a : INT INT + | ID + ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean ignore(String targetName) { return !isJavaScriptTarget(targetName); } + } + + public static class LR extends BaseParserTestDescriptor { + public String input = "1+2*3"; + /** + (e (e 1) + (e (e 2) * (e 3))) + 1,,2,,32 3 21 2 1 + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::header { + + } + + @parser::members { + + } + + s + @after { + + + } + : r=e ; + e : e op='*' e + | e op='+' e + | INT + ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean ignore(String targetName) { return !isJavaScriptTarget(targetName); } + } + + public static class LRWithLabels extends BaseParserTestDescriptor { + public String input = "1(2,3)"; + /** + (e (e 1) ( (eList (e 2) , (e 3)) )) + 1,,2,,3,1 [13 6] + */ + @CommentHasStringValue + public String output; + + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::header { + + } + + @parser::members { + + } + + s + @after { + + + } + : r=e ; + e : e '(' eList ')' # Call + | INT # Int + ; + eList : e (',' e)* ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean ignore(String targetName) { return !isJavaScriptTarget(targetName); } + } + + public static abstract class RuleGetters extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::header { + + } + + @parser::members { + + } + + s + @after { + + + } + : r=a ; + a : b b // forces list + | b // a list still + ; + b : ID | INT; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean ignore(String targetName) { return !isJavaScriptTarget(targetName); } + } + + public static class RuleGetters_1 extends RuleGetters { + public String input = "1 2"; + /** + (a (b 1) (b 2)) + ,1 2 1 + */ + @CommentHasStringValue + public String output; + } + + public static class RuleGetters_2 extends RuleGetters { + public String input = "abc"; + /** + (a (b abc)) + abc + */ + @CommentHasStringValue + public String output; + } + + public static abstract class TokenGetters extends BaseParserTestDescriptor { + public String errors = ""; + public String startRule = "s"; + public String grammarName = "T"; + + /** + grammar T; + @parser::header { + + } + + @parser::members { + + } + + s + @after { + + + } + : r=a ; + a : INT INT + | ID + ; + MULT: '*' ; + ADD : '+' ; + INT : [0-9]+ ; + ID : [a-z]+ ; + WS : [ \t\n]+ -> skip ; + */ + @CommentHasStringValue + public String grammar; + + @Override + public boolean ignore(String targetName) { return !isJavaScriptTarget(targetName); } + } + + public static class TokenGetters_1 extends TokenGetters { + public String input = "1 2"; + /** + (a 1 2) + ,1 2 [1, 2] + */ + @CommentHasStringValue + public String output; + } + + public static class TokenGetters_2 extends TokenGetters { + public String input = "abc"; + /** + (a abc) + [@0,0:2='abc',<4>,1:0] + */ + @CommentHasStringValue + public String output; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseGoTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseGoTest.java new file mode 100644 index 000000000..75752616f --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/BaseGoTest.java @@ -0,0 +1,1157 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.go; + +import org.antlr.v4.Tool; +import org.antlr.v4.automata.ATNFactory; +import org.antlr.v4.automata.ATNPrinter; +import org.antlr.v4.automata.LexerATNFactory; +import org.antlr.v4.automata.ParserATNFactory; +import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.IntStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.RuleContext; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.WritableToken; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ATNSerializer; +import org.antlr.v4.runtime.atn.ATNState; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.IntegerList; +import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.misc.Utils; +import org.antlr.v4.semantics.SemanticPipeline; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.SingleTest; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.DOTGenerator; +import org.antlr.v4.tool.DefaultToolListener; +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.antlr.v4.tool.LexerGrammar; +import org.antlr.v4.tool.Rule; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupString; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import static junit.framework.TestCase.assertEquals; +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertNotNull; +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertArrayEquals; + +public class BaseGoTest implements SingleTest { + // -J-Dorg.antlr.v4.test.BaseTest.level=FINE + // private static final Logger LOGGER = + // Logger.getLogger(BaseTest.class.getName()); + + public File overall_tmpdir = null; + public File tmpdir = null; // this is where the parser package is stored, typically inside the tmpdir + private static File tmpGopath = null; + private static final String GO_RUNTIME_IMPORT_PATH = "github.com/antlr/antlr4/runtime/Go/antlr"; // TODO: Change this before merging with upstream + + /** + * If error during parser execution, store stderr here; can't return stdout + * and stderr. This doesn't trap errors from running antlr. + */ + protected String stderrDuringParse; + + /** Errors found while running antlr */ + protected StringBuilder antlrToolErrors; + + /** + * Copies all files from go runtime to a temporary folder that is inside a valid GOPATH project structure. + */ + public static void groupSetUp() throws Exception { + tmpGopath = new File(System.getProperty("java.io.tmpdir"), "antlr-goruntime-tmpgopath-" + + Long.toHexString(System.currentTimeMillis())); + + ArrayList pathsegments = new ArrayList(); + pathsegments.add("src"); + pathsegments.addAll(Arrays.asList(GO_RUNTIME_IMPORT_PATH.split("/"))); + + File tmpPackageDir = tmpGopath; + for (String pathsegment : pathsegments) { + tmpPackageDir = new File(tmpPackageDir, pathsegment); + } + if (!tmpPackageDir.mkdirs()) { + throw new Exception("Could not create temp go runtime package dirs!"); + } + + File[] runtimeFiles = locateRuntime().listFiles(); + if (runtimeFiles == null) { + throw new Exception("Go runtime file list is empty."); + } + for (File runtimeFile : runtimeFiles) { + File dest = new File(tmpPackageDir, runtimeFile.getName()); + copyFile(runtimeFile, dest); + } + + cacheGoRuntime(tmpPackageDir); + } + + @Override + public void testTearDown() throws Exception { + } + + @Override + public String getTmpDir() { + return tmpdir.getPath(); + } + + @Override + public String getStdout() { + return null; + } + + @Override + public String getParseErrors() { + return stderrDuringParse; + } + + @Override + public String getANTLRToolErrors() { + if ( antlrToolErrors.length()==0 ) { + return null; + } + return antlrToolErrors.toString(); + } + + public static void groupTearDown() throws Exception { + eraseDirectory(tmpGopath); + } + + private static void cacheGoRuntime(File tmpPackageDir) throws Exception { + String goExecutable = locateGo(); + ProcessBuilder pb = new ProcessBuilder(goExecutable, "install", "-x"); + pb.directory(tmpPackageDir); + pb.environment().put("GOPATH", tmpGopath.getPath()); + pb.redirectErrorStream(true); + Process process = pb.start(); + StreamVacuum sucker = new StreamVacuum(process.getInputStream()); + sucker.start(); + int exit = process.waitFor(); + sucker.join(); + if (exit != 0) { + throw new Exception("Non-zero exit while caching go runtime, output: " + sucker.toString()); + } + } + + private static void copyFile(File source, File dest) throws IOException { + InputStream is = new FileInputStream(source); + OutputStream os = new FileOutputStream(dest); + byte[] buf = new byte[4 << 10]; + int l; + while ((l = is.read(buf)) > -1) { + os.write(buf, 0, l); + } + is.close(); + os.close(); + } + + public void testSetUp() throws Exception { + // new output dir for each test + String prop = System.getProperty("antlr-go-test-dir"); + if (prop != null && prop.length() > 0) + overall_tmpdir = new File(prop); + else + overall_tmpdir = new File(System.getProperty("java.io.tmpdir"), + getClass().getSimpleName() + "-" + System.currentTimeMillis()); + + if ( overall_tmpdir.exists()) + this.eraseDirectory(overall_tmpdir); + + tmpdir = new File(overall_tmpdir, "parser"); + + if ( tmpdir.exists()) { + this.eraseDirectory(tmpdir); + } + antlrToolErrors = new StringBuilder(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { + return new Tool(args); + } + + protected Tool newTool() { + return new Tool(new String[]{"-o", tmpdir.getPath()}); + } + + protected ATN createATN(Grammar g, boolean useSerializer) { + if (g.atn == null) { + semanticProcess(g); + assertEquals(0, g.tool.getNumErrors()); + + ParserATNFactory f; + if (g.isLexer()) { + f = new LexerATNFactory((LexerGrammar) g); + } else { + f = new ParserATNFactory(g); + } + + g.atn = f.createATN(); + assertEquals(0, g.tool.getNumErrors()); + } + + ATN atn = g.atn; + if (useSerializer) { + char[] serialized = ATNSerializer.getSerializedAsChars(atn); + return new ATNDeserializer().deserialize(serialized); + } + + return atn; + } + + protected void semanticProcess(Grammar g) { + if (g.ast != null && !g.ast.hasErrors) { + System.out.println(g.ast.toStringTree()); + Tool antlr = new Tool(); + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + if (g.getImportedGrammars() != null) { // process imported grammars + // (if any) + for (Grammar imp : g.getImportedGrammars()) { + antlr.processNonCombinedGrammar(imp, false); + } + } + } + } + + IntegerList getTypesFromString(Grammar g, String expecting) { + IntegerList expectingTokenTypes = new IntegerList(); + if (expecting != null && !expecting.trim().isEmpty()) { + for (String tname : expecting.replace(" ", "").split(",")) { + int ttype = g.getTokenType(tname); + expectingTokenTypes.add(ttype); + } + } + return expectingTokenTypes; + } + + public IntegerList getTokenTypesViaATN(String input, + LexerATNSimulator lexerATN) { + ANTLRInputStream in = new ANTLRInputStream(input); + IntegerList tokenTypes = new IntegerList(); + int ttype; + do { + ttype = lexerATN.match(in, Lexer.DEFAULT_MODE); + tokenTypes.add(ttype); + } while (ttype != Token.EOF); + return tokenTypes; + } + + public List getTokenTypes(LexerGrammar lg, ATN atn, CharStream input) { + LexerATNSimulator interp = new LexerATNSimulator(atn, + new DFA[] { new DFA( + atn.modeToStartState.get(Lexer.DEFAULT_MODE)) }, null); + List tokenTypes = new ArrayList(); + int ttype; + boolean hitEOF = false; + do { + if (hitEOF) { + tokenTypes.add("EOF"); + break; + } + int t = input.LA(1); + ttype = interp.match(input, Lexer.DEFAULT_MODE); + if (ttype == Token.EOF) { + tokenTypes.add("EOF"); + } else { + tokenTypes.add(lg.typeToTokenList.get(ttype)); + } + + if (t == IntStream.EOF) { + hitEOF = true; + } + } while (ttype != Token.EOF); + return tokenTypes; + } + + /** Return true if all is ok, no errors */ + protected ErrorQueue antlr(String fileName, String grammarFileName, + String grammarStr, boolean defaultListener, String... extraOptions) { + if(grammarStr!=null) { + mkdir(tmpdir); + writeFile(tmpdir, fileName, grammarStr); + } + final List options = new ArrayList(); + Collections.addAll(options, extraOptions); + options.add("-Dlanguage=Go"); + options.add("-o"); + options.add(tmpdir.getPath()); + options.add("-lib"); + options.add(tmpdir.getPath()); + options.add(new File(tmpdir, grammarFileName).getPath()); + + final String[] optionsA = new String[options.size()]; + options.toArray(optionsA); + Tool antlr = newTool(optionsA); + ErrorQueue equeue = new ErrorQueue(antlr); + antlr.addListener(equeue); + if (defaultListener) { + antlr.addListener(new DefaultToolListener(antlr)); + } + antlr.processGrammarsOnCommandLine(); + + if ( !defaultListener && !equeue.errors.isEmpty() ) { + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage msg = equeue.errors.get(i); + antlrToolErrors.append(msg.toString()); + } + try { + antlrToolErrors.append(new String(Utils.readFile(tmpdir+"/"+grammarFileName))); + } + catch (IOException ioe) { + antlrToolErrors.append(ioe.toString()); + } + } + if ( !defaultListener && !equeue.warnings.isEmpty() ) { + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage msg = equeue.warnings.get(i); + // antlrToolErrors.append(msg); warnings are hushed + } + } + + return equeue; + } + + protected String execLexer(String grammarFileName, String grammarStr, + String lexerName, String input) { + return execLexer(grammarFileName, grammarStr, lexerName, input, false); + } + + @Override + public String execLexer(String grammarFileName, String grammarStr, + String lexerName, String input, boolean showDFA) { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, null, lexerName, "-no-listener"); + assertTrue(success); + writeFile(overall_tmpdir, "input", input); + writeLexerTestFile(lexerName, showDFA); + String output = execModule("Test.go"); + return output; + } +// +// public String execParser(String grammarFileName, String grammarStr, +// String parserName, String lexerName, String listenerName, +// String visitorName, String startRuleName, String input, +// boolean debug) +// { +// boolean success = rawGenerateAndBuildRecognizer(grammarFileName, +// grammarStr, parserName, lexerName, "-visitor"); +// assertTrue(success); +// writeFile(overall_tmpdir, "input", input); +// rawBuildRecognizerTestFile(parserName, lexerName, listenerName, +// visitorName, startRuleName, debug); +// return execRecognizer(); +// } + + @Override + public String execParser(String grammarFileName, String grammarStr, + String parserName, String lexerName, String listenerName, + String visitorName, String startRuleName, String input, + boolean showDiagnosticErrors) + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, parserName, lexerName, "-visitor"); + assertTrue(success); + writeFile(overall_tmpdir, "input", input); + rawBuildRecognizerTestFile(parserName, lexerName, listenerName, + visitorName, startRuleName, showDiagnosticErrors); + return execRecognizer(); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, String parserName, String lexerName, + String... extraOptions) { + return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, + parserName, lexerName, false, extraOptions); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, String parserName, String lexerName, + boolean defaultListener, String... extraOptions) { + ErrorQueue equeue = antlr(grammarFileName, grammarFileName, grammarStr, + defaultListener, extraOptions); + +// List files = new ArrayList(); +// if (lexerName != null) { +// files.add(lexerName + ".go"); +// } +// if (parserName != null) { +// files.add(parserName + ".go"); +// Set optionsSet = new HashSet( +// Arrays.asList(extraOptions)); +// if (!optionsSet.contains("-no-listener")) { +// files.add(grammarFileName.substring(0, +// grammarFileName.lastIndexOf('.')) +// + "Listener.go"); +// } +// if (optionsSet.contains("-visitor")) { +// files.add(grammarFileName.substring(0, +// grammarFileName.lastIndexOf('.')) +// + "Visitor.go"); +// } +// } + return true; // allIsWell: no compile + } + + protected void rawBuildRecognizerTestFile(String parserName, + String lexerName, String listenerName, String visitorName, + String parserStartRuleName, boolean debug) { + this.stderrDuringParse = null; + if (parserName == null) { + writeLexerTestFile(lexerName, false); + } else { + writeParserTestFile(parserName, lexerName, listenerName, + visitorName, parserStartRuleName, debug); + } + } + + public String execRecognizer() { + return execModule("Test.go"); + } + + public String execModule(String fileName) { + String goExecutable = locateGo(); + String modulePath = new File(overall_tmpdir, fileName).getAbsolutePath(); + String inputPath = new File(overall_tmpdir, "input").getAbsolutePath(); + try { + ProcessBuilder builder = new ProcessBuilder(goExecutable, "run", modulePath, inputPath); + builder.environment().put("GOPATH", tmpGopath.getPath()); + builder.directory(overall_tmpdir); + Process process = builder.start(); + StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + String output = stdoutVacuum.toString(); + if ( output.length()==0 ) { + output = null; + } + if (stderrVacuum.toString().length() > 0) { + this.stderrDuringParse = stderrVacuum.toString(); + } + return output; + } + catch (Exception e) { + System.err.println("can't exec recognizer"); + e.printStackTrace(System.err); + } + return null; + } + + private static String locateTool(String tool) { + ArrayList paths = new ArrayList(); // default cap is about right + + // GOROOT should have priority if set + String goroot = System.getenv("GOROOT"); + if (goroot != null) { + paths.add(goroot + File.separatorChar + "bin"); + } + + String pathEnv = System.getenv("PATH"); + if (pathEnv != null) { + paths.addAll(Arrays.asList(pathEnv.split(File.pathSeparator))); + } + + // OS specific default locations of binary dist as last resort + paths.add("/usr/local/go/bin"); + paths.add("c:\\Go\\bin"); + + for (String path : paths) { + File candidate = new File(new File(path), tool); + if (candidate.exists()) { + return candidate.getPath(); + } + candidate = new File(new File(path), tool+".exe"); + if (candidate.exists()) { + return candidate.getPath(); + } + } + return null; + } + + private static String locateGo() { + String propName = "antlr-go"; + String prop = System.getProperty(propName); + if (prop == null || prop.length() == 0) { + prop = locateTool("go"); + } + if (prop == null) { + throw new RuntimeException("Missing system property:" + propName); + } + return prop; + } + + private static File locateRuntime() { + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL runtimeSrc = loader.getResource("Go"); + if ( runtimeSrc==null ) { + throw new RuntimeException("Cannot find Go ANTLR runtime"); + } + File runtimeDir = new File(runtimeSrc.getPath(), "antlr"); + if (!runtimeDir.exists()) { + throw new RuntimeException("Cannot find Go ANTLR runtime"); + } + return runtimeDir; + } + + public void testErrors(String[] pairs, boolean printTree) { + for (int i = 0; i < pairs.length; i += 2) { + String input = pairs[i]; + String expect = pairs[i + 1]; + + String[] lines = input.split("\n"); + String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); + ErrorQueue equeue = antlr(fileName, fileName, input, false); + + String actual = equeue.toString(true); + actual = actual.replace(overall_tmpdir+ File.separator, ""); + System.err.println(actual); + String msg = input; + msg = msg.replace("\n", "\\n"); + msg = msg.replace("\r", "\\r"); + msg = msg.replace("\t", "\\t"); + + assertEquals("error in: " + msg, expect, actual); + } + } + + public String getFilenameFromFirstLineOfGrammar(String line) { + String fileName = "A" + Tool.GRAMMAR_EXTENSION; + int grIndex = line.lastIndexOf("grammar"); + int semi = line.lastIndexOf(';'); + if (grIndex >= 0 && semi >= 0) { + int space = line.indexOf(' ', grIndex); + fileName = line.substring(space + 1, semi) + Tool.GRAMMAR_EXTENSION; + } + if (fileName.length() == Tool.GRAMMAR_EXTENSION.length()) + fileName = "A" + Tool.GRAMMAR_EXTENSION; + return fileName; + } + + // void ambig(List msgs, int[] expectedAmbigAlts, String + // expectedAmbigInput) + // throws Exception + // { + // ambig(msgs, 0, expectedAmbigAlts, expectedAmbigInput); + // } + + // void ambig(List msgs, int i, int[] expectedAmbigAlts, String + // expectedAmbigInput) + // throws Exception + // { + // List amsgs = getMessagesOfType(msgs, AmbiguityMessage.class); + // AmbiguityMessage a = (AmbiguityMessage)amsgs.get(i); + // if ( a==null ) assertNull(expectedAmbigAlts); + // else { + // assertEquals(a.conflictingAlts.toString(), + // Arrays.toString(expectedAmbigAlts)); + // } + // assertEquals(expectedAmbigInput, a.input); + // } + + // void unreachable(List msgs, int[] expectedUnreachableAlts) + // throws Exception + // { + // unreachable(msgs, 0, expectedUnreachableAlts); + // } + + // void unreachable(List msgs, int i, int[] + // expectedUnreachableAlts) + // throws Exception + // { + // List amsgs = getMessagesOfType(msgs, + // UnreachableAltsMessage.class); + // UnreachableAltsMessage u = (UnreachableAltsMessage)amsgs.get(i); + // if ( u==null ) assertNull(expectedUnreachableAlts); + // else { + // assertEquals(u.conflictingAlts.toString(), + // Arrays.toString(expectedUnreachableAlts)); + // } + // } + + List getMessagesOfType(List msgs, + Class c) { + List filtered = new ArrayList(); + for (ANTLRMessage m : msgs) { + if (m.getClass() == c) + filtered.add(m); + } + return filtered; + } + + void checkRuleATN(Grammar g, String ruleName, String expecting) { + ParserATNFactory f = new ParserATNFactory(g); + ATN atn = f.createATN(); + + DOTGenerator dot = new DOTGenerator(g); + System.out + .println(dot.getDOT(atn.ruleToStartState[g.getRule(ruleName).index])); + + Rule r = g.getRule(ruleName); + ATNState startState = atn.ruleToStartState[r.index]; + ATNPrinter serializer = new ATNPrinter(g, startState); + String result = serializer.asString(); + + // System.out.print(result); + assertEquals(expecting, result); + } + + public void testActions(String templates, String actionName, String action, + String expected) throws org.antlr.runtime.RecognitionException { + int lp = templates.indexOf('('); + String name = templates.substring(0, lp); + STGroup group = new STGroupString(templates); + ST st = group.getInstanceOf(name); + st.add(actionName, action); + String grammar = st.render(); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(grammar, equeue); + if (g.ast != null && !g.ast.hasErrors) { + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + + ATNFactory factory = new ParserATNFactory(g); + if (g.isLexer()) + factory = new LexerATNFactory((LexerGrammar) g); + g.atn = factory.createATN(); + + CodeGenerator gen = new CodeGenerator(g); + ST outputFileST = gen.generateParser(); + String output = outputFileST.render(); + // System.out.println(output); + String b = "#" + actionName + "#"; + int start = output.indexOf(b); + String e = "#end-" + actionName + "#"; + int end = output.indexOf(e); + String snippet = output.substring(start + b.length(), end); + assertEquals(expected, snippet); + } + if (equeue.size() > 0) { + System.err.println(equeue.toString()); + } + } + + public static class StreamVacuum implements Runnable { + StringBuilder buf = new StringBuilder(); + BufferedReader in; + Thread sucker; + + public StreamVacuum(InputStream in) { + this.in = new BufferedReader(new InputStreamReader(in)); + } + + public void start() { + sucker = new Thread(this); + sucker.start(); + } + + @Override + public void run() { + try { + String line = in.readLine(); + while (line != null) { + buf.append(line); + buf.append('\n'); + line = in.readLine(); + } + } catch (IOException ioe) { + System.err.println("can't read output from process"); + } + } + + /** wait for the thread to finish */ + public void join() throws InterruptedException { + sucker.join(); + } + + @Override + public String toString() { + return buf.toString(); + } + } + + protected void checkGrammarSemanticsError(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) throws Exception { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType() == expectedMessage.getErrorType()) { + foundMsg = m; + } + } + assertNotNull("no error; " + expectedMessage.getErrorType() + + " expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), + Arrays.toString(foundMsg.getArgs())); + if (equeue.size() != 1) { + System.err.println(equeue); + } + } + + protected void checkGrammarSemanticsWarning(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) throws Exception { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage m = equeue.warnings.get(i); + if (m.getErrorType() == expectedMessage.getErrorType()) { + foundMsg = m; + } + } + assertNotNull("no error; " + expectedMessage.getErrorType() + + " expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), + Arrays.toString(foundMsg.getArgs())); + if (equeue.size() != 1) { + System.err.println(equeue); + } + } + + protected void checkError(ErrorQueue equeue, ANTLRMessage expectedMessage) + throws Exception { + // System.out.println("errors="+equeue); + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType() == expectedMessage.getErrorType()) { + foundMsg = m; + } + } + assertTrue("no error; " + expectedMessage.getErrorType() + " expected", + !equeue.errors.isEmpty()); + assertTrue("too many errors; " + equeue.errors, + equeue.errors.size() <= 1); + assertNotNull( + "couldn't find expected error: " + + expectedMessage.getErrorType(), foundMsg); + /* + * assertTrue("error is not a GrammarSemanticsMessage", foundMsg + * instanceof GrammarSemanticsMessage); + */ + assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); + } + + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { + super(src); + } + + Set hide = new HashSet(); + + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { + return false; + } + + Token t = get(i); + if (hide.contains(t.getType())) { + ((WritableToken) t).setChannel(Token.HIDDEN_CHANNEL); + } + + return true; + } + + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } + + public static void writeFile(File dir, String fileName, String content) { + try { + File f = new File(dir, fileName); + FileWriter w = new FileWriter(f); + BufferedWriter bw = new BufferedWriter(w); + bw.write(content); + bw.close(); + w.close(); + } catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + public static void writeFile(String dir, String fileName, InputStream content) { + try { + File f = new File(dir, fileName); + OutputStream output = new FileOutputStream(f); + while(content.available()>0) { + int b = content.read(); + output.write(b); + } + output.close(); + } catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + protected void mkdir(File dir) { + dir.mkdirs(); + } + + protected void writeParserTestFile(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug) { + ST outputFileST = new ST( + "package main\n" + + "import (\n" + +" \"github.com/antlr/antlr4/runtime/Go/antlr\"\n" + +" \"./parser\"\n" + +" \"os\"\n" + +")\n" + + "\n" + + "type TreeShapeListener struct {\n" + + " *parser.Base\n" + + "}\n" + + "\n" + + "func NewTreeShapeListener() *TreeShapeListener {\n" + + " return new(TreeShapeListener)\n" + + "}\n" + + "\n" + + "func (this *TreeShapeListener) EnterEveryRule(ctx antlr.ParserRuleContext) {\n" + + " for i := 0; i\\(input)\n" + + " stream := antlr.NewCommonTokenStream(lexer,0)\n" + + "" + + " p.BuildParseTrees = true\n" + + " tree := p.()\n" + + " antlr.ParseTreeWalkerDefault.Walk(NewTreeShapeListener(), tree)\n" + + "}\n"); + + ST createParserST = new ST( + " p := parser.New(stream)\n"); + if (debug) { + createParserST = new ST( + " p := parser.New(stream)\n" + + " p.AddErrorListener(antlr.NewDiagnosticErrorListener(true))\n"); + } + outputFileST.add("createParser", createParserST); + outputFileST.add("parserName", parserName); + outputFileST.add("lexerName", lexerName); + outputFileST.add("listenerName", listenerName); + outputFileST.add("visitorName", visitorName); + outputFileST.add("parserStartRuleName", parserStartRuleName.substring(0, 1).toUpperCase() + parserStartRuleName.substring(1) ); + writeFile(overall_tmpdir, "Test.go", outputFileST.render()); + } + + + + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + ST outputFileST = new ST( + "package main\n" + + "import (\n" + + " \"github.com/antlr/antlr4/runtime/Go/antlr\"\n" + + " \"./parser\"\n" + + " \"os\"\n" + + " \"fmt\"\n" + + ")\n" + + "\n" + + "func main() {\n" + + " input := antlr.NewFileStream(os.Args[1])\n" + + " lexer := parser.New(input)\n" + + " stream := antlr.NewCommonTokenStream(lexer,0)\n" + + " stream.Fill()\n" + + " for _, t := range stream.GetAllTokens() {\n" + + " fmt.Println(t)\n" + + " }\n" + + (showDFA ? "fmt.Print(lexer.GetInterpreter().DecisionToDFA()[antlr.LexerDefaultMode].ToLexerString())\n" + : "") + + "}\n" + + "\n"); + outputFileST.add("lexerName", lexerName); + writeFile(overall_tmpdir, "Test.go", outputFileST.render()); + } + + public void writeRecognizer(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug) { + if (parserName == null) { + writeLexerTestFile(lexerName, debug); + } else { + writeParserTestFile(parserName, lexerName, listenerName, + visitorName, parserStartRuleName, debug); + } + } + + protected void eraseFilesEndingWith(final String filesEndingWith) { + File[] files = overall_tmpdir.listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.getName().endsWith(filesEndingWith); + } + }); + for (File file : files) { + file.delete(); + } + } + + protected static void eraseDirectory(File dir) { + File[] files = dir.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + eraseDirectory(file); + } else { + file.delete(); + } + } + } + dir.delete(); + } + + public void eraseTempDir() { + boolean doErase = true; + String propName = "antlr-go-erase-test-dir"; + String prop = System.getProperty(propName); + if (prop != null && prop.length() > 0) + doErase = Boolean.getBoolean(prop); + if (doErase) { + if ( overall_tmpdir.exists()) { + eraseDirectory(overall_tmpdir); + } + } + } + + public String getFirstLineOfException() { + if (this.stderrDuringParse == null) { + return null; + } + String[] lines = this.stderrDuringParse.split("\n"); + String prefix = "Exception in thread \"main\" "; + return lines[0].substring(prefix.length(), lines[0].length()); + } + + /** + * When looking at a result set that consists of a Map/HashTable we cannot + * rely on the output order, as the hashing algorithm or other aspects of + * the implementation may be different on differnt JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the + * Map, which is a bit of a hack, but guarantees that we get the same order + * on all systems. We assume that the keys are strings. + * + * @param m + * The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } + + System.out.println("Map toString looks like: " + m.toString()); + + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); + + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } + + public List realElements(List elements) { + return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); + } + + public void assertNotNullOrEmpty(String message, String text) { + assertNotNull(message, text); + assertFalse(message, text.isEmpty()); + } + + public void assertNotNullOrEmpty(String text) { + assertNotNull(text); + assertFalse(text.isEmpty()); + } + + public static class IntTokenStream implements TokenStream { + IntegerList types; + int p = 0; + + public IntTokenStream(IntegerList types) { + this.types = types; + } + + @Override + public void consume() { + p++; + } + + @Override + public int LA(int i) { + return LT(i).getType(); + } + + @Override + public int mark() { + return index(); + } + + @Override + public int index() { + return p; + } + + @Override + public void release(int marker) { + seek(marker); + } + + @Override + public void seek(int index) { + p = index; + } + + @Override + public int size() { + return types.size(); + } + + @Override + public String getSourceName() { + return null; + } + + @Override + public Token LT(int i) { + CommonToken t; + int rawIndex = p + i - 1; + if (rawIndex >= types.size()) + t = new CommonToken(Token.EOF); + else + t = new CommonToken(types.get(rawIndex)); + t.setTokenIndex(rawIndex); + return t; + } + + @Override + public Token get(int i) { + return new org.antlr.v4.runtime.CommonToken(types.get(i)); + } + + @Override + public TokenSource getTokenSource() { + return null; + } + + @Override + public String getText() { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Interval interval) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(RuleContext ctx) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Token start, Token stop) { + throw new UnsupportedOperationException("can't give strings"); + } + } + + /** Sort a list */ + public > List sort(List data) { + List dup = new ArrayList(); + dup.addAll(data); + Collections.sort(dup); + return dup; + } + + /** Return map sorted by key */ + public , V> LinkedHashMap sort( + Map data) { + LinkedHashMap dup = new LinkedHashMap(); + List keys = new ArrayList(); + keys.addAll(data.keySet()); + Collections.sort(keys); + for (K k : keys) { + dup.put(k, data.get(k)); + } + return dup; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeLexers.java index ae61f10bd..350cd84ba 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeLexers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeLexers.java @@ -1,66 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestCompositeLexers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorInvokesDelegateRule() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {fmt.Println(\"S.A\")};\n" + - "C : 'c' ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "S.A\n" + - "[@0,0:0='a',<3>,1:0]\n" + - "[@1,1:1='b',<1>,1:1]\n" + - "[@2,2:2='c',<4>,1:2]\n" + - "[@3,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorRuleOverridesDelegate() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {fmt.Println(\"S.A\")} ;\n" + - "B : 'b' {fmt.Println(\"S.B\")} ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("A : 'a' B {fmt.Println(\"M.A\")} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "M.A\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java index 2f1a22599..63677fcfd 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java @@ -1,410 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestCompositeParsers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBringInLiteralsFromDelegate() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a : '=' 'a' {fmt.Print(\"S.a\")};"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="=a"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCombinedImportsCombined() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : 'x' INT {fmt.Println(\"S.x\")};\n" + - "INT : '0'..'9'+ ;\n" + - "WS : (' '|'\\n') -> skip ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(31); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : x INT;"); - String grammar = grammarBuilder.toString(); - String input ="x 34 9"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("S.x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatesSeeSameTokenType() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : A {fmt.Println(\"S.x\")};"; - writeFile(parserpkgdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { C, B, A } // reverse order\n" + - "y : A {fmt.Println(\"T.y\")};"; - writeFile(parserpkgdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(598); - grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); - grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); - grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); - grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); - grammarBuilder.append("// mapping in each parser:\n"); - grammarBuilder.append("// public static final int C=6;\n"); - grammarBuilder.append("// public static final int EOF=-1;\n"); - grammarBuilder.append("// public static final int B=5;\n"); - grammarBuilder.append("// public static final int WS=7;\n"); - grammarBuilder.append("// public static final int A=4;\n"); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); - grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); - grammarBuilder.append("A : 'a' ; \n"); - grammarBuilder.append("C : 'c' ; \n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals( - "S.x\n" + - "T.y\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorAccessesDelegateMembers() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "@parser::members {\n" + - "func foo() {\n" + - " fmt.Println(\"foo\")\n" + - "}\n" + - "}\n" + - "a : B;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M; // uses no rules from the import\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : 'b' {foo()} ; // gS is import pointer\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("foo\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRule() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a : B {fmt.Println(\"S.a\")};"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a[int x] returns [int y] : B {fmt.Print(\"S.a\")} {$y=1000;} ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(137); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : label=a[3] {fmt.Println($label.y)} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("S.a1000\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a : B {fmt.Print(\"S.a\")} ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(125); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a {fmt.Print($a.text)} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("S.ab\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a : b {fmt.Println(\"S.a\")};\n" + - "b : B;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "a : B {fmt.Println(\"T.a\")};"; - writeFile(parserpkgdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegate() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a : b {fmt.Print(\"S.a\")};\n" + - "b : B ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("b : 'b'|'c';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "a", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegates() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a : b {fmt.Println(\"S.a\")};\n" + - "b : 'b' ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { A }\n" + - "b : 'b' {fmt.Println(\"T.b\")};"; - writeFile(parserpkgdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(87); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S, T;\n"); - grammarBuilder.append("b : 'b'|'c' {fmt.Println(\"M.b\")}|B|A;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "a", input, false); - assertEquals( - "M.b\n" + - "S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "type_ : 'int' ;\n" + - "decl : type_ ID ';'\n" + - " | type_ ID init ';' {fmt.Print(\"JavaDecl: \" + $text)};\n" + - "init : '=' INT;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("prog : decl ;\n"); - grammarBuilder.append("type_ : 'int' | 'float' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="float x = 3;"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "prog", input, false); - assertEquals("JavaDecl: floatx=3;\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportLexerWithOnlyFragmentRules() throws Exception { - mkdir(parserpkgdir); - String slave_Unicode = - "lexer grammar Unicode;\n" + - "\n" + - "fragment\n" + - "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + - " | '\\u2000'..'\\u200A'\n" + - " | '\\u202F' | '\\u205F' | '\\u3000'\n" + - " ;\n"; - writeFile(parserpkgdir, "Unicode.g4", slave_Unicode); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar Test;\n"); - grammarBuilder.append("import Unicode;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program : 'test' 'test';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); - String grammar = grammarBuilder.toString(); - String input ="test test"; - String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", - "TestListener", "TestVisitor", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedGrammarWithEmptyOptions() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "options {}\n" + - "a : B ;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedRuleWithAction() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "parser grammar S;\n" + - "a @after {var x int = 0; var _ int = x; } : B;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordVSIDOrder() throws Exception { - mkdir(parserpkgdir); - String slave_S = - "lexer grammar S;\n" + - "ID : 'a'..'z'+;"; - writeFile(parserpkgdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(125); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("a : A {fmt.Println(\"M.a: \" + fmt.Sprint($A))};\n"); - grammarBuilder.append("A : 'abc' {fmt.Println(\"M.A\")};\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", "a", input, false); - assertEquals( - "M.A\n" + - "M.a: [@0,0:2='abc',<1>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestFullContextParsing.java index b656759c4..f1c3de028 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestFullContextParsing.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestFullContextParsing.java @@ -1,446 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestFullContextParsing extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigYieldsCtxSensitiveDFA() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(97); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {p.DumpDFA()}\n"); - grammarBuilder.append(" : ID | ID {} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-ID->:s1^=>1\n", found); - - assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbiguityNoLoop() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(217); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append(" : expr expr {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: '@'\n"); - grammarBuilder.append(" | ID '@'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a@"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "prog", input, true); - assertEquals("alt 1\n", found); - - assertEquals( - "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + - "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + - "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFATwoDiffInput() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(161); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {p.DumpDFA()}\n"); - grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="$ 34 abc @ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 2:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + - "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(158); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="$ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(158); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="@ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(293); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append(": expr[0] {fmt.Println($expr.ctx.ToStringTree(nil, p))};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals("(expr a + (expr b))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(293); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append(": expr[0] {fmt.Println($expr.ctx.ToStringTree(nil, p))};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b*c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals("(expr a + (expr b * (expr c)))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + - "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + - "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(242); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append("@after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then return }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s1=>2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(242); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append("@after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(242); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append("@after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(242); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append("@after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then if y then return else foo else bar }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + - "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_5() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(242); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append("@after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_6() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(242); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append("@after {p.DumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLoopsSimulateTailRecursion() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(316); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);}\n"); - grammarBuilder.append(" : expr_or_assign*;\n"); - grammarBuilder.append("expr_or_assign\n"); - grammarBuilder.append(" : expr '++' {fmt.Println(\"fail.\")}\n"); - grammarBuilder.append(" | expr {fmt.Println(\"pass: \"+$expr.text)}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); - grammarBuilder.append("expr_primary\n"); - grammarBuilder.append(" : '(' ID ')'\n"); - grammarBuilder.append(" | ID '(' ID ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;"); - String grammar = grammarBuilder.toString(); - String input ="a(i)<-x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "prog", input, true); - assertEquals("pass: a(i)<-x\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + - "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSLLSeesEOFInLLGrammar() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(145); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {p.DumpDFA()}\n"); - grammarBuilder.append(" : a;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + - "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLeftRecursion.java index 02dbb9792..55fdb8401 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLeftRecursion.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLeftRecursion.java @@ -1,3016 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestLeftRecursion extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="1\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="a = 5\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="b = 6\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="a+b*2\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_5() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="(1+2)*3\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_10() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(*a)[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="*a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator * (declarator a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="**a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[3]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_5() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator (declarator b) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_6() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(a)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator ( (declarator a) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_7() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[]()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_8() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[][]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_9() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(393); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="*a[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("(a (a x) y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("(a (a (a x) y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e 1) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) - (e 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_5() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.this"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) . this) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_6() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e - (e a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_7() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a|b&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_10() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.f(x)==T.c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_11() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.f().g(x,1)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_12() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="new T[((n-1) * x) + 1]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(a|b)&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a > b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) > (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a >> b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) >> (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_5() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_6() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a^b^c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_7() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(T)x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_8() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="new A().b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_9() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(1249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(T)t.f()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(172); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(172); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(172); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(179); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(179); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(179); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(595); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(595); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(595); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(595); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ($ctx).E(0).GetV() * ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ($ctx).E(0).GetV() + ($ctx).E(1).GetV();} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Go"); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrecedenceFilterConsidersContext() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(144); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog \n"); - grammarBuilder.append("@after {fmt.Println($ctx.ToStringTree(nil, p))}\n"); - grammarBuilder.append(": statement* EOF {};\n"); - grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); - grammarBuilder.append("letterA: 'a';"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "prog", input, false); - assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(218); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (literal - 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(218); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-1 + -1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(335); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(335); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a+b)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(335); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b+c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("((a=b)+c)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(453); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(453); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(453); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(453); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(302); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(302); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(302); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(302); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(319); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(319); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(319); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(319); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v, []string ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v, []string ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v, []string ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(249); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {fmt.Println($e.v)}; \n"); - grammarBuilder.append("e returns [int v, []string ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="(1+2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("9\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPred() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(137); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); - grammarBuilder.append("a : a {true}? ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPredFailOption() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(161); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); - grammarBuilder.append("a : a ID {false}?\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (a (a x) y z))\n", found); - - assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(129); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (a x))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(129); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (a (a x) y))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(129); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_5() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_6() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_7() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_8() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_9() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(285); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_5() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_6() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_7() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_8() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_9() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {fmt.Println($ctx.ToStringTree(nil, p))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="Test(1,3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="Test(1, 3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerErrors.java index 8a2fa95f2..2445c7cce 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerErrors.java @@ -1,234 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestLexerErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatFailsBackToDFA() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(39); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:3='ab',<1>,1:2]\n" + - "[@2,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;\n"); - grammarBuilder.append("C : 'abcd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababcx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:4='abc',<2>,1:2]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_1() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="{ { } }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='{ { } }',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_2() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="{ { }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testErrorInMiddle() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'abc' ;"); - String grammar = grammarBuilder.toString(); - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStart() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,1:0='',<-1>,1:1]\n", found); - - assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStartAfterDFACache() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInToken() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="ax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,2:1='',<-1>,1:2]\n", found); - - assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInTokenAfterDFACache() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="abax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - - assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerExecDFA() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar L;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input ="x : x"; - String found = execLexer("L.g4", grammar, "LLexer", input, false); - assertEquals( - "[@0,0:0='x',<3>,1:0]\n" + - "[@1,2:2=':',<1>,1:2]\n" + - "[@2,4:4='x',<3>,1:4]\n" + - "[@3,5:4='',<-1>,1:5]\n", found); - - assertEquals( - "line 1:1 token recognition error at: ' '\n" + - "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_1() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="[\"foo\"]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_2() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="[\"foo]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java index d0ec6dfef..3e8fa0eb9 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java @@ -1,4947 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestLexerExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionPlacement() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(268); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ({fmt.Println(\"stuff fail: \" + l.GetText())} 'a'\n"); - grammarBuilder.append("| {fmt.Println(\"stuff0: \" + l.GetText())}\n"); - grammarBuilder.append(" 'a' {fmt.Println(\"stuff1: \" + l.GetText())}\n"); - grammarBuilder.append(" 'b' {fmt.Println(\"stuff2: \" + l.GetText())})\n"); - grammarBuilder.append(" {fmt.Println(l.GetText())} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "stuff0: \n" + - "stuff1: a\n" + - "stuff2: ab\n" + - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSet() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {fmt.Println(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetInSet() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : (~[ab \\n]|'a') {fmt.Println(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:2='x',<1>,1:2]\n" + - "[@2,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetNot() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {fmt.Println(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="xaf"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:2='xaf',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetPlus() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(79); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {fmt.Println(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetRange() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {fmt.Println(\"I\")} ;\n"); - grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {fmt.Println(\"ID\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34 a2 abc \n" + - " "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "ID\n" + - "ID\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,7:8='a2',<2>,2:4]\n" + - "[@3,10:12='abc',<2>,2:7]\n" + - "[@4,18:17='',<-1>,3:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithEscapedChar() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(87); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DASHBRACK : [\\-\\]]+ {fmt.Println(\"DASHBRACK\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="- ] "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "DASHBRACK\n" + - "DASHBRACK\n" + - "[@0,0:0='-',<1>,1:0]\n" + - "[@1,2:2=']',<1>,1:2]\n" + - "[@2,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEndRange() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(75); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-]+ {fmt.Println(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="00\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='00',<1>,1:0]\n" + - "[@1,3:2='',<-1>,2:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEscapeChar() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {fmt.Println(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote1() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(73); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"a-z]+ {fmt.Println(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b\"a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:2='b\"a',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote2() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(74); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"\\\\ab]+ {fmt.Println(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b\"\\a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:3='b\"\\a',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithReversedRange() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(71); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [z-a9]+ {fmt.Println(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="9"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:0='9',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFByItself() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DONE : EOF ;\n"); - grammarBuilder.append("A : 'a';"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:-1='',<1>,1:0]\n" + - "[@1,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_1() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_2() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyClosure() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyConfigs() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ('a' | 'ab') {fmt.Println(l.GetText())} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyOptional() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyPositiveClosure() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testHexVsID() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); - grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); - grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input ="x 0 1 a.b a.l"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='x',<5>,1:0]\n" + - "[@1,1:1=' ',<6>,1:1]\n" + - "[@2,2:2='0',<2>,1:2]\n" + - "[@3,3:3=' ',<6>,1:3]\n" + - "[@4,4:4='1',<2>,1:4]\n" + - "[@5,5:5=' ',<6>,1:5]\n" + - "[@6,6:6='a',<5>,1:6]\n" + - "[@7,7:7='.',<4>,1:7]\n" + - "[@8,8:8='b',<5>,1:8]\n" + - "[@9,9:9=' ',<6>,1:9]\n" + - "[@10,10:10='a',<5>,1:10]\n" + - "[@11,11:11='.',<4>,1:11]\n" + - "[@12,12:12='l',<5>,1:12]\n" + - "[@13,13:12='',<-1>,1:13]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordID() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("KEND : 'end' ; // has priority\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input ="end eend ending a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:2='end',<1>,1:0]\n" + - "[@1,3:3=' ',<3>,1:3]\n" + - "[@2,4:7='eend',<2>,1:4]\n" + - "[@3,8:8=' ',<3>,1:8]\n" + - "[@4,9:14='ending',<2>,1:9]\n" + - "[@5,15:15=' ',<3>,1:15]\n" + - "[@6,16:16='a',<2>,1:16]\n" + - "[@7,17:16='',<-1>,1:17]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLargeLexer() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(85821); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); - grammarBuilder.append("KW0 : 'KW' '0';\n"); - grammarBuilder.append("KW1 : 'KW' '1';\n"); - grammarBuilder.append("KW2 : 'KW' '2';\n"); - grammarBuilder.append("KW3 : 'KW' '3';\n"); - grammarBuilder.append("KW4 : 'KW' '4';\n"); - grammarBuilder.append("KW5 : 'KW' '5';\n"); - grammarBuilder.append("KW6 : 'KW' '6';\n"); - grammarBuilder.append("KW7 : 'KW' '7';\n"); - grammarBuilder.append("KW8 : 'KW' '8';\n"); - grammarBuilder.append("KW9 : 'KW' '9';\n"); - grammarBuilder.append("KW10 : 'KW' '10';\n"); - grammarBuilder.append("KW11 : 'KW' '11';\n"); - grammarBuilder.append("KW12 : 'KW' '12';\n"); - grammarBuilder.append("KW13 : 'KW' '13';\n"); - grammarBuilder.append("KW14 : 'KW' '14';\n"); - grammarBuilder.append("KW15 : 'KW' '15';\n"); - grammarBuilder.append("KW16 : 'KW' '16';\n"); - grammarBuilder.append("KW17 : 'KW' '17';\n"); - grammarBuilder.append("KW18 : 'KW' '18';\n"); - grammarBuilder.append("KW19 : 'KW' '19';\n"); - grammarBuilder.append("KW20 : 'KW' '20';\n"); - grammarBuilder.append("KW21 : 'KW' '21';\n"); - grammarBuilder.append("KW22 : 'KW' '22';\n"); - grammarBuilder.append("KW23 : 'KW' '23';\n"); - grammarBuilder.append("KW24 : 'KW' '24';\n"); - grammarBuilder.append("KW25 : 'KW' '25';\n"); - grammarBuilder.append("KW26 : 'KW' '26';\n"); - grammarBuilder.append("KW27 : 'KW' '27';\n"); - grammarBuilder.append("KW28 : 'KW' '28';\n"); - grammarBuilder.append("KW29 : 'KW' '29';\n"); - grammarBuilder.append("KW30 : 'KW' '30';\n"); - grammarBuilder.append("KW31 : 'KW' '31';\n"); - grammarBuilder.append("KW32 : 'KW' '32';\n"); - grammarBuilder.append("KW33 : 'KW' '33';\n"); - grammarBuilder.append("KW34 : 'KW' '34';\n"); - grammarBuilder.append("KW35 : 'KW' '35';\n"); - grammarBuilder.append("KW36 : 'KW' '36';\n"); - grammarBuilder.append("KW37 : 'KW' '37';\n"); - grammarBuilder.append("KW38 : 'KW' '38';\n"); - grammarBuilder.append("KW39 : 'KW' '39';\n"); - grammarBuilder.append("KW40 : 'KW' '40';\n"); - grammarBuilder.append("KW41 : 'KW' '41';\n"); - grammarBuilder.append("KW42 : 'KW' '42';\n"); - grammarBuilder.append("KW43 : 'KW' '43';\n"); - grammarBuilder.append("KW44 : 'KW' '44';\n"); - grammarBuilder.append("KW45 : 'KW' '45';\n"); - grammarBuilder.append("KW46 : 'KW' '46';\n"); - grammarBuilder.append("KW47 : 'KW' '47';\n"); - grammarBuilder.append("KW48 : 'KW' '48';\n"); - grammarBuilder.append("KW49 : 'KW' '49';\n"); - grammarBuilder.append("KW50 : 'KW' '50';\n"); - grammarBuilder.append("KW51 : 'KW' '51';\n"); - grammarBuilder.append("KW52 : 'KW' '52';\n"); - grammarBuilder.append("KW53 : 'KW' '53';\n"); - grammarBuilder.append("KW54 : 'KW' '54';\n"); - grammarBuilder.append("KW55 : 'KW' '55';\n"); - grammarBuilder.append("KW56 : 'KW' '56';\n"); - grammarBuilder.append("KW57 : 'KW' '57';\n"); - grammarBuilder.append("KW58 : 'KW' '58';\n"); - grammarBuilder.append("KW59 : 'KW' '59';\n"); - grammarBuilder.append("KW60 : 'KW' '60';\n"); - grammarBuilder.append("KW61 : 'KW' '61';\n"); - grammarBuilder.append("KW62 : 'KW' '62';\n"); - grammarBuilder.append("KW63 : 'KW' '63';\n"); - grammarBuilder.append("KW64 : 'KW' '64';\n"); - grammarBuilder.append("KW65 : 'KW' '65';\n"); - grammarBuilder.append("KW66 : 'KW' '66';\n"); - grammarBuilder.append("KW67 : 'KW' '67';\n"); - grammarBuilder.append("KW68 : 'KW' '68';\n"); - grammarBuilder.append("KW69 : 'KW' '69';\n"); - grammarBuilder.append("KW70 : 'KW' '70';\n"); - grammarBuilder.append("KW71 : 'KW' '71';\n"); - grammarBuilder.append("KW72 : 'KW' '72';\n"); - grammarBuilder.append("KW73 : 'KW' '73';\n"); - grammarBuilder.append("KW74 : 'KW' '74';\n"); - grammarBuilder.append("KW75 : 'KW' '75';\n"); - grammarBuilder.append("KW76 : 'KW' '76';\n"); - grammarBuilder.append("KW77 : 'KW' '77';\n"); - grammarBuilder.append("KW78 : 'KW' '78';\n"); - grammarBuilder.append("KW79 : 'KW' '79';\n"); - grammarBuilder.append("KW80 : 'KW' '80';\n"); - grammarBuilder.append("KW81 : 'KW' '81';\n"); - grammarBuilder.append("KW82 : 'KW' '82';\n"); - grammarBuilder.append("KW83 : 'KW' '83';\n"); - grammarBuilder.append("KW84 : 'KW' '84';\n"); - grammarBuilder.append("KW85 : 'KW' '85';\n"); - grammarBuilder.append("KW86 : 'KW' '86';\n"); - grammarBuilder.append("KW87 : 'KW' '87';\n"); - grammarBuilder.append("KW88 : 'KW' '88';\n"); - grammarBuilder.append("KW89 : 'KW' '89';\n"); - grammarBuilder.append("KW90 : 'KW' '90';\n"); - grammarBuilder.append("KW91 : 'KW' '91';\n"); - grammarBuilder.append("KW92 : 'KW' '92';\n"); - grammarBuilder.append("KW93 : 'KW' '93';\n"); - grammarBuilder.append("KW94 : 'KW' '94';\n"); - grammarBuilder.append("KW95 : 'KW' '95';\n"); - grammarBuilder.append("KW96 : 'KW' '96';\n"); - grammarBuilder.append("KW97 : 'KW' '97';\n"); - grammarBuilder.append("KW98 : 'KW' '98';\n"); - grammarBuilder.append("KW99 : 'KW' '99';\n"); - grammarBuilder.append("KW100 : 'KW' '100';\n"); - grammarBuilder.append("KW101 : 'KW' '101';\n"); - grammarBuilder.append("KW102 : 'KW' '102';\n"); - grammarBuilder.append("KW103 : 'KW' '103';\n"); - grammarBuilder.append("KW104 : 'KW' '104';\n"); - grammarBuilder.append("KW105 : 'KW' '105';\n"); - grammarBuilder.append("KW106 : 'KW' '106';\n"); - grammarBuilder.append("KW107 : 'KW' '107';\n"); - grammarBuilder.append("KW108 : 'KW' '108';\n"); - grammarBuilder.append("KW109 : 'KW' '109';\n"); - grammarBuilder.append("KW110 : 'KW' '110';\n"); - grammarBuilder.append("KW111 : 'KW' '111';\n"); - grammarBuilder.append("KW112 : 'KW' '112';\n"); - grammarBuilder.append("KW113 : 'KW' '113';\n"); - grammarBuilder.append("KW114 : 'KW' '114';\n"); - grammarBuilder.append("KW115 : 'KW' '115';\n"); - grammarBuilder.append("KW116 : 'KW' '116';\n"); - grammarBuilder.append("KW117 : 'KW' '117';\n"); - grammarBuilder.append("KW118 : 'KW' '118';\n"); - grammarBuilder.append("KW119 : 'KW' '119';\n"); - grammarBuilder.append("KW120 : 'KW' '120';\n"); - grammarBuilder.append("KW121 : 'KW' '121';\n"); - grammarBuilder.append("KW122 : 'KW' '122';\n"); - grammarBuilder.append("KW123 : 'KW' '123';\n"); - grammarBuilder.append("KW124 : 'KW' '124';\n"); - grammarBuilder.append("KW125 : 'KW' '125';\n"); - grammarBuilder.append("KW126 : 'KW' '126';\n"); - grammarBuilder.append("KW127 : 'KW' '127';\n"); - grammarBuilder.append("KW128 : 'KW' '128';\n"); - grammarBuilder.append("KW129 : 'KW' '129';\n"); - grammarBuilder.append("KW130 : 'KW' '130';\n"); - grammarBuilder.append("KW131 : 'KW' '131';\n"); - grammarBuilder.append("KW132 : 'KW' '132';\n"); - grammarBuilder.append("KW133 : 'KW' '133';\n"); - grammarBuilder.append("KW134 : 'KW' '134';\n"); - grammarBuilder.append("KW135 : 'KW' '135';\n"); - grammarBuilder.append("KW136 : 'KW' '136';\n"); - grammarBuilder.append("KW137 : 'KW' '137';\n"); - grammarBuilder.append("KW138 : 'KW' '138';\n"); - grammarBuilder.append("KW139 : 'KW' '139';\n"); - grammarBuilder.append("KW140 : 'KW' '140';\n"); - grammarBuilder.append("KW141 : 'KW' '141';\n"); - grammarBuilder.append("KW142 : 'KW' '142';\n"); - grammarBuilder.append("KW143 : 'KW' '143';\n"); - grammarBuilder.append("KW144 : 'KW' '144';\n"); - grammarBuilder.append("KW145 : 'KW' '145';\n"); - grammarBuilder.append("KW146 : 'KW' '146';\n"); - grammarBuilder.append("KW147 : 'KW' '147';\n"); - grammarBuilder.append("KW148 : 'KW' '148';\n"); - grammarBuilder.append("KW149 : 'KW' '149';\n"); - grammarBuilder.append("KW150 : 'KW' '150';\n"); - grammarBuilder.append("KW151 : 'KW' '151';\n"); - grammarBuilder.append("KW152 : 'KW' '152';\n"); - grammarBuilder.append("KW153 : 'KW' '153';\n"); - grammarBuilder.append("KW154 : 'KW' '154';\n"); - grammarBuilder.append("KW155 : 'KW' '155';\n"); - grammarBuilder.append("KW156 : 'KW' '156';\n"); - grammarBuilder.append("KW157 : 'KW' '157';\n"); - grammarBuilder.append("KW158 : 'KW' '158';\n"); - grammarBuilder.append("KW159 : 'KW' '159';\n"); - grammarBuilder.append("KW160 : 'KW' '160';\n"); - grammarBuilder.append("KW161 : 'KW' '161';\n"); - grammarBuilder.append("KW162 : 'KW' '162';\n"); - grammarBuilder.append("KW163 : 'KW' '163';\n"); - grammarBuilder.append("KW164 : 'KW' '164';\n"); - grammarBuilder.append("KW165 : 'KW' '165';\n"); - grammarBuilder.append("KW166 : 'KW' '166';\n"); - grammarBuilder.append("KW167 : 'KW' '167';\n"); - grammarBuilder.append("KW168 : 'KW' '168';\n"); - grammarBuilder.append("KW169 : 'KW' '169';\n"); - grammarBuilder.append("KW170 : 'KW' '170';\n"); - grammarBuilder.append("KW171 : 'KW' '171';\n"); - grammarBuilder.append("KW172 : 'KW' '172';\n"); - grammarBuilder.append("KW173 : 'KW' '173';\n"); - grammarBuilder.append("KW174 : 'KW' '174';\n"); - grammarBuilder.append("KW175 : 'KW' '175';\n"); - grammarBuilder.append("KW176 : 'KW' '176';\n"); - grammarBuilder.append("KW177 : 'KW' '177';\n"); - grammarBuilder.append("KW178 : 'KW' '178';\n"); - grammarBuilder.append("KW179 : 'KW' '179';\n"); - grammarBuilder.append("KW180 : 'KW' '180';\n"); - grammarBuilder.append("KW181 : 'KW' '181';\n"); - grammarBuilder.append("KW182 : 'KW' '182';\n"); - grammarBuilder.append("KW183 : 'KW' '183';\n"); - grammarBuilder.append("KW184 : 'KW' '184';\n"); - grammarBuilder.append("KW185 : 'KW' '185';\n"); - grammarBuilder.append("KW186 : 'KW' '186';\n"); - grammarBuilder.append("KW187 : 'KW' '187';\n"); - grammarBuilder.append("KW188 : 'KW' '188';\n"); - grammarBuilder.append("KW189 : 'KW' '189';\n"); - grammarBuilder.append("KW190 : 'KW' '190';\n"); - grammarBuilder.append("KW191 : 'KW' '191';\n"); - grammarBuilder.append("KW192 : 'KW' '192';\n"); - grammarBuilder.append("KW193 : 'KW' '193';\n"); - grammarBuilder.append("KW194 : 'KW' '194';\n"); - grammarBuilder.append("KW195 : 'KW' '195';\n"); - grammarBuilder.append("KW196 : 'KW' '196';\n"); - grammarBuilder.append("KW197 : 'KW' '197';\n"); - grammarBuilder.append("KW198 : 'KW' '198';\n"); - grammarBuilder.append("KW199 : 'KW' '199';\n"); - grammarBuilder.append("KW200 : 'KW' '200';\n"); - grammarBuilder.append("KW201 : 'KW' '201';\n"); - grammarBuilder.append("KW202 : 'KW' '202';\n"); - grammarBuilder.append("KW203 : 'KW' '203';\n"); - grammarBuilder.append("KW204 : 'KW' '204';\n"); - grammarBuilder.append("KW205 : 'KW' '205';\n"); - grammarBuilder.append("KW206 : 'KW' '206';\n"); - grammarBuilder.append("KW207 : 'KW' '207';\n"); - grammarBuilder.append("KW208 : 'KW' '208';\n"); - grammarBuilder.append("KW209 : 'KW' '209';\n"); - grammarBuilder.append("KW210 : 'KW' '210';\n"); - grammarBuilder.append("KW211 : 'KW' '211';\n"); - grammarBuilder.append("KW212 : 'KW' '212';\n"); - grammarBuilder.append("KW213 : 'KW' '213';\n"); - grammarBuilder.append("KW214 : 'KW' '214';\n"); - grammarBuilder.append("KW215 : 'KW' '215';\n"); - grammarBuilder.append("KW216 : 'KW' '216';\n"); - grammarBuilder.append("KW217 : 'KW' '217';\n"); - grammarBuilder.append("KW218 : 'KW' '218';\n"); - grammarBuilder.append("KW219 : 'KW' '219';\n"); - grammarBuilder.append("KW220 : 'KW' '220';\n"); - grammarBuilder.append("KW221 : 'KW' '221';\n"); - grammarBuilder.append("KW222 : 'KW' '222';\n"); - grammarBuilder.append("KW223 : 'KW' '223';\n"); - grammarBuilder.append("KW224 : 'KW' '224';\n"); - grammarBuilder.append("KW225 : 'KW' '225';\n"); - grammarBuilder.append("KW226 : 'KW' '226';\n"); - grammarBuilder.append("KW227 : 'KW' '227';\n"); - grammarBuilder.append("KW228 : 'KW' '228';\n"); - grammarBuilder.append("KW229 : 'KW' '229';\n"); - grammarBuilder.append("KW230 : 'KW' '230';\n"); - grammarBuilder.append("KW231 : 'KW' '231';\n"); - grammarBuilder.append("KW232 : 'KW' '232';\n"); - grammarBuilder.append("KW233 : 'KW' '233';\n"); - grammarBuilder.append("KW234 : 'KW' '234';\n"); - grammarBuilder.append("KW235 : 'KW' '235';\n"); - grammarBuilder.append("KW236 : 'KW' '236';\n"); - grammarBuilder.append("KW237 : 'KW' '237';\n"); - grammarBuilder.append("KW238 : 'KW' '238';\n"); - grammarBuilder.append("KW239 : 'KW' '239';\n"); - grammarBuilder.append("KW240 : 'KW' '240';\n"); - grammarBuilder.append("KW241 : 'KW' '241';\n"); - grammarBuilder.append("KW242 : 'KW' '242';\n"); - grammarBuilder.append("KW243 : 'KW' '243';\n"); - grammarBuilder.append("KW244 : 'KW' '244';\n"); - grammarBuilder.append("KW245 : 'KW' '245';\n"); - grammarBuilder.append("KW246 : 'KW' '246';\n"); - grammarBuilder.append("KW247 : 'KW' '247';\n"); - grammarBuilder.append("KW248 : 'KW' '248';\n"); - grammarBuilder.append("KW249 : 'KW' '249';\n"); - grammarBuilder.append("KW250 : 'KW' '250';\n"); - grammarBuilder.append("KW251 : 'KW' '251';\n"); - grammarBuilder.append("KW252 : 'KW' '252';\n"); - grammarBuilder.append("KW253 : 'KW' '253';\n"); - grammarBuilder.append("KW254 : 'KW' '254';\n"); - grammarBuilder.append("KW255 : 'KW' '255';\n"); - grammarBuilder.append("KW256 : 'KW' '256';\n"); - grammarBuilder.append("KW257 : 'KW' '257';\n"); - grammarBuilder.append("KW258 : 'KW' '258';\n"); - grammarBuilder.append("KW259 : 'KW' '259';\n"); - grammarBuilder.append("KW260 : 'KW' '260';\n"); - grammarBuilder.append("KW261 : 'KW' '261';\n"); - grammarBuilder.append("KW262 : 'KW' '262';\n"); - grammarBuilder.append("KW263 : 'KW' '263';\n"); - grammarBuilder.append("KW264 : 'KW' '264';\n"); - grammarBuilder.append("KW265 : 'KW' '265';\n"); - grammarBuilder.append("KW266 : 'KW' '266';\n"); - grammarBuilder.append("KW267 : 'KW' '267';\n"); - grammarBuilder.append("KW268 : 'KW' '268';\n"); - grammarBuilder.append("KW269 : 'KW' '269';\n"); - grammarBuilder.append("KW270 : 'KW' '270';\n"); - grammarBuilder.append("KW271 : 'KW' '271';\n"); - grammarBuilder.append("KW272 : 'KW' '272';\n"); - grammarBuilder.append("KW273 : 'KW' '273';\n"); - grammarBuilder.append("KW274 : 'KW' '274';\n"); - grammarBuilder.append("KW275 : 'KW' '275';\n"); - grammarBuilder.append("KW276 : 'KW' '276';\n"); - grammarBuilder.append("KW277 : 'KW' '277';\n"); - grammarBuilder.append("KW278 : 'KW' '278';\n"); - grammarBuilder.append("KW279 : 'KW' '279';\n"); - grammarBuilder.append("KW280 : 'KW' '280';\n"); - grammarBuilder.append("KW281 : 'KW' '281';\n"); - grammarBuilder.append("KW282 : 'KW' '282';\n"); - grammarBuilder.append("KW283 : 'KW' '283';\n"); - grammarBuilder.append("KW284 : 'KW' '284';\n"); - grammarBuilder.append("KW285 : 'KW' '285';\n"); - grammarBuilder.append("KW286 : 'KW' '286';\n"); - grammarBuilder.append("KW287 : 'KW' '287';\n"); - grammarBuilder.append("KW288 : 'KW' '288';\n"); - grammarBuilder.append("KW289 : 'KW' '289';\n"); - grammarBuilder.append("KW290 : 'KW' '290';\n"); - grammarBuilder.append("KW291 : 'KW' '291';\n"); - grammarBuilder.append("KW292 : 'KW' '292';\n"); - grammarBuilder.append("KW293 : 'KW' '293';\n"); - grammarBuilder.append("KW294 : 'KW' '294';\n"); - grammarBuilder.append("KW295 : 'KW' '295';\n"); - grammarBuilder.append("KW296 : 'KW' '296';\n"); - grammarBuilder.append("KW297 : 'KW' '297';\n"); - grammarBuilder.append("KW298 : 'KW' '298';\n"); - grammarBuilder.append("KW299 : 'KW' '299';\n"); - grammarBuilder.append("KW300 : 'KW' '300';\n"); - grammarBuilder.append("KW301 : 'KW' '301';\n"); - grammarBuilder.append("KW302 : 'KW' '302';\n"); - grammarBuilder.append("KW303 : 'KW' '303';\n"); - grammarBuilder.append("KW304 : 'KW' '304';\n"); - grammarBuilder.append("KW305 : 'KW' '305';\n"); - grammarBuilder.append("KW306 : 'KW' '306';\n"); - grammarBuilder.append("KW307 : 'KW' '307';\n"); - grammarBuilder.append("KW308 : 'KW' '308';\n"); - grammarBuilder.append("KW309 : 'KW' '309';\n"); - grammarBuilder.append("KW310 : 'KW' '310';\n"); - grammarBuilder.append("KW311 : 'KW' '311';\n"); - grammarBuilder.append("KW312 : 'KW' '312';\n"); - grammarBuilder.append("KW313 : 'KW' '313';\n"); - grammarBuilder.append("KW314 : 'KW' '314';\n"); - grammarBuilder.append("KW315 : 'KW' '315';\n"); - grammarBuilder.append("KW316 : 'KW' '316';\n"); - grammarBuilder.append("KW317 : 'KW' '317';\n"); - grammarBuilder.append("KW318 : 'KW' '318';\n"); - grammarBuilder.append("KW319 : 'KW' '319';\n"); - grammarBuilder.append("KW320 : 'KW' '320';\n"); - grammarBuilder.append("KW321 : 'KW' '321';\n"); - grammarBuilder.append("KW322 : 'KW' '322';\n"); - grammarBuilder.append("KW323 : 'KW' '323';\n"); - grammarBuilder.append("KW324 : 'KW' '324';\n"); - grammarBuilder.append("KW325 : 'KW' '325';\n"); - grammarBuilder.append("KW326 : 'KW' '326';\n"); - grammarBuilder.append("KW327 : 'KW' '327';\n"); - grammarBuilder.append("KW328 : 'KW' '328';\n"); - grammarBuilder.append("KW329 : 'KW' '329';\n"); - grammarBuilder.append("KW330 : 'KW' '330';\n"); - grammarBuilder.append("KW331 : 'KW' '331';\n"); - grammarBuilder.append("KW332 : 'KW' '332';\n"); - grammarBuilder.append("KW333 : 'KW' '333';\n"); - grammarBuilder.append("KW334 : 'KW' '334';\n"); - grammarBuilder.append("KW335 : 'KW' '335';\n"); - grammarBuilder.append("KW336 : 'KW' '336';\n"); - grammarBuilder.append("KW337 : 'KW' '337';\n"); - grammarBuilder.append("KW338 : 'KW' '338';\n"); - grammarBuilder.append("KW339 : 'KW' '339';\n"); - grammarBuilder.append("KW340 : 'KW' '340';\n"); - grammarBuilder.append("KW341 : 'KW' '341';\n"); - grammarBuilder.append("KW342 : 'KW' '342';\n"); - grammarBuilder.append("KW343 : 'KW' '343';\n"); - grammarBuilder.append("KW344 : 'KW' '344';\n"); - grammarBuilder.append("KW345 : 'KW' '345';\n"); - grammarBuilder.append("KW346 : 'KW' '346';\n"); - grammarBuilder.append("KW347 : 'KW' '347';\n"); - grammarBuilder.append("KW348 : 'KW' '348';\n"); - grammarBuilder.append("KW349 : 'KW' '349';\n"); - grammarBuilder.append("KW350 : 'KW' '350';\n"); - grammarBuilder.append("KW351 : 'KW' '351';\n"); - grammarBuilder.append("KW352 : 'KW' '352';\n"); - grammarBuilder.append("KW353 : 'KW' '353';\n"); - grammarBuilder.append("KW354 : 'KW' '354';\n"); - grammarBuilder.append("KW355 : 'KW' '355';\n"); - grammarBuilder.append("KW356 : 'KW' '356';\n"); - grammarBuilder.append("KW357 : 'KW' '357';\n"); - grammarBuilder.append("KW358 : 'KW' '358';\n"); - grammarBuilder.append("KW359 : 'KW' '359';\n"); - grammarBuilder.append("KW360 : 'KW' '360';\n"); - grammarBuilder.append("KW361 : 'KW' '361';\n"); - grammarBuilder.append("KW362 : 'KW' '362';\n"); - grammarBuilder.append("KW363 : 'KW' '363';\n"); - grammarBuilder.append("KW364 : 'KW' '364';\n"); - grammarBuilder.append("KW365 : 'KW' '365';\n"); - grammarBuilder.append("KW366 : 'KW' '366';\n"); - grammarBuilder.append("KW367 : 'KW' '367';\n"); - grammarBuilder.append("KW368 : 'KW' '368';\n"); - grammarBuilder.append("KW369 : 'KW' '369';\n"); - grammarBuilder.append("KW370 : 'KW' '370';\n"); - grammarBuilder.append("KW371 : 'KW' '371';\n"); - grammarBuilder.append("KW372 : 'KW' '372';\n"); - grammarBuilder.append("KW373 : 'KW' '373';\n"); - grammarBuilder.append("KW374 : 'KW' '374';\n"); - grammarBuilder.append("KW375 : 'KW' '375';\n"); - grammarBuilder.append("KW376 : 'KW' '376';\n"); - grammarBuilder.append("KW377 : 'KW' '377';\n"); - grammarBuilder.append("KW378 : 'KW' '378';\n"); - grammarBuilder.append("KW379 : 'KW' '379';\n"); - grammarBuilder.append("KW380 : 'KW' '380';\n"); - grammarBuilder.append("KW381 : 'KW' '381';\n"); - grammarBuilder.append("KW382 : 'KW' '382';\n"); - grammarBuilder.append("KW383 : 'KW' '383';\n"); - grammarBuilder.append("KW384 : 'KW' '384';\n"); - grammarBuilder.append("KW385 : 'KW' '385';\n"); - grammarBuilder.append("KW386 : 'KW' '386';\n"); - grammarBuilder.append("KW387 : 'KW' '387';\n"); - grammarBuilder.append("KW388 : 'KW' '388';\n"); - grammarBuilder.append("KW389 : 'KW' '389';\n"); - grammarBuilder.append("KW390 : 'KW' '390';\n"); - grammarBuilder.append("KW391 : 'KW' '391';\n"); - grammarBuilder.append("KW392 : 'KW' '392';\n"); - grammarBuilder.append("KW393 : 'KW' '393';\n"); - grammarBuilder.append("KW394 : 'KW' '394';\n"); - grammarBuilder.append("KW395 : 'KW' '395';\n"); - grammarBuilder.append("KW396 : 'KW' '396';\n"); - grammarBuilder.append("KW397 : 'KW' '397';\n"); - grammarBuilder.append("KW398 : 'KW' '398';\n"); - grammarBuilder.append("KW399 : 'KW' '399';\n"); - grammarBuilder.append("KW400 : 'KW' '400';\n"); - grammarBuilder.append("KW401 : 'KW' '401';\n"); - grammarBuilder.append("KW402 : 'KW' '402';\n"); - grammarBuilder.append("KW403 : 'KW' '403';\n"); - grammarBuilder.append("KW404 : 'KW' '404';\n"); - grammarBuilder.append("KW405 : 'KW' '405';\n"); - grammarBuilder.append("KW406 : 'KW' '406';\n"); - grammarBuilder.append("KW407 : 'KW' '407';\n"); - grammarBuilder.append("KW408 : 'KW' '408';\n"); - grammarBuilder.append("KW409 : 'KW' '409';\n"); - grammarBuilder.append("KW410 : 'KW' '410';\n"); - grammarBuilder.append("KW411 : 'KW' '411';\n"); - grammarBuilder.append("KW412 : 'KW' '412';\n"); - grammarBuilder.append("KW413 : 'KW' '413';\n"); - grammarBuilder.append("KW414 : 'KW' '414';\n"); - grammarBuilder.append("KW415 : 'KW' '415';\n"); - grammarBuilder.append("KW416 : 'KW' '416';\n"); - grammarBuilder.append("KW417 : 'KW' '417';\n"); - grammarBuilder.append("KW418 : 'KW' '418';\n"); - grammarBuilder.append("KW419 : 'KW' '419';\n"); - grammarBuilder.append("KW420 : 'KW' '420';\n"); - grammarBuilder.append("KW421 : 'KW' '421';\n"); - grammarBuilder.append("KW422 : 'KW' '422';\n"); - grammarBuilder.append("KW423 : 'KW' '423';\n"); - grammarBuilder.append("KW424 : 'KW' '424';\n"); - grammarBuilder.append("KW425 : 'KW' '425';\n"); - grammarBuilder.append("KW426 : 'KW' '426';\n"); - grammarBuilder.append("KW427 : 'KW' '427';\n"); - grammarBuilder.append("KW428 : 'KW' '428';\n"); - grammarBuilder.append("KW429 : 'KW' '429';\n"); - grammarBuilder.append("KW430 : 'KW' '430';\n"); - grammarBuilder.append("KW431 : 'KW' '431';\n"); - grammarBuilder.append("KW432 : 'KW' '432';\n"); - grammarBuilder.append("KW433 : 'KW' '433';\n"); - grammarBuilder.append("KW434 : 'KW' '434';\n"); - grammarBuilder.append("KW435 : 'KW' '435';\n"); - grammarBuilder.append("KW436 : 'KW' '436';\n"); - grammarBuilder.append("KW437 : 'KW' '437';\n"); - grammarBuilder.append("KW438 : 'KW' '438';\n"); - grammarBuilder.append("KW439 : 'KW' '439';\n"); - grammarBuilder.append("KW440 : 'KW' '440';\n"); - grammarBuilder.append("KW441 : 'KW' '441';\n"); - grammarBuilder.append("KW442 : 'KW' '442';\n"); - grammarBuilder.append("KW443 : 'KW' '443';\n"); - grammarBuilder.append("KW444 : 'KW' '444';\n"); - grammarBuilder.append("KW445 : 'KW' '445';\n"); - grammarBuilder.append("KW446 : 'KW' '446';\n"); - grammarBuilder.append("KW447 : 'KW' '447';\n"); - grammarBuilder.append("KW448 : 'KW' '448';\n"); - grammarBuilder.append("KW449 : 'KW' '449';\n"); - grammarBuilder.append("KW450 : 'KW' '450';\n"); - grammarBuilder.append("KW451 : 'KW' '451';\n"); - grammarBuilder.append("KW452 : 'KW' '452';\n"); - grammarBuilder.append("KW453 : 'KW' '453';\n"); - grammarBuilder.append("KW454 : 'KW' '454';\n"); - grammarBuilder.append("KW455 : 'KW' '455';\n"); - grammarBuilder.append("KW456 : 'KW' '456';\n"); - grammarBuilder.append("KW457 : 'KW' '457';\n"); - grammarBuilder.append("KW458 : 'KW' '458';\n"); - grammarBuilder.append("KW459 : 'KW' '459';\n"); - grammarBuilder.append("KW460 : 'KW' '460';\n"); - grammarBuilder.append("KW461 : 'KW' '461';\n"); - grammarBuilder.append("KW462 : 'KW' '462';\n"); - grammarBuilder.append("KW463 : 'KW' '463';\n"); - grammarBuilder.append("KW464 : 'KW' '464';\n"); - grammarBuilder.append("KW465 : 'KW' '465';\n"); - grammarBuilder.append("KW466 : 'KW' '466';\n"); - grammarBuilder.append("KW467 : 'KW' '467';\n"); - grammarBuilder.append("KW468 : 'KW' '468';\n"); - grammarBuilder.append("KW469 : 'KW' '469';\n"); - grammarBuilder.append("KW470 : 'KW' '470';\n"); - grammarBuilder.append("KW471 : 'KW' '471';\n"); - grammarBuilder.append("KW472 : 'KW' '472';\n"); - grammarBuilder.append("KW473 : 'KW' '473';\n"); - grammarBuilder.append("KW474 : 'KW' '474';\n"); - grammarBuilder.append("KW475 : 'KW' '475';\n"); - grammarBuilder.append("KW476 : 'KW' '476';\n"); - grammarBuilder.append("KW477 : 'KW' '477';\n"); - grammarBuilder.append("KW478 : 'KW' '478';\n"); - grammarBuilder.append("KW479 : 'KW' '479';\n"); - grammarBuilder.append("KW480 : 'KW' '480';\n"); - grammarBuilder.append("KW481 : 'KW' '481';\n"); - grammarBuilder.append("KW482 : 'KW' '482';\n"); - grammarBuilder.append("KW483 : 'KW' '483';\n"); - grammarBuilder.append("KW484 : 'KW' '484';\n"); - grammarBuilder.append("KW485 : 'KW' '485';\n"); - grammarBuilder.append("KW486 : 'KW' '486';\n"); - grammarBuilder.append("KW487 : 'KW' '487';\n"); - grammarBuilder.append("KW488 : 'KW' '488';\n"); - grammarBuilder.append("KW489 : 'KW' '489';\n"); - grammarBuilder.append("KW490 : 'KW' '490';\n"); - grammarBuilder.append("KW491 : 'KW' '491';\n"); - grammarBuilder.append("KW492 : 'KW' '492';\n"); - grammarBuilder.append("KW493 : 'KW' '493';\n"); - grammarBuilder.append("KW494 : 'KW' '494';\n"); - grammarBuilder.append("KW495 : 'KW' '495';\n"); - grammarBuilder.append("KW496 : 'KW' '496';\n"); - grammarBuilder.append("KW497 : 'KW' '497';\n"); - grammarBuilder.append("KW498 : 'KW' '498';\n"); - grammarBuilder.append("KW499 : 'KW' '499';\n"); - grammarBuilder.append("KW500 : 'KW' '500';\n"); - grammarBuilder.append("KW501 : 'KW' '501';\n"); - grammarBuilder.append("KW502 : 'KW' '502';\n"); - grammarBuilder.append("KW503 : 'KW' '503';\n"); - grammarBuilder.append("KW504 : 'KW' '504';\n"); - grammarBuilder.append("KW505 : 'KW' '505';\n"); - grammarBuilder.append("KW506 : 'KW' '506';\n"); - grammarBuilder.append("KW507 : 'KW' '507';\n"); - grammarBuilder.append("KW508 : 'KW' '508';\n"); - grammarBuilder.append("KW509 : 'KW' '509';\n"); - grammarBuilder.append("KW510 : 'KW' '510';\n"); - grammarBuilder.append("KW511 : 'KW' '511';\n"); - grammarBuilder.append("KW512 : 'KW' '512';\n"); - grammarBuilder.append("KW513 : 'KW' '513';\n"); - grammarBuilder.append("KW514 : 'KW' '514';\n"); - grammarBuilder.append("KW515 : 'KW' '515';\n"); - grammarBuilder.append("KW516 : 'KW' '516';\n"); - grammarBuilder.append("KW517 : 'KW' '517';\n"); - grammarBuilder.append("KW518 : 'KW' '518';\n"); - grammarBuilder.append("KW519 : 'KW' '519';\n"); - grammarBuilder.append("KW520 : 'KW' '520';\n"); - grammarBuilder.append("KW521 : 'KW' '521';\n"); - grammarBuilder.append("KW522 : 'KW' '522';\n"); - grammarBuilder.append("KW523 : 'KW' '523';\n"); - grammarBuilder.append("KW524 : 'KW' '524';\n"); - grammarBuilder.append("KW525 : 'KW' '525';\n"); - grammarBuilder.append("KW526 : 'KW' '526';\n"); - grammarBuilder.append("KW527 : 'KW' '527';\n"); - grammarBuilder.append("KW528 : 'KW' '528';\n"); - grammarBuilder.append("KW529 : 'KW' '529';\n"); - grammarBuilder.append("KW530 : 'KW' '530';\n"); - grammarBuilder.append("KW531 : 'KW' '531';\n"); - grammarBuilder.append("KW532 : 'KW' '532';\n"); - grammarBuilder.append("KW533 : 'KW' '533';\n"); - grammarBuilder.append("KW534 : 'KW' '534';\n"); - grammarBuilder.append("KW535 : 'KW' '535';\n"); - grammarBuilder.append("KW536 : 'KW' '536';\n"); - grammarBuilder.append("KW537 : 'KW' '537';\n"); - grammarBuilder.append("KW538 : 'KW' '538';\n"); - grammarBuilder.append("KW539 : 'KW' '539';\n"); - grammarBuilder.append("KW540 : 'KW' '540';\n"); - grammarBuilder.append("KW541 : 'KW' '541';\n"); - grammarBuilder.append("KW542 : 'KW' '542';\n"); - grammarBuilder.append("KW543 : 'KW' '543';\n"); - grammarBuilder.append("KW544 : 'KW' '544';\n"); - grammarBuilder.append("KW545 : 'KW' '545';\n"); - grammarBuilder.append("KW546 : 'KW' '546';\n"); - grammarBuilder.append("KW547 : 'KW' '547';\n"); - grammarBuilder.append("KW548 : 'KW' '548';\n"); - grammarBuilder.append("KW549 : 'KW' '549';\n"); - grammarBuilder.append("KW550 : 'KW' '550';\n"); - grammarBuilder.append("KW551 : 'KW' '551';\n"); - grammarBuilder.append("KW552 : 'KW' '552';\n"); - grammarBuilder.append("KW553 : 'KW' '553';\n"); - grammarBuilder.append("KW554 : 'KW' '554';\n"); - grammarBuilder.append("KW555 : 'KW' '555';\n"); - grammarBuilder.append("KW556 : 'KW' '556';\n"); - grammarBuilder.append("KW557 : 'KW' '557';\n"); - grammarBuilder.append("KW558 : 'KW' '558';\n"); - grammarBuilder.append("KW559 : 'KW' '559';\n"); - grammarBuilder.append("KW560 : 'KW' '560';\n"); - grammarBuilder.append("KW561 : 'KW' '561';\n"); - grammarBuilder.append("KW562 : 'KW' '562';\n"); - grammarBuilder.append("KW563 : 'KW' '563';\n"); - grammarBuilder.append("KW564 : 'KW' '564';\n"); - grammarBuilder.append("KW565 : 'KW' '565';\n"); - grammarBuilder.append("KW566 : 'KW' '566';\n"); - grammarBuilder.append("KW567 : 'KW' '567';\n"); - grammarBuilder.append("KW568 : 'KW' '568';\n"); - grammarBuilder.append("KW569 : 'KW' '569';\n"); - grammarBuilder.append("KW570 : 'KW' '570';\n"); - grammarBuilder.append("KW571 : 'KW' '571';\n"); - grammarBuilder.append("KW572 : 'KW' '572';\n"); - grammarBuilder.append("KW573 : 'KW' '573';\n"); - grammarBuilder.append("KW574 : 'KW' '574';\n"); - grammarBuilder.append("KW575 : 'KW' '575';\n"); - grammarBuilder.append("KW576 : 'KW' '576';\n"); - grammarBuilder.append("KW577 : 'KW' '577';\n"); - grammarBuilder.append("KW578 : 'KW' '578';\n"); - grammarBuilder.append("KW579 : 'KW' '579';\n"); - grammarBuilder.append("KW580 : 'KW' '580';\n"); - grammarBuilder.append("KW581 : 'KW' '581';\n"); - grammarBuilder.append("KW582 : 'KW' '582';\n"); - grammarBuilder.append("KW583 : 'KW' '583';\n"); - grammarBuilder.append("KW584 : 'KW' '584';\n"); - grammarBuilder.append("KW585 : 'KW' '585';\n"); - grammarBuilder.append("KW586 : 'KW' '586';\n"); - grammarBuilder.append("KW587 : 'KW' '587';\n"); - grammarBuilder.append("KW588 : 'KW' '588';\n"); - grammarBuilder.append("KW589 : 'KW' '589';\n"); - grammarBuilder.append("KW590 : 'KW' '590';\n"); - grammarBuilder.append("KW591 : 'KW' '591';\n"); - grammarBuilder.append("KW592 : 'KW' '592';\n"); - grammarBuilder.append("KW593 : 'KW' '593';\n"); - grammarBuilder.append("KW594 : 'KW' '594';\n"); - grammarBuilder.append("KW595 : 'KW' '595';\n"); - grammarBuilder.append("KW596 : 'KW' '596';\n"); - grammarBuilder.append("KW597 : 'KW' '597';\n"); - grammarBuilder.append("KW598 : 'KW' '598';\n"); - grammarBuilder.append("KW599 : 'KW' '599';\n"); - grammarBuilder.append("KW600 : 'KW' '600';\n"); - grammarBuilder.append("KW601 : 'KW' '601';\n"); - grammarBuilder.append("KW602 : 'KW' '602';\n"); - grammarBuilder.append("KW603 : 'KW' '603';\n"); - grammarBuilder.append("KW604 : 'KW' '604';\n"); - grammarBuilder.append("KW605 : 'KW' '605';\n"); - grammarBuilder.append("KW606 : 'KW' '606';\n"); - grammarBuilder.append("KW607 : 'KW' '607';\n"); - grammarBuilder.append("KW608 : 'KW' '608';\n"); - grammarBuilder.append("KW609 : 'KW' '609';\n"); - grammarBuilder.append("KW610 : 'KW' '610';\n"); - grammarBuilder.append("KW611 : 'KW' '611';\n"); - grammarBuilder.append("KW612 : 'KW' '612';\n"); - grammarBuilder.append("KW613 : 'KW' '613';\n"); - grammarBuilder.append("KW614 : 'KW' '614';\n"); - grammarBuilder.append("KW615 : 'KW' '615';\n"); - grammarBuilder.append("KW616 : 'KW' '616';\n"); - grammarBuilder.append("KW617 : 'KW' '617';\n"); - grammarBuilder.append("KW618 : 'KW' '618';\n"); - grammarBuilder.append("KW619 : 'KW' '619';\n"); - grammarBuilder.append("KW620 : 'KW' '620';\n"); - grammarBuilder.append("KW621 : 'KW' '621';\n"); - grammarBuilder.append("KW622 : 'KW' '622';\n"); - grammarBuilder.append("KW623 : 'KW' '623';\n"); - grammarBuilder.append("KW624 : 'KW' '624';\n"); - grammarBuilder.append("KW625 : 'KW' '625';\n"); - grammarBuilder.append("KW626 : 'KW' '626';\n"); - grammarBuilder.append("KW627 : 'KW' '627';\n"); - grammarBuilder.append("KW628 : 'KW' '628';\n"); - grammarBuilder.append("KW629 : 'KW' '629';\n"); - grammarBuilder.append("KW630 : 'KW' '630';\n"); - grammarBuilder.append("KW631 : 'KW' '631';\n"); - grammarBuilder.append("KW632 : 'KW' '632';\n"); - grammarBuilder.append("KW633 : 'KW' '633';\n"); - grammarBuilder.append("KW634 : 'KW' '634';\n"); - grammarBuilder.append("KW635 : 'KW' '635';\n"); - grammarBuilder.append("KW636 : 'KW' '636';\n"); - grammarBuilder.append("KW637 : 'KW' '637';\n"); - grammarBuilder.append("KW638 : 'KW' '638';\n"); - grammarBuilder.append("KW639 : 'KW' '639';\n"); - grammarBuilder.append("KW640 : 'KW' '640';\n"); - grammarBuilder.append("KW641 : 'KW' '641';\n"); - grammarBuilder.append("KW642 : 'KW' '642';\n"); - grammarBuilder.append("KW643 : 'KW' '643';\n"); - grammarBuilder.append("KW644 : 'KW' '644';\n"); - grammarBuilder.append("KW645 : 'KW' '645';\n"); - grammarBuilder.append("KW646 : 'KW' '646';\n"); - grammarBuilder.append("KW647 : 'KW' '647';\n"); - grammarBuilder.append("KW648 : 'KW' '648';\n"); - grammarBuilder.append("KW649 : 'KW' '649';\n"); - grammarBuilder.append("KW650 : 'KW' '650';\n"); - grammarBuilder.append("KW651 : 'KW' '651';\n"); - grammarBuilder.append("KW652 : 'KW' '652';\n"); - grammarBuilder.append("KW653 : 'KW' '653';\n"); - grammarBuilder.append("KW654 : 'KW' '654';\n"); - grammarBuilder.append("KW655 : 'KW' '655';\n"); - grammarBuilder.append("KW656 : 'KW' '656';\n"); - grammarBuilder.append("KW657 : 'KW' '657';\n"); - grammarBuilder.append("KW658 : 'KW' '658';\n"); - grammarBuilder.append("KW659 : 'KW' '659';\n"); - grammarBuilder.append("KW660 : 'KW' '660';\n"); - grammarBuilder.append("KW661 : 'KW' '661';\n"); - grammarBuilder.append("KW662 : 'KW' '662';\n"); - grammarBuilder.append("KW663 : 'KW' '663';\n"); - grammarBuilder.append("KW664 : 'KW' '664';\n"); - grammarBuilder.append("KW665 : 'KW' '665';\n"); - grammarBuilder.append("KW666 : 'KW' '666';\n"); - grammarBuilder.append("KW667 : 'KW' '667';\n"); - grammarBuilder.append("KW668 : 'KW' '668';\n"); - grammarBuilder.append("KW669 : 'KW' '669';\n"); - grammarBuilder.append("KW670 : 'KW' '670';\n"); - grammarBuilder.append("KW671 : 'KW' '671';\n"); - grammarBuilder.append("KW672 : 'KW' '672';\n"); - grammarBuilder.append("KW673 : 'KW' '673';\n"); - grammarBuilder.append("KW674 : 'KW' '674';\n"); - grammarBuilder.append("KW675 : 'KW' '675';\n"); - grammarBuilder.append("KW676 : 'KW' '676';\n"); - grammarBuilder.append("KW677 : 'KW' '677';\n"); - grammarBuilder.append("KW678 : 'KW' '678';\n"); - grammarBuilder.append("KW679 : 'KW' '679';\n"); - grammarBuilder.append("KW680 : 'KW' '680';\n"); - grammarBuilder.append("KW681 : 'KW' '681';\n"); - grammarBuilder.append("KW682 : 'KW' '682';\n"); - grammarBuilder.append("KW683 : 'KW' '683';\n"); - grammarBuilder.append("KW684 : 'KW' '684';\n"); - grammarBuilder.append("KW685 : 'KW' '685';\n"); - grammarBuilder.append("KW686 : 'KW' '686';\n"); - grammarBuilder.append("KW687 : 'KW' '687';\n"); - grammarBuilder.append("KW688 : 'KW' '688';\n"); - grammarBuilder.append("KW689 : 'KW' '689';\n"); - grammarBuilder.append("KW690 : 'KW' '690';\n"); - grammarBuilder.append("KW691 : 'KW' '691';\n"); - grammarBuilder.append("KW692 : 'KW' '692';\n"); - grammarBuilder.append("KW693 : 'KW' '693';\n"); - grammarBuilder.append("KW694 : 'KW' '694';\n"); - grammarBuilder.append("KW695 : 'KW' '695';\n"); - grammarBuilder.append("KW696 : 'KW' '696';\n"); - grammarBuilder.append("KW697 : 'KW' '697';\n"); - grammarBuilder.append("KW698 : 'KW' '698';\n"); - grammarBuilder.append("KW699 : 'KW' '699';\n"); - grammarBuilder.append("KW700 : 'KW' '700';\n"); - grammarBuilder.append("KW701 : 'KW' '701';\n"); - grammarBuilder.append("KW702 : 'KW' '702';\n"); - grammarBuilder.append("KW703 : 'KW' '703';\n"); - grammarBuilder.append("KW704 : 'KW' '704';\n"); - grammarBuilder.append("KW705 : 'KW' '705';\n"); - grammarBuilder.append("KW706 : 'KW' '706';\n"); - grammarBuilder.append("KW707 : 'KW' '707';\n"); - grammarBuilder.append("KW708 : 'KW' '708';\n"); - grammarBuilder.append("KW709 : 'KW' '709';\n"); - grammarBuilder.append("KW710 : 'KW' '710';\n"); - grammarBuilder.append("KW711 : 'KW' '711';\n"); - grammarBuilder.append("KW712 : 'KW' '712';\n"); - grammarBuilder.append("KW713 : 'KW' '713';\n"); - grammarBuilder.append("KW714 : 'KW' '714';\n"); - grammarBuilder.append("KW715 : 'KW' '715';\n"); - grammarBuilder.append("KW716 : 'KW' '716';\n"); - grammarBuilder.append("KW717 : 'KW' '717';\n"); - grammarBuilder.append("KW718 : 'KW' '718';\n"); - grammarBuilder.append("KW719 : 'KW' '719';\n"); - grammarBuilder.append("KW720 : 'KW' '720';\n"); - grammarBuilder.append("KW721 : 'KW' '721';\n"); - grammarBuilder.append("KW722 : 'KW' '722';\n"); - grammarBuilder.append("KW723 : 'KW' '723';\n"); - grammarBuilder.append("KW724 : 'KW' '724';\n"); - grammarBuilder.append("KW725 : 'KW' '725';\n"); - grammarBuilder.append("KW726 : 'KW' '726';\n"); - grammarBuilder.append("KW727 : 'KW' '727';\n"); - grammarBuilder.append("KW728 : 'KW' '728';\n"); - grammarBuilder.append("KW729 : 'KW' '729';\n"); - grammarBuilder.append("KW730 : 'KW' '730';\n"); - grammarBuilder.append("KW731 : 'KW' '731';\n"); - grammarBuilder.append("KW732 : 'KW' '732';\n"); - grammarBuilder.append("KW733 : 'KW' '733';\n"); - grammarBuilder.append("KW734 : 'KW' '734';\n"); - grammarBuilder.append("KW735 : 'KW' '735';\n"); - grammarBuilder.append("KW736 : 'KW' '736';\n"); - grammarBuilder.append("KW737 : 'KW' '737';\n"); - grammarBuilder.append("KW738 : 'KW' '738';\n"); - grammarBuilder.append("KW739 : 'KW' '739';\n"); - grammarBuilder.append("KW740 : 'KW' '740';\n"); - grammarBuilder.append("KW741 : 'KW' '741';\n"); - grammarBuilder.append("KW742 : 'KW' '742';\n"); - grammarBuilder.append("KW743 : 'KW' '743';\n"); - grammarBuilder.append("KW744 : 'KW' '744';\n"); - grammarBuilder.append("KW745 : 'KW' '745';\n"); - grammarBuilder.append("KW746 : 'KW' '746';\n"); - grammarBuilder.append("KW747 : 'KW' '747';\n"); - grammarBuilder.append("KW748 : 'KW' '748';\n"); - grammarBuilder.append("KW749 : 'KW' '749';\n"); - grammarBuilder.append("KW750 : 'KW' '750';\n"); - grammarBuilder.append("KW751 : 'KW' '751';\n"); - grammarBuilder.append("KW752 : 'KW' '752';\n"); - grammarBuilder.append("KW753 : 'KW' '753';\n"); - grammarBuilder.append("KW754 : 'KW' '754';\n"); - grammarBuilder.append("KW755 : 'KW' '755';\n"); - grammarBuilder.append("KW756 : 'KW' '756';\n"); - grammarBuilder.append("KW757 : 'KW' '757';\n"); - grammarBuilder.append("KW758 : 'KW' '758';\n"); - grammarBuilder.append("KW759 : 'KW' '759';\n"); - grammarBuilder.append("KW760 : 'KW' '760';\n"); - grammarBuilder.append("KW761 : 'KW' '761';\n"); - grammarBuilder.append("KW762 : 'KW' '762';\n"); - grammarBuilder.append("KW763 : 'KW' '763';\n"); - grammarBuilder.append("KW764 : 'KW' '764';\n"); - grammarBuilder.append("KW765 : 'KW' '765';\n"); - grammarBuilder.append("KW766 : 'KW' '766';\n"); - grammarBuilder.append("KW767 : 'KW' '767';\n"); - grammarBuilder.append("KW768 : 'KW' '768';\n"); - grammarBuilder.append("KW769 : 'KW' '769';\n"); - grammarBuilder.append("KW770 : 'KW' '770';\n"); - grammarBuilder.append("KW771 : 'KW' '771';\n"); - grammarBuilder.append("KW772 : 'KW' '772';\n"); - grammarBuilder.append("KW773 : 'KW' '773';\n"); - grammarBuilder.append("KW774 : 'KW' '774';\n"); - grammarBuilder.append("KW775 : 'KW' '775';\n"); - grammarBuilder.append("KW776 : 'KW' '776';\n"); - grammarBuilder.append("KW777 : 'KW' '777';\n"); - grammarBuilder.append("KW778 : 'KW' '778';\n"); - grammarBuilder.append("KW779 : 'KW' '779';\n"); - grammarBuilder.append("KW780 : 'KW' '780';\n"); - grammarBuilder.append("KW781 : 'KW' '781';\n"); - grammarBuilder.append("KW782 : 'KW' '782';\n"); - grammarBuilder.append("KW783 : 'KW' '783';\n"); - grammarBuilder.append("KW784 : 'KW' '784';\n"); - grammarBuilder.append("KW785 : 'KW' '785';\n"); - grammarBuilder.append("KW786 : 'KW' '786';\n"); - grammarBuilder.append("KW787 : 'KW' '787';\n"); - grammarBuilder.append("KW788 : 'KW' '788';\n"); - grammarBuilder.append("KW789 : 'KW' '789';\n"); - grammarBuilder.append("KW790 : 'KW' '790';\n"); - grammarBuilder.append("KW791 : 'KW' '791';\n"); - grammarBuilder.append("KW792 : 'KW' '792';\n"); - grammarBuilder.append("KW793 : 'KW' '793';\n"); - grammarBuilder.append("KW794 : 'KW' '794';\n"); - grammarBuilder.append("KW795 : 'KW' '795';\n"); - grammarBuilder.append("KW796 : 'KW' '796';\n"); - grammarBuilder.append("KW797 : 'KW' '797';\n"); - grammarBuilder.append("KW798 : 'KW' '798';\n"); - grammarBuilder.append("KW799 : 'KW' '799';\n"); - grammarBuilder.append("KW800 : 'KW' '800';\n"); - grammarBuilder.append("KW801 : 'KW' '801';\n"); - grammarBuilder.append("KW802 : 'KW' '802';\n"); - grammarBuilder.append("KW803 : 'KW' '803';\n"); - grammarBuilder.append("KW804 : 'KW' '804';\n"); - grammarBuilder.append("KW805 : 'KW' '805';\n"); - grammarBuilder.append("KW806 : 'KW' '806';\n"); - grammarBuilder.append("KW807 : 'KW' '807';\n"); - grammarBuilder.append("KW808 : 'KW' '808';\n"); - grammarBuilder.append("KW809 : 'KW' '809';\n"); - grammarBuilder.append("KW810 : 'KW' '810';\n"); - grammarBuilder.append("KW811 : 'KW' '811';\n"); - grammarBuilder.append("KW812 : 'KW' '812';\n"); - grammarBuilder.append("KW813 : 'KW' '813';\n"); - grammarBuilder.append("KW814 : 'KW' '814';\n"); - grammarBuilder.append("KW815 : 'KW' '815';\n"); - grammarBuilder.append("KW816 : 'KW' '816';\n"); - grammarBuilder.append("KW817 : 'KW' '817';\n"); - grammarBuilder.append("KW818 : 'KW' '818';\n"); - grammarBuilder.append("KW819 : 'KW' '819';\n"); - grammarBuilder.append("KW820 : 'KW' '820';\n"); - grammarBuilder.append("KW821 : 'KW' '821';\n"); - grammarBuilder.append("KW822 : 'KW' '822';\n"); - grammarBuilder.append("KW823 : 'KW' '823';\n"); - grammarBuilder.append("KW824 : 'KW' '824';\n"); - grammarBuilder.append("KW825 : 'KW' '825';\n"); - grammarBuilder.append("KW826 : 'KW' '826';\n"); - grammarBuilder.append("KW827 : 'KW' '827';\n"); - grammarBuilder.append("KW828 : 'KW' '828';\n"); - grammarBuilder.append("KW829 : 'KW' '829';\n"); - grammarBuilder.append("KW830 : 'KW' '830';\n"); - grammarBuilder.append("KW831 : 'KW' '831';\n"); - grammarBuilder.append("KW832 : 'KW' '832';\n"); - grammarBuilder.append("KW833 : 'KW' '833';\n"); - grammarBuilder.append("KW834 : 'KW' '834';\n"); - grammarBuilder.append("KW835 : 'KW' '835';\n"); - grammarBuilder.append("KW836 : 'KW' '836';\n"); - grammarBuilder.append("KW837 : 'KW' '837';\n"); - grammarBuilder.append("KW838 : 'KW' '838';\n"); - grammarBuilder.append("KW839 : 'KW' '839';\n"); - grammarBuilder.append("KW840 : 'KW' '840';\n"); - grammarBuilder.append("KW841 : 'KW' '841';\n"); - grammarBuilder.append("KW842 : 'KW' '842';\n"); - grammarBuilder.append("KW843 : 'KW' '843';\n"); - grammarBuilder.append("KW844 : 'KW' '844';\n"); - grammarBuilder.append("KW845 : 'KW' '845';\n"); - grammarBuilder.append("KW846 : 'KW' '846';\n"); - grammarBuilder.append("KW847 : 'KW' '847';\n"); - grammarBuilder.append("KW848 : 'KW' '848';\n"); - grammarBuilder.append("KW849 : 'KW' '849';\n"); - grammarBuilder.append("KW850 : 'KW' '850';\n"); - grammarBuilder.append("KW851 : 'KW' '851';\n"); - grammarBuilder.append("KW852 : 'KW' '852';\n"); - grammarBuilder.append("KW853 : 'KW' '853';\n"); - grammarBuilder.append("KW854 : 'KW' '854';\n"); - grammarBuilder.append("KW855 : 'KW' '855';\n"); - grammarBuilder.append("KW856 : 'KW' '856';\n"); - grammarBuilder.append("KW857 : 'KW' '857';\n"); - grammarBuilder.append("KW858 : 'KW' '858';\n"); - grammarBuilder.append("KW859 : 'KW' '859';\n"); - grammarBuilder.append("KW860 : 'KW' '860';\n"); - grammarBuilder.append("KW861 : 'KW' '861';\n"); - grammarBuilder.append("KW862 : 'KW' '862';\n"); - grammarBuilder.append("KW863 : 'KW' '863';\n"); - grammarBuilder.append("KW864 : 'KW' '864';\n"); - grammarBuilder.append("KW865 : 'KW' '865';\n"); - grammarBuilder.append("KW866 : 'KW' '866';\n"); - grammarBuilder.append("KW867 : 'KW' '867';\n"); - grammarBuilder.append("KW868 : 'KW' '868';\n"); - grammarBuilder.append("KW869 : 'KW' '869';\n"); - grammarBuilder.append("KW870 : 'KW' '870';\n"); - grammarBuilder.append("KW871 : 'KW' '871';\n"); - grammarBuilder.append("KW872 : 'KW' '872';\n"); - grammarBuilder.append("KW873 : 'KW' '873';\n"); - grammarBuilder.append("KW874 : 'KW' '874';\n"); - grammarBuilder.append("KW875 : 'KW' '875';\n"); - grammarBuilder.append("KW876 : 'KW' '876';\n"); - grammarBuilder.append("KW877 : 'KW' '877';\n"); - grammarBuilder.append("KW878 : 'KW' '878';\n"); - grammarBuilder.append("KW879 : 'KW' '879';\n"); - grammarBuilder.append("KW880 : 'KW' '880';\n"); - grammarBuilder.append("KW881 : 'KW' '881';\n"); - grammarBuilder.append("KW882 : 'KW' '882';\n"); - grammarBuilder.append("KW883 : 'KW' '883';\n"); - grammarBuilder.append("KW884 : 'KW' '884';\n"); - grammarBuilder.append("KW885 : 'KW' '885';\n"); - grammarBuilder.append("KW886 : 'KW' '886';\n"); - grammarBuilder.append("KW887 : 'KW' '887';\n"); - grammarBuilder.append("KW888 : 'KW' '888';\n"); - grammarBuilder.append("KW889 : 'KW' '889';\n"); - grammarBuilder.append("KW890 : 'KW' '890';\n"); - grammarBuilder.append("KW891 : 'KW' '891';\n"); - grammarBuilder.append("KW892 : 'KW' '892';\n"); - grammarBuilder.append("KW893 : 'KW' '893';\n"); - grammarBuilder.append("KW894 : 'KW' '894';\n"); - grammarBuilder.append("KW895 : 'KW' '895';\n"); - grammarBuilder.append("KW896 : 'KW' '896';\n"); - grammarBuilder.append("KW897 : 'KW' '897';\n"); - grammarBuilder.append("KW898 : 'KW' '898';\n"); - grammarBuilder.append("KW899 : 'KW' '899';\n"); - grammarBuilder.append("KW900 : 'KW' '900';\n"); - grammarBuilder.append("KW901 : 'KW' '901';\n"); - grammarBuilder.append("KW902 : 'KW' '902';\n"); - grammarBuilder.append("KW903 : 'KW' '903';\n"); - grammarBuilder.append("KW904 : 'KW' '904';\n"); - grammarBuilder.append("KW905 : 'KW' '905';\n"); - grammarBuilder.append("KW906 : 'KW' '906';\n"); - grammarBuilder.append("KW907 : 'KW' '907';\n"); - grammarBuilder.append("KW908 : 'KW' '908';\n"); - grammarBuilder.append("KW909 : 'KW' '909';\n"); - grammarBuilder.append("KW910 : 'KW' '910';\n"); - grammarBuilder.append("KW911 : 'KW' '911';\n"); - grammarBuilder.append("KW912 : 'KW' '912';\n"); - grammarBuilder.append("KW913 : 'KW' '913';\n"); - grammarBuilder.append("KW914 : 'KW' '914';\n"); - grammarBuilder.append("KW915 : 'KW' '915';\n"); - grammarBuilder.append("KW916 : 'KW' '916';\n"); - grammarBuilder.append("KW917 : 'KW' '917';\n"); - grammarBuilder.append("KW918 : 'KW' '918';\n"); - grammarBuilder.append("KW919 : 'KW' '919';\n"); - grammarBuilder.append("KW920 : 'KW' '920';\n"); - grammarBuilder.append("KW921 : 'KW' '921';\n"); - grammarBuilder.append("KW922 : 'KW' '922';\n"); - grammarBuilder.append("KW923 : 'KW' '923';\n"); - grammarBuilder.append("KW924 : 'KW' '924';\n"); - grammarBuilder.append("KW925 : 'KW' '925';\n"); - grammarBuilder.append("KW926 : 'KW' '926';\n"); - grammarBuilder.append("KW927 : 'KW' '927';\n"); - grammarBuilder.append("KW928 : 'KW' '928';\n"); - grammarBuilder.append("KW929 : 'KW' '929';\n"); - grammarBuilder.append("KW930 : 'KW' '930';\n"); - grammarBuilder.append("KW931 : 'KW' '931';\n"); - grammarBuilder.append("KW932 : 'KW' '932';\n"); - grammarBuilder.append("KW933 : 'KW' '933';\n"); - grammarBuilder.append("KW934 : 'KW' '934';\n"); - grammarBuilder.append("KW935 : 'KW' '935';\n"); - grammarBuilder.append("KW936 : 'KW' '936';\n"); - grammarBuilder.append("KW937 : 'KW' '937';\n"); - grammarBuilder.append("KW938 : 'KW' '938';\n"); - grammarBuilder.append("KW939 : 'KW' '939';\n"); - grammarBuilder.append("KW940 : 'KW' '940';\n"); - grammarBuilder.append("KW941 : 'KW' '941';\n"); - grammarBuilder.append("KW942 : 'KW' '942';\n"); - grammarBuilder.append("KW943 : 'KW' '943';\n"); - grammarBuilder.append("KW944 : 'KW' '944';\n"); - grammarBuilder.append("KW945 : 'KW' '945';\n"); - grammarBuilder.append("KW946 : 'KW' '946';\n"); - grammarBuilder.append("KW947 : 'KW' '947';\n"); - grammarBuilder.append("KW948 : 'KW' '948';\n"); - grammarBuilder.append("KW949 : 'KW' '949';\n"); - grammarBuilder.append("KW950 : 'KW' '950';\n"); - grammarBuilder.append("KW951 : 'KW' '951';\n"); - grammarBuilder.append("KW952 : 'KW' '952';\n"); - grammarBuilder.append("KW953 : 'KW' '953';\n"); - grammarBuilder.append("KW954 : 'KW' '954';\n"); - grammarBuilder.append("KW955 : 'KW' '955';\n"); - grammarBuilder.append("KW956 : 'KW' '956';\n"); - grammarBuilder.append("KW957 : 'KW' '957';\n"); - grammarBuilder.append("KW958 : 'KW' '958';\n"); - grammarBuilder.append("KW959 : 'KW' '959';\n"); - grammarBuilder.append("KW960 : 'KW' '960';\n"); - grammarBuilder.append("KW961 : 'KW' '961';\n"); - grammarBuilder.append("KW962 : 'KW' '962';\n"); - grammarBuilder.append("KW963 : 'KW' '963';\n"); - grammarBuilder.append("KW964 : 'KW' '964';\n"); - grammarBuilder.append("KW965 : 'KW' '965';\n"); - grammarBuilder.append("KW966 : 'KW' '966';\n"); - grammarBuilder.append("KW967 : 'KW' '967';\n"); - grammarBuilder.append("KW968 : 'KW' '968';\n"); - grammarBuilder.append("KW969 : 'KW' '969';\n"); - grammarBuilder.append("KW970 : 'KW' '970';\n"); - grammarBuilder.append("KW971 : 'KW' '971';\n"); - grammarBuilder.append("KW972 : 'KW' '972';\n"); - grammarBuilder.append("KW973 : 'KW' '973';\n"); - grammarBuilder.append("KW974 : 'KW' '974';\n"); - grammarBuilder.append("KW975 : 'KW' '975';\n"); - grammarBuilder.append("KW976 : 'KW' '976';\n"); - grammarBuilder.append("KW977 : 'KW' '977';\n"); - grammarBuilder.append("KW978 : 'KW' '978';\n"); - grammarBuilder.append("KW979 : 'KW' '979';\n"); - grammarBuilder.append("KW980 : 'KW' '980';\n"); - grammarBuilder.append("KW981 : 'KW' '981';\n"); - grammarBuilder.append("KW982 : 'KW' '982';\n"); - grammarBuilder.append("KW983 : 'KW' '983';\n"); - grammarBuilder.append("KW984 : 'KW' '984';\n"); - grammarBuilder.append("KW985 : 'KW' '985';\n"); - grammarBuilder.append("KW986 : 'KW' '986';\n"); - grammarBuilder.append("KW987 : 'KW' '987';\n"); - grammarBuilder.append("KW988 : 'KW' '988';\n"); - grammarBuilder.append("KW989 : 'KW' '989';\n"); - grammarBuilder.append("KW990 : 'KW' '990';\n"); - grammarBuilder.append("KW991 : 'KW' '991';\n"); - grammarBuilder.append("KW992 : 'KW' '992';\n"); - grammarBuilder.append("KW993 : 'KW' '993';\n"); - grammarBuilder.append("KW994 : 'KW' '994';\n"); - grammarBuilder.append("KW995 : 'KW' '995';\n"); - grammarBuilder.append("KW996 : 'KW' '996';\n"); - grammarBuilder.append("KW997 : 'KW' '997';\n"); - grammarBuilder.append("KW998 : 'KW' '998';\n"); - grammarBuilder.append("KW999 : 'KW' '999';\n"); - grammarBuilder.append("KW1000 : 'KW' '1000';\n"); - grammarBuilder.append("KW1001 : 'KW' '1001';\n"); - grammarBuilder.append("KW1002 : 'KW' '1002';\n"); - grammarBuilder.append("KW1003 : 'KW' '1003';\n"); - grammarBuilder.append("KW1004 : 'KW' '1004';\n"); - grammarBuilder.append("KW1005 : 'KW' '1005';\n"); - grammarBuilder.append("KW1006 : 'KW' '1006';\n"); - grammarBuilder.append("KW1007 : 'KW' '1007';\n"); - grammarBuilder.append("KW1008 : 'KW' '1008';\n"); - grammarBuilder.append("KW1009 : 'KW' '1009';\n"); - grammarBuilder.append("KW1010 : 'KW' '1010';\n"); - grammarBuilder.append("KW1011 : 'KW' '1011';\n"); - grammarBuilder.append("KW1012 : 'KW' '1012';\n"); - grammarBuilder.append("KW1013 : 'KW' '1013';\n"); - grammarBuilder.append("KW1014 : 'KW' '1014';\n"); - grammarBuilder.append("KW1015 : 'KW' '1015';\n"); - grammarBuilder.append("KW1016 : 'KW' '1016';\n"); - grammarBuilder.append("KW1017 : 'KW' '1017';\n"); - grammarBuilder.append("KW1018 : 'KW' '1018';\n"); - grammarBuilder.append("KW1019 : 'KW' '1019';\n"); - grammarBuilder.append("KW1020 : 'KW' '1020';\n"); - grammarBuilder.append("KW1021 : 'KW' '1021';\n"); - grammarBuilder.append("KW1022 : 'KW' '1022';\n"); - grammarBuilder.append("KW1023 : 'KW' '1023';\n"); - grammarBuilder.append("KW1024 : 'KW' '1024';\n"); - grammarBuilder.append("KW1025 : 'KW' '1025';\n"); - grammarBuilder.append("KW1026 : 'KW' '1026';\n"); - grammarBuilder.append("KW1027 : 'KW' '1027';\n"); - grammarBuilder.append("KW1028 : 'KW' '1028';\n"); - grammarBuilder.append("KW1029 : 'KW' '1029';\n"); - grammarBuilder.append("KW1030 : 'KW' '1030';\n"); - grammarBuilder.append("KW1031 : 'KW' '1031';\n"); - grammarBuilder.append("KW1032 : 'KW' '1032';\n"); - grammarBuilder.append("KW1033 : 'KW' '1033';\n"); - grammarBuilder.append("KW1034 : 'KW' '1034';\n"); - grammarBuilder.append("KW1035 : 'KW' '1035';\n"); - grammarBuilder.append("KW1036 : 'KW' '1036';\n"); - grammarBuilder.append("KW1037 : 'KW' '1037';\n"); - grammarBuilder.append("KW1038 : 'KW' '1038';\n"); - grammarBuilder.append("KW1039 : 'KW' '1039';\n"); - grammarBuilder.append("KW1040 : 'KW' '1040';\n"); - grammarBuilder.append("KW1041 : 'KW' '1041';\n"); - grammarBuilder.append("KW1042 : 'KW' '1042';\n"); - grammarBuilder.append("KW1043 : 'KW' '1043';\n"); - grammarBuilder.append("KW1044 : 'KW' '1044';\n"); - grammarBuilder.append("KW1045 : 'KW' '1045';\n"); - grammarBuilder.append("KW1046 : 'KW' '1046';\n"); - grammarBuilder.append("KW1047 : 'KW' '1047';\n"); - grammarBuilder.append("KW1048 : 'KW' '1048';\n"); - grammarBuilder.append("KW1049 : 'KW' '1049';\n"); - grammarBuilder.append("KW1050 : 'KW' '1050';\n"); - grammarBuilder.append("KW1051 : 'KW' '1051';\n"); - grammarBuilder.append("KW1052 : 'KW' '1052';\n"); - grammarBuilder.append("KW1053 : 'KW' '1053';\n"); - grammarBuilder.append("KW1054 : 'KW' '1054';\n"); - grammarBuilder.append("KW1055 : 'KW' '1055';\n"); - grammarBuilder.append("KW1056 : 'KW' '1056';\n"); - grammarBuilder.append("KW1057 : 'KW' '1057';\n"); - grammarBuilder.append("KW1058 : 'KW' '1058';\n"); - grammarBuilder.append("KW1059 : 'KW' '1059';\n"); - grammarBuilder.append("KW1060 : 'KW' '1060';\n"); - grammarBuilder.append("KW1061 : 'KW' '1061';\n"); - grammarBuilder.append("KW1062 : 'KW' '1062';\n"); - grammarBuilder.append("KW1063 : 'KW' '1063';\n"); - grammarBuilder.append("KW1064 : 'KW' '1064';\n"); - grammarBuilder.append("KW1065 : 'KW' '1065';\n"); - grammarBuilder.append("KW1066 : 'KW' '1066';\n"); - grammarBuilder.append("KW1067 : 'KW' '1067';\n"); - grammarBuilder.append("KW1068 : 'KW' '1068';\n"); - grammarBuilder.append("KW1069 : 'KW' '1069';\n"); - grammarBuilder.append("KW1070 : 'KW' '1070';\n"); - grammarBuilder.append("KW1071 : 'KW' '1071';\n"); - grammarBuilder.append("KW1072 : 'KW' '1072';\n"); - grammarBuilder.append("KW1073 : 'KW' '1073';\n"); - grammarBuilder.append("KW1074 : 'KW' '1074';\n"); - grammarBuilder.append("KW1075 : 'KW' '1075';\n"); - grammarBuilder.append("KW1076 : 'KW' '1076';\n"); - grammarBuilder.append("KW1077 : 'KW' '1077';\n"); - grammarBuilder.append("KW1078 : 'KW' '1078';\n"); - grammarBuilder.append("KW1079 : 'KW' '1079';\n"); - grammarBuilder.append("KW1080 : 'KW' '1080';\n"); - grammarBuilder.append("KW1081 : 'KW' '1081';\n"); - grammarBuilder.append("KW1082 : 'KW' '1082';\n"); - grammarBuilder.append("KW1083 : 'KW' '1083';\n"); - grammarBuilder.append("KW1084 : 'KW' '1084';\n"); - grammarBuilder.append("KW1085 : 'KW' '1085';\n"); - grammarBuilder.append("KW1086 : 'KW' '1086';\n"); - grammarBuilder.append("KW1087 : 'KW' '1087';\n"); - grammarBuilder.append("KW1088 : 'KW' '1088';\n"); - grammarBuilder.append("KW1089 : 'KW' '1089';\n"); - grammarBuilder.append("KW1090 : 'KW' '1090';\n"); - grammarBuilder.append("KW1091 : 'KW' '1091';\n"); - grammarBuilder.append("KW1092 : 'KW' '1092';\n"); - grammarBuilder.append("KW1093 : 'KW' '1093';\n"); - grammarBuilder.append("KW1094 : 'KW' '1094';\n"); - grammarBuilder.append("KW1095 : 'KW' '1095';\n"); - grammarBuilder.append("KW1096 : 'KW' '1096';\n"); - grammarBuilder.append("KW1097 : 'KW' '1097';\n"); - grammarBuilder.append("KW1098 : 'KW' '1098';\n"); - grammarBuilder.append("KW1099 : 'KW' '1099';\n"); - grammarBuilder.append("KW1100 : 'KW' '1100';\n"); - grammarBuilder.append("KW1101 : 'KW' '1101';\n"); - grammarBuilder.append("KW1102 : 'KW' '1102';\n"); - grammarBuilder.append("KW1103 : 'KW' '1103';\n"); - grammarBuilder.append("KW1104 : 'KW' '1104';\n"); - grammarBuilder.append("KW1105 : 'KW' '1105';\n"); - grammarBuilder.append("KW1106 : 'KW' '1106';\n"); - grammarBuilder.append("KW1107 : 'KW' '1107';\n"); - grammarBuilder.append("KW1108 : 'KW' '1108';\n"); - grammarBuilder.append("KW1109 : 'KW' '1109';\n"); - grammarBuilder.append("KW1110 : 'KW' '1110';\n"); - grammarBuilder.append("KW1111 : 'KW' '1111';\n"); - grammarBuilder.append("KW1112 : 'KW' '1112';\n"); - grammarBuilder.append("KW1113 : 'KW' '1113';\n"); - grammarBuilder.append("KW1114 : 'KW' '1114';\n"); - grammarBuilder.append("KW1115 : 'KW' '1115';\n"); - grammarBuilder.append("KW1116 : 'KW' '1116';\n"); - grammarBuilder.append("KW1117 : 'KW' '1117';\n"); - grammarBuilder.append("KW1118 : 'KW' '1118';\n"); - grammarBuilder.append("KW1119 : 'KW' '1119';\n"); - grammarBuilder.append("KW1120 : 'KW' '1120';\n"); - grammarBuilder.append("KW1121 : 'KW' '1121';\n"); - grammarBuilder.append("KW1122 : 'KW' '1122';\n"); - grammarBuilder.append("KW1123 : 'KW' '1123';\n"); - grammarBuilder.append("KW1124 : 'KW' '1124';\n"); - grammarBuilder.append("KW1125 : 'KW' '1125';\n"); - grammarBuilder.append("KW1126 : 'KW' '1126';\n"); - grammarBuilder.append("KW1127 : 'KW' '1127';\n"); - grammarBuilder.append("KW1128 : 'KW' '1128';\n"); - grammarBuilder.append("KW1129 : 'KW' '1129';\n"); - grammarBuilder.append("KW1130 : 'KW' '1130';\n"); - grammarBuilder.append("KW1131 : 'KW' '1131';\n"); - grammarBuilder.append("KW1132 : 'KW' '1132';\n"); - grammarBuilder.append("KW1133 : 'KW' '1133';\n"); - grammarBuilder.append("KW1134 : 'KW' '1134';\n"); - grammarBuilder.append("KW1135 : 'KW' '1135';\n"); - grammarBuilder.append("KW1136 : 'KW' '1136';\n"); - grammarBuilder.append("KW1137 : 'KW' '1137';\n"); - grammarBuilder.append("KW1138 : 'KW' '1138';\n"); - grammarBuilder.append("KW1139 : 'KW' '1139';\n"); - grammarBuilder.append("KW1140 : 'KW' '1140';\n"); - grammarBuilder.append("KW1141 : 'KW' '1141';\n"); - grammarBuilder.append("KW1142 : 'KW' '1142';\n"); - grammarBuilder.append("KW1143 : 'KW' '1143';\n"); - grammarBuilder.append("KW1144 : 'KW' '1144';\n"); - grammarBuilder.append("KW1145 : 'KW' '1145';\n"); - grammarBuilder.append("KW1146 : 'KW' '1146';\n"); - grammarBuilder.append("KW1147 : 'KW' '1147';\n"); - grammarBuilder.append("KW1148 : 'KW' '1148';\n"); - grammarBuilder.append("KW1149 : 'KW' '1149';\n"); - grammarBuilder.append("KW1150 : 'KW' '1150';\n"); - grammarBuilder.append("KW1151 : 'KW' '1151';\n"); - grammarBuilder.append("KW1152 : 'KW' '1152';\n"); - grammarBuilder.append("KW1153 : 'KW' '1153';\n"); - grammarBuilder.append("KW1154 : 'KW' '1154';\n"); - grammarBuilder.append("KW1155 : 'KW' '1155';\n"); - grammarBuilder.append("KW1156 : 'KW' '1156';\n"); - grammarBuilder.append("KW1157 : 'KW' '1157';\n"); - grammarBuilder.append("KW1158 : 'KW' '1158';\n"); - grammarBuilder.append("KW1159 : 'KW' '1159';\n"); - grammarBuilder.append("KW1160 : 'KW' '1160';\n"); - grammarBuilder.append("KW1161 : 'KW' '1161';\n"); - grammarBuilder.append("KW1162 : 'KW' '1162';\n"); - grammarBuilder.append("KW1163 : 'KW' '1163';\n"); - grammarBuilder.append("KW1164 : 'KW' '1164';\n"); - grammarBuilder.append("KW1165 : 'KW' '1165';\n"); - grammarBuilder.append("KW1166 : 'KW' '1166';\n"); - grammarBuilder.append("KW1167 : 'KW' '1167';\n"); - grammarBuilder.append("KW1168 : 'KW' '1168';\n"); - grammarBuilder.append("KW1169 : 'KW' '1169';\n"); - grammarBuilder.append("KW1170 : 'KW' '1170';\n"); - grammarBuilder.append("KW1171 : 'KW' '1171';\n"); - grammarBuilder.append("KW1172 : 'KW' '1172';\n"); - grammarBuilder.append("KW1173 : 'KW' '1173';\n"); - grammarBuilder.append("KW1174 : 'KW' '1174';\n"); - grammarBuilder.append("KW1175 : 'KW' '1175';\n"); - grammarBuilder.append("KW1176 : 'KW' '1176';\n"); - grammarBuilder.append("KW1177 : 'KW' '1177';\n"); - grammarBuilder.append("KW1178 : 'KW' '1178';\n"); - grammarBuilder.append("KW1179 : 'KW' '1179';\n"); - grammarBuilder.append("KW1180 : 'KW' '1180';\n"); - grammarBuilder.append("KW1181 : 'KW' '1181';\n"); - grammarBuilder.append("KW1182 : 'KW' '1182';\n"); - grammarBuilder.append("KW1183 : 'KW' '1183';\n"); - grammarBuilder.append("KW1184 : 'KW' '1184';\n"); - grammarBuilder.append("KW1185 : 'KW' '1185';\n"); - grammarBuilder.append("KW1186 : 'KW' '1186';\n"); - grammarBuilder.append("KW1187 : 'KW' '1187';\n"); - grammarBuilder.append("KW1188 : 'KW' '1188';\n"); - grammarBuilder.append("KW1189 : 'KW' '1189';\n"); - grammarBuilder.append("KW1190 : 'KW' '1190';\n"); - grammarBuilder.append("KW1191 : 'KW' '1191';\n"); - grammarBuilder.append("KW1192 : 'KW' '1192';\n"); - grammarBuilder.append("KW1193 : 'KW' '1193';\n"); - grammarBuilder.append("KW1194 : 'KW' '1194';\n"); - grammarBuilder.append("KW1195 : 'KW' '1195';\n"); - grammarBuilder.append("KW1196 : 'KW' '1196';\n"); - grammarBuilder.append("KW1197 : 'KW' '1197';\n"); - grammarBuilder.append("KW1198 : 'KW' '1198';\n"); - grammarBuilder.append("KW1199 : 'KW' '1199';\n"); - grammarBuilder.append("KW1200 : 'KW' '1200';\n"); - grammarBuilder.append("KW1201 : 'KW' '1201';\n"); - grammarBuilder.append("KW1202 : 'KW' '1202';\n"); - grammarBuilder.append("KW1203 : 'KW' '1203';\n"); - grammarBuilder.append("KW1204 : 'KW' '1204';\n"); - grammarBuilder.append("KW1205 : 'KW' '1205';\n"); - grammarBuilder.append("KW1206 : 'KW' '1206';\n"); - grammarBuilder.append("KW1207 : 'KW' '1207';\n"); - grammarBuilder.append("KW1208 : 'KW' '1208';\n"); - grammarBuilder.append("KW1209 : 'KW' '1209';\n"); - grammarBuilder.append("KW1210 : 'KW' '1210';\n"); - grammarBuilder.append("KW1211 : 'KW' '1211';\n"); - grammarBuilder.append("KW1212 : 'KW' '1212';\n"); - grammarBuilder.append("KW1213 : 'KW' '1213';\n"); - grammarBuilder.append("KW1214 : 'KW' '1214';\n"); - grammarBuilder.append("KW1215 : 'KW' '1215';\n"); - grammarBuilder.append("KW1216 : 'KW' '1216';\n"); - grammarBuilder.append("KW1217 : 'KW' '1217';\n"); - grammarBuilder.append("KW1218 : 'KW' '1218';\n"); - grammarBuilder.append("KW1219 : 'KW' '1219';\n"); - grammarBuilder.append("KW1220 : 'KW' '1220';\n"); - grammarBuilder.append("KW1221 : 'KW' '1221';\n"); - grammarBuilder.append("KW1222 : 'KW' '1222';\n"); - grammarBuilder.append("KW1223 : 'KW' '1223';\n"); - grammarBuilder.append("KW1224 : 'KW' '1224';\n"); - grammarBuilder.append("KW1225 : 'KW' '1225';\n"); - grammarBuilder.append("KW1226 : 'KW' '1226';\n"); - grammarBuilder.append("KW1227 : 'KW' '1227';\n"); - grammarBuilder.append("KW1228 : 'KW' '1228';\n"); - grammarBuilder.append("KW1229 : 'KW' '1229';\n"); - grammarBuilder.append("KW1230 : 'KW' '1230';\n"); - grammarBuilder.append("KW1231 : 'KW' '1231';\n"); - grammarBuilder.append("KW1232 : 'KW' '1232';\n"); - grammarBuilder.append("KW1233 : 'KW' '1233';\n"); - grammarBuilder.append("KW1234 : 'KW' '1234';\n"); - grammarBuilder.append("KW1235 : 'KW' '1235';\n"); - grammarBuilder.append("KW1236 : 'KW' '1236';\n"); - grammarBuilder.append("KW1237 : 'KW' '1237';\n"); - grammarBuilder.append("KW1238 : 'KW' '1238';\n"); - grammarBuilder.append("KW1239 : 'KW' '1239';\n"); - grammarBuilder.append("KW1240 : 'KW' '1240';\n"); - grammarBuilder.append("KW1241 : 'KW' '1241';\n"); - grammarBuilder.append("KW1242 : 'KW' '1242';\n"); - grammarBuilder.append("KW1243 : 'KW' '1243';\n"); - grammarBuilder.append("KW1244 : 'KW' '1244';\n"); - grammarBuilder.append("KW1245 : 'KW' '1245';\n"); - grammarBuilder.append("KW1246 : 'KW' '1246';\n"); - grammarBuilder.append("KW1247 : 'KW' '1247';\n"); - grammarBuilder.append("KW1248 : 'KW' '1248';\n"); - grammarBuilder.append("KW1249 : 'KW' '1249';\n"); - grammarBuilder.append("KW1250 : 'KW' '1250';\n"); - grammarBuilder.append("KW1251 : 'KW' '1251';\n"); - grammarBuilder.append("KW1252 : 'KW' '1252';\n"); - grammarBuilder.append("KW1253 : 'KW' '1253';\n"); - grammarBuilder.append("KW1254 : 'KW' '1254';\n"); - grammarBuilder.append("KW1255 : 'KW' '1255';\n"); - grammarBuilder.append("KW1256 : 'KW' '1256';\n"); - grammarBuilder.append("KW1257 : 'KW' '1257';\n"); - grammarBuilder.append("KW1258 : 'KW' '1258';\n"); - grammarBuilder.append("KW1259 : 'KW' '1259';\n"); - grammarBuilder.append("KW1260 : 'KW' '1260';\n"); - grammarBuilder.append("KW1261 : 'KW' '1261';\n"); - grammarBuilder.append("KW1262 : 'KW' '1262';\n"); - grammarBuilder.append("KW1263 : 'KW' '1263';\n"); - grammarBuilder.append("KW1264 : 'KW' '1264';\n"); - grammarBuilder.append("KW1265 : 'KW' '1265';\n"); - grammarBuilder.append("KW1266 : 'KW' '1266';\n"); - grammarBuilder.append("KW1267 : 'KW' '1267';\n"); - grammarBuilder.append("KW1268 : 'KW' '1268';\n"); - grammarBuilder.append("KW1269 : 'KW' '1269';\n"); - grammarBuilder.append("KW1270 : 'KW' '1270';\n"); - grammarBuilder.append("KW1271 : 'KW' '1271';\n"); - grammarBuilder.append("KW1272 : 'KW' '1272';\n"); - grammarBuilder.append("KW1273 : 'KW' '1273';\n"); - grammarBuilder.append("KW1274 : 'KW' '1274';\n"); - grammarBuilder.append("KW1275 : 'KW' '1275';\n"); - grammarBuilder.append("KW1276 : 'KW' '1276';\n"); - grammarBuilder.append("KW1277 : 'KW' '1277';\n"); - grammarBuilder.append("KW1278 : 'KW' '1278';\n"); - grammarBuilder.append("KW1279 : 'KW' '1279';\n"); - grammarBuilder.append("KW1280 : 'KW' '1280';\n"); - grammarBuilder.append("KW1281 : 'KW' '1281';\n"); - grammarBuilder.append("KW1282 : 'KW' '1282';\n"); - grammarBuilder.append("KW1283 : 'KW' '1283';\n"); - grammarBuilder.append("KW1284 : 'KW' '1284';\n"); - grammarBuilder.append("KW1285 : 'KW' '1285';\n"); - grammarBuilder.append("KW1286 : 'KW' '1286';\n"); - grammarBuilder.append("KW1287 : 'KW' '1287';\n"); - grammarBuilder.append("KW1288 : 'KW' '1288';\n"); - grammarBuilder.append("KW1289 : 'KW' '1289';\n"); - grammarBuilder.append("KW1290 : 'KW' '1290';\n"); - grammarBuilder.append("KW1291 : 'KW' '1291';\n"); - grammarBuilder.append("KW1292 : 'KW' '1292';\n"); - grammarBuilder.append("KW1293 : 'KW' '1293';\n"); - grammarBuilder.append("KW1294 : 'KW' '1294';\n"); - grammarBuilder.append("KW1295 : 'KW' '1295';\n"); - grammarBuilder.append("KW1296 : 'KW' '1296';\n"); - grammarBuilder.append("KW1297 : 'KW' '1297';\n"); - grammarBuilder.append("KW1298 : 'KW' '1298';\n"); - grammarBuilder.append("KW1299 : 'KW' '1299';\n"); - grammarBuilder.append("KW1300 : 'KW' '1300';\n"); - grammarBuilder.append("KW1301 : 'KW' '1301';\n"); - grammarBuilder.append("KW1302 : 'KW' '1302';\n"); - grammarBuilder.append("KW1303 : 'KW' '1303';\n"); - grammarBuilder.append("KW1304 : 'KW' '1304';\n"); - grammarBuilder.append("KW1305 : 'KW' '1305';\n"); - grammarBuilder.append("KW1306 : 'KW' '1306';\n"); - grammarBuilder.append("KW1307 : 'KW' '1307';\n"); - grammarBuilder.append("KW1308 : 'KW' '1308';\n"); - grammarBuilder.append("KW1309 : 'KW' '1309';\n"); - grammarBuilder.append("KW1310 : 'KW' '1310';\n"); - grammarBuilder.append("KW1311 : 'KW' '1311';\n"); - grammarBuilder.append("KW1312 : 'KW' '1312';\n"); - grammarBuilder.append("KW1313 : 'KW' '1313';\n"); - grammarBuilder.append("KW1314 : 'KW' '1314';\n"); - grammarBuilder.append("KW1315 : 'KW' '1315';\n"); - grammarBuilder.append("KW1316 : 'KW' '1316';\n"); - grammarBuilder.append("KW1317 : 'KW' '1317';\n"); - grammarBuilder.append("KW1318 : 'KW' '1318';\n"); - grammarBuilder.append("KW1319 : 'KW' '1319';\n"); - grammarBuilder.append("KW1320 : 'KW' '1320';\n"); - grammarBuilder.append("KW1321 : 'KW' '1321';\n"); - grammarBuilder.append("KW1322 : 'KW' '1322';\n"); - grammarBuilder.append("KW1323 : 'KW' '1323';\n"); - grammarBuilder.append("KW1324 : 'KW' '1324';\n"); - grammarBuilder.append("KW1325 : 'KW' '1325';\n"); - grammarBuilder.append("KW1326 : 'KW' '1326';\n"); - grammarBuilder.append("KW1327 : 'KW' '1327';\n"); - grammarBuilder.append("KW1328 : 'KW' '1328';\n"); - grammarBuilder.append("KW1329 : 'KW' '1329';\n"); - grammarBuilder.append("KW1330 : 'KW' '1330';\n"); - grammarBuilder.append("KW1331 : 'KW' '1331';\n"); - grammarBuilder.append("KW1332 : 'KW' '1332';\n"); - grammarBuilder.append("KW1333 : 'KW' '1333';\n"); - grammarBuilder.append("KW1334 : 'KW' '1334';\n"); - grammarBuilder.append("KW1335 : 'KW' '1335';\n"); - grammarBuilder.append("KW1336 : 'KW' '1336';\n"); - grammarBuilder.append("KW1337 : 'KW' '1337';\n"); - grammarBuilder.append("KW1338 : 'KW' '1338';\n"); - grammarBuilder.append("KW1339 : 'KW' '1339';\n"); - grammarBuilder.append("KW1340 : 'KW' '1340';\n"); - grammarBuilder.append("KW1341 : 'KW' '1341';\n"); - grammarBuilder.append("KW1342 : 'KW' '1342';\n"); - grammarBuilder.append("KW1343 : 'KW' '1343';\n"); - grammarBuilder.append("KW1344 : 'KW' '1344';\n"); - grammarBuilder.append("KW1345 : 'KW' '1345';\n"); - grammarBuilder.append("KW1346 : 'KW' '1346';\n"); - grammarBuilder.append("KW1347 : 'KW' '1347';\n"); - grammarBuilder.append("KW1348 : 'KW' '1348';\n"); - grammarBuilder.append("KW1349 : 'KW' '1349';\n"); - grammarBuilder.append("KW1350 : 'KW' '1350';\n"); - grammarBuilder.append("KW1351 : 'KW' '1351';\n"); - grammarBuilder.append("KW1352 : 'KW' '1352';\n"); - grammarBuilder.append("KW1353 : 'KW' '1353';\n"); - grammarBuilder.append("KW1354 : 'KW' '1354';\n"); - grammarBuilder.append("KW1355 : 'KW' '1355';\n"); - grammarBuilder.append("KW1356 : 'KW' '1356';\n"); - grammarBuilder.append("KW1357 : 'KW' '1357';\n"); - grammarBuilder.append("KW1358 : 'KW' '1358';\n"); - grammarBuilder.append("KW1359 : 'KW' '1359';\n"); - grammarBuilder.append("KW1360 : 'KW' '1360';\n"); - grammarBuilder.append("KW1361 : 'KW' '1361';\n"); - grammarBuilder.append("KW1362 : 'KW' '1362';\n"); - grammarBuilder.append("KW1363 : 'KW' '1363';\n"); - grammarBuilder.append("KW1364 : 'KW' '1364';\n"); - grammarBuilder.append("KW1365 : 'KW' '1365';\n"); - grammarBuilder.append("KW1366 : 'KW' '1366';\n"); - grammarBuilder.append("KW1367 : 'KW' '1367';\n"); - grammarBuilder.append("KW1368 : 'KW' '1368';\n"); - grammarBuilder.append("KW1369 : 'KW' '1369';\n"); - grammarBuilder.append("KW1370 : 'KW' '1370';\n"); - grammarBuilder.append("KW1371 : 'KW' '1371';\n"); - grammarBuilder.append("KW1372 : 'KW' '1372';\n"); - grammarBuilder.append("KW1373 : 'KW' '1373';\n"); - grammarBuilder.append("KW1374 : 'KW' '1374';\n"); - grammarBuilder.append("KW1375 : 'KW' '1375';\n"); - grammarBuilder.append("KW1376 : 'KW' '1376';\n"); - grammarBuilder.append("KW1377 : 'KW' '1377';\n"); - grammarBuilder.append("KW1378 : 'KW' '1378';\n"); - grammarBuilder.append("KW1379 : 'KW' '1379';\n"); - grammarBuilder.append("KW1380 : 'KW' '1380';\n"); - grammarBuilder.append("KW1381 : 'KW' '1381';\n"); - grammarBuilder.append("KW1382 : 'KW' '1382';\n"); - grammarBuilder.append("KW1383 : 'KW' '1383';\n"); - grammarBuilder.append("KW1384 : 'KW' '1384';\n"); - grammarBuilder.append("KW1385 : 'KW' '1385';\n"); - grammarBuilder.append("KW1386 : 'KW' '1386';\n"); - grammarBuilder.append("KW1387 : 'KW' '1387';\n"); - grammarBuilder.append("KW1388 : 'KW' '1388';\n"); - grammarBuilder.append("KW1389 : 'KW' '1389';\n"); - grammarBuilder.append("KW1390 : 'KW' '1390';\n"); - grammarBuilder.append("KW1391 : 'KW' '1391';\n"); - grammarBuilder.append("KW1392 : 'KW' '1392';\n"); - grammarBuilder.append("KW1393 : 'KW' '1393';\n"); - grammarBuilder.append("KW1394 : 'KW' '1394';\n"); - grammarBuilder.append("KW1395 : 'KW' '1395';\n"); - grammarBuilder.append("KW1396 : 'KW' '1396';\n"); - grammarBuilder.append("KW1397 : 'KW' '1397';\n"); - grammarBuilder.append("KW1398 : 'KW' '1398';\n"); - grammarBuilder.append("KW1399 : 'KW' '1399';\n"); - grammarBuilder.append("KW1400 : 'KW' '1400';\n"); - grammarBuilder.append("KW1401 : 'KW' '1401';\n"); - grammarBuilder.append("KW1402 : 'KW' '1402';\n"); - grammarBuilder.append("KW1403 : 'KW' '1403';\n"); - grammarBuilder.append("KW1404 : 'KW' '1404';\n"); - grammarBuilder.append("KW1405 : 'KW' '1405';\n"); - grammarBuilder.append("KW1406 : 'KW' '1406';\n"); - grammarBuilder.append("KW1407 : 'KW' '1407';\n"); - grammarBuilder.append("KW1408 : 'KW' '1408';\n"); - grammarBuilder.append("KW1409 : 'KW' '1409';\n"); - grammarBuilder.append("KW1410 : 'KW' '1410';\n"); - grammarBuilder.append("KW1411 : 'KW' '1411';\n"); - grammarBuilder.append("KW1412 : 'KW' '1412';\n"); - grammarBuilder.append("KW1413 : 'KW' '1413';\n"); - grammarBuilder.append("KW1414 : 'KW' '1414';\n"); - grammarBuilder.append("KW1415 : 'KW' '1415';\n"); - grammarBuilder.append("KW1416 : 'KW' '1416';\n"); - grammarBuilder.append("KW1417 : 'KW' '1417';\n"); - grammarBuilder.append("KW1418 : 'KW' '1418';\n"); - grammarBuilder.append("KW1419 : 'KW' '1419';\n"); - grammarBuilder.append("KW1420 : 'KW' '1420';\n"); - grammarBuilder.append("KW1421 : 'KW' '1421';\n"); - grammarBuilder.append("KW1422 : 'KW' '1422';\n"); - grammarBuilder.append("KW1423 : 'KW' '1423';\n"); - grammarBuilder.append("KW1424 : 'KW' '1424';\n"); - grammarBuilder.append("KW1425 : 'KW' '1425';\n"); - grammarBuilder.append("KW1426 : 'KW' '1426';\n"); - grammarBuilder.append("KW1427 : 'KW' '1427';\n"); - grammarBuilder.append("KW1428 : 'KW' '1428';\n"); - grammarBuilder.append("KW1429 : 'KW' '1429';\n"); - grammarBuilder.append("KW1430 : 'KW' '1430';\n"); - grammarBuilder.append("KW1431 : 'KW' '1431';\n"); - grammarBuilder.append("KW1432 : 'KW' '1432';\n"); - grammarBuilder.append("KW1433 : 'KW' '1433';\n"); - grammarBuilder.append("KW1434 : 'KW' '1434';\n"); - grammarBuilder.append("KW1435 : 'KW' '1435';\n"); - grammarBuilder.append("KW1436 : 'KW' '1436';\n"); - grammarBuilder.append("KW1437 : 'KW' '1437';\n"); - grammarBuilder.append("KW1438 : 'KW' '1438';\n"); - grammarBuilder.append("KW1439 : 'KW' '1439';\n"); - grammarBuilder.append("KW1440 : 'KW' '1440';\n"); - grammarBuilder.append("KW1441 : 'KW' '1441';\n"); - grammarBuilder.append("KW1442 : 'KW' '1442';\n"); - grammarBuilder.append("KW1443 : 'KW' '1443';\n"); - grammarBuilder.append("KW1444 : 'KW' '1444';\n"); - grammarBuilder.append("KW1445 : 'KW' '1445';\n"); - grammarBuilder.append("KW1446 : 'KW' '1446';\n"); - grammarBuilder.append("KW1447 : 'KW' '1447';\n"); - grammarBuilder.append("KW1448 : 'KW' '1448';\n"); - grammarBuilder.append("KW1449 : 'KW' '1449';\n"); - grammarBuilder.append("KW1450 : 'KW' '1450';\n"); - grammarBuilder.append("KW1451 : 'KW' '1451';\n"); - grammarBuilder.append("KW1452 : 'KW' '1452';\n"); - grammarBuilder.append("KW1453 : 'KW' '1453';\n"); - grammarBuilder.append("KW1454 : 'KW' '1454';\n"); - grammarBuilder.append("KW1455 : 'KW' '1455';\n"); - grammarBuilder.append("KW1456 : 'KW' '1456';\n"); - grammarBuilder.append("KW1457 : 'KW' '1457';\n"); - grammarBuilder.append("KW1458 : 'KW' '1458';\n"); - grammarBuilder.append("KW1459 : 'KW' '1459';\n"); - grammarBuilder.append("KW1460 : 'KW' '1460';\n"); - grammarBuilder.append("KW1461 : 'KW' '1461';\n"); - grammarBuilder.append("KW1462 : 'KW' '1462';\n"); - grammarBuilder.append("KW1463 : 'KW' '1463';\n"); - grammarBuilder.append("KW1464 : 'KW' '1464';\n"); - grammarBuilder.append("KW1465 : 'KW' '1465';\n"); - grammarBuilder.append("KW1466 : 'KW' '1466';\n"); - grammarBuilder.append("KW1467 : 'KW' '1467';\n"); - grammarBuilder.append("KW1468 : 'KW' '1468';\n"); - grammarBuilder.append("KW1469 : 'KW' '1469';\n"); - grammarBuilder.append("KW1470 : 'KW' '1470';\n"); - grammarBuilder.append("KW1471 : 'KW' '1471';\n"); - grammarBuilder.append("KW1472 : 'KW' '1472';\n"); - grammarBuilder.append("KW1473 : 'KW' '1473';\n"); - grammarBuilder.append("KW1474 : 'KW' '1474';\n"); - grammarBuilder.append("KW1475 : 'KW' '1475';\n"); - grammarBuilder.append("KW1476 : 'KW' '1476';\n"); - grammarBuilder.append("KW1477 : 'KW' '1477';\n"); - grammarBuilder.append("KW1478 : 'KW' '1478';\n"); - grammarBuilder.append("KW1479 : 'KW' '1479';\n"); - grammarBuilder.append("KW1480 : 'KW' '1480';\n"); - grammarBuilder.append("KW1481 : 'KW' '1481';\n"); - grammarBuilder.append("KW1482 : 'KW' '1482';\n"); - grammarBuilder.append("KW1483 : 'KW' '1483';\n"); - grammarBuilder.append("KW1484 : 'KW' '1484';\n"); - grammarBuilder.append("KW1485 : 'KW' '1485';\n"); - grammarBuilder.append("KW1486 : 'KW' '1486';\n"); - grammarBuilder.append("KW1487 : 'KW' '1487';\n"); - grammarBuilder.append("KW1488 : 'KW' '1488';\n"); - grammarBuilder.append("KW1489 : 'KW' '1489';\n"); - grammarBuilder.append("KW1490 : 'KW' '1490';\n"); - grammarBuilder.append("KW1491 : 'KW' '1491';\n"); - grammarBuilder.append("KW1492 : 'KW' '1492';\n"); - grammarBuilder.append("KW1493 : 'KW' '1493';\n"); - grammarBuilder.append("KW1494 : 'KW' '1494';\n"); - grammarBuilder.append("KW1495 : 'KW' '1495';\n"); - grammarBuilder.append("KW1496 : 'KW' '1496';\n"); - grammarBuilder.append("KW1497 : 'KW' '1497';\n"); - grammarBuilder.append("KW1498 : 'KW' '1498';\n"); - grammarBuilder.append("KW1499 : 'KW' '1499';\n"); - grammarBuilder.append("KW1500 : 'KW' '1500';\n"); - grammarBuilder.append("KW1501 : 'KW' '1501';\n"); - grammarBuilder.append("KW1502 : 'KW' '1502';\n"); - grammarBuilder.append("KW1503 : 'KW' '1503';\n"); - grammarBuilder.append("KW1504 : 'KW' '1504';\n"); - grammarBuilder.append("KW1505 : 'KW' '1505';\n"); - grammarBuilder.append("KW1506 : 'KW' '1506';\n"); - grammarBuilder.append("KW1507 : 'KW' '1507';\n"); - grammarBuilder.append("KW1508 : 'KW' '1508';\n"); - grammarBuilder.append("KW1509 : 'KW' '1509';\n"); - grammarBuilder.append("KW1510 : 'KW' '1510';\n"); - grammarBuilder.append("KW1511 : 'KW' '1511';\n"); - grammarBuilder.append("KW1512 : 'KW' '1512';\n"); - grammarBuilder.append("KW1513 : 'KW' '1513';\n"); - grammarBuilder.append("KW1514 : 'KW' '1514';\n"); - grammarBuilder.append("KW1515 : 'KW' '1515';\n"); - grammarBuilder.append("KW1516 : 'KW' '1516';\n"); - grammarBuilder.append("KW1517 : 'KW' '1517';\n"); - grammarBuilder.append("KW1518 : 'KW' '1518';\n"); - grammarBuilder.append("KW1519 : 'KW' '1519';\n"); - grammarBuilder.append("KW1520 : 'KW' '1520';\n"); - grammarBuilder.append("KW1521 : 'KW' '1521';\n"); - grammarBuilder.append("KW1522 : 'KW' '1522';\n"); - grammarBuilder.append("KW1523 : 'KW' '1523';\n"); - grammarBuilder.append("KW1524 : 'KW' '1524';\n"); - grammarBuilder.append("KW1525 : 'KW' '1525';\n"); - grammarBuilder.append("KW1526 : 'KW' '1526';\n"); - grammarBuilder.append("KW1527 : 'KW' '1527';\n"); - grammarBuilder.append("KW1528 : 'KW' '1528';\n"); - grammarBuilder.append("KW1529 : 'KW' '1529';\n"); - grammarBuilder.append("KW1530 : 'KW' '1530';\n"); - grammarBuilder.append("KW1531 : 'KW' '1531';\n"); - grammarBuilder.append("KW1532 : 'KW' '1532';\n"); - grammarBuilder.append("KW1533 : 'KW' '1533';\n"); - grammarBuilder.append("KW1534 : 'KW' '1534';\n"); - grammarBuilder.append("KW1535 : 'KW' '1535';\n"); - grammarBuilder.append("KW1536 : 'KW' '1536';\n"); - grammarBuilder.append("KW1537 : 'KW' '1537';\n"); - grammarBuilder.append("KW1538 : 'KW' '1538';\n"); - grammarBuilder.append("KW1539 : 'KW' '1539';\n"); - grammarBuilder.append("KW1540 : 'KW' '1540';\n"); - grammarBuilder.append("KW1541 : 'KW' '1541';\n"); - grammarBuilder.append("KW1542 : 'KW' '1542';\n"); - grammarBuilder.append("KW1543 : 'KW' '1543';\n"); - grammarBuilder.append("KW1544 : 'KW' '1544';\n"); - grammarBuilder.append("KW1545 : 'KW' '1545';\n"); - grammarBuilder.append("KW1546 : 'KW' '1546';\n"); - grammarBuilder.append("KW1547 : 'KW' '1547';\n"); - grammarBuilder.append("KW1548 : 'KW' '1548';\n"); - grammarBuilder.append("KW1549 : 'KW' '1549';\n"); - grammarBuilder.append("KW1550 : 'KW' '1550';\n"); - grammarBuilder.append("KW1551 : 'KW' '1551';\n"); - grammarBuilder.append("KW1552 : 'KW' '1552';\n"); - grammarBuilder.append("KW1553 : 'KW' '1553';\n"); - grammarBuilder.append("KW1554 : 'KW' '1554';\n"); - grammarBuilder.append("KW1555 : 'KW' '1555';\n"); - grammarBuilder.append("KW1556 : 'KW' '1556';\n"); - grammarBuilder.append("KW1557 : 'KW' '1557';\n"); - grammarBuilder.append("KW1558 : 'KW' '1558';\n"); - grammarBuilder.append("KW1559 : 'KW' '1559';\n"); - grammarBuilder.append("KW1560 : 'KW' '1560';\n"); - grammarBuilder.append("KW1561 : 'KW' '1561';\n"); - grammarBuilder.append("KW1562 : 'KW' '1562';\n"); - grammarBuilder.append("KW1563 : 'KW' '1563';\n"); - grammarBuilder.append("KW1564 : 'KW' '1564';\n"); - grammarBuilder.append("KW1565 : 'KW' '1565';\n"); - grammarBuilder.append("KW1566 : 'KW' '1566';\n"); - grammarBuilder.append("KW1567 : 'KW' '1567';\n"); - grammarBuilder.append("KW1568 : 'KW' '1568';\n"); - grammarBuilder.append("KW1569 : 'KW' '1569';\n"); - grammarBuilder.append("KW1570 : 'KW' '1570';\n"); - grammarBuilder.append("KW1571 : 'KW' '1571';\n"); - grammarBuilder.append("KW1572 : 'KW' '1572';\n"); - grammarBuilder.append("KW1573 : 'KW' '1573';\n"); - grammarBuilder.append("KW1574 : 'KW' '1574';\n"); - grammarBuilder.append("KW1575 : 'KW' '1575';\n"); - grammarBuilder.append("KW1576 : 'KW' '1576';\n"); - grammarBuilder.append("KW1577 : 'KW' '1577';\n"); - grammarBuilder.append("KW1578 : 'KW' '1578';\n"); - grammarBuilder.append("KW1579 : 'KW' '1579';\n"); - grammarBuilder.append("KW1580 : 'KW' '1580';\n"); - grammarBuilder.append("KW1581 : 'KW' '1581';\n"); - grammarBuilder.append("KW1582 : 'KW' '1582';\n"); - grammarBuilder.append("KW1583 : 'KW' '1583';\n"); - grammarBuilder.append("KW1584 : 'KW' '1584';\n"); - grammarBuilder.append("KW1585 : 'KW' '1585';\n"); - grammarBuilder.append("KW1586 : 'KW' '1586';\n"); - grammarBuilder.append("KW1587 : 'KW' '1587';\n"); - grammarBuilder.append("KW1588 : 'KW' '1588';\n"); - grammarBuilder.append("KW1589 : 'KW' '1589';\n"); - grammarBuilder.append("KW1590 : 'KW' '1590';\n"); - grammarBuilder.append("KW1591 : 'KW' '1591';\n"); - grammarBuilder.append("KW1592 : 'KW' '1592';\n"); - grammarBuilder.append("KW1593 : 'KW' '1593';\n"); - grammarBuilder.append("KW1594 : 'KW' '1594';\n"); - grammarBuilder.append("KW1595 : 'KW' '1595';\n"); - grammarBuilder.append("KW1596 : 'KW' '1596';\n"); - grammarBuilder.append("KW1597 : 'KW' '1597';\n"); - grammarBuilder.append("KW1598 : 'KW' '1598';\n"); - grammarBuilder.append("KW1599 : 'KW' '1599';\n"); - grammarBuilder.append("KW1600 : 'KW' '1600';\n"); - grammarBuilder.append("KW1601 : 'KW' '1601';\n"); - grammarBuilder.append("KW1602 : 'KW' '1602';\n"); - grammarBuilder.append("KW1603 : 'KW' '1603';\n"); - grammarBuilder.append("KW1604 : 'KW' '1604';\n"); - grammarBuilder.append("KW1605 : 'KW' '1605';\n"); - grammarBuilder.append("KW1606 : 'KW' '1606';\n"); - grammarBuilder.append("KW1607 : 'KW' '1607';\n"); - grammarBuilder.append("KW1608 : 'KW' '1608';\n"); - grammarBuilder.append("KW1609 : 'KW' '1609';\n"); - grammarBuilder.append("KW1610 : 'KW' '1610';\n"); - grammarBuilder.append("KW1611 : 'KW' '1611';\n"); - grammarBuilder.append("KW1612 : 'KW' '1612';\n"); - grammarBuilder.append("KW1613 : 'KW' '1613';\n"); - grammarBuilder.append("KW1614 : 'KW' '1614';\n"); - grammarBuilder.append("KW1615 : 'KW' '1615';\n"); - grammarBuilder.append("KW1616 : 'KW' '1616';\n"); - grammarBuilder.append("KW1617 : 'KW' '1617';\n"); - grammarBuilder.append("KW1618 : 'KW' '1618';\n"); - grammarBuilder.append("KW1619 : 'KW' '1619';\n"); - grammarBuilder.append("KW1620 : 'KW' '1620';\n"); - grammarBuilder.append("KW1621 : 'KW' '1621';\n"); - grammarBuilder.append("KW1622 : 'KW' '1622';\n"); - grammarBuilder.append("KW1623 : 'KW' '1623';\n"); - grammarBuilder.append("KW1624 : 'KW' '1624';\n"); - grammarBuilder.append("KW1625 : 'KW' '1625';\n"); - grammarBuilder.append("KW1626 : 'KW' '1626';\n"); - grammarBuilder.append("KW1627 : 'KW' '1627';\n"); - grammarBuilder.append("KW1628 : 'KW' '1628';\n"); - grammarBuilder.append("KW1629 : 'KW' '1629';\n"); - grammarBuilder.append("KW1630 : 'KW' '1630';\n"); - grammarBuilder.append("KW1631 : 'KW' '1631';\n"); - grammarBuilder.append("KW1632 : 'KW' '1632';\n"); - grammarBuilder.append("KW1633 : 'KW' '1633';\n"); - grammarBuilder.append("KW1634 : 'KW' '1634';\n"); - grammarBuilder.append("KW1635 : 'KW' '1635';\n"); - grammarBuilder.append("KW1636 : 'KW' '1636';\n"); - grammarBuilder.append("KW1637 : 'KW' '1637';\n"); - grammarBuilder.append("KW1638 : 'KW' '1638';\n"); - grammarBuilder.append("KW1639 : 'KW' '1639';\n"); - grammarBuilder.append("KW1640 : 'KW' '1640';\n"); - grammarBuilder.append("KW1641 : 'KW' '1641';\n"); - grammarBuilder.append("KW1642 : 'KW' '1642';\n"); - grammarBuilder.append("KW1643 : 'KW' '1643';\n"); - grammarBuilder.append("KW1644 : 'KW' '1644';\n"); - grammarBuilder.append("KW1645 : 'KW' '1645';\n"); - grammarBuilder.append("KW1646 : 'KW' '1646';\n"); - grammarBuilder.append("KW1647 : 'KW' '1647';\n"); - grammarBuilder.append("KW1648 : 'KW' '1648';\n"); - grammarBuilder.append("KW1649 : 'KW' '1649';\n"); - grammarBuilder.append("KW1650 : 'KW' '1650';\n"); - grammarBuilder.append("KW1651 : 'KW' '1651';\n"); - grammarBuilder.append("KW1652 : 'KW' '1652';\n"); - grammarBuilder.append("KW1653 : 'KW' '1653';\n"); - grammarBuilder.append("KW1654 : 'KW' '1654';\n"); - grammarBuilder.append("KW1655 : 'KW' '1655';\n"); - grammarBuilder.append("KW1656 : 'KW' '1656';\n"); - grammarBuilder.append("KW1657 : 'KW' '1657';\n"); - grammarBuilder.append("KW1658 : 'KW' '1658';\n"); - grammarBuilder.append("KW1659 : 'KW' '1659';\n"); - grammarBuilder.append("KW1660 : 'KW' '1660';\n"); - grammarBuilder.append("KW1661 : 'KW' '1661';\n"); - grammarBuilder.append("KW1662 : 'KW' '1662';\n"); - grammarBuilder.append("KW1663 : 'KW' '1663';\n"); - grammarBuilder.append("KW1664 : 'KW' '1664';\n"); - grammarBuilder.append("KW1665 : 'KW' '1665';\n"); - grammarBuilder.append("KW1666 : 'KW' '1666';\n"); - grammarBuilder.append("KW1667 : 'KW' '1667';\n"); - grammarBuilder.append("KW1668 : 'KW' '1668';\n"); - grammarBuilder.append("KW1669 : 'KW' '1669';\n"); - grammarBuilder.append("KW1670 : 'KW' '1670';\n"); - grammarBuilder.append("KW1671 : 'KW' '1671';\n"); - grammarBuilder.append("KW1672 : 'KW' '1672';\n"); - grammarBuilder.append("KW1673 : 'KW' '1673';\n"); - grammarBuilder.append("KW1674 : 'KW' '1674';\n"); - grammarBuilder.append("KW1675 : 'KW' '1675';\n"); - grammarBuilder.append("KW1676 : 'KW' '1676';\n"); - grammarBuilder.append("KW1677 : 'KW' '1677';\n"); - grammarBuilder.append("KW1678 : 'KW' '1678';\n"); - grammarBuilder.append("KW1679 : 'KW' '1679';\n"); - grammarBuilder.append("KW1680 : 'KW' '1680';\n"); - grammarBuilder.append("KW1681 : 'KW' '1681';\n"); - grammarBuilder.append("KW1682 : 'KW' '1682';\n"); - grammarBuilder.append("KW1683 : 'KW' '1683';\n"); - grammarBuilder.append("KW1684 : 'KW' '1684';\n"); - grammarBuilder.append("KW1685 : 'KW' '1685';\n"); - grammarBuilder.append("KW1686 : 'KW' '1686';\n"); - grammarBuilder.append("KW1687 : 'KW' '1687';\n"); - grammarBuilder.append("KW1688 : 'KW' '1688';\n"); - grammarBuilder.append("KW1689 : 'KW' '1689';\n"); - grammarBuilder.append("KW1690 : 'KW' '1690';\n"); - grammarBuilder.append("KW1691 : 'KW' '1691';\n"); - grammarBuilder.append("KW1692 : 'KW' '1692';\n"); - grammarBuilder.append("KW1693 : 'KW' '1693';\n"); - grammarBuilder.append("KW1694 : 'KW' '1694';\n"); - grammarBuilder.append("KW1695 : 'KW' '1695';\n"); - grammarBuilder.append("KW1696 : 'KW' '1696';\n"); - grammarBuilder.append("KW1697 : 'KW' '1697';\n"); - grammarBuilder.append("KW1698 : 'KW' '1698';\n"); - grammarBuilder.append("KW1699 : 'KW' '1699';\n"); - grammarBuilder.append("KW1700 : 'KW' '1700';\n"); - grammarBuilder.append("KW1701 : 'KW' '1701';\n"); - grammarBuilder.append("KW1702 : 'KW' '1702';\n"); - grammarBuilder.append("KW1703 : 'KW' '1703';\n"); - grammarBuilder.append("KW1704 : 'KW' '1704';\n"); - grammarBuilder.append("KW1705 : 'KW' '1705';\n"); - grammarBuilder.append("KW1706 : 'KW' '1706';\n"); - grammarBuilder.append("KW1707 : 'KW' '1707';\n"); - grammarBuilder.append("KW1708 : 'KW' '1708';\n"); - grammarBuilder.append("KW1709 : 'KW' '1709';\n"); - grammarBuilder.append("KW1710 : 'KW' '1710';\n"); - grammarBuilder.append("KW1711 : 'KW' '1711';\n"); - grammarBuilder.append("KW1712 : 'KW' '1712';\n"); - grammarBuilder.append("KW1713 : 'KW' '1713';\n"); - grammarBuilder.append("KW1714 : 'KW' '1714';\n"); - grammarBuilder.append("KW1715 : 'KW' '1715';\n"); - grammarBuilder.append("KW1716 : 'KW' '1716';\n"); - grammarBuilder.append("KW1717 : 'KW' '1717';\n"); - grammarBuilder.append("KW1718 : 'KW' '1718';\n"); - grammarBuilder.append("KW1719 : 'KW' '1719';\n"); - grammarBuilder.append("KW1720 : 'KW' '1720';\n"); - grammarBuilder.append("KW1721 : 'KW' '1721';\n"); - grammarBuilder.append("KW1722 : 'KW' '1722';\n"); - grammarBuilder.append("KW1723 : 'KW' '1723';\n"); - grammarBuilder.append("KW1724 : 'KW' '1724';\n"); - grammarBuilder.append("KW1725 : 'KW' '1725';\n"); - grammarBuilder.append("KW1726 : 'KW' '1726';\n"); - grammarBuilder.append("KW1727 : 'KW' '1727';\n"); - grammarBuilder.append("KW1728 : 'KW' '1728';\n"); - grammarBuilder.append("KW1729 : 'KW' '1729';\n"); - grammarBuilder.append("KW1730 : 'KW' '1730';\n"); - grammarBuilder.append("KW1731 : 'KW' '1731';\n"); - grammarBuilder.append("KW1732 : 'KW' '1732';\n"); - grammarBuilder.append("KW1733 : 'KW' '1733';\n"); - grammarBuilder.append("KW1734 : 'KW' '1734';\n"); - grammarBuilder.append("KW1735 : 'KW' '1735';\n"); - grammarBuilder.append("KW1736 : 'KW' '1736';\n"); - grammarBuilder.append("KW1737 : 'KW' '1737';\n"); - grammarBuilder.append("KW1738 : 'KW' '1738';\n"); - grammarBuilder.append("KW1739 : 'KW' '1739';\n"); - grammarBuilder.append("KW1740 : 'KW' '1740';\n"); - grammarBuilder.append("KW1741 : 'KW' '1741';\n"); - grammarBuilder.append("KW1742 : 'KW' '1742';\n"); - grammarBuilder.append("KW1743 : 'KW' '1743';\n"); - grammarBuilder.append("KW1744 : 'KW' '1744';\n"); - grammarBuilder.append("KW1745 : 'KW' '1745';\n"); - grammarBuilder.append("KW1746 : 'KW' '1746';\n"); - grammarBuilder.append("KW1747 : 'KW' '1747';\n"); - grammarBuilder.append("KW1748 : 'KW' '1748';\n"); - grammarBuilder.append("KW1749 : 'KW' '1749';\n"); - grammarBuilder.append("KW1750 : 'KW' '1750';\n"); - grammarBuilder.append("KW1751 : 'KW' '1751';\n"); - grammarBuilder.append("KW1752 : 'KW' '1752';\n"); - grammarBuilder.append("KW1753 : 'KW' '1753';\n"); - grammarBuilder.append("KW1754 : 'KW' '1754';\n"); - grammarBuilder.append("KW1755 : 'KW' '1755';\n"); - grammarBuilder.append("KW1756 : 'KW' '1756';\n"); - grammarBuilder.append("KW1757 : 'KW' '1757';\n"); - grammarBuilder.append("KW1758 : 'KW' '1758';\n"); - grammarBuilder.append("KW1759 : 'KW' '1759';\n"); - grammarBuilder.append("KW1760 : 'KW' '1760';\n"); - grammarBuilder.append("KW1761 : 'KW' '1761';\n"); - grammarBuilder.append("KW1762 : 'KW' '1762';\n"); - grammarBuilder.append("KW1763 : 'KW' '1763';\n"); - grammarBuilder.append("KW1764 : 'KW' '1764';\n"); - grammarBuilder.append("KW1765 : 'KW' '1765';\n"); - grammarBuilder.append("KW1766 : 'KW' '1766';\n"); - grammarBuilder.append("KW1767 : 'KW' '1767';\n"); - grammarBuilder.append("KW1768 : 'KW' '1768';\n"); - grammarBuilder.append("KW1769 : 'KW' '1769';\n"); - grammarBuilder.append("KW1770 : 'KW' '1770';\n"); - grammarBuilder.append("KW1771 : 'KW' '1771';\n"); - grammarBuilder.append("KW1772 : 'KW' '1772';\n"); - grammarBuilder.append("KW1773 : 'KW' '1773';\n"); - grammarBuilder.append("KW1774 : 'KW' '1774';\n"); - grammarBuilder.append("KW1775 : 'KW' '1775';\n"); - grammarBuilder.append("KW1776 : 'KW' '1776';\n"); - grammarBuilder.append("KW1777 : 'KW' '1777';\n"); - grammarBuilder.append("KW1778 : 'KW' '1778';\n"); - grammarBuilder.append("KW1779 : 'KW' '1779';\n"); - grammarBuilder.append("KW1780 : 'KW' '1780';\n"); - grammarBuilder.append("KW1781 : 'KW' '1781';\n"); - grammarBuilder.append("KW1782 : 'KW' '1782';\n"); - grammarBuilder.append("KW1783 : 'KW' '1783';\n"); - grammarBuilder.append("KW1784 : 'KW' '1784';\n"); - grammarBuilder.append("KW1785 : 'KW' '1785';\n"); - grammarBuilder.append("KW1786 : 'KW' '1786';\n"); - grammarBuilder.append("KW1787 : 'KW' '1787';\n"); - grammarBuilder.append("KW1788 : 'KW' '1788';\n"); - grammarBuilder.append("KW1789 : 'KW' '1789';\n"); - grammarBuilder.append("KW1790 : 'KW' '1790';\n"); - grammarBuilder.append("KW1791 : 'KW' '1791';\n"); - grammarBuilder.append("KW1792 : 'KW' '1792';\n"); - grammarBuilder.append("KW1793 : 'KW' '1793';\n"); - grammarBuilder.append("KW1794 : 'KW' '1794';\n"); - grammarBuilder.append("KW1795 : 'KW' '1795';\n"); - grammarBuilder.append("KW1796 : 'KW' '1796';\n"); - grammarBuilder.append("KW1797 : 'KW' '1797';\n"); - grammarBuilder.append("KW1798 : 'KW' '1798';\n"); - grammarBuilder.append("KW1799 : 'KW' '1799';\n"); - grammarBuilder.append("KW1800 : 'KW' '1800';\n"); - grammarBuilder.append("KW1801 : 'KW' '1801';\n"); - grammarBuilder.append("KW1802 : 'KW' '1802';\n"); - grammarBuilder.append("KW1803 : 'KW' '1803';\n"); - grammarBuilder.append("KW1804 : 'KW' '1804';\n"); - grammarBuilder.append("KW1805 : 'KW' '1805';\n"); - grammarBuilder.append("KW1806 : 'KW' '1806';\n"); - grammarBuilder.append("KW1807 : 'KW' '1807';\n"); - grammarBuilder.append("KW1808 : 'KW' '1808';\n"); - grammarBuilder.append("KW1809 : 'KW' '1809';\n"); - grammarBuilder.append("KW1810 : 'KW' '1810';\n"); - grammarBuilder.append("KW1811 : 'KW' '1811';\n"); - grammarBuilder.append("KW1812 : 'KW' '1812';\n"); - grammarBuilder.append("KW1813 : 'KW' '1813';\n"); - grammarBuilder.append("KW1814 : 'KW' '1814';\n"); - grammarBuilder.append("KW1815 : 'KW' '1815';\n"); - grammarBuilder.append("KW1816 : 'KW' '1816';\n"); - grammarBuilder.append("KW1817 : 'KW' '1817';\n"); - grammarBuilder.append("KW1818 : 'KW' '1818';\n"); - grammarBuilder.append("KW1819 : 'KW' '1819';\n"); - grammarBuilder.append("KW1820 : 'KW' '1820';\n"); - grammarBuilder.append("KW1821 : 'KW' '1821';\n"); - grammarBuilder.append("KW1822 : 'KW' '1822';\n"); - grammarBuilder.append("KW1823 : 'KW' '1823';\n"); - grammarBuilder.append("KW1824 : 'KW' '1824';\n"); - grammarBuilder.append("KW1825 : 'KW' '1825';\n"); - grammarBuilder.append("KW1826 : 'KW' '1826';\n"); - grammarBuilder.append("KW1827 : 'KW' '1827';\n"); - grammarBuilder.append("KW1828 : 'KW' '1828';\n"); - grammarBuilder.append("KW1829 : 'KW' '1829';\n"); - grammarBuilder.append("KW1830 : 'KW' '1830';\n"); - grammarBuilder.append("KW1831 : 'KW' '1831';\n"); - grammarBuilder.append("KW1832 : 'KW' '1832';\n"); - grammarBuilder.append("KW1833 : 'KW' '1833';\n"); - grammarBuilder.append("KW1834 : 'KW' '1834';\n"); - grammarBuilder.append("KW1835 : 'KW' '1835';\n"); - grammarBuilder.append("KW1836 : 'KW' '1836';\n"); - grammarBuilder.append("KW1837 : 'KW' '1837';\n"); - grammarBuilder.append("KW1838 : 'KW' '1838';\n"); - grammarBuilder.append("KW1839 : 'KW' '1839';\n"); - grammarBuilder.append("KW1840 : 'KW' '1840';\n"); - grammarBuilder.append("KW1841 : 'KW' '1841';\n"); - grammarBuilder.append("KW1842 : 'KW' '1842';\n"); - grammarBuilder.append("KW1843 : 'KW' '1843';\n"); - grammarBuilder.append("KW1844 : 'KW' '1844';\n"); - grammarBuilder.append("KW1845 : 'KW' '1845';\n"); - grammarBuilder.append("KW1846 : 'KW' '1846';\n"); - grammarBuilder.append("KW1847 : 'KW' '1847';\n"); - grammarBuilder.append("KW1848 : 'KW' '1848';\n"); - grammarBuilder.append("KW1849 : 'KW' '1849';\n"); - grammarBuilder.append("KW1850 : 'KW' '1850';\n"); - grammarBuilder.append("KW1851 : 'KW' '1851';\n"); - grammarBuilder.append("KW1852 : 'KW' '1852';\n"); - grammarBuilder.append("KW1853 : 'KW' '1853';\n"); - grammarBuilder.append("KW1854 : 'KW' '1854';\n"); - grammarBuilder.append("KW1855 : 'KW' '1855';\n"); - grammarBuilder.append("KW1856 : 'KW' '1856';\n"); - grammarBuilder.append("KW1857 : 'KW' '1857';\n"); - grammarBuilder.append("KW1858 : 'KW' '1858';\n"); - grammarBuilder.append("KW1859 : 'KW' '1859';\n"); - grammarBuilder.append("KW1860 : 'KW' '1860';\n"); - grammarBuilder.append("KW1861 : 'KW' '1861';\n"); - grammarBuilder.append("KW1862 : 'KW' '1862';\n"); - grammarBuilder.append("KW1863 : 'KW' '1863';\n"); - grammarBuilder.append("KW1864 : 'KW' '1864';\n"); - grammarBuilder.append("KW1865 : 'KW' '1865';\n"); - grammarBuilder.append("KW1866 : 'KW' '1866';\n"); - grammarBuilder.append("KW1867 : 'KW' '1867';\n"); - grammarBuilder.append("KW1868 : 'KW' '1868';\n"); - grammarBuilder.append("KW1869 : 'KW' '1869';\n"); - grammarBuilder.append("KW1870 : 'KW' '1870';\n"); - grammarBuilder.append("KW1871 : 'KW' '1871';\n"); - grammarBuilder.append("KW1872 : 'KW' '1872';\n"); - grammarBuilder.append("KW1873 : 'KW' '1873';\n"); - grammarBuilder.append("KW1874 : 'KW' '1874';\n"); - grammarBuilder.append("KW1875 : 'KW' '1875';\n"); - grammarBuilder.append("KW1876 : 'KW' '1876';\n"); - grammarBuilder.append("KW1877 : 'KW' '1877';\n"); - grammarBuilder.append("KW1878 : 'KW' '1878';\n"); - grammarBuilder.append("KW1879 : 'KW' '1879';\n"); - grammarBuilder.append("KW1880 : 'KW' '1880';\n"); - grammarBuilder.append("KW1881 : 'KW' '1881';\n"); - grammarBuilder.append("KW1882 : 'KW' '1882';\n"); - grammarBuilder.append("KW1883 : 'KW' '1883';\n"); - grammarBuilder.append("KW1884 : 'KW' '1884';\n"); - grammarBuilder.append("KW1885 : 'KW' '1885';\n"); - grammarBuilder.append("KW1886 : 'KW' '1886';\n"); - grammarBuilder.append("KW1887 : 'KW' '1887';\n"); - grammarBuilder.append("KW1888 : 'KW' '1888';\n"); - grammarBuilder.append("KW1889 : 'KW' '1889';\n"); - grammarBuilder.append("KW1890 : 'KW' '1890';\n"); - grammarBuilder.append("KW1891 : 'KW' '1891';\n"); - grammarBuilder.append("KW1892 : 'KW' '1892';\n"); - grammarBuilder.append("KW1893 : 'KW' '1893';\n"); - grammarBuilder.append("KW1894 : 'KW' '1894';\n"); - grammarBuilder.append("KW1895 : 'KW' '1895';\n"); - grammarBuilder.append("KW1896 : 'KW' '1896';\n"); - grammarBuilder.append("KW1897 : 'KW' '1897';\n"); - grammarBuilder.append("KW1898 : 'KW' '1898';\n"); - grammarBuilder.append("KW1899 : 'KW' '1899';\n"); - grammarBuilder.append("KW1900 : 'KW' '1900';\n"); - grammarBuilder.append("KW1901 : 'KW' '1901';\n"); - grammarBuilder.append("KW1902 : 'KW' '1902';\n"); - grammarBuilder.append("KW1903 : 'KW' '1903';\n"); - grammarBuilder.append("KW1904 : 'KW' '1904';\n"); - grammarBuilder.append("KW1905 : 'KW' '1905';\n"); - grammarBuilder.append("KW1906 : 'KW' '1906';\n"); - grammarBuilder.append("KW1907 : 'KW' '1907';\n"); - grammarBuilder.append("KW1908 : 'KW' '1908';\n"); - grammarBuilder.append("KW1909 : 'KW' '1909';\n"); - grammarBuilder.append("KW1910 : 'KW' '1910';\n"); - grammarBuilder.append("KW1911 : 'KW' '1911';\n"); - grammarBuilder.append("KW1912 : 'KW' '1912';\n"); - grammarBuilder.append("KW1913 : 'KW' '1913';\n"); - grammarBuilder.append("KW1914 : 'KW' '1914';\n"); - grammarBuilder.append("KW1915 : 'KW' '1915';\n"); - grammarBuilder.append("KW1916 : 'KW' '1916';\n"); - grammarBuilder.append("KW1917 : 'KW' '1917';\n"); - grammarBuilder.append("KW1918 : 'KW' '1918';\n"); - grammarBuilder.append("KW1919 : 'KW' '1919';\n"); - grammarBuilder.append("KW1920 : 'KW' '1920';\n"); - grammarBuilder.append("KW1921 : 'KW' '1921';\n"); - grammarBuilder.append("KW1922 : 'KW' '1922';\n"); - grammarBuilder.append("KW1923 : 'KW' '1923';\n"); - grammarBuilder.append("KW1924 : 'KW' '1924';\n"); - grammarBuilder.append("KW1925 : 'KW' '1925';\n"); - grammarBuilder.append("KW1926 : 'KW' '1926';\n"); - grammarBuilder.append("KW1927 : 'KW' '1927';\n"); - grammarBuilder.append("KW1928 : 'KW' '1928';\n"); - grammarBuilder.append("KW1929 : 'KW' '1929';\n"); - grammarBuilder.append("KW1930 : 'KW' '1930';\n"); - grammarBuilder.append("KW1931 : 'KW' '1931';\n"); - grammarBuilder.append("KW1932 : 'KW' '1932';\n"); - grammarBuilder.append("KW1933 : 'KW' '1933';\n"); - grammarBuilder.append("KW1934 : 'KW' '1934';\n"); - grammarBuilder.append("KW1935 : 'KW' '1935';\n"); - grammarBuilder.append("KW1936 : 'KW' '1936';\n"); - grammarBuilder.append("KW1937 : 'KW' '1937';\n"); - grammarBuilder.append("KW1938 : 'KW' '1938';\n"); - grammarBuilder.append("KW1939 : 'KW' '1939';\n"); - grammarBuilder.append("KW1940 : 'KW' '1940';\n"); - grammarBuilder.append("KW1941 : 'KW' '1941';\n"); - grammarBuilder.append("KW1942 : 'KW' '1942';\n"); - grammarBuilder.append("KW1943 : 'KW' '1943';\n"); - grammarBuilder.append("KW1944 : 'KW' '1944';\n"); - grammarBuilder.append("KW1945 : 'KW' '1945';\n"); - grammarBuilder.append("KW1946 : 'KW' '1946';\n"); - grammarBuilder.append("KW1947 : 'KW' '1947';\n"); - grammarBuilder.append("KW1948 : 'KW' '1948';\n"); - grammarBuilder.append("KW1949 : 'KW' '1949';\n"); - grammarBuilder.append("KW1950 : 'KW' '1950';\n"); - grammarBuilder.append("KW1951 : 'KW' '1951';\n"); - grammarBuilder.append("KW1952 : 'KW' '1952';\n"); - grammarBuilder.append("KW1953 : 'KW' '1953';\n"); - grammarBuilder.append("KW1954 : 'KW' '1954';\n"); - grammarBuilder.append("KW1955 : 'KW' '1955';\n"); - grammarBuilder.append("KW1956 : 'KW' '1956';\n"); - grammarBuilder.append("KW1957 : 'KW' '1957';\n"); - grammarBuilder.append("KW1958 : 'KW' '1958';\n"); - grammarBuilder.append("KW1959 : 'KW' '1959';\n"); - grammarBuilder.append("KW1960 : 'KW' '1960';\n"); - grammarBuilder.append("KW1961 : 'KW' '1961';\n"); - grammarBuilder.append("KW1962 : 'KW' '1962';\n"); - grammarBuilder.append("KW1963 : 'KW' '1963';\n"); - grammarBuilder.append("KW1964 : 'KW' '1964';\n"); - grammarBuilder.append("KW1965 : 'KW' '1965';\n"); - grammarBuilder.append("KW1966 : 'KW' '1966';\n"); - grammarBuilder.append("KW1967 : 'KW' '1967';\n"); - grammarBuilder.append("KW1968 : 'KW' '1968';\n"); - grammarBuilder.append("KW1969 : 'KW' '1969';\n"); - grammarBuilder.append("KW1970 : 'KW' '1970';\n"); - grammarBuilder.append("KW1971 : 'KW' '1971';\n"); - grammarBuilder.append("KW1972 : 'KW' '1972';\n"); - grammarBuilder.append("KW1973 : 'KW' '1973';\n"); - grammarBuilder.append("KW1974 : 'KW' '1974';\n"); - grammarBuilder.append("KW1975 : 'KW' '1975';\n"); - grammarBuilder.append("KW1976 : 'KW' '1976';\n"); - grammarBuilder.append("KW1977 : 'KW' '1977';\n"); - grammarBuilder.append("KW1978 : 'KW' '1978';\n"); - grammarBuilder.append("KW1979 : 'KW' '1979';\n"); - grammarBuilder.append("KW1980 : 'KW' '1980';\n"); - grammarBuilder.append("KW1981 : 'KW' '1981';\n"); - grammarBuilder.append("KW1982 : 'KW' '1982';\n"); - grammarBuilder.append("KW1983 : 'KW' '1983';\n"); - grammarBuilder.append("KW1984 : 'KW' '1984';\n"); - grammarBuilder.append("KW1985 : 'KW' '1985';\n"); - grammarBuilder.append("KW1986 : 'KW' '1986';\n"); - grammarBuilder.append("KW1987 : 'KW' '1987';\n"); - grammarBuilder.append("KW1988 : 'KW' '1988';\n"); - grammarBuilder.append("KW1989 : 'KW' '1989';\n"); - grammarBuilder.append("KW1990 : 'KW' '1990';\n"); - grammarBuilder.append("KW1991 : 'KW' '1991';\n"); - grammarBuilder.append("KW1992 : 'KW' '1992';\n"); - grammarBuilder.append("KW1993 : 'KW' '1993';\n"); - grammarBuilder.append("KW1994 : 'KW' '1994';\n"); - grammarBuilder.append("KW1995 : 'KW' '1995';\n"); - grammarBuilder.append("KW1996 : 'KW' '1996';\n"); - grammarBuilder.append("KW1997 : 'KW' '1997';\n"); - grammarBuilder.append("KW1998 : 'KW' '1998';\n"); - grammarBuilder.append("KW1999 : 'KW' '1999';\n"); - grammarBuilder.append("KW2000 : 'KW' '2000';\n"); - grammarBuilder.append("KW2001 : 'KW' '2001';\n"); - grammarBuilder.append("KW2002 : 'KW' '2002';\n"); - grammarBuilder.append("KW2003 : 'KW' '2003';\n"); - grammarBuilder.append("KW2004 : 'KW' '2004';\n"); - grammarBuilder.append("KW2005 : 'KW' '2005';\n"); - grammarBuilder.append("KW2006 : 'KW' '2006';\n"); - grammarBuilder.append("KW2007 : 'KW' '2007';\n"); - grammarBuilder.append("KW2008 : 'KW' '2008';\n"); - grammarBuilder.append("KW2009 : 'KW' '2009';\n"); - grammarBuilder.append("KW2010 : 'KW' '2010';\n"); - grammarBuilder.append("KW2011 : 'KW' '2011';\n"); - grammarBuilder.append("KW2012 : 'KW' '2012';\n"); - grammarBuilder.append("KW2013 : 'KW' '2013';\n"); - grammarBuilder.append("KW2014 : 'KW' '2014';\n"); - grammarBuilder.append("KW2015 : 'KW' '2015';\n"); - grammarBuilder.append("KW2016 : 'KW' '2016';\n"); - grammarBuilder.append("KW2017 : 'KW' '2017';\n"); - grammarBuilder.append("KW2018 : 'KW' '2018';\n"); - grammarBuilder.append("KW2019 : 'KW' '2019';\n"); - grammarBuilder.append("KW2020 : 'KW' '2020';\n"); - grammarBuilder.append("KW2021 : 'KW' '2021';\n"); - grammarBuilder.append("KW2022 : 'KW' '2022';\n"); - grammarBuilder.append("KW2023 : 'KW' '2023';\n"); - grammarBuilder.append("KW2024 : 'KW' '2024';\n"); - grammarBuilder.append("KW2025 : 'KW' '2025';\n"); - grammarBuilder.append("KW2026 : 'KW' '2026';\n"); - grammarBuilder.append("KW2027 : 'KW' '2027';\n"); - grammarBuilder.append("KW2028 : 'KW' '2028';\n"); - grammarBuilder.append("KW2029 : 'KW' '2029';\n"); - grammarBuilder.append("KW2030 : 'KW' '2030';\n"); - grammarBuilder.append("KW2031 : 'KW' '2031';\n"); - grammarBuilder.append("KW2032 : 'KW' '2032';\n"); - grammarBuilder.append("KW2033 : 'KW' '2033';\n"); - grammarBuilder.append("KW2034 : 'KW' '2034';\n"); - grammarBuilder.append("KW2035 : 'KW' '2035';\n"); - grammarBuilder.append("KW2036 : 'KW' '2036';\n"); - grammarBuilder.append("KW2037 : 'KW' '2037';\n"); - grammarBuilder.append("KW2038 : 'KW' '2038';\n"); - grammarBuilder.append("KW2039 : 'KW' '2039';\n"); - grammarBuilder.append("KW2040 : 'KW' '2040';\n"); - grammarBuilder.append("KW2041 : 'KW' '2041';\n"); - grammarBuilder.append("KW2042 : 'KW' '2042';\n"); - grammarBuilder.append("KW2043 : 'KW' '2043';\n"); - grammarBuilder.append("KW2044 : 'KW' '2044';\n"); - grammarBuilder.append("KW2045 : 'KW' '2045';\n"); - grammarBuilder.append("KW2046 : 'KW' '2046';\n"); - grammarBuilder.append("KW2047 : 'KW' '2047';\n"); - grammarBuilder.append("KW2048 : 'KW' '2048';\n"); - grammarBuilder.append("KW2049 : 'KW' '2049';\n"); - grammarBuilder.append("KW2050 : 'KW' '2050';\n"); - grammarBuilder.append("KW2051 : 'KW' '2051';\n"); - grammarBuilder.append("KW2052 : 'KW' '2052';\n"); - grammarBuilder.append("KW2053 : 'KW' '2053';\n"); - grammarBuilder.append("KW2054 : 'KW' '2054';\n"); - grammarBuilder.append("KW2055 : 'KW' '2055';\n"); - grammarBuilder.append("KW2056 : 'KW' '2056';\n"); - grammarBuilder.append("KW2057 : 'KW' '2057';\n"); - grammarBuilder.append("KW2058 : 'KW' '2058';\n"); - grammarBuilder.append("KW2059 : 'KW' '2059';\n"); - grammarBuilder.append("KW2060 : 'KW' '2060';\n"); - grammarBuilder.append("KW2061 : 'KW' '2061';\n"); - grammarBuilder.append("KW2062 : 'KW' '2062';\n"); - grammarBuilder.append("KW2063 : 'KW' '2063';\n"); - grammarBuilder.append("KW2064 : 'KW' '2064';\n"); - grammarBuilder.append("KW2065 : 'KW' '2065';\n"); - grammarBuilder.append("KW2066 : 'KW' '2066';\n"); - grammarBuilder.append("KW2067 : 'KW' '2067';\n"); - grammarBuilder.append("KW2068 : 'KW' '2068';\n"); - grammarBuilder.append("KW2069 : 'KW' '2069';\n"); - grammarBuilder.append("KW2070 : 'KW' '2070';\n"); - grammarBuilder.append("KW2071 : 'KW' '2071';\n"); - grammarBuilder.append("KW2072 : 'KW' '2072';\n"); - grammarBuilder.append("KW2073 : 'KW' '2073';\n"); - grammarBuilder.append("KW2074 : 'KW' '2074';\n"); - grammarBuilder.append("KW2075 : 'KW' '2075';\n"); - grammarBuilder.append("KW2076 : 'KW' '2076';\n"); - grammarBuilder.append("KW2077 : 'KW' '2077';\n"); - grammarBuilder.append("KW2078 : 'KW' '2078';\n"); - grammarBuilder.append("KW2079 : 'KW' '2079';\n"); - grammarBuilder.append("KW2080 : 'KW' '2080';\n"); - grammarBuilder.append("KW2081 : 'KW' '2081';\n"); - grammarBuilder.append("KW2082 : 'KW' '2082';\n"); - grammarBuilder.append("KW2083 : 'KW' '2083';\n"); - grammarBuilder.append("KW2084 : 'KW' '2084';\n"); - grammarBuilder.append("KW2085 : 'KW' '2085';\n"); - grammarBuilder.append("KW2086 : 'KW' '2086';\n"); - grammarBuilder.append("KW2087 : 'KW' '2087';\n"); - grammarBuilder.append("KW2088 : 'KW' '2088';\n"); - grammarBuilder.append("KW2089 : 'KW' '2089';\n"); - grammarBuilder.append("KW2090 : 'KW' '2090';\n"); - grammarBuilder.append("KW2091 : 'KW' '2091';\n"); - grammarBuilder.append("KW2092 : 'KW' '2092';\n"); - grammarBuilder.append("KW2093 : 'KW' '2093';\n"); - grammarBuilder.append("KW2094 : 'KW' '2094';\n"); - grammarBuilder.append("KW2095 : 'KW' '2095';\n"); - grammarBuilder.append("KW2096 : 'KW' '2096';\n"); - grammarBuilder.append("KW2097 : 'KW' '2097';\n"); - grammarBuilder.append("KW2098 : 'KW' '2098';\n"); - grammarBuilder.append("KW2099 : 'KW' '2099';\n"); - grammarBuilder.append("KW2100 : 'KW' '2100';\n"); - grammarBuilder.append("KW2101 : 'KW' '2101';\n"); - grammarBuilder.append("KW2102 : 'KW' '2102';\n"); - grammarBuilder.append("KW2103 : 'KW' '2103';\n"); - grammarBuilder.append("KW2104 : 'KW' '2104';\n"); - grammarBuilder.append("KW2105 : 'KW' '2105';\n"); - grammarBuilder.append("KW2106 : 'KW' '2106';\n"); - grammarBuilder.append("KW2107 : 'KW' '2107';\n"); - grammarBuilder.append("KW2108 : 'KW' '2108';\n"); - grammarBuilder.append("KW2109 : 'KW' '2109';\n"); - grammarBuilder.append("KW2110 : 'KW' '2110';\n"); - grammarBuilder.append("KW2111 : 'KW' '2111';\n"); - grammarBuilder.append("KW2112 : 'KW' '2112';\n"); - grammarBuilder.append("KW2113 : 'KW' '2113';\n"); - grammarBuilder.append("KW2114 : 'KW' '2114';\n"); - grammarBuilder.append("KW2115 : 'KW' '2115';\n"); - grammarBuilder.append("KW2116 : 'KW' '2116';\n"); - grammarBuilder.append("KW2117 : 'KW' '2117';\n"); - grammarBuilder.append("KW2118 : 'KW' '2118';\n"); - grammarBuilder.append("KW2119 : 'KW' '2119';\n"); - grammarBuilder.append("KW2120 : 'KW' '2120';\n"); - grammarBuilder.append("KW2121 : 'KW' '2121';\n"); - grammarBuilder.append("KW2122 : 'KW' '2122';\n"); - grammarBuilder.append("KW2123 : 'KW' '2123';\n"); - grammarBuilder.append("KW2124 : 'KW' '2124';\n"); - grammarBuilder.append("KW2125 : 'KW' '2125';\n"); - grammarBuilder.append("KW2126 : 'KW' '2126';\n"); - grammarBuilder.append("KW2127 : 'KW' '2127';\n"); - grammarBuilder.append("KW2128 : 'KW' '2128';\n"); - grammarBuilder.append("KW2129 : 'KW' '2129';\n"); - grammarBuilder.append("KW2130 : 'KW' '2130';\n"); - grammarBuilder.append("KW2131 : 'KW' '2131';\n"); - grammarBuilder.append("KW2132 : 'KW' '2132';\n"); - grammarBuilder.append("KW2133 : 'KW' '2133';\n"); - grammarBuilder.append("KW2134 : 'KW' '2134';\n"); - grammarBuilder.append("KW2135 : 'KW' '2135';\n"); - grammarBuilder.append("KW2136 : 'KW' '2136';\n"); - grammarBuilder.append("KW2137 : 'KW' '2137';\n"); - grammarBuilder.append("KW2138 : 'KW' '2138';\n"); - grammarBuilder.append("KW2139 : 'KW' '2139';\n"); - grammarBuilder.append("KW2140 : 'KW' '2140';\n"); - grammarBuilder.append("KW2141 : 'KW' '2141';\n"); - grammarBuilder.append("KW2142 : 'KW' '2142';\n"); - grammarBuilder.append("KW2143 : 'KW' '2143';\n"); - grammarBuilder.append("KW2144 : 'KW' '2144';\n"); - grammarBuilder.append("KW2145 : 'KW' '2145';\n"); - grammarBuilder.append("KW2146 : 'KW' '2146';\n"); - grammarBuilder.append("KW2147 : 'KW' '2147';\n"); - grammarBuilder.append("KW2148 : 'KW' '2148';\n"); - grammarBuilder.append("KW2149 : 'KW' '2149';\n"); - grammarBuilder.append("KW2150 : 'KW' '2150';\n"); - grammarBuilder.append("KW2151 : 'KW' '2151';\n"); - grammarBuilder.append("KW2152 : 'KW' '2152';\n"); - grammarBuilder.append("KW2153 : 'KW' '2153';\n"); - grammarBuilder.append("KW2154 : 'KW' '2154';\n"); - grammarBuilder.append("KW2155 : 'KW' '2155';\n"); - grammarBuilder.append("KW2156 : 'KW' '2156';\n"); - grammarBuilder.append("KW2157 : 'KW' '2157';\n"); - grammarBuilder.append("KW2158 : 'KW' '2158';\n"); - grammarBuilder.append("KW2159 : 'KW' '2159';\n"); - grammarBuilder.append("KW2160 : 'KW' '2160';\n"); - grammarBuilder.append("KW2161 : 'KW' '2161';\n"); - grammarBuilder.append("KW2162 : 'KW' '2162';\n"); - grammarBuilder.append("KW2163 : 'KW' '2163';\n"); - grammarBuilder.append("KW2164 : 'KW' '2164';\n"); - grammarBuilder.append("KW2165 : 'KW' '2165';\n"); - grammarBuilder.append("KW2166 : 'KW' '2166';\n"); - grammarBuilder.append("KW2167 : 'KW' '2167';\n"); - grammarBuilder.append("KW2168 : 'KW' '2168';\n"); - grammarBuilder.append("KW2169 : 'KW' '2169';\n"); - grammarBuilder.append("KW2170 : 'KW' '2170';\n"); - grammarBuilder.append("KW2171 : 'KW' '2171';\n"); - grammarBuilder.append("KW2172 : 'KW' '2172';\n"); - grammarBuilder.append("KW2173 : 'KW' '2173';\n"); - grammarBuilder.append("KW2174 : 'KW' '2174';\n"); - grammarBuilder.append("KW2175 : 'KW' '2175';\n"); - grammarBuilder.append("KW2176 : 'KW' '2176';\n"); - grammarBuilder.append("KW2177 : 'KW' '2177';\n"); - grammarBuilder.append("KW2178 : 'KW' '2178';\n"); - grammarBuilder.append("KW2179 : 'KW' '2179';\n"); - grammarBuilder.append("KW2180 : 'KW' '2180';\n"); - grammarBuilder.append("KW2181 : 'KW' '2181';\n"); - grammarBuilder.append("KW2182 : 'KW' '2182';\n"); - grammarBuilder.append("KW2183 : 'KW' '2183';\n"); - grammarBuilder.append("KW2184 : 'KW' '2184';\n"); - grammarBuilder.append("KW2185 : 'KW' '2185';\n"); - grammarBuilder.append("KW2186 : 'KW' '2186';\n"); - grammarBuilder.append("KW2187 : 'KW' '2187';\n"); - grammarBuilder.append("KW2188 : 'KW' '2188';\n"); - grammarBuilder.append("KW2189 : 'KW' '2189';\n"); - grammarBuilder.append("KW2190 : 'KW' '2190';\n"); - grammarBuilder.append("KW2191 : 'KW' '2191';\n"); - grammarBuilder.append("KW2192 : 'KW' '2192';\n"); - grammarBuilder.append("KW2193 : 'KW' '2193';\n"); - grammarBuilder.append("KW2194 : 'KW' '2194';\n"); - grammarBuilder.append("KW2195 : 'KW' '2195';\n"); - grammarBuilder.append("KW2196 : 'KW' '2196';\n"); - grammarBuilder.append("KW2197 : 'KW' '2197';\n"); - grammarBuilder.append("KW2198 : 'KW' '2198';\n"); - grammarBuilder.append("KW2199 : 'KW' '2199';\n"); - grammarBuilder.append("KW2200 : 'KW' '2200';\n"); - grammarBuilder.append("KW2201 : 'KW' '2201';\n"); - grammarBuilder.append("KW2202 : 'KW' '2202';\n"); - grammarBuilder.append("KW2203 : 'KW' '2203';\n"); - grammarBuilder.append("KW2204 : 'KW' '2204';\n"); - grammarBuilder.append("KW2205 : 'KW' '2205';\n"); - grammarBuilder.append("KW2206 : 'KW' '2206';\n"); - grammarBuilder.append("KW2207 : 'KW' '2207';\n"); - grammarBuilder.append("KW2208 : 'KW' '2208';\n"); - grammarBuilder.append("KW2209 : 'KW' '2209';\n"); - grammarBuilder.append("KW2210 : 'KW' '2210';\n"); - grammarBuilder.append("KW2211 : 'KW' '2211';\n"); - grammarBuilder.append("KW2212 : 'KW' '2212';\n"); - grammarBuilder.append("KW2213 : 'KW' '2213';\n"); - grammarBuilder.append("KW2214 : 'KW' '2214';\n"); - grammarBuilder.append("KW2215 : 'KW' '2215';\n"); - grammarBuilder.append("KW2216 : 'KW' '2216';\n"); - grammarBuilder.append("KW2217 : 'KW' '2217';\n"); - grammarBuilder.append("KW2218 : 'KW' '2218';\n"); - grammarBuilder.append("KW2219 : 'KW' '2219';\n"); - grammarBuilder.append("KW2220 : 'KW' '2220';\n"); - grammarBuilder.append("KW2221 : 'KW' '2221';\n"); - grammarBuilder.append("KW2222 : 'KW' '2222';\n"); - grammarBuilder.append("KW2223 : 'KW' '2223';\n"); - grammarBuilder.append("KW2224 : 'KW' '2224';\n"); - grammarBuilder.append("KW2225 : 'KW' '2225';\n"); - grammarBuilder.append("KW2226 : 'KW' '2226';\n"); - grammarBuilder.append("KW2227 : 'KW' '2227';\n"); - grammarBuilder.append("KW2228 : 'KW' '2228';\n"); - grammarBuilder.append("KW2229 : 'KW' '2229';\n"); - grammarBuilder.append("KW2230 : 'KW' '2230';\n"); - grammarBuilder.append("KW2231 : 'KW' '2231';\n"); - grammarBuilder.append("KW2232 : 'KW' '2232';\n"); - grammarBuilder.append("KW2233 : 'KW' '2233';\n"); - grammarBuilder.append("KW2234 : 'KW' '2234';\n"); - grammarBuilder.append("KW2235 : 'KW' '2235';\n"); - grammarBuilder.append("KW2236 : 'KW' '2236';\n"); - grammarBuilder.append("KW2237 : 'KW' '2237';\n"); - grammarBuilder.append("KW2238 : 'KW' '2238';\n"); - grammarBuilder.append("KW2239 : 'KW' '2239';\n"); - grammarBuilder.append("KW2240 : 'KW' '2240';\n"); - grammarBuilder.append("KW2241 : 'KW' '2241';\n"); - grammarBuilder.append("KW2242 : 'KW' '2242';\n"); - grammarBuilder.append("KW2243 : 'KW' '2243';\n"); - grammarBuilder.append("KW2244 : 'KW' '2244';\n"); - grammarBuilder.append("KW2245 : 'KW' '2245';\n"); - grammarBuilder.append("KW2246 : 'KW' '2246';\n"); - grammarBuilder.append("KW2247 : 'KW' '2247';\n"); - grammarBuilder.append("KW2248 : 'KW' '2248';\n"); - grammarBuilder.append("KW2249 : 'KW' '2249';\n"); - grammarBuilder.append("KW2250 : 'KW' '2250';\n"); - grammarBuilder.append("KW2251 : 'KW' '2251';\n"); - grammarBuilder.append("KW2252 : 'KW' '2252';\n"); - grammarBuilder.append("KW2253 : 'KW' '2253';\n"); - grammarBuilder.append("KW2254 : 'KW' '2254';\n"); - grammarBuilder.append("KW2255 : 'KW' '2255';\n"); - grammarBuilder.append("KW2256 : 'KW' '2256';\n"); - grammarBuilder.append("KW2257 : 'KW' '2257';\n"); - grammarBuilder.append("KW2258 : 'KW' '2258';\n"); - grammarBuilder.append("KW2259 : 'KW' '2259';\n"); - grammarBuilder.append("KW2260 : 'KW' '2260';\n"); - grammarBuilder.append("KW2261 : 'KW' '2261';\n"); - grammarBuilder.append("KW2262 : 'KW' '2262';\n"); - grammarBuilder.append("KW2263 : 'KW' '2263';\n"); - grammarBuilder.append("KW2264 : 'KW' '2264';\n"); - grammarBuilder.append("KW2265 : 'KW' '2265';\n"); - grammarBuilder.append("KW2266 : 'KW' '2266';\n"); - grammarBuilder.append("KW2267 : 'KW' '2267';\n"); - grammarBuilder.append("KW2268 : 'KW' '2268';\n"); - grammarBuilder.append("KW2269 : 'KW' '2269';\n"); - grammarBuilder.append("KW2270 : 'KW' '2270';\n"); - grammarBuilder.append("KW2271 : 'KW' '2271';\n"); - grammarBuilder.append("KW2272 : 'KW' '2272';\n"); - grammarBuilder.append("KW2273 : 'KW' '2273';\n"); - grammarBuilder.append("KW2274 : 'KW' '2274';\n"); - grammarBuilder.append("KW2275 : 'KW' '2275';\n"); - grammarBuilder.append("KW2276 : 'KW' '2276';\n"); - grammarBuilder.append("KW2277 : 'KW' '2277';\n"); - grammarBuilder.append("KW2278 : 'KW' '2278';\n"); - grammarBuilder.append("KW2279 : 'KW' '2279';\n"); - grammarBuilder.append("KW2280 : 'KW' '2280';\n"); - grammarBuilder.append("KW2281 : 'KW' '2281';\n"); - grammarBuilder.append("KW2282 : 'KW' '2282';\n"); - grammarBuilder.append("KW2283 : 'KW' '2283';\n"); - grammarBuilder.append("KW2284 : 'KW' '2284';\n"); - grammarBuilder.append("KW2285 : 'KW' '2285';\n"); - grammarBuilder.append("KW2286 : 'KW' '2286';\n"); - grammarBuilder.append("KW2287 : 'KW' '2287';\n"); - grammarBuilder.append("KW2288 : 'KW' '2288';\n"); - grammarBuilder.append("KW2289 : 'KW' '2289';\n"); - grammarBuilder.append("KW2290 : 'KW' '2290';\n"); - grammarBuilder.append("KW2291 : 'KW' '2291';\n"); - grammarBuilder.append("KW2292 : 'KW' '2292';\n"); - grammarBuilder.append("KW2293 : 'KW' '2293';\n"); - grammarBuilder.append("KW2294 : 'KW' '2294';\n"); - grammarBuilder.append("KW2295 : 'KW' '2295';\n"); - grammarBuilder.append("KW2296 : 'KW' '2296';\n"); - grammarBuilder.append("KW2297 : 'KW' '2297';\n"); - grammarBuilder.append("KW2298 : 'KW' '2298';\n"); - grammarBuilder.append("KW2299 : 'KW' '2299';\n"); - grammarBuilder.append("KW2300 : 'KW' '2300';\n"); - grammarBuilder.append("KW2301 : 'KW' '2301';\n"); - grammarBuilder.append("KW2302 : 'KW' '2302';\n"); - grammarBuilder.append("KW2303 : 'KW' '2303';\n"); - grammarBuilder.append("KW2304 : 'KW' '2304';\n"); - grammarBuilder.append("KW2305 : 'KW' '2305';\n"); - grammarBuilder.append("KW2306 : 'KW' '2306';\n"); - grammarBuilder.append("KW2307 : 'KW' '2307';\n"); - grammarBuilder.append("KW2308 : 'KW' '2308';\n"); - grammarBuilder.append("KW2309 : 'KW' '2309';\n"); - grammarBuilder.append("KW2310 : 'KW' '2310';\n"); - grammarBuilder.append("KW2311 : 'KW' '2311';\n"); - grammarBuilder.append("KW2312 : 'KW' '2312';\n"); - grammarBuilder.append("KW2313 : 'KW' '2313';\n"); - grammarBuilder.append("KW2314 : 'KW' '2314';\n"); - grammarBuilder.append("KW2315 : 'KW' '2315';\n"); - grammarBuilder.append("KW2316 : 'KW' '2316';\n"); - grammarBuilder.append("KW2317 : 'KW' '2317';\n"); - grammarBuilder.append("KW2318 : 'KW' '2318';\n"); - grammarBuilder.append("KW2319 : 'KW' '2319';\n"); - grammarBuilder.append("KW2320 : 'KW' '2320';\n"); - grammarBuilder.append("KW2321 : 'KW' '2321';\n"); - grammarBuilder.append("KW2322 : 'KW' '2322';\n"); - grammarBuilder.append("KW2323 : 'KW' '2323';\n"); - grammarBuilder.append("KW2324 : 'KW' '2324';\n"); - grammarBuilder.append("KW2325 : 'KW' '2325';\n"); - grammarBuilder.append("KW2326 : 'KW' '2326';\n"); - grammarBuilder.append("KW2327 : 'KW' '2327';\n"); - grammarBuilder.append("KW2328 : 'KW' '2328';\n"); - grammarBuilder.append("KW2329 : 'KW' '2329';\n"); - grammarBuilder.append("KW2330 : 'KW' '2330';\n"); - grammarBuilder.append("KW2331 : 'KW' '2331';\n"); - grammarBuilder.append("KW2332 : 'KW' '2332';\n"); - grammarBuilder.append("KW2333 : 'KW' '2333';\n"); - grammarBuilder.append("KW2334 : 'KW' '2334';\n"); - grammarBuilder.append("KW2335 : 'KW' '2335';\n"); - grammarBuilder.append("KW2336 : 'KW' '2336';\n"); - grammarBuilder.append("KW2337 : 'KW' '2337';\n"); - grammarBuilder.append("KW2338 : 'KW' '2338';\n"); - grammarBuilder.append("KW2339 : 'KW' '2339';\n"); - grammarBuilder.append("KW2340 : 'KW' '2340';\n"); - grammarBuilder.append("KW2341 : 'KW' '2341';\n"); - grammarBuilder.append("KW2342 : 'KW' '2342';\n"); - grammarBuilder.append("KW2343 : 'KW' '2343';\n"); - grammarBuilder.append("KW2344 : 'KW' '2344';\n"); - grammarBuilder.append("KW2345 : 'KW' '2345';\n"); - grammarBuilder.append("KW2346 : 'KW' '2346';\n"); - grammarBuilder.append("KW2347 : 'KW' '2347';\n"); - grammarBuilder.append("KW2348 : 'KW' '2348';\n"); - grammarBuilder.append("KW2349 : 'KW' '2349';\n"); - grammarBuilder.append("KW2350 : 'KW' '2350';\n"); - grammarBuilder.append("KW2351 : 'KW' '2351';\n"); - grammarBuilder.append("KW2352 : 'KW' '2352';\n"); - grammarBuilder.append("KW2353 : 'KW' '2353';\n"); - grammarBuilder.append("KW2354 : 'KW' '2354';\n"); - grammarBuilder.append("KW2355 : 'KW' '2355';\n"); - grammarBuilder.append("KW2356 : 'KW' '2356';\n"); - grammarBuilder.append("KW2357 : 'KW' '2357';\n"); - grammarBuilder.append("KW2358 : 'KW' '2358';\n"); - grammarBuilder.append("KW2359 : 'KW' '2359';\n"); - grammarBuilder.append("KW2360 : 'KW' '2360';\n"); - grammarBuilder.append("KW2361 : 'KW' '2361';\n"); - grammarBuilder.append("KW2362 : 'KW' '2362';\n"); - grammarBuilder.append("KW2363 : 'KW' '2363';\n"); - grammarBuilder.append("KW2364 : 'KW' '2364';\n"); - grammarBuilder.append("KW2365 : 'KW' '2365';\n"); - grammarBuilder.append("KW2366 : 'KW' '2366';\n"); - grammarBuilder.append("KW2367 : 'KW' '2367';\n"); - grammarBuilder.append("KW2368 : 'KW' '2368';\n"); - grammarBuilder.append("KW2369 : 'KW' '2369';\n"); - grammarBuilder.append("KW2370 : 'KW' '2370';\n"); - grammarBuilder.append("KW2371 : 'KW' '2371';\n"); - grammarBuilder.append("KW2372 : 'KW' '2372';\n"); - grammarBuilder.append("KW2373 : 'KW' '2373';\n"); - grammarBuilder.append("KW2374 : 'KW' '2374';\n"); - grammarBuilder.append("KW2375 : 'KW' '2375';\n"); - grammarBuilder.append("KW2376 : 'KW' '2376';\n"); - grammarBuilder.append("KW2377 : 'KW' '2377';\n"); - grammarBuilder.append("KW2378 : 'KW' '2378';\n"); - grammarBuilder.append("KW2379 : 'KW' '2379';\n"); - grammarBuilder.append("KW2380 : 'KW' '2380';\n"); - grammarBuilder.append("KW2381 : 'KW' '2381';\n"); - grammarBuilder.append("KW2382 : 'KW' '2382';\n"); - grammarBuilder.append("KW2383 : 'KW' '2383';\n"); - grammarBuilder.append("KW2384 : 'KW' '2384';\n"); - grammarBuilder.append("KW2385 : 'KW' '2385';\n"); - grammarBuilder.append("KW2386 : 'KW' '2386';\n"); - grammarBuilder.append("KW2387 : 'KW' '2387';\n"); - grammarBuilder.append("KW2388 : 'KW' '2388';\n"); - grammarBuilder.append("KW2389 : 'KW' '2389';\n"); - grammarBuilder.append("KW2390 : 'KW' '2390';\n"); - grammarBuilder.append("KW2391 : 'KW' '2391';\n"); - grammarBuilder.append("KW2392 : 'KW' '2392';\n"); - grammarBuilder.append("KW2393 : 'KW' '2393';\n"); - grammarBuilder.append("KW2394 : 'KW' '2394';\n"); - grammarBuilder.append("KW2395 : 'KW' '2395';\n"); - grammarBuilder.append("KW2396 : 'KW' '2396';\n"); - grammarBuilder.append("KW2397 : 'KW' '2397';\n"); - grammarBuilder.append("KW2398 : 'KW' '2398';\n"); - grammarBuilder.append("KW2399 : 'KW' '2399';\n"); - grammarBuilder.append("KW2400 : 'KW' '2400';\n"); - grammarBuilder.append("KW2401 : 'KW' '2401';\n"); - grammarBuilder.append("KW2402 : 'KW' '2402';\n"); - grammarBuilder.append("KW2403 : 'KW' '2403';\n"); - grammarBuilder.append("KW2404 : 'KW' '2404';\n"); - grammarBuilder.append("KW2405 : 'KW' '2405';\n"); - grammarBuilder.append("KW2406 : 'KW' '2406';\n"); - grammarBuilder.append("KW2407 : 'KW' '2407';\n"); - grammarBuilder.append("KW2408 : 'KW' '2408';\n"); - grammarBuilder.append("KW2409 : 'KW' '2409';\n"); - grammarBuilder.append("KW2410 : 'KW' '2410';\n"); - grammarBuilder.append("KW2411 : 'KW' '2411';\n"); - grammarBuilder.append("KW2412 : 'KW' '2412';\n"); - grammarBuilder.append("KW2413 : 'KW' '2413';\n"); - grammarBuilder.append("KW2414 : 'KW' '2414';\n"); - grammarBuilder.append("KW2415 : 'KW' '2415';\n"); - grammarBuilder.append("KW2416 : 'KW' '2416';\n"); - grammarBuilder.append("KW2417 : 'KW' '2417';\n"); - grammarBuilder.append("KW2418 : 'KW' '2418';\n"); - grammarBuilder.append("KW2419 : 'KW' '2419';\n"); - grammarBuilder.append("KW2420 : 'KW' '2420';\n"); - grammarBuilder.append("KW2421 : 'KW' '2421';\n"); - grammarBuilder.append("KW2422 : 'KW' '2422';\n"); - grammarBuilder.append("KW2423 : 'KW' '2423';\n"); - grammarBuilder.append("KW2424 : 'KW' '2424';\n"); - grammarBuilder.append("KW2425 : 'KW' '2425';\n"); - grammarBuilder.append("KW2426 : 'KW' '2426';\n"); - grammarBuilder.append("KW2427 : 'KW' '2427';\n"); - grammarBuilder.append("KW2428 : 'KW' '2428';\n"); - grammarBuilder.append("KW2429 : 'KW' '2429';\n"); - grammarBuilder.append("KW2430 : 'KW' '2430';\n"); - grammarBuilder.append("KW2431 : 'KW' '2431';\n"); - grammarBuilder.append("KW2432 : 'KW' '2432';\n"); - grammarBuilder.append("KW2433 : 'KW' '2433';\n"); - grammarBuilder.append("KW2434 : 'KW' '2434';\n"); - grammarBuilder.append("KW2435 : 'KW' '2435';\n"); - grammarBuilder.append("KW2436 : 'KW' '2436';\n"); - grammarBuilder.append("KW2437 : 'KW' '2437';\n"); - grammarBuilder.append("KW2438 : 'KW' '2438';\n"); - grammarBuilder.append("KW2439 : 'KW' '2439';\n"); - grammarBuilder.append("KW2440 : 'KW' '2440';\n"); - grammarBuilder.append("KW2441 : 'KW' '2441';\n"); - grammarBuilder.append("KW2442 : 'KW' '2442';\n"); - grammarBuilder.append("KW2443 : 'KW' '2443';\n"); - grammarBuilder.append("KW2444 : 'KW' '2444';\n"); - grammarBuilder.append("KW2445 : 'KW' '2445';\n"); - grammarBuilder.append("KW2446 : 'KW' '2446';\n"); - grammarBuilder.append("KW2447 : 'KW' '2447';\n"); - grammarBuilder.append("KW2448 : 'KW' '2448';\n"); - grammarBuilder.append("KW2449 : 'KW' '2449';\n"); - grammarBuilder.append("KW2450 : 'KW' '2450';\n"); - grammarBuilder.append("KW2451 : 'KW' '2451';\n"); - grammarBuilder.append("KW2452 : 'KW' '2452';\n"); - grammarBuilder.append("KW2453 : 'KW' '2453';\n"); - grammarBuilder.append("KW2454 : 'KW' '2454';\n"); - grammarBuilder.append("KW2455 : 'KW' '2455';\n"); - grammarBuilder.append("KW2456 : 'KW' '2456';\n"); - grammarBuilder.append("KW2457 : 'KW' '2457';\n"); - grammarBuilder.append("KW2458 : 'KW' '2458';\n"); - grammarBuilder.append("KW2459 : 'KW' '2459';\n"); - grammarBuilder.append("KW2460 : 'KW' '2460';\n"); - grammarBuilder.append("KW2461 : 'KW' '2461';\n"); - grammarBuilder.append("KW2462 : 'KW' '2462';\n"); - grammarBuilder.append("KW2463 : 'KW' '2463';\n"); - grammarBuilder.append("KW2464 : 'KW' '2464';\n"); - grammarBuilder.append("KW2465 : 'KW' '2465';\n"); - grammarBuilder.append("KW2466 : 'KW' '2466';\n"); - grammarBuilder.append("KW2467 : 'KW' '2467';\n"); - grammarBuilder.append("KW2468 : 'KW' '2468';\n"); - grammarBuilder.append("KW2469 : 'KW' '2469';\n"); - grammarBuilder.append("KW2470 : 'KW' '2470';\n"); - grammarBuilder.append("KW2471 : 'KW' '2471';\n"); - grammarBuilder.append("KW2472 : 'KW' '2472';\n"); - grammarBuilder.append("KW2473 : 'KW' '2473';\n"); - grammarBuilder.append("KW2474 : 'KW' '2474';\n"); - grammarBuilder.append("KW2475 : 'KW' '2475';\n"); - grammarBuilder.append("KW2476 : 'KW' '2476';\n"); - grammarBuilder.append("KW2477 : 'KW' '2477';\n"); - grammarBuilder.append("KW2478 : 'KW' '2478';\n"); - grammarBuilder.append("KW2479 : 'KW' '2479';\n"); - grammarBuilder.append("KW2480 : 'KW' '2480';\n"); - grammarBuilder.append("KW2481 : 'KW' '2481';\n"); - grammarBuilder.append("KW2482 : 'KW' '2482';\n"); - grammarBuilder.append("KW2483 : 'KW' '2483';\n"); - grammarBuilder.append("KW2484 : 'KW' '2484';\n"); - grammarBuilder.append("KW2485 : 'KW' '2485';\n"); - grammarBuilder.append("KW2486 : 'KW' '2486';\n"); - grammarBuilder.append("KW2487 : 'KW' '2487';\n"); - grammarBuilder.append("KW2488 : 'KW' '2488';\n"); - grammarBuilder.append("KW2489 : 'KW' '2489';\n"); - grammarBuilder.append("KW2490 : 'KW' '2490';\n"); - grammarBuilder.append("KW2491 : 'KW' '2491';\n"); - grammarBuilder.append("KW2492 : 'KW' '2492';\n"); - grammarBuilder.append("KW2493 : 'KW' '2493';\n"); - grammarBuilder.append("KW2494 : 'KW' '2494';\n"); - grammarBuilder.append("KW2495 : 'KW' '2495';\n"); - grammarBuilder.append("KW2496 : 'KW' '2496';\n"); - grammarBuilder.append("KW2497 : 'KW' '2497';\n"); - grammarBuilder.append("KW2498 : 'KW' '2498';\n"); - grammarBuilder.append("KW2499 : 'KW' '2499';\n"); - grammarBuilder.append("KW2500 : 'KW' '2500';\n"); - grammarBuilder.append("KW2501 : 'KW' '2501';\n"); - grammarBuilder.append("KW2502 : 'KW' '2502';\n"); - grammarBuilder.append("KW2503 : 'KW' '2503';\n"); - grammarBuilder.append("KW2504 : 'KW' '2504';\n"); - grammarBuilder.append("KW2505 : 'KW' '2505';\n"); - grammarBuilder.append("KW2506 : 'KW' '2506';\n"); - grammarBuilder.append("KW2507 : 'KW' '2507';\n"); - grammarBuilder.append("KW2508 : 'KW' '2508';\n"); - grammarBuilder.append("KW2509 : 'KW' '2509';\n"); - grammarBuilder.append("KW2510 : 'KW' '2510';\n"); - grammarBuilder.append("KW2511 : 'KW' '2511';\n"); - grammarBuilder.append("KW2512 : 'KW' '2512';\n"); - grammarBuilder.append("KW2513 : 'KW' '2513';\n"); - grammarBuilder.append("KW2514 : 'KW' '2514';\n"); - grammarBuilder.append("KW2515 : 'KW' '2515';\n"); - grammarBuilder.append("KW2516 : 'KW' '2516';\n"); - grammarBuilder.append("KW2517 : 'KW' '2517';\n"); - grammarBuilder.append("KW2518 : 'KW' '2518';\n"); - grammarBuilder.append("KW2519 : 'KW' '2519';\n"); - grammarBuilder.append("KW2520 : 'KW' '2520';\n"); - grammarBuilder.append("KW2521 : 'KW' '2521';\n"); - grammarBuilder.append("KW2522 : 'KW' '2522';\n"); - grammarBuilder.append("KW2523 : 'KW' '2523';\n"); - grammarBuilder.append("KW2524 : 'KW' '2524';\n"); - grammarBuilder.append("KW2525 : 'KW' '2525';\n"); - grammarBuilder.append("KW2526 : 'KW' '2526';\n"); - grammarBuilder.append("KW2527 : 'KW' '2527';\n"); - grammarBuilder.append("KW2528 : 'KW' '2528';\n"); - grammarBuilder.append("KW2529 : 'KW' '2529';\n"); - grammarBuilder.append("KW2530 : 'KW' '2530';\n"); - grammarBuilder.append("KW2531 : 'KW' '2531';\n"); - grammarBuilder.append("KW2532 : 'KW' '2532';\n"); - grammarBuilder.append("KW2533 : 'KW' '2533';\n"); - grammarBuilder.append("KW2534 : 'KW' '2534';\n"); - grammarBuilder.append("KW2535 : 'KW' '2535';\n"); - grammarBuilder.append("KW2536 : 'KW' '2536';\n"); - grammarBuilder.append("KW2537 : 'KW' '2537';\n"); - grammarBuilder.append("KW2538 : 'KW' '2538';\n"); - grammarBuilder.append("KW2539 : 'KW' '2539';\n"); - grammarBuilder.append("KW2540 : 'KW' '2540';\n"); - grammarBuilder.append("KW2541 : 'KW' '2541';\n"); - grammarBuilder.append("KW2542 : 'KW' '2542';\n"); - grammarBuilder.append("KW2543 : 'KW' '2543';\n"); - grammarBuilder.append("KW2544 : 'KW' '2544';\n"); - grammarBuilder.append("KW2545 : 'KW' '2545';\n"); - grammarBuilder.append("KW2546 : 'KW' '2546';\n"); - grammarBuilder.append("KW2547 : 'KW' '2547';\n"); - grammarBuilder.append("KW2548 : 'KW' '2548';\n"); - grammarBuilder.append("KW2549 : 'KW' '2549';\n"); - grammarBuilder.append("KW2550 : 'KW' '2550';\n"); - grammarBuilder.append("KW2551 : 'KW' '2551';\n"); - grammarBuilder.append("KW2552 : 'KW' '2552';\n"); - grammarBuilder.append("KW2553 : 'KW' '2553';\n"); - grammarBuilder.append("KW2554 : 'KW' '2554';\n"); - grammarBuilder.append("KW2555 : 'KW' '2555';\n"); - grammarBuilder.append("KW2556 : 'KW' '2556';\n"); - grammarBuilder.append("KW2557 : 'KW' '2557';\n"); - grammarBuilder.append("KW2558 : 'KW' '2558';\n"); - grammarBuilder.append("KW2559 : 'KW' '2559';\n"); - grammarBuilder.append("KW2560 : 'KW' '2560';\n"); - grammarBuilder.append("KW2561 : 'KW' '2561';\n"); - grammarBuilder.append("KW2562 : 'KW' '2562';\n"); - grammarBuilder.append("KW2563 : 'KW' '2563';\n"); - grammarBuilder.append("KW2564 : 'KW' '2564';\n"); - grammarBuilder.append("KW2565 : 'KW' '2565';\n"); - grammarBuilder.append("KW2566 : 'KW' '2566';\n"); - grammarBuilder.append("KW2567 : 'KW' '2567';\n"); - grammarBuilder.append("KW2568 : 'KW' '2568';\n"); - grammarBuilder.append("KW2569 : 'KW' '2569';\n"); - grammarBuilder.append("KW2570 : 'KW' '2570';\n"); - grammarBuilder.append("KW2571 : 'KW' '2571';\n"); - grammarBuilder.append("KW2572 : 'KW' '2572';\n"); - grammarBuilder.append("KW2573 : 'KW' '2573';\n"); - grammarBuilder.append("KW2574 : 'KW' '2574';\n"); - grammarBuilder.append("KW2575 : 'KW' '2575';\n"); - grammarBuilder.append("KW2576 : 'KW' '2576';\n"); - grammarBuilder.append("KW2577 : 'KW' '2577';\n"); - grammarBuilder.append("KW2578 : 'KW' '2578';\n"); - grammarBuilder.append("KW2579 : 'KW' '2579';\n"); - grammarBuilder.append("KW2580 : 'KW' '2580';\n"); - grammarBuilder.append("KW2581 : 'KW' '2581';\n"); - grammarBuilder.append("KW2582 : 'KW' '2582';\n"); - grammarBuilder.append("KW2583 : 'KW' '2583';\n"); - grammarBuilder.append("KW2584 : 'KW' '2584';\n"); - grammarBuilder.append("KW2585 : 'KW' '2585';\n"); - grammarBuilder.append("KW2586 : 'KW' '2586';\n"); - grammarBuilder.append("KW2587 : 'KW' '2587';\n"); - grammarBuilder.append("KW2588 : 'KW' '2588';\n"); - grammarBuilder.append("KW2589 : 'KW' '2589';\n"); - grammarBuilder.append("KW2590 : 'KW' '2590';\n"); - grammarBuilder.append("KW2591 : 'KW' '2591';\n"); - grammarBuilder.append("KW2592 : 'KW' '2592';\n"); - grammarBuilder.append("KW2593 : 'KW' '2593';\n"); - grammarBuilder.append("KW2594 : 'KW' '2594';\n"); - grammarBuilder.append("KW2595 : 'KW' '2595';\n"); - grammarBuilder.append("KW2596 : 'KW' '2596';\n"); - grammarBuilder.append("KW2597 : 'KW' '2597';\n"); - grammarBuilder.append("KW2598 : 'KW' '2598';\n"); - grammarBuilder.append("KW2599 : 'KW' '2599';\n"); - grammarBuilder.append("KW2600 : 'KW' '2600';\n"); - grammarBuilder.append("KW2601 : 'KW' '2601';\n"); - grammarBuilder.append("KW2602 : 'KW' '2602';\n"); - grammarBuilder.append("KW2603 : 'KW' '2603';\n"); - grammarBuilder.append("KW2604 : 'KW' '2604';\n"); - grammarBuilder.append("KW2605 : 'KW' '2605';\n"); - grammarBuilder.append("KW2606 : 'KW' '2606';\n"); - grammarBuilder.append("KW2607 : 'KW' '2607';\n"); - grammarBuilder.append("KW2608 : 'KW' '2608';\n"); - grammarBuilder.append("KW2609 : 'KW' '2609';\n"); - grammarBuilder.append("KW2610 : 'KW' '2610';\n"); - grammarBuilder.append("KW2611 : 'KW' '2611';\n"); - grammarBuilder.append("KW2612 : 'KW' '2612';\n"); - grammarBuilder.append("KW2613 : 'KW' '2613';\n"); - grammarBuilder.append("KW2614 : 'KW' '2614';\n"); - grammarBuilder.append("KW2615 : 'KW' '2615';\n"); - grammarBuilder.append("KW2616 : 'KW' '2616';\n"); - grammarBuilder.append("KW2617 : 'KW' '2617';\n"); - grammarBuilder.append("KW2618 : 'KW' '2618';\n"); - grammarBuilder.append("KW2619 : 'KW' '2619';\n"); - grammarBuilder.append("KW2620 : 'KW' '2620';\n"); - grammarBuilder.append("KW2621 : 'KW' '2621';\n"); - grammarBuilder.append("KW2622 : 'KW' '2622';\n"); - grammarBuilder.append("KW2623 : 'KW' '2623';\n"); - grammarBuilder.append("KW2624 : 'KW' '2624';\n"); - grammarBuilder.append("KW2625 : 'KW' '2625';\n"); - grammarBuilder.append("KW2626 : 'KW' '2626';\n"); - grammarBuilder.append("KW2627 : 'KW' '2627';\n"); - grammarBuilder.append("KW2628 : 'KW' '2628';\n"); - grammarBuilder.append("KW2629 : 'KW' '2629';\n"); - grammarBuilder.append("KW2630 : 'KW' '2630';\n"); - grammarBuilder.append("KW2631 : 'KW' '2631';\n"); - grammarBuilder.append("KW2632 : 'KW' '2632';\n"); - grammarBuilder.append("KW2633 : 'KW' '2633';\n"); - grammarBuilder.append("KW2634 : 'KW' '2634';\n"); - grammarBuilder.append("KW2635 : 'KW' '2635';\n"); - grammarBuilder.append("KW2636 : 'KW' '2636';\n"); - grammarBuilder.append("KW2637 : 'KW' '2637';\n"); - grammarBuilder.append("KW2638 : 'KW' '2638';\n"); - grammarBuilder.append("KW2639 : 'KW' '2639';\n"); - grammarBuilder.append("KW2640 : 'KW' '2640';\n"); - grammarBuilder.append("KW2641 : 'KW' '2641';\n"); - grammarBuilder.append("KW2642 : 'KW' '2642';\n"); - grammarBuilder.append("KW2643 : 'KW' '2643';\n"); - grammarBuilder.append("KW2644 : 'KW' '2644';\n"); - grammarBuilder.append("KW2645 : 'KW' '2645';\n"); - grammarBuilder.append("KW2646 : 'KW' '2646';\n"); - grammarBuilder.append("KW2647 : 'KW' '2647';\n"); - grammarBuilder.append("KW2648 : 'KW' '2648';\n"); - grammarBuilder.append("KW2649 : 'KW' '2649';\n"); - grammarBuilder.append("KW2650 : 'KW' '2650';\n"); - grammarBuilder.append("KW2651 : 'KW' '2651';\n"); - grammarBuilder.append("KW2652 : 'KW' '2652';\n"); - grammarBuilder.append("KW2653 : 'KW' '2653';\n"); - grammarBuilder.append("KW2654 : 'KW' '2654';\n"); - grammarBuilder.append("KW2655 : 'KW' '2655';\n"); - grammarBuilder.append("KW2656 : 'KW' '2656';\n"); - grammarBuilder.append("KW2657 : 'KW' '2657';\n"); - grammarBuilder.append("KW2658 : 'KW' '2658';\n"); - grammarBuilder.append("KW2659 : 'KW' '2659';\n"); - grammarBuilder.append("KW2660 : 'KW' '2660';\n"); - grammarBuilder.append("KW2661 : 'KW' '2661';\n"); - grammarBuilder.append("KW2662 : 'KW' '2662';\n"); - grammarBuilder.append("KW2663 : 'KW' '2663';\n"); - grammarBuilder.append("KW2664 : 'KW' '2664';\n"); - grammarBuilder.append("KW2665 : 'KW' '2665';\n"); - grammarBuilder.append("KW2666 : 'KW' '2666';\n"); - grammarBuilder.append("KW2667 : 'KW' '2667';\n"); - grammarBuilder.append("KW2668 : 'KW' '2668';\n"); - grammarBuilder.append("KW2669 : 'KW' '2669';\n"); - grammarBuilder.append("KW2670 : 'KW' '2670';\n"); - grammarBuilder.append("KW2671 : 'KW' '2671';\n"); - grammarBuilder.append("KW2672 : 'KW' '2672';\n"); - grammarBuilder.append("KW2673 : 'KW' '2673';\n"); - grammarBuilder.append("KW2674 : 'KW' '2674';\n"); - grammarBuilder.append("KW2675 : 'KW' '2675';\n"); - grammarBuilder.append("KW2676 : 'KW' '2676';\n"); - grammarBuilder.append("KW2677 : 'KW' '2677';\n"); - grammarBuilder.append("KW2678 : 'KW' '2678';\n"); - grammarBuilder.append("KW2679 : 'KW' '2679';\n"); - grammarBuilder.append("KW2680 : 'KW' '2680';\n"); - grammarBuilder.append("KW2681 : 'KW' '2681';\n"); - grammarBuilder.append("KW2682 : 'KW' '2682';\n"); - grammarBuilder.append("KW2683 : 'KW' '2683';\n"); - grammarBuilder.append("KW2684 : 'KW' '2684';\n"); - grammarBuilder.append("KW2685 : 'KW' '2685';\n"); - grammarBuilder.append("KW2686 : 'KW' '2686';\n"); - grammarBuilder.append("KW2687 : 'KW' '2687';\n"); - grammarBuilder.append("KW2688 : 'KW' '2688';\n"); - grammarBuilder.append("KW2689 : 'KW' '2689';\n"); - grammarBuilder.append("KW2690 : 'KW' '2690';\n"); - grammarBuilder.append("KW2691 : 'KW' '2691';\n"); - grammarBuilder.append("KW2692 : 'KW' '2692';\n"); - grammarBuilder.append("KW2693 : 'KW' '2693';\n"); - grammarBuilder.append("KW2694 : 'KW' '2694';\n"); - grammarBuilder.append("KW2695 : 'KW' '2695';\n"); - grammarBuilder.append("KW2696 : 'KW' '2696';\n"); - grammarBuilder.append("KW2697 : 'KW' '2697';\n"); - grammarBuilder.append("KW2698 : 'KW' '2698';\n"); - grammarBuilder.append("KW2699 : 'KW' '2699';\n"); - grammarBuilder.append("KW2700 : 'KW' '2700';\n"); - grammarBuilder.append("KW2701 : 'KW' '2701';\n"); - grammarBuilder.append("KW2702 : 'KW' '2702';\n"); - grammarBuilder.append("KW2703 : 'KW' '2703';\n"); - grammarBuilder.append("KW2704 : 'KW' '2704';\n"); - grammarBuilder.append("KW2705 : 'KW' '2705';\n"); - grammarBuilder.append("KW2706 : 'KW' '2706';\n"); - grammarBuilder.append("KW2707 : 'KW' '2707';\n"); - grammarBuilder.append("KW2708 : 'KW' '2708';\n"); - grammarBuilder.append("KW2709 : 'KW' '2709';\n"); - grammarBuilder.append("KW2710 : 'KW' '2710';\n"); - grammarBuilder.append("KW2711 : 'KW' '2711';\n"); - grammarBuilder.append("KW2712 : 'KW' '2712';\n"); - grammarBuilder.append("KW2713 : 'KW' '2713';\n"); - grammarBuilder.append("KW2714 : 'KW' '2714';\n"); - grammarBuilder.append("KW2715 : 'KW' '2715';\n"); - grammarBuilder.append("KW2716 : 'KW' '2716';\n"); - grammarBuilder.append("KW2717 : 'KW' '2717';\n"); - grammarBuilder.append("KW2718 : 'KW' '2718';\n"); - grammarBuilder.append("KW2719 : 'KW' '2719';\n"); - grammarBuilder.append("KW2720 : 'KW' '2720';\n"); - grammarBuilder.append("KW2721 : 'KW' '2721';\n"); - grammarBuilder.append("KW2722 : 'KW' '2722';\n"); - grammarBuilder.append("KW2723 : 'KW' '2723';\n"); - grammarBuilder.append("KW2724 : 'KW' '2724';\n"); - grammarBuilder.append("KW2725 : 'KW' '2725';\n"); - grammarBuilder.append("KW2726 : 'KW' '2726';\n"); - grammarBuilder.append("KW2727 : 'KW' '2727';\n"); - grammarBuilder.append("KW2728 : 'KW' '2728';\n"); - grammarBuilder.append("KW2729 : 'KW' '2729';\n"); - grammarBuilder.append("KW2730 : 'KW' '2730';\n"); - grammarBuilder.append("KW2731 : 'KW' '2731';\n"); - grammarBuilder.append("KW2732 : 'KW' '2732';\n"); - grammarBuilder.append("KW2733 : 'KW' '2733';\n"); - grammarBuilder.append("KW2734 : 'KW' '2734';\n"); - grammarBuilder.append("KW2735 : 'KW' '2735';\n"); - grammarBuilder.append("KW2736 : 'KW' '2736';\n"); - grammarBuilder.append("KW2737 : 'KW' '2737';\n"); - grammarBuilder.append("KW2738 : 'KW' '2738';\n"); - grammarBuilder.append("KW2739 : 'KW' '2739';\n"); - grammarBuilder.append("KW2740 : 'KW' '2740';\n"); - grammarBuilder.append("KW2741 : 'KW' '2741';\n"); - grammarBuilder.append("KW2742 : 'KW' '2742';\n"); - grammarBuilder.append("KW2743 : 'KW' '2743';\n"); - grammarBuilder.append("KW2744 : 'KW' '2744';\n"); - grammarBuilder.append("KW2745 : 'KW' '2745';\n"); - grammarBuilder.append("KW2746 : 'KW' '2746';\n"); - grammarBuilder.append("KW2747 : 'KW' '2747';\n"); - grammarBuilder.append("KW2748 : 'KW' '2748';\n"); - grammarBuilder.append("KW2749 : 'KW' '2749';\n"); - grammarBuilder.append("KW2750 : 'KW' '2750';\n"); - grammarBuilder.append("KW2751 : 'KW' '2751';\n"); - grammarBuilder.append("KW2752 : 'KW' '2752';\n"); - grammarBuilder.append("KW2753 : 'KW' '2753';\n"); - grammarBuilder.append("KW2754 : 'KW' '2754';\n"); - grammarBuilder.append("KW2755 : 'KW' '2755';\n"); - grammarBuilder.append("KW2756 : 'KW' '2756';\n"); - grammarBuilder.append("KW2757 : 'KW' '2757';\n"); - grammarBuilder.append("KW2758 : 'KW' '2758';\n"); - grammarBuilder.append("KW2759 : 'KW' '2759';\n"); - grammarBuilder.append("KW2760 : 'KW' '2760';\n"); - grammarBuilder.append("KW2761 : 'KW' '2761';\n"); - grammarBuilder.append("KW2762 : 'KW' '2762';\n"); - grammarBuilder.append("KW2763 : 'KW' '2763';\n"); - grammarBuilder.append("KW2764 : 'KW' '2764';\n"); - grammarBuilder.append("KW2765 : 'KW' '2765';\n"); - grammarBuilder.append("KW2766 : 'KW' '2766';\n"); - grammarBuilder.append("KW2767 : 'KW' '2767';\n"); - grammarBuilder.append("KW2768 : 'KW' '2768';\n"); - grammarBuilder.append("KW2769 : 'KW' '2769';\n"); - grammarBuilder.append("KW2770 : 'KW' '2770';\n"); - grammarBuilder.append("KW2771 : 'KW' '2771';\n"); - grammarBuilder.append("KW2772 : 'KW' '2772';\n"); - grammarBuilder.append("KW2773 : 'KW' '2773';\n"); - grammarBuilder.append("KW2774 : 'KW' '2774';\n"); - grammarBuilder.append("KW2775 : 'KW' '2775';\n"); - grammarBuilder.append("KW2776 : 'KW' '2776';\n"); - grammarBuilder.append("KW2777 : 'KW' '2777';\n"); - grammarBuilder.append("KW2778 : 'KW' '2778';\n"); - grammarBuilder.append("KW2779 : 'KW' '2779';\n"); - grammarBuilder.append("KW2780 : 'KW' '2780';\n"); - grammarBuilder.append("KW2781 : 'KW' '2781';\n"); - grammarBuilder.append("KW2782 : 'KW' '2782';\n"); - grammarBuilder.append("KW2783 : 'KW' '2783';\n"); - grammarBuilder.append("KW2784 : 'KW' '2784';\n"); - grammarBuilder.append("KW2785 : 'KW' '2785';\n"); - grammarBuilder.append("KW2786 : 'KW' '2786';\n"); - grammarBuilder.append("KW2787 : 'KW' '2787';\n"); - grammarBuilder.append("KW2788 : 'KW' '2788';\n"); - grammarBuilder.append("KW2789 : 'KW' '2789';\n"); - grammarBuilder.append("KW2790 : 'KW' '2790';\n"); - grammarBuilder.append("KW2791 : 'KW' '2791';\n"); - grammarBuilder.append("KW2792 : 'KW' '2792';\n"); - grammarBuilder.append("KW2793 : 'KW' '2793';\n"); - grammarBuilder.append("KW2794 : 'KW' '2794';\n"); - grammarBuilder.append("KW2795 : 'KW' '2795';\n"); - grammarBuilder.append("KW2796 : 'KW' '2796';\n"); - grammarBuilder.append("KW2797 : 'KW' '2797';\n"); - grammarBuilder.append("KW2798 : 'KW' '2798';\n"); - grammarBuilder.append("KW2799 : 'KW' '2799';\n"); - grammarBuilder.append("KW2800 : 'KW' '2800';\n"); - grammarBuilder.append("KW2801 : 'KW' '2801';\n"); - grammarBuilder.append("KW2802 : 'KW' '2802';\n"); - grammarBuilder.append("KW2803 : 'KW' '2803';\n"); - grammarBuilder.append("KW2804 : 'KW' '2804';\n"); - grammarBuilder.append("KW2805 : 'KW' '2805';\n"); - grammarBuilder.append("KW2806 : 'KW' '2806';\n"); - grammarBuilder.append("KW2807 : 'KW' '2807';\n"); - grammarBuilder.append("KW2808 : 'KW' '2808';\n"); - grammarBuilder.append("KW2809 : 'KW' '2809';\n"); - grammarBuilder.append("KW2810 : 'KW' '2810';\n"); - grammarBuilder.append("KW2811 : 'KW' '2811';\n"); - grammarBuilder.append("KW2812 : 'KW' '2812';\n"); - grammarBuilder.append("KW2813 : 'KW' '2813';\n"); - grammarBuilder.append("KW2814 : 'KW' '2814';\n"); - grammarBuilder.append("KW2815 : 'KW' '2815';\n"); - grammarBuilder.append("KW2816 : 'KW' '2816';\n"); - grammarBuilder.append("KW2817 : 'KW' '2817';\n"); - grammarBuilder.append("KW2818 : 'KW' '2818';\n"); - grammarBuilder.append("KW2819 : 'KW' '2819';\n"); - grammarBuilder.append("KW2820 : 'KW' '2820';\n"); - grammarBuilder.append("KW2821 : 'KW' '2821';\n"); - grammarBuilder.append("KW2822 : 'KW' '2822';\n"); - grammarBuilder.append("KW2823 : 'KW' '2823';\n"); - grammarBuilder.append("KW2824 : 'KW' '2824';\n"); - grammarBuilder.append("KW2825 : 'KW' '2825';\n"); - grammarBuilder.append("KW2826 : 'KW' '2826';\n"); - grammarBuilder.append("KW2827 : 'KW' '2827';\n"); - grammarBuilder.append("KW2828 : 'KW' '2828';\n"); - grammarBuilder.append("KW2829 : 'KW' '2829';\n"); - grammarBuilder.append("KW2830 : 'KW' '2830';\n"); - grammarBuilder.append("KW2831 : 'KW' '2831';\n"); - grammarBuilder.append("KW2832 : 'KW' '2832';\n"); - grammarBuilder.append("KW2833 : 'KW' '2833';\n"); - grammarBuilder.append("KW2834 : 'KW' '2834';\n"); - grammarBuilder.append("KW2835 : 'KW' '2835';\n"); - grammarBuilder.append("KW2836 : 'KW' '2836';\n"); - grammarBuilder.append("KW2837 : 'KW' '2837';\n"); - grammarBuilder.append("KW2838 : 'KW' '2838';\n"); - grammarBuilder.append("KW2839 : 'KW' '2839';\n"); - grammarBuilder.append("KW2840 : 'KW' '2840';\n"); - grammarBuilder.append("KW2841 : 'KW' '2841';\n"); - grammarBuilder.append("KW2842 : 'KW' '2842';\n"); - grammarBuilder.append("KW2843 : 'KW' '2843';\n"); - grammarBuilder.append("KW2844 : 'KW' '2844';\n"); - grammarBuilder.append("KW2845 : 'KW' '2845';\n"); - grammarBuilder.append("KW2846 : 'KW' '2846';\n"); - grammarBuilder.append("KW2847 : 'KW' '2847';\n"); - grammarBuilder.append("KW2848 : 'KW' '2848';\n"); - grammarBuilder.append("KW2849 : 'KW' '2849';\n"); - grammarBuilder.append("KW2850 : 'KW' '2850';\n"); - grammarBuilder.append("KW2851 : 'KW' '2851';\n"); - grammarBuilder.append("KW2852 : 'KW' '2852';\n"); - grammarBuilder.append("KW2853 : 'KW' '2853';\n"); - grammarBuilder.append("KW2854 : 'KW' '2854';\n"); - grammarBuilder.append("KW2855 : 'KW' '2855';\n"); - grammarBuilder.append("KW2856 : 'KW' '2856';\n"); - grammarBuilder.append("KW2857 : 'KW' '2857';\n"); - grammarBuilder.append("KW2858 : 'KW' '2858';\n"); - grammarBuilder.append("KW2859 : 'KW' '2859';\n"); - grammarBuilder.append("KW2860 : 'KW' '2860';\n"); - grammarBuilder.append("KW2861 : 'KW' '2861';\n"); - grammarBuilder.append("KW2862 : 'KW' '2862';\n"); - grammarBuilder.append("KW2863 : 'KW' '2863';\n"); - grammarBuilder.append("KW2864 : 'KW' '2864';\n"); - grammarBuilder.append("KW2865 : 'KW' '2865';\n"); - grammarBuilder.append("KW2866 : 'KW' '2866';\n"); - grammarBuilder.append("KW2867 : 'KW' '2867';\n"); - grammarBuilder.append("KW2868 : 'KW' '2868';\n"); - grammarBuilder.append("KW2869 : 'KW' '2869';\n"); - grammarBuilder.append("KW2870 : 'KW' '2870';\n"); - grammarBuilder.append("KW2871 : 'KW' '2871';\n"); - grammarBuilder.append("KW2872 : 'KW' '2872';\n"); - grammarBuilder.append("KW2873 : 'KW' '2873';\n"); - grammarBuilder.append("KW2874 : 'KW' '2874';\n"); - grammarBuilder.append("KW2875 : 'KW' '2875';\n"); - grammarBuilder.append("KW2876 : 'KW' '2876';\n"); - grammarBuilder.append("KW2877 : 'KW' '2877';\n"); - grammarBuilder.append("KW2878 : 'KW' '2878';\n"); - grammarBuilder.append("KW2879 : 'KW' '2879';\n"); - grammarBuilder.append("KW2880 : 'KW' '2880';\n"); - grammarBuilder.append("KW2881 : 'KW' '2881';\n"); - grammarBuilder.append("KW2882 : 'KW' '2882';\n"); - grammarBuilder.append("KW2883 : 'KW' '2883';\n"); - grammarBuilder.append("KW2884 : 'KW' '2884';\n"); - grammarBuilder.append("KW2885 : 'KW' '2885';\n"); - grammarBuilder.append("KW2886 : 'KW' '2886';\n"); - grammarBuilder.append("KW2887 : 'KW' '2887';\n"); - grammarBuilder.append("KW2888 : 'KW' '2888';\n"); - grammarBuilder.append("KW2889 : 'KW' '2889';\n"); - grammarBuilder.append("KW2890 : 'KW' '2890';\n"); - grammarBuilder.append("KW2891 : 'KW' '2891';\n"); - grammarBuilder.append("KW2892 : 'KW' '2892';\n"); - grammarBuilder.append("KW2893 : 'KW' '2893';\n"); - grammarBuilder.append("KW2894 : 'KW' '2894';\n"); - grammarBuilder.append("KW2895 : 'KW' '2895';\n"); - grammarBuilder.append("KW2896 : 'KW' '2896';\n"); - grammarBuilder.append("KW2897 : 'KW' '2897';\n"); - grammarBuilder.append("KW2898 : 'KW' '2898';\n"); - grammarBuilder.append("KW2899 : 'KW' '2899';\n"); - grammarBuilder.append("KW2900 : 'KW' '2900';\n"); - grammarBuilder.append("KW2901 : 'KW' '2901';\n"); - grammarBuilder.append("KW2902 : 'KW' '2902';\n"); - grammarBuilder.append("KW2903 : 'KW' '2903';\n"); - grammarBuilder.append("KW2904 : 'KW' '2904';\n"); - grammarBuilder.append("KW2905 : 'KW' '2905';\n"); - grammarBuilder.append("KW2906 : 'KW' '2906';\n"); - grammarBuilder.append("KW2907 : 'KW' '2907';\n"); - grammarBuilder.append("KW2908 : 'KW' '2908';\n"); - grammarBuilder.append("KW2909 : 'KW' '2909';\n"); - grammarBuilder.append("KW2910 : 'KW' '2910';\n"); - grammarBuilder.append("KW2911 : 'KW' '2911';\n"); - grammarBuilder.append("KW2912 : 'KW' '2912';\n"); - grammarBuilder.append("KW2913 : 'KW' '2913';\n"); - grammarBuilder.append("KW2914 : 'KW' '2914';\n"); - grammarBuilder.append("KW2915 : 'KW' '2915';\n"); - grammarBuilder.append("KW2916 : 'KW' '2916';\n"); - grammarBuilder.append("KW2917 : 'KW' '2917';\n"); - grammarBuilder.append("KW2918 : 'KW' '2918';\n"); - grammarBuilder.append("KW2919 : 'KW' '2919';\n"); - grammarBuilder.append("KW2920 : 'KW' '2920';\n"); - grammarBuilder.append("KW2921 : 'KW' '2921';\n"); - grammarBuilder.append("KW2922 : 'KW' '2922';\n"); - grammarBuilder.append("KW2923 : 'KW' '2923';\n"); - grammarBuilder.append("KW2924 : 'KW' '2924';\n"); - grammarBuilder.append("KW2925 : 'KW' '2925';\n"); - grammarBuilder.append("KW2926 : 'KW' '2926';\n"); - grammarBuilder.append("KW2927 : 'KW' '2927';\n"); - grammarBuilder.append("KW2928 : 'KW' '2928';\n"); - grammarBuilder.append("KW2929 : 'KW' '2929';\n"); - grammarBuilder.append("KW2930 : 'KW' '2930';\n"); - grammarBuilder.append("KW2931 : 'KW' '2931';\n"); - grammarBuilder.append("KW2932 : 'KW' '2932';\n"); - grammarBuilder.append("KW2933 : 'KW' '2933';\n"); - grammarBuilder.append("KW2934 : 'KW' '2934';\n"); - grammarBuilder.append("KW2935 : 'KW' '2935';\n"); - grammarBuilder.append("KW2936 : 'KW' '2936';\n"); - grammarBuilder.append("KW2937 : 'KW' '2937';\n"); - grammarBuilder.append("KW2938 : 'KW' '2938';\n"); - grammarBuilder.append("KW2939 : 'KW' '2939';\n"); - grammarBuilder.append("KW2940 : 'KW' '2940';\n"); - grammarBuilder.append("KW2941 : 'KW' '2941';\n"); - grammarBuilder.append("KW2942 : 'KW' '2942';\n"); - grammarBuilder.append("KW2943 : 'KW' '2943';\n"); - grammarBuilder.append("KW2944 : 'KW' '2944';\n"); - grammarBuilder.append("KW2945 : 'KW' '2945';\n"); - grammarBuilder.append("KW2946 : 'KW' '2946';\n"); - grammarBuilder.append("KW2947 : 'KW' '2947';\n"); - grammarBuilder.append("KW2948 : 'KW' '2948';\n"); - grammarBuilder.append("KW2949 : 'KW' '2949';\n"); - grammarBuilder.append("KW2950 : 'KW' '2950';\n"); - grammarBuilder.append("KW2951 : 'KW' '2951';\n"); - grammarBuilder.append("KW2952 : 'KW' '2952';\n"); - grammarBuilder.append("KW2953 : 'KW' '2953';\n"); - grammarBuilder.append("KW2954 : 'KW' '2954';\n"); - grammarBuilder.append("KW2955 : 'KW' '2955';\n"); - grammarBuilder.append("KW2956 : 'KW' '2956';\n"); - grammarBuilder.append("KW2957 : 'KW' '2957';\n"); - grammarBuilder.append("KW2958 : 'KW' '2958';\n"); - grammarBuilder.append("KW2959 : 'KW' '2959';\n"); - grammarBuilder.append("KW2960 : 'KW' '2960';\n"); - grammarBuilder.append("KW2961 : 'KW' '2961';\n"); - grammarBuilder.append("KW2962 : 'KW' '2962';\n"); - grammarBuilder.append("KW2963 : 'KW' '2963';\n"); - grammarBuilder.append("KW2964 : 'KW' '2964';\n"); - grammarBuilder.append("KW2965 : 'KW' '2965';\n"); - grammarBuilder.append("KW2966 : 'KW' '2966';\n"); - grammarBuilder.append("KW2967 : 'KW' '2967';\n"); - grammarBuilder.append("KW2968 : 'KW' '2968';\n"); - grammarBuilder.append("KW2969 : 'KW' '2969';\n"); - grammarBuilder.append("KW2970 : 'KW' '2970';\n"); - grammarBuilder.append("KW2971 : 'KW' '2971';\n"); - grammarBuilder.append("KW2972 : 'KW' '2972';\n"); - grammarBuilder.append("KW2973 : 'KW' '2973';\n"); - grammarBuilder.append("KW2974 : 'KW' '2974';\n"); - grammarBuilder.append("KW2975 : 'KW' '2975';\n"); - grammarBuilder.append("KW2976 : 'KW' '2976';\n"); - grammarBuilder.append("KW2977 : 'KW' '2977';\n"); - grammarBuilder.append("KW2978 : 'KW' '2978';\n"); - grammarBuilder.append("KW2979 : 'KW' '2979';\n"); - grammarBuilder.append("KW2980 : 'KW' '2980';\n"); - grammarBuilder.append("KW2981 : 'KW' '2981';\n"); - grammarBuilder.append("KW2982 : 'KW' '2982';\n"); - grammarBuilder.append("KW2983 : 'KW' '2983';\n"); - grammarBuilder.append("KW2984 : 'KW' '2984';\n"); - grammarBuilder.append("KW2985 : 'KW' '2985';\n"); - grammarBuilder.append("KW2986 : 'KW' '2986';\n"); - grammarBuilder.append("KW2987 : 'KW' '2987';\n"); - grammarBuilder.append("KW2988 : 'KW' '2988';\n"); - grammarBuilder.append("KW2989 : 'KW' '2989';\n"); - grammarBuilder.append("KW2990 : 'KW' '2990';\n"); - grammarBuilder.append("KW2991 : 'KW' '2991';\n"); - grammarBuilder.append("KW2992 : 'KW' '2992';\n"); - grammarBuilder.append("KW2993 : 'KW' '2993';\n"); - grammarBuilder.append("KW2994 : 'KW' '2994';\n"); - grammarBuilder.append("KW2995 : 'KW' '2995';\n"); - grammarBuilder.append("KW2996 : 'KW' '2996';\n"); - grammarBuilder.append("KW2997 : 'KW' '2997';\n"); - grammarBuilder.append("KW2998 : 'KW' '2998';\n"); - grammarBuilder.append("KW2999 : 'KW' '2999';\n"); - grammarBuilder.append("KW3000 : 'KW' '3000';\n"); - grammarBuilder.append("KW3001 : 'KW' '3001';\n"); - grammarBuilder.append("KW3002 : 'KW' '3002';\n"); - grammarBuilder.append("KW3003 : 'KW' '3003';\n"); - grammarBuilder.append("KW3004 : 'KW' '3004';\n"); - grammarBuilder.append("KW3005 : 'KW' '3005';\n"); - grammarBuilder.append("KW3006 : 'KW' '3006';\n"); - grammarBuilder.append("KW3007 : 'KW' '3007';\n"); - grammarBuilder.append("KW3008 : 'KW' '3008';\n"); - grammarBuilder.append("KW3009 : 'KW' '3009';\n"); - grammarBuilder.append("KW3010 : 'KW' '3010';\n"); - grammarBuilder.append("KW3011 : 'KW' '3011';\n"); - grammarBuilder.append("KW3012 : 'KW' '3012';\n"); - grammarBuilder.append("KW3013 : 'KW' '3013';\n"); - grammarBuilder.append("KW3014 : 'KW' '3014';\n"); - grammarBuilder.append("KW3015 : 'KW' '3015';\n"); - grammarBuilder.append("KW3016 : 'KW' '3016';\n"); - grammarBuilder.append("KW3017 : 'KW' '3017';\n"); - grammarBuilder.append("KW3018 : 'KW' '3018';\n"); - grammarBuilder.append("KW3019 : 'KW' '3019';\n"); - grammarBuilder.append("KW3020 : 'KW' '3020';\n"); - grammarBuilder.append("KW3021 : 'KW' '3021';\n"); - grammarBuilder.append("KW3022 : 'KW' '3022';\n"); - grammarBuilder.append("KW3023 : 'KW' '3023';\n"); - grammarBuilder.append("KW3024 : 'KW' '3024';\n"); - grammarBuilder.append("KW3025 : 'KW' '3025';\n"); - grammarBuilder.append("KW3026 : 'KW' '3026';\n"); - grammarBuilder.append("KW3027 : 'KW' '3027';\n"); - grammarBuilder.append("KW3028 : 'KW' '3028';\n"); - grammarBuilder.append("KW3029 : 'KW' '3029';\n"); - grammarBuilder.append("KW3030 : 'KW' '3030';\n"); - grammarBuilder.append("KW3031 : 'KW' '3031';\n"); - grammarBuilder.append("KW3032 : 'KW' '3032';\n"); - grammarBuilder.append("KW3033 : 'KW' '3033';\n"); - grammarBuilder.append("KW3034 : 'KW' '3034';\n"); - grammarBuilder.append("KW3035 : 'KW' '3035';\n"); - grammarBuilder.append("KW3036 : 'KW' '3036';\n"); - grammarBuilder.append("KW3037 : 'KW' '3037';\n"); - grammarBuilder.append("KW3038 : 'KW' '3038';\n"); - grammarBuilder.append("KW3039 : 'KW' '3039';\n"); - grammarBuilder.append("KW3040 : 'KW' '3040';\n"); - grammarBuilder.append("KW3041 : 'KW' '3041';\n"); - grammarBuilder.append("KW3042 : 'KW' '3042';\n"); - grammarBuilder.append("KW3043 : 'KW' '3043';\n"); - grammarBuilder.append("KW3044 : 'KW' '3044';\n"); - grammarBuilder.append("KW3045 : 'KW' '3045';\n"); - grammarBuilder.append("KW3046 : 'KW' '3046';\n"); - grammarBuilder.append("KW3047 : 'KW' '3047';\n"); - grammarBuilder.append("KW3048 : 'KW' '3048';\n"); - grammarBuilder.append("KW3049 : 'KW' '3049';\n"); - grammarBuilder.append("KW3050 : 'KW' '3050';\n"); - grammarBuilder.append("KW3051 : 'KW' '3051';\n"); - grammarBuilder.append("KW3052 : 'KW' '3052';\n"); - grammarBuilder.append("KW3053 : 'KW' '3053';\n"); - grammarBuilder.append("KW3054 : 'KW' '3054';\n"); - grammarBuilder.append("KW3055 : 'KW' '3055';\n"); - grammarBuilder.append("KW3056 : 'KW' '3056';\n"); - grammarBuilder.append("KW3057 : 'KW' '3057';\n"); - grammarBuilder.append("KW3058 : 'KW' '3058';\n"); - grammarBuilder.append("KW3059 : 'KW' '3059';\n"); - grammarBuilder.append("KW3060 : 'KW' '3060';\n"); - grammarBuilder.append("KW3061 : 'KW' '3061';\n"); - grammarBuilder.append("KW3062 : 'KW' '3062';\n"); - grammarBuilder.append("KW3063 : 'KW' '3063';\n"); - grammarBuilder.append("KW3064 : 'KW' '3064';\n"); - grammarBuilder.append("KW3065 : 'KW' '3065';\n"); - grammarBuilder.append("KW3066 : 'KW' '3066';\n"); - grammarBuilder.append("KW3067 : 'KW' '3067';\n"); - grammarBuilder.append("KW3068 : 'KW' '3068';\n"); - grammarBuilder.append("KW3069 : 'KW' '3069';\n"); - grammarBuilder.append("KW3070 : 'KW' '3070';\n"); - grammarBuilder.append("KW3071 : 'KW' '3071';\n"); - grammarBuilder.append("KW3072 : 'KW' '3072';\n"); - grammarBuilder.append("KW3073 : 'KW' '3073';\n"); - grammarBuilder.append("KW3074 : 'KW' '3074';\n"); - grammarBuilder.append("KW3075 : 'KW' '3075';\n"); - grammarBuilder.append("KW3076 : 'KW' '3076';\n"); - grammarBuilder.append("KW3077 : 'KW' '3077';\n"); - grammarBuilder.append("KW3078 : 'KW' '3078';\n"); - grammarBuilder.append("KW3079 : 'KW' '3079';\n"); - grammarBuilder.append("KW3080 : 'KW' '3080';\n"); - grammarBuilder.append("KW3081 : 'KW' '3081';\n"); - grammarBuilder.append("KW3082 : 'KW' '3082';\n"); - grammarBuilder.append("KW3083 : 'KW' '3083';\n"); - grammarBuilder.append("KW3084 : 'KW' '3084';\n"); - grammarBuilder.append("KW3085 : 'KW' '3085';\n"); - grammarBuilder.append("KW3086 : 'KW' '3086';\n"); - grammarBuilder.append("KW3087 : 'KW' '3087';\n"); - grammarBuilder.append("KW3088 : 'KW' '3088';\n"); - grammarBuilder.append("KW3089 : 'KW' '3089';\n"); - grammarBuilder.append("KW3090 : 'KW' '3090';\n"); - grammarBuilder.append("KW3091 : 'KW' '3091';\n"); - grammarBuilder.append("KW3092 : 'KW' '3092';\n"); - grammarBuilder.append("KW3093 : 'KW' '3093';\n"); - grammarBuilder.append("KW3094 : 'KW' '3094';\n"); - grammarBuilder.append("KW3095 : 'KW' '3095';\n"); - grammarBuilder.append("KW3096 : 'KW' '3096';\n"); - grammarBuilder.append("KW3097 : 'KW' '3097';\n"); - grammarBuilder.append("KW3098 : 'KW' '3098';\n"); - grammarBuilder.append("KW3099 : 'KW' '3099';\n"); - grammarBuilder.append("KW3100 : 'KW' '3100';\n"); - grammarBuilder.append("KW3101 : 'KW' '3101';\n"); - grammarBuilder.append("KW3102 : 'KW' '3102';\n"); - grammarBuilder.append("KW3103 : 'KW' '3103';\n"); - grammarBuilder.append("KW3104 : 'KW' '3104';\n"); - grammarBuilder.append("KW3105 : 'KW' '3105';\n"); - grammarBuilder.append("KW3106 : 'KW' '3106';\n"); - grammarBuilder.append("KW3107 : 'KW' '3107';\n"); - grammarBuilder.append("KW3108 : 'KW' '3108';\n"); - grammarBuilder.append("KW3109 : 'KW' '3109';\n"); - grammarBuilder.append("KW3110 : 'KW' '3110';\n"); - grammarBuilder.append("KW3111 : 'KW' '3111';\n"); - grammarBuilder.append("KW3112 : 'KW' '3112';\n"); - grammarBuilder.append("KW3113 : 'KW' '3113';\n"); - grammarBuilder.append("KW3114 : 'KW' '3114';\n"); - grammarBuilder.append("KW3115 : 'KW' '3115';\n"); - grammarBuilder.append("KW3116 : 'KW' '3116';\n"); - grammarBuilder.append("KW3117 : 'KW' '3117';\n"); - grammarBuilder.append("KW3118 : 'KW' '3118';\n"); - grammarBuilder.append("KW3119 : 'KW' '3119';\n"); - grammarBuilder.append("KW3120 : 'KW' '3120';\n"); - grammarBuilder.append("KW3121 : 'KW' '3121';\n"); - grammarBuilder.append("KW3122 : 'KW' '3122';\n"); - grammarBuilder.append("KW3123 : 'KW' '3123';\n"); - grammarBuilder.append("KW3124 : 'KW' '3124';\n"); - grammarBuilder.append("KW3125 : 'KW' '3125';\n"); - grammarBuilder.append("KW3126 : 'KW' '3126';\n"); - grammarBuilder.append("KW3127 : 'KW' '3127';\n"); - grammarBuilder.append("KW3128 : 'KW' '3128';\n"); - grammarBuilder.append("KW3129 : 'KW' '3129';\n"); - grammarBuilder.append("KW3130 : 'KW' '3130';\n"); - grammarBuilder.append("KW3131 : 'KW' '3131';\n"); - grammarBuilder.append("KW3132 : 'KW' '3132';\n"); - grammarBuilder.append("KW3133 : 'KW' '3133';\n"); - grammarBuilder.append("KW3134 : 'KW' '3134';\n"); - grammarBuilder.append("KW3135 : 'KW' '3135';\n"); - grammarBuilder.append("KW3136 : 'KW' '3136';\n"); - grammarBuilder.append("KW3137 : 'KW' '3137';\n"); - grammarBuilder.append("KW3138 : 'KW' '3138';\n"); - grammarBuilder.append("KW3139 : 'KW' '3139';\n"); - grammarBuilder.append("KW3140 : 'KW' '3140';\n"); - grammarBuilder.append("KW3141 : 'KW' '3141';\n"); - grammarBuilder.append("KW3142 : 'KW' '3142';\n"); - grammarBuilder.append("KW3143 : 'KW' '3143';\n"); - grammarBuilder.append("KW3144 : 'KW' '3144';\n"); - grammarBuilder.append("KW3145 : 'KW' '3145';\n"); - grammarBuilder.append("KW3146 : 'KW' '3146';\n"); - grammarBuilder.append("KW3147 : 'KW' '3147';\n"); - grammarBuilder.append("KW3148 : 'KW' '3148';\n"); - grammarBuilder.append("KW3149 : 'KW' '3149';\n"); - grammarBuilder.append("KW3150 : 'KW' '3150';\n"); - grammarBuilder.append("KW3151 : 'KW' '3151';\n"); - grammarBuilder.append("KW3152 : 'KW' '3152';\n"); - grammarBuilder.append("KW3153 : 'KW' '3153';\n"); - grammarBuilder.append("KW3154 : 'KW' '3154';\n"); - grammarBuilder.append("KW3155 : 'KW' '3155';\n"); - grammarBuilder.append("KW3156 : 'KW' '3156';\n"); - grammarBuilder.append("KW3157 : 'KW' '3157';\n"); - grammarBuilder.append("KW3158 : 'KW' '3158';\n"); - grammarBuilder.append("KW3159 : 'KW' '3159';\n"); - grammarBuilder.append("KW3160 : 'KW' '3160';\n"); - grammarBuilder.append("KW3161 : 'KW' '3161';\n"); - grammarBuilder.append("KW3162 : 'KW' '3162';\n"); - grammarBuilder.append("KW3163 : 'KW' '3163';\n"); - grammarBuilder.append("KW3164 : 'KW' '3164';\n"); - grammarBuilder.append("KW3165 : 'KW' '3165';\n"); - grammarBuilder.append("KW3166 : 'KW' '3166';\n"); - grammarBuilder.append("KW3167 : 'KW' '3167';\n"); - grammarBuilder.append("KW3168 : 'KW' '3168';\n"); - grammarBuilder.append("KW3169 : 'KW' '3169';\n"); - grammarBuilder.append("KW3170 : 'KW' '3170';\n"); - grammarBuilder.append("KW3171 : 'KW' '3171';\n"); - grammarBuilder.append("KW3172 : 'KW' '3172';\n"); - grammarBuilder.append("KW3173 : 'KW' '3173';\n"); - grammarBuilder.append("KW3174 : 'KW' '3174';\n"); - grammarBuilder.append("KW3175 : 'KW' '3175';\n"); - grammarBuilder.append("KW3176 : 'KW' '3176';\n"); - grammarBuilder.append("KW3177 : 'KW' '3177';\n"); - grammarBuilder.append("KW3178 : 'KW' '3178';\n"); - grammarBuilder.append("KW3179 : 'KW' '3179';\n"); - grammarBuilder.append("KW3180 : 'KW' '3180';\n"); - grammarBuilder.append("KW3181 : 'KW' '3181';\n"); - grammarBuilder.append("KW3182 : 'KW' '3182';\n"); - grammarBuilder.append("KW3183 : 'KW' '3183';\n"); - grammarBuilder.append("KW3184 : 'KW' '3184';\n"); - grammarBuilder.append("KW3185 : 'KW' '3185';\n"); - grammarBuilder.append("KW3186 : 'KW' '3186';\n"); - grammarBuilder.append("KW3187 : 'KW' '3187';\n"); - grammarBuilder.append("KW3188 : 'KW' '3188';\n"); - grammarBuilder.append("KW3189 : 'KW' '3189';\n"); - grammarBuilder.append("KW3190 : 'KW' '3190';\n"); - grammarBuilder.append("KW3191 : 'KW' '3191';\n"); - grammarBuilder.append("KW3192 : 'KW' '3192';\n"); - grammarBuilder.append("KW3193 : 'KW' '3193';\n"); - grammarBuilder.append("KW3194 : 'KW' '3194';\n"); - grammarBuilder.append("KW3195 : 'KW' '3195';\n"); - grammarBuilder.append("KW3196 : 'KW' '3196';\n"); - grammarBuilder.append("KW3197 : 'KW' '3197';\n"); - grammarBuilder.append("KW3198 : 'KW' '3198';\n"); - grammarBuilder.append("KW3199 : 'KW' '3199';\n"); - grammarBuilder.append("KW3200 : 'KW' '3200';\n"); - grammarBuilder.append("KW3201 : 'KW' '3201';\n"); - grammarBuilder.append("KW3202 : 'KW' '3202';\n"); - grammarBuilder.append("KW3203 : 'KW' '3203';\n"); - grammarBuilder.append("KW3204 : 'KW' '3204';\n"); - grammarBuilder.append("KW3205 : 'KW' '3205';\n"); - grammarBuilder.append("KW3206 : 'KW' '3206';\n"); - grammarBuilder.append("KW3207 : 'KW' '3207';\n"); - grammarBuilder.append("KW3208 : 'KW' '3208';\n"); - grammarBuilder.append("KW3209 : 'KW' '3209';\n"); - grammarBuilder.append("KW3210 : 'KW' '3210';\n"); - grammarBuilder.append("KW3211 : 'KW' '3211';\n"); - grammarBuilder.append("KW3212 : 'KW' '3212';\n"); - grammarBuilder.append("KW3213 : 'KW' '3213';\n"); - grammarBuilder.append("KW3214 : 'KW' '3214';\n"); - grammarBuilder.append("KW3215 : 'KW' '3215';\n"); - grammarBuilder.append("KW3216 : 'KW' '3216';\n"); - grammarBuilder.append("KW3217 : 'KW' '3217';\n"); - grammarBuilder.append("KW3218 : 'KW' '3218';\n"); - grammarBuilder.append("KW3219 : 'KW' '3219';\n"); - grammarBuilder.append("KW3220 : 'KW' '3220';\n"); - grammarBuilder.append("KW3221 : 'KW' '3221';\n"); - grammarBuilder.append("KW3222 : 'KW' '3222';\n"); - grammarBuilder.append("KW3223 : 'KW' '3223';\n"); - grammarBuilder.append("KW3224 : 'KW' '3224';\n"); - grammarBuilder.append("KW3225 : 'KW' '3225';\n"); - grammarBuilder.append("KW3226 : 'KW' '3226';\n"); - grammarBuilder.append("KW3227 : 'KW' '3227';\n"); - grammarBuilder.append("KW3228 : 'KW' '3228';\n"); - grammarBuilder.append("KW3229 : 'KW' '3229';\n"); - grammarBuilder.append("KW3230 : 'KW' '3230';\n"); - grammarBuilder.append("KW3231 : 'KW' '3231';\n"); - grammarBuilder.append("KW3232 : 'KW' '3232';\n"); - grammarBuilder.append("KW3233 : 'KW' '3233';\n"); - grammarBuilder.append("KW3234 : 'KW' '3234';\n"); - grammarBuilder.append("KW3235 : 'KW' '3235';\n"); - grammarBuilder.append("KW3236 : 'KW' '3236';\n"); - grammarBuilder.append("KW3237 : 'KW' '3237';\n"); - grammarBuilder.append("KW3238 : 'KW' '3238';\n"); - grammarBuilder.append("KW3239 : 'KW' '3239';\n"); - grammarBuilder.append("KW3240 : 'KW' '3240';\n"); - grammarBuilder.append("KW3241 : 'KW' '3241';\n"); - grammarBuilder.append("KW3242 : 'KW' '3242';\n"); - grammarBuilder.append("KW3243 : 'KW' '3243';\n"); - grammarBuilder.append("KW3244 : 'KW' '3244';\n"); - grammarBuilder.append("KW3245 : 'KW' '3245';\n"); - grammarBuilder.append("KW3246 : 'KW' '3246';\n"); - grammarBuilder.append("KW3247 : 'KW' '3247';\n"); - grammarBuilder.append("KW3248 : 'KW' '3248';\n"); - grammarBuilder.append("KW3249 : 'KW' '3249';\n"); - grammarBuilder.append("KW3250 : 'KW' '3250';\n"); - grammarBuilder.append("KW3251 : 'KW' '3251';\n"); - grammarBuilder.append("KW3252 : 'KW' '3252';\n"); - grammarBuilder.append("KW3253 : 'KW' '3253';\n"); - grammarBuilder.append("KW3254 : 'KW' '3254';\n"); - grammarBuilder.append("KW3255 : 'KW' '3255';\n"); - grammarBuilder.append("KW3256 : 'KW' '3256';\n"); - grammarBuilder.append("KW3257 : 'KW' '3257';\n"); - grammarBuilder.append("KW3258 : 'KW' '3258';\n"); - grammarBuilder.append("KW3259 : 'KW' '3259';\n"); - grammarBuilder.append("KW3260 : 'KW' '3260';\n"); - grammarBuilder.append("KW3261 : 'KW' '3261';\n"); - grammarBuilder.append("KW3262 : 'KW' '3262';\n"); - grammarBuilder.append("KW3263 : 'KW' '3263';\n"); - grammarBuilder.append("KW3264 : 'KW' '3264';\n"); - grammarBuilder.append("KW3265 : 'KW' '3265';\n"); - grammarBuilder.append("KW3266 : 'KW' '3266';\n"); - grammarBuilder.append("KW3267 : 'KW' '3267';\n"); - grammarBuilder.append("KW3268 : 'KW' '3268';\n"); - grammarBuilder.append("KW3269 : 'KW' '3269';\n"); - grammarBuilder.append("KW3270 : 'KW' '3270';\n"); - grammarBuilder.append("KW3271 : 'KW' '3271';\n"); - grammarBuilder.append("KW3272 : 'KW' '3272';\n"); - grammarBuilder.append("KW3273 : 'KW' '3273';\n"); - grammarBuilder.append("KW3274 : 'KW' '3274';\n"); - grammarBuilder.append("KW3275 : 'KW' '3275';\n"); - grammarBuilder.append("KW3276 : 'KW' '3276';\n"); - grammarBuilder.append("KW3277 : 'KW' '3277';\n"); - grammarBuilder.append("KW3278 : 'KW' '3278';\n"); - grammarBuilder.append("KW3279 : 'KW' '3279';\n"); - grammarBuilder.append("KW3280 : 'KW' '3280';\n"); - grammarBuilder.append("KW3281 : 'KW' '3281';\n"); - grammarBuilder.append("KW3282 : 'KW' '3282';\n"); - grammarBuilder.append("KW3283 : 'KW' '3283';\n"); - grammarBuilder.append("KW3284 : 'KW' '3284';\n"); - grammarBuilder.append("KW3285 : 'KW' '3285';\n"); - grammarBuilder.append("KW3286 : 'KW' '3286';\n"); - grammarBuilder.append("KW3287 : 'KW' '3287';\n"); - grammarBuilder.append("KW3288 : 'KW' '3288';\n"); - grammarBuilder.append("KW3289 : 'KW' '3289';\n"); - grammarBuilder.append("KW3290 : 'KW' '3290';\n"); - grammarBuilder.append("KW3291 : 'KW' '3291';\n"); - grammarBuilder.append("KW3292 : 'KW' '3292';\n"); - grammarBuilder.append("KW3293 : 'KW' '3293';\n"); - grammarBuilder.append("KW3294 : 'KW' '3294';\n"); - grammarBuilder.append("KW3295 : 'KW' '3295';\n"); - grammarBuilder.append("KW3296 : 'KW' '3296';\n"); - grammarBuilder.append("KW3297 : 'KW' '3297';\n"); - grammarBuilder.append("KW3298 : 'KW' '3298';\n"); - grammarBuilder.append("KW3299 : 'KW' '3299';\n"); - grammarBuilder.append("KW3300 : 'KW' '3300';\n"); - grammarBuilder.append("KW3301 : 'KW' '3301';\n"); - grammarBuilder.append("KW3302 : 'KW' '3302';\n"); - grammarBuilder.append("KW3303 : 'KW' '3303';\n"); - grammarBuilder.append("KW3304 : 'KW' '3304';\n"); - grammarBuilder.append("KW3305 : 'KW' '3305';\n"); - grammarBuilder.append("KW3306 : 'KW' '3306';\n"); - grammarBuilder.append("KW3307 : 'KW' '3307';\n"); - grammarBuilder.append("KW3308 : 'KW' '3308';\n"); - grammarBuilder.append("KW3309 : 'KW' '3309';\n"); - grammarBuilder.append("KW3310 : 'KW' '3310';\n"); - grammarBuilder.append("KW3311 : 'KW' '3311';\n"); - grammarBuilder.append("KW3312 : 'KW' '3312';\n"); - grammarBuilder.append("KW3313 : 'KW' '3313';\n"); - grammarBuilder.append("KW3314 : 'KW' '3314';\n"); - grammarBuilder.append("KW3315 : 'KW' '3315';\n"); - grammarBuilder.append("KW3316 : 'KW' '3316';\n"); - grammarBuilder.append("KW3317 : 'KW' '3317';\n"); - grammarBuilder.append("KW3318 : 'KW' '3318';\n"); - grammarBuilder.append("KW3319 : 'KW' '3319';\n"); - grammarBuilder.append("KW3320 : 'KW' '3320';\n"); - grammarBuilder.append("KW3321 : 'KW' '3321';\n"); - grammarBuilder.append("KW3322 : 'KW' '3322';\n"); - grammarBuilder.append("KW3323 : 'KW' '3323';\n"); - grammarBuilder.append("KW3324 : 'KW' '3324';\n"); - grammarBuilder.append("KW3325 : 'KW' '3325';\n"); - grammarBuilder.append("KW3326 : 'KW' '3326';\n"); - grammarBuilder.append("KW3327 : 'KW' '3327';\n"); - grammarBuilder.append("KW3328 : 'KW' '3328';\n"); - grammarBuilder.append("KW3329 : 'KW' '3329';\n"); - grammarBuilder.append("KW3330 : 'KW' '3330';\n"); - grammarBuilder.append("KW3331 : 'KW' '3331';\n"); - grammarBuilder.append("KW3332 : 'KW' '3332';\n"); - grammarBuilder.append("KW3333 : 'KW' '3333';\n"); - grammarBuilder.append("KW3334 : 'KW' '3334';\n"); - grammarBuilder.append("KW3335 : 'KW' '3335';\n"); - grammarBuilder.append("KW3336 : 'KW' '3336';\n"); - grammarBuilder.append("KW3337 : 'KW' '3337';\n"); - grammarBuilder.append("KW3338 : 'KW' '3338';\n"); - grammarBuilder.append("KW3339 : 'KW' '3339';\n"); - grammarBuilder.append("KW3340 : 'KW' '3340';\n"); - grammarBuilder.append("KW3341 : 'KW' '3341';\n"); - grammarBuilder.append("KW3342 : 'KW' '3342';\n"); - grammarBuilder.append("KW3343 : 'KW' '3343';\n"); - grammarBuilder.append("KW3344 : 'KW' '3344';\n"); - grammarBuilder.append("KW3345 : 'KW' '3345';\n"); - grammarBuilder.append("KW3346 : 'KW' '3346';\n"); - grammarBuilder.append("KW3347 : 'KW' '3347';\n"); - grammarBuilder.append("KW3348 : 'KW' '3348';\n"); - grammarBuilder.append("KW3349 : 'KW' '3349';\n"); - grammarBuilder.append("KW3350 : 'KW' '3350';\n"); - grammarBuilder.append("KW3351 : 'KW' '3351';\n"); - grammarBuilder.append("KW3352 : 'KW' '3352';\n"); - grammarBuilder.append("KW3353 : 'KW' '3353';\n"); - grammarBuilder.append("KW3354 : 'KW' '3354';\n"); - grammarBuilder.append("KW3355 : 'KW' '3355';\n"); - grammarBuilder.append("KW3356 : 'KW' '3356';\n"); - grammarBuilder.append("KW3357 : 'KW' '3357';\n"); - grammarBuilder.append("KW3358 : 'KW' '3358';\n"); - grammarBuilder.append("KW3359 : 'KW' '3359';\n"); - grammarBuilder.append("KW3360 : 'KW' '3360';\n"); - grammarBuilder.append("KW3361 : 'KW' '3361';\n"); - grammarBuilder.append("KW3362 : 'KW' '3362';\n"); - grammarBuilder.append("KW3363 : 'KW' '3363';\n"); - grammarBuilder.append("KW3364 : 'KW' '3364';\n"); - grammarBuilder.append("KW3365 : 'KW' '3365';\n"); - grammarBuilder.append("KW3366 : 'KW' '3366';\n"); - grammarBuilder.append("KW3367 : 'KW' '3367';\n"); - grammarBuilder.append("KW3368 : 'KW' '3368';\n"); - grammarBuilder.append("KW3369 : 'KW' '3369';\n"); - grammarBuilder.append("KW3370 : 'KW' '3370';\n"); - grammarBuilder.append("KW3371 : 'KW' '3371';\n"); - grammarBuilder.append("KW3372 : 'KW' '3372';\n"); - grammarBuilder.append("KW3373 : 'KW' '3373';\n"); - grammarBuilder.append("KW3374 : 'KW' '3374';\n"); - grammarBuilder.append("KW3375 : 'KW' '3375';\n"); - grammarBuilder.append("KW3376 : 'KW' '3376';\n"); - grammarBuilder.append("KW3377 : 'KW' '3377';\n"); - grammarBuilder.append("KW3378 : 'KW' '3378';\n"); - grammarBuilder.append("KW3379 : 'KW' '3379';\n"); - grammarBuilder.append("KW3380 : 'KW' '3380';\n"); - grammarBuilder.append("KW3381 : 'KW' '3381';\n"); - grammarBuilder.append("KW3382 : 'KW' '3382';\n"); - grammarBuilder.append("KW3383 : 'KW' '3383';\n"); - grammarBuilder.append("KW3384 : 'KW' '3384';\n"); - grammarBuilder.append("KW3385 : 'KW' '3385';\n"); - grammarBuilder.append("KW3386 : 'KW' '3386';\n"); - grammarBuilder.append("KW3387 : 'KW' '3387';\n"); - grammarBuilder.append("KW3388 : 'KW' '3388';\n"); - grammarBuilder.append("KW3389 : 'KW' '3389';\n"); - grammarBuilder.append("KW3390 : 'KW' '3390';\n"); - grammarBuilder.append("KW3391 : 'KW' '3391';\n"); - grammarBuilder.append("KW3392 : 'KW' '3392';\n"); - grammarBuilder.append("KW3393 : 'KW' '3393';\n"); - grammarBuilder.append("KW3394 : 'KW' '3394';\n"); - grammarBuilder.append("KW3395 : 'KW' '3395';\n"); - grammarBuilder.append("KW3396 : 'KW' '3396';\n"); - grammarBuilder.append("KW3397 : 'KW' '3397';\n"); - grammarBuilder.append("KW3398 : 'KW' '3398';\n"); - grammarBuilder.append("KW3399 : 'KW' '3399';\n"); - grammarBuilder.append("KW3400 : 'KW' '3400';\n"); - grammarBuilder.append("KW3401 : 'KW' '3401';\n"); - grammarBuilder.append("KW3402 : 'KW' '3402';\n"); - grammarBuilder.append("KW3403 : 'KW' '3403';\n"); - grammarBuilder.append("KW3404 : 'KW' '3404';\n"); - grammarBuilder.append("KW3405 : 'KW' '3405';\n"); - grammarBuilder.append("KW3406 : 'KW' '3406';\n"); - grammarBuilder.append("KW3407 : 'KW' '3407';\n"); - grammarBuilder.append("KW3408 : 'KW' '3408';\n"); - grammarBuilder.append("KW3409 : 'KW' '3409';\n"); - grammarBuilder.append("KW3410 : 'KW' '3410';\n"); - grammarBuilder.append("KW3411 : 'KW' '3411';\n"); - grammarBuilder.append("KW3412 : 'KW' '3412';\n"); - grammarBuilder.append("KW3413 : 'KW' '3413';\n"); - grammarBuilder.append("KW3414 : 'KW' '3414';\n"); - grammarBuilder.append("KW3415 : 'KW' '3415';\n"); - grammarBuilder.append("KW3416 : 'KW' '3416';\n"); - grammarBuilder.append("KW3417 : 'KW' '3417';\n"); - grammarBuilder.append("KW3418 : 'KW' '3418';\n"); - grammarBuilder.append("KW3419 : 'KW' '3419';\n"); - grammarBuilder.append("KW3420 : 'KW' '3420';\n"); - grammarBuilder.append("KW3421 : 'KW' '3421';\n"); - grammarBuilder.append("KW3422 : 'KW' '3422';\n"); - grammarBuilder.append("KW3423 : 'KW' '3423';\n"); - grammarBuilder.append("KW3424 : 'KW' '3424';\n"); - grammarBuilder.append("KW3425 : 'KW' '3425';\n"); - grammarBuilder.append("KW3426 : 'KW' '3426';\n"); - grammarBuilder.append("KW3427 : 'KW' '3427';\n"); - grammarBuilder.append("KW3428 : 'KW' '3428';\n"); - grammarBuilder.append("KW3429 : 'KW' '3429';\n"); - grammarBuilder.append("KW3430 : 'KW' '3430';\n"); - grammarBuilder.append("KW3431 : 'KW' '3431';\n"); - grammarBuilder.append("KW3432 : 'KW' '3432';\n"); - grammarBuilder.append("KW3433 : 'KW' '3433';\n"); - grammarBuilder.append("KW3434 : 'KW' '3434';\n"); - grammarBuilder.append("KW3435 : 'KW' '3435';\n"); - grammarBuilder.append("KW3436 : 'KW' '3436';\n"); - grammarBuilder.append("KW3437 : 'KW' '3437';\n"); - grammarBuilder.append("KW3438 : 'KW' '3438';\n"); - grammarBuilder.append("KW3439 : 'KW' '3439';\n"); - grammarBuilder.append("KW3440 : 'KW' '3440';\n"); - grammarBuilder.append("KW3441 : 'KW' '3441';\n"); - grammarBuilder.append("KW3442 : 'KW' '3442';\n"); - grammarBuilder.append("KW3443 : 'KW' '3443';\n"); - grammarBuilder.append("KW3444 : 'KW' '3444';\n"); - grammarBuilder.append("KW3445 : 'KW' '3445';\n"); - grammarBuilder.append("KW3446 : 'KW' '3446';\n"); - grammarBuilder.append("KW3447 : 'KW' '3447';\n"); - grammarBuilder.append("KW3448 : 'KW' '3448';\n"); - grammarBuilder.append("KW3449 : 'KW' '3449';\n"); - grammarBuilder.append("KW3450 : 'KW' '3450';\n"); - grammarBuilder.append("KW3451 : 'KW' '3451';\n"); - grammarBuilder.append("KW3452 : 'KW' '3452';\n"); - grammarBuilder.append("KW3453 : 'KW' '3453';\n"); - grammarBuilder.append("KW3454 : 'KW' '3454';\n"); - grammarBuilder.append("KW3455 : 'KW' '3455';\n"); - grammarBuilder.append("KW3456 : 'KW' '3456';\n"); - grammarBuilder.append("KW3457 : 'KW' '3457';\n"); - grammarBuilder.append("KW3458 : 'KW' '3458';\n"); - grammarBuilder.append("KW3459 : 'KW' '3459';\n"); - grammarBuilder.append("KW3460 : 'KW' '3460';\n"); - grammarBuilder.append("KW3461 : 'KW' '3461';\n"); - grammarBuilder.append("KW3462 : 'KW' '3462';\n"); - grammarBuilder.append("KW3463 : 'KW' '3463';\n"); - grammarBuilder.append("KW3464 : 'KW' '3464';\n"); - grammarBuilder.append("KW3465 : 'KW' '3465';\n"); - grammarBuilder.append("KW3466 : 'KW' '3466';\n"); - grammarBuilder.append("KW3467 : 'KW' '3467';\n"); - grammarBuilder.append("KW3468 : 'KW' '3468';\n"); - grammarBuilder.append("KW3469 : 'KW' '3469';\n"); - grammarBuilder.append("KW3470 : 'KW' '3470';\n"); - grammarBuilder.append("KW3471 : 'KW' '3471';\n"); - grammarBuilder.append("KW3472 : 'KW' '3472';\n"); - grammarBuilder.append("KW3473 : 'KW' '3473';\n"); - grammarBuilder.append("KW3474 : 'KW' '3474';\n"); - grammarBuilder.append("KW3475 : 'KW' '3475';\n"); - grammarBuilder.append("KW3476 : 'KW' '3476';\n"); - grammarBuilder.append("KW3477 : 'KW' '3477';\n"); - grammarBuilder.append("KW3478 : 'KW' '3478';\n"); - grammarBuilder.append("KW3479 : 'KW' '3479';\n"); - grammarBuilder.append("KW3480 : 'KW' '3480';\n"); - grammarBuilder.append("KW3481 : 'KW' '3481';\n"); - grammarBuilder.append("KW3482 : 'KW' '3482';\n"); - grammarBuilder.append("KW3483 : 'KW' '3483';\n"); - grammarBuilder.append("KW3484 : 'KW' '3484';\n"); - grammarBuilder.append("KW3485 : 'KW' '3485';\n"); - grammarBuilder.append("KW3486 : 'KW' '3486';\n"); - grammarBuilder.append("KW3487 : 'KW' '3487';\n"); - grammarBuilder.append("KW3488 : 'KW' '3488';\n"); - grammarBuilder.append("KW3489 : 'KW' '3489';\n"); - grammarBuilder.append("KW3490 : 'KW' '3490';\n"); - grammarBuilder.append("KW3491 : 'KW' '3491';\n"); - grammarBuilder.append("KW3492 : 'KW' '3492';\n"); - grammarBuilder.append("KW3493 : 'KW' '3493';\n"); - grammarBuilder.append("KW3494 : 'KW' '3494';\n"); - grammarBuilder.append("KW3495 : 'KW' '3495';\n"); - grammarBuilder.append("KW3496 : 'KW' '3496';\n"); - grammarBuilder.append("KW3497 : 'KW' '3497';\n"); - grammarBuilder.append("KW3498 : 'KW' '3498';\n"); - grammarBuilder.append("KW3499 : 'KW' '3499';\n"); - grammarBuilder.append("KW3500 : 'KW' '3500';\n"); - grammarBuilder.append("KW3501 : 'KW' '3501';\n"); - grammarBuilder.append("KW3502 : 'KW' '3502';\n"); - grammarBuilder.append("KW3503 : 'KW' '3503';\n"); - grammarBuilder.append("KW3504 : 'KW' '3504';\n"); - grammarBuilder.append("KW3505 : 'KW' '3505';\n"); - grammarBuilder.append("KW3506 : 'KW' '3506';\n"); - grammarBuilder.append("KW3507 : 'KW' '3507';\n"); - grammarBuilder.append("KW3508 : 'KW' '3508';\n"); - grammarBuilder.append("KW3509 : 'KW' '3509';\n"); - grammarBuilder.append("KW3510 : 'KW' '3510';\n"); - grammarBuilder.append("KW3511 : 'KW' '3511';\n"); - grammarBuilder.append("KW3512 : 'KW' '3512';\n"); - grammarBuilder.append("KW3513 : 'KW' '3513';\n"); - grammarBuilder.append("KW3514 : 'KW' '3514';\n"); - grammarBuilder.append("KW3515 : 'KW' '3515';\n"); - grammarBuilder.append("KW3516 : 'KW' '3516';\n"); - grammarBuilder.append("KW3517 : 'KW' '3517';\n"); - grammarBuilder.append("KW3518 : 'KW' '3518';\n"); - grammarBuilder.append("KW3519 : 'KW' '3519';\n"); - grammarBuilder.append("KW3520 : 'KW' '3520';\n"); - grammarBuilder.append("KW3521 : 'KW' '3521';\n"); - grammarBuilder.append("KW3522 : 'KW' '3522';\n"); - grammarBuilder.append("KW3523 : 'KW' '3523';\n"); - grammarBuilder.append("KW3524 : 'KW' '3524';\n"); - grammarBuilder.append("KW3525 : 'KW' '3525';\n"); - grammarBuilder.append("KW3526 : 'KW' '3526';\n"); - grammarBuilder.append("KW3527 : 'KW' '3527';\n"); - grammarBuilder.append("KW3528 : 'KW' '3528';\n"); - grammarBuilder.append("KW3529 : 'KW' '3529';\n"); - grammarBuilder.append("KW3530 : 'KW' '3530';\n"); - grammarBuilder.append("KW3531 : 'KW' '3531';\n"); - grammarBuilder.append("KW3532 : 'KW' '3532';\n"); - grammarBuilder.append("KW3533 : 'KW' '3533';\n"); - grammarBuilder.append("KW3534 : 'KW' '3534';\n"); - grammarBuilder.append("KW3535 : 'KW' '3535';\n"); - grammarBuilder.append("KW3536 : 'KW' '3536';\n"); - grammarBuilder.append("KW3537 : 'KW' '3537';\n"); - grammarBuilder.append("KW3538 : 'KW' '3538';\n"); - grammarBuilder.append("KW3539 : 'KW' '3539';\n"); - grammarBuilder.append("KW3540 : 'KW' '3540';\n"); - grammarBuilder.append("KW3541 : 'KW' '3541';\n"); - grammarBuilder.append("KW3542 : 'KW' '3542';\n"); - grammarBuilder.append("KW3543 : 'KW' '3543';\n"); - grammarBuilder.append("KW3544 : 'KW' '3544';\n"); - grammarBuilder.append("KW3545 : 'KW' '3545';\n"); - grammarBuilder.append("KW3546 : 'KW' '3546';\n"); - grammarBuilder.append("KW3547 : 'KW' '3547';\n"); - grammarBuilder.append("KW3548 : 'KW' '3548';\n"); - grammarBuilder.append("KW3549 : 'KW' '3549';\n"); - grammarBuilder.append("KW3550 : 'KW' '3550';\n"); - grammarBuilder.append("KW3551 : 'KW' '3551';\n"); - grammarBuilder.append("KW3552 : 'KW' '3552';\n"); - grammarBuilder.append("KW3553 : 'KW' '3553';\n"); - grammarBuilder.append("KW3554 : 'KW' '3554';\n"); - grammarBuilder.append("KW3555 : 'KW' '3555';\n"); - grammarBuilder.append("KW3556 : 'KW' '3556';\n"); - grammarBuilder.append("KW3557 : 'KW' '3557';\n"); - grammarBuilder.append("KW3558 : 'KW' '3558';\n"); - grammarBuilder.append("KW3559 : 'KW' '3559';\n"); - grammarBuilder.append("KW3560 : 'KW' '3560';\n"); - grammarBuilder.append("KW3561 : 'KW' '3561';\n"); - grammarBuilder.append("KW3562 : 'KW' '3562';\n"); - grammarBuilder.append("KW3563 : 'KW' '3563';\n"); - grammarBuilder.append("KW3564 : 'KW' '3564';\n"); - grammarBuilder.append("KW3565 : 'KW' '3565';\n"); - grammarBuilder.append("KW3566 : 'KW' '3566';\n"); - grammarBuilder.append("KW3567 : 'KW' '3567';\n"); - grammarBuilder.append("KW3568 : 'KW' '3568';\n"); - grammarBuilder.append("KW3569 : 'KW' '3569';\n"); - grammarBuilder.append("KW3570 : 'KW' '3570';\n"); - grammarBuilder.append("KW3571 : 'KW' '3571';\n"); - grammarBuilder.append("KW3572 : 'KW' '3572';\n"); - grammarBuilder.append("KW3573 : 'KW' '3573';\n"); - grammarBuilder.append("KW3574 : 'KW' '3574';\n"); - grammarBuilder.append("KW3575 : 'KW' '3575';\n"); - grammarBuilder.append("KW3576 : 'KW' '3576';\n"); - grammarBuilder.append("KW3577 : 'KW' '3577';\n"); - grammarBuilder.append("KW3578 : 'KW' '3578';\n"); - grammarBuilder.append("KW3579 : 'KW' '3579';\n"); - grammarBuilder.append("KW3580 : 'KW' '3580';\n"); - grammarBuilder.append("KW3581 : 'KW' '3581';\n"); - grammarBuilder.append("KW3582 : 'KW' '3582';\n"); - grammarBuilder.append("KW3583 : 'KW' '3583';\n"); - grammarBuilder.append("KW3584 : 'KW' '3584';\n"); - grammarBuilder.append("KW3585 : 'KW' '3585';\n"); - grammarBuilder.append("KW3586 : 'KW' '3586';\n"); - grammarBuilder.append("KW3587 : 'KW' '3587';\n"); - grammarBuilder.append("KW3588 : 'KW' '3588';\n"); - grammarBuilder.append("KW3589 : 'KW' '3589';\n"); - grammarBuilder.append("KW3590 : 'KW' '3590';\n"); - grammarBuilder.append("KW3591 : 'KW' '3591';\n"); - grammarBuilder.append("KW3592 : 'KW' '3592';\n"); - grammarBuilder.append("KW3593 : 'KW' '3593';\n"); - grammarBuilder.append("KW3594 : 'KW' '3594';\n"); - grammarBuilder.append("KW3595 : 'KW' '3595';\n"); - grammarBuilder.append("KW3596 : 'KW' '3596';\n"); - grammarBuilder.append("KW3597 : 'KW' '3597';\n"); - grammarBuilder.append("KW3598 : 'KW' '3598';\n"); - grammarBuilder.append("KW3599 : 'KW' '3599';\n"); - grammarBuilder.append("KW3600 : 'KW' '3600';\n"); - grammarBuilder.append("KW3601 : 'KW' '3601';\n"); - grammarBuilder.append("KW3602 : 'KW' '3602';\n"); - grammarBuilder.append("KW3603 : 'KW' '3603';\n"); - grammarBuilder.append("KW3604 : 'KW' '3604';\n"); - grammarBuilder.append("KW3605 : 'KW' '3605';\n"); - grammarBuilder.append("KW3606 : 'KW' '3606';\n"); - grammarBuilder.append("KW3607 : 'KW' '3607';\n"); - grammarBuilder.append("KW3608 : 'KW' '3608';\n"); - grammarBuilder.append("KW3609 : 'KW' '3609';\n"); - grammarBuilder.append("KW3610 : 'KW' '3610';\n"); - grammarBuilder.append("KW3611 : 'KW' '3611';\n"); - grammarBuilder.append("KW3612 : 'KW' '3612';\n"); - grammarBuilder.append("KW3613 : 'KW' '3613';\n"); - grammarBuilder.append("KW3614 : 'KW' '3614';\n"); - grammarBuilder.append("KW3615 : 'KW' '3615';\n"); - grammarBuilder.append("KW3616 : 'KW' '3616';\n"); - grammarBuilder.append("KW3617 : 'KW' '3617';\n"); - grammarBuilder.append("KW3618 : 'KW' '3618';\n"); - grammarBuilder.append("KW3619 : 'KW' '3619';\n"); - grammarBuilder.append("KW3620 : 'KW' '3620';\n"); - grammarBuilder.append("KW3621 : 'KW' '3621';\n"); - grammarBuilder.append("KW3622 : 'KW' '3622';\n"); - grammarBuilder.append("KW3623 : 'KW' '3623';\n"); - grammarBuilder.append("KW3624 : 'KW' '3624';\n"); - grammarBuilder.append("KW3625 : 'KW' '3625';\n"); - grammarBuilder.append("KW3626 : 'KW' '3626';\n"); - grammarBuilder.append("KW3627 : 'KW' '3627';\n"); - grammarBuilder.append("KW3628 : 'KW' '3628';\n"); - grammarBuilder.append("KW3629 : 'KW' '3629';\n"); - grammarBuilder.append("KW3630 : 'KW' '3630';\n"); - grammarBuilder.append("KW3631 : 'KW' '3631';\n"); - grammarBuilder.append("KW3632 : 'KW' '3632';\n"); - grammarBuilder.append("KW3633 : 'KW' '3633';\n"); - grammarBuilder.append("KW3634 : 'KW' '3634';\n"); - grammarBuilder.append("KW3635 : 'KW' '3635';\n"); - grammarBuilder.append("KW3636 : 'KW' '3636';\n"); - grammarBuilder.append("KW3637 : 'KW' '3637';\n"); - grammarBuilder.append("KW3638 : 'KW' '3638';\n"); - grammarBuilder.append("KW3639 : 'KW' '3639';\n"); - grammarBuilder.append("KW3640 : 'KW' '3640';\n"); - grammarBuilder.append("KW3641 : 'KW' '3641';\n"); - grammarBuilder.append("KW3642 : 'KW' '3642';\n"); - grammarBuilder.append("KW3643 : 'KW' '3643';\n"); - grammarBuilder.append("KW3644 : 'KW' '3644';\n"); - grammarBuilder.append("KW3645 : 'KW' '3645';\n"); - grammarBuilder.append("KW3646 : 'KW' '3646';\n"); - grammarBuilder.append("KW3647 : 'KW' '3647';\n"); - grammarBuilder.append("KW3648 : 'KW' '3648';\n"); - grammarBuilder.append("KW3649 : 'KW' '3649';\n"); - grammarBuilder.append("KW3650 : 'KW' '3650';\n"); - grammarBuilder.append("KW3651 : 'KW' '3651';\n"); - grammarBuilder.append("KW3652 : 'KW' '3652';\n"); - grammarBuilder.append("KW3653 : 'KW' '3653';\n"); - grammarBuilder.append("KW3654 : 'KW' '3654';\n"); - grammarBuilder.append("KW3655 : 'KW' '3655';\n"); - grammarBuilder.append("KW3656 : 'KW' '3656';\n"); - grammarBuilder.append("KW3657 : 'KW' '3657';\n"); - grammarBuilder.append("KW3658 : 'KW' '3658';\n"); - grammarBuilder.append("KW3659 : 'KW' '3659';\n"); - grammarBuilder.append("KW3660 : 'KW' '3660';\n"); - grammarBuilder.append("KW3661 : 'KW' '3661';\n"); - grammarBuilder.append("KW3662 : 'KW' '3662';\n"); - grammarBuilder.append("KW3663 : 'KW' '3663';\n"); - grammarBuilder.append("KW3664 : 'KW' '3664';\n"); - grammarBuilder.append("KW3665 : 'KW' '3665';\n"); - grammarBuilder.append("KW3666 : 'KW' '3666';\n"); - grammarBuilder.append("KW3667 : 'KW' '3667';\n"); - grammarBuilder.append("KW3668 : 'KW' '3668';\n"); - grammarBuilder.append("KW3669 : 'KW' '3669';\n"); - grammarBuilder.append("KW3670 : 'KW' '3670';\n"); - grammarBuilder.append("KW3671 : 'KW' '3671';\n"); - grammarBuilder.append("KW3672 : 'KW' '3672';\n"); - grammarBuilder.append("KW3673 : 'KW' '3673';\n"); - grammarBuilder.append("KW3674 : 'KW' '3674';\n"); - grammarBuilder.append("KW3675 : 'KW' '3675';\n"); - grammarBuilder.append("KW3676 : 'KW' '3676';\n"); - grammarBuilder.append("KW3677 : 'KW' '3677';\n"); - grammarBuilder.append("KW3678 : 'KW' '3678';\n"); - grammarBuilder.append("KW3679 : 'KW' '3679';\n"); - grammarBuilder.append("KW3680 : 'KW' '3680';\n"); - grammarBuilder.append("KW3681 : 'KW' '3681';\n"); - grammarBuilder.append("KW3682 : 'KW' '3682';\n"); - grammarBuilder.append("KW3683 : 'KW' '3683';\n"); - grammarBuilder.append("KW3684 : 'KW' '3684';\n"); - grammarBuilder.append("KW3685 : 'KW' '3685';\n"); - grammarBuilder.append("KW3686 : 'KW' '3686';\n"); - grammarBuilder.append("KW3687 : 'KW' '3687';\n"); - grammarBuilder.append("KW3688 : 'KW' '3688';\n"); - grammarBuilder.append("KW3689 : 'KW' '3689';\n"); - grammarBuilder.append("KW3690 : 'KW' '3690';\n"); - grammarBuilder.append("KW3691 : 'KW' '3691';\n"); - grammarBuilder.append("KW3692 : 'KW' '3692';\n"); - grammarBuilder.append("KW3693 : 'KW' '3693';\n"); - grammarBuilder.append("KW3694 : 'KW' '3694';\n"); - grammarBuilder.append("KW3695 : 'KW' '3695';\n"); - grammarBuilder.append("KW3696 : 'KW' '3696';\n"); - grammarBuilder.append("KW3697 : 'KW' '3697';\n"); - grammarBuilder.append("KW3698 : 'KW' '3698';\n"); - grammarBuilder.append("KW3699 : 'KW' '3699';\n"); - grammarBuilder.append("KW3700 : 'KW' '3700';\n"); - grammarBuilder.append("KW3701 : 'KW' '3701';\n"); - grammarBuilder.append("KW3702 : 'KW' '3702';\n"); - grammarBuilder.append("KW3703 : 'KW' '3703';\n"); - grammarBuilder.append("KW3704 : 'KW' '3704';\n"); - grammarBuilder.append("KW3705 : 'KW' '3705';\n"); - grammarBuilder.append("KW3706 : 'KW' '3706';\n"); - grammarBuilder.append("KW3707 : 'KW' '3707';\n"); - grammarBuilder.append("KW3708 : 'KW' '3708';\n"); - grammarBuilder.append("KW3709 : 'KW' '3709';\n"); - grammarBuilder.append("KW3710 : 'KW' '3710';\n"); - grammarBuilder.append("KW3711 : 'KW' '3711';\n"); - grammarBuilder.append("KW3712 : 'KW' '3712';\n"); - grammarBuilder.append("KW3713 : 'KW' '3713';\n"); - grammarBuilder.append("KW3714 : 'KW' '3714';\n"); - grammarBuilder.append("KW3715 : 'KW' '3715';\n"); - grammarBuilder.append("KW3716 : 'KW' '3716';\n"); - grammarBuilder.append("KW3717 : 'KW' '3717';\n"); - grammarBuilder.append("KW3718 : 'KW' '3718';\n"); - grammarBuilder.append("KW3719 : 'KW' '3719';\n"); - grammarBuilder.append("KW3720 : 'KW' '3720';\n"); - grammarBuilder.append("KW3721 : 'KW' '3721';\n"); - grammarBuilder.append("KW3722 : 'KW' '3722';\n"); - grammarBuilder.append("KW3723 : 'KW' '3723';\n"); - grammarBuilder.append("KW3724 : 'KW' '3724';\n"); - grammarBuilder.append("KW3725 : 'KW' '3725';\n"); - grammarBuilder.append("KW3726 : 'KW' '3726';\n"); - grammarBuilder.append("KW3727 : 'KW' '3727';\n"); - grammarBuilder.append("KW3728 : 'KW' '3728';\n"); - grammarBuilder.append("KW3729 : 'KW' '3729';\n"); - grammarBuilder.append("KW3730 : 'KW' '3730';\n"); - grammarBuilder.append("KW3731 : 'KW' '3731';\n"); - grammarBuilder.append("KW3732 : 'KW' '3732';\n"); - grammarBuilder.append("KW3733 : 'KW' '3733';\n"); - grammarBuilder.append("KW3734 : 'KW' '3734';\n"); - grammarBuilder.append("KW3735 : 'KW' '3735';\n"); - grammarBuilder.append("KW3736 : 'KW' '3736';\n"); - grammarBuilder.append("KW3737 : 'KW' '3737';\n"); - grammarBuilder.append("KW3738 : 'KW' '3738';\n"); - grammarBuilder.append("KW3739 : 'KW' '3739';\n"); - grammarBuilder.append("KW3740 : 'KW' '3740';\n"); - grammarBuilder.append("KW3741 : 'KW' '3741';\n"); - grammarBuilder.append("KW3742 : 'KW' '3742';\n"); - grammarBuilder.append("KW3743 : 'KW' '3743';\n"); - grammarBuilder.append("KW3744 : 'KW' '3744';\n"); - grammarBuilder.append("KW3745 : 'KW' '3745';\n"); - grammarBuilder.append("KW3746 : 'KW' '3746';\n"); - grammarBuilder.append("KW3747 : 'KW' '3747';\n"); - grammarBuilder.append("KW3748 : 'KW' '3748';\n"); - grammarBuilder.append("KW3749 : 'KW' '3749';\n"); - grammarBuilder.append("KW3750 : 'KW' '3750';\n"); - grammarBuilder.append("KW3751 : 'KW' '3751';\n"); - grammarBuilder.append("KW3752 : 'KW' '3752';\n"); - grammarBuilder.append("KW3753 : 'KW' '3753';\n"); - grammarBuilder.append("KW3754 : 'KW' '3754';\n"); - grammarBuilder.append("KW3755 : 'KW' '3755';\n"); - grammarBuilder.append("KW3756 : 'KW' '3756';\n"); - grammarBuilder.append("KW3757 : 'KW' '3757';\n"); - grammarBuilder.append("KW3758 : 'KW' '3758';\n"); - grammarBuilder.append("KW3759 : 'KW' '3759';\n"); - grammarBuilder.append("KW3760 : 'KW' '3760';\n"); - grammarBuilder.append("KW3761 : 'KW' '3761';\n"); - grammarBuilder.append("KW3762 : 'KW' '3762';\n"); - grammarBuilder.append("KW3763 : 'KW' '3763';\n"); - grammarBuilder.append("KW3764 : 'KW' '3764';\n"); - grammarBuilder.append("KW3765 : 'KW' '3765';\n"); - grammarBuilder.append("KW3766 : 'KW' '3766';\n"); - grammarBuilder.append("KW3767 : 'KW' '3767';\n"); - grammarBuilder.append("KW3768 : 'KW' '3768';\n"); - grammarBuilder.append("KW3769 : 'KW' '3769';\n"); - grammarBuilder.append("KW3770 : 'KW' '3770';\n"); - grammarBuilder.append("KW3771 : 'KW' '3771';\n"); - grammarBuilder.append("KW3772 : 'KW' '3772';\n"); - grammarBuilder.append("KW3773 : 'KW' '3773';\n"); - grammarBuilder.append("KW3774 : 'KW' '3774';\n"); - grammarBuilder.append("KW3775 : 'KW' '3775';\n"); - grammarBuilder.append("KW3776 : 'KW' '3776';\n"); - grammarBuilder.append("KW3777 : 'KW' '3777';\n"); - grammarBuilder.append("KW3778 : 'KW' '3778';\n"); - grammarBuilder.append("KW3779 : 'KW' '3779';\n"); - grammarBuilder.append("KW3780 : 'KW' '3780';\n"); - grammarBuilder.append("KW3781 : 'KW' '3781';\n"); - grammarBuilder.append("KW3782 : 'KW' '3782';\n"); - grammarBuilder.append("KW3783 : 'KW' '3783';\n"); - grammarBuilder.append("KW3784 : 'KW' '3784';\n"); - grammarBuilder.append("KW3785 : 'KW' '3785';\n"); - grammarBuilder.append("KW3786 : 'KW' '3786';\n"); - grammarBuilder.append("KW3787 : 'KW' '3787';\n"); - grammarBuilder.append("KW3788 : 'KW' '3788';\n"); - grammarBuilder.append("KW3789 : 'KW' '3789';\n"); - grammarBuilder.append("KW3790 : 'KW' '3790';\n"); - grammarBuilder.append("KW3791 : 'KW' '3791';\n"); - grammarBuilder.append("KW3792 : 'KW' '3792';\n"); - grammarBuilder.append("KW3793 : 'KW' '3793';\n"); - grammarBuilder.append("KW3794 : 'KW' '3794';\n"); - grammarBuilder.append("KW3795 : 'KW' '3795';\n"); - grammarBuilder.append("KW3796 : 'KW' '3796';\n"); - grammarBuilder.append("KW3797 : 'KW' '3797';\n"); - grammarBuilder.append("KW3798 : 'KW' '3798';\n"); - grammarBuilder.append("KW3799 : 'KW' '3799';\n"); - grammarBuilder.append("KW3800 : 'KW' '3800';\n"); - grammarBuilder.append("KW3801 : 'KW' '3801';\n"); - grammarBuilder.append("KW3802 : 'KW' '3802';\n"); - grammarBuilder.append("KW3803 : 'KW' '3803';\n"); - grammarBuilder.append("KW3804 : 'KW' '3804';\n"); - grammarBuilder.append("KW3805 : 'KW' '3805';\n"); - grammarBuilder.append("KW3806 : 'KW' '3806';\n"); - grammarBuilder.append("KW3807 : 'KW' '3807';\n"); - grammarBuilder.append("KW3808 : 'KW' '3808';\n"); - grammarBuilder.append("KW3809 : 'KW' '3809';\n"); - grammarBuilder.append("KW3810 : 'KW' '3810';\n"); - grammarBuilder.append("KW3811 : 'KW' '3811';\n"); - grammarBuilder.append("KW3812 : 'KW' '3812';\n"); - grammarBuilder.append("KW3813 : 'KW' '3813';\n"); - grammarBuilder.append("KW3814 : 'KW' '3814';\n"); - grammarBuilder.append("KW3815 : 'KW' '3815';\n"); - grammarBuilder.append("KW3816 : 'KW' '3816';\n"); - grammarBuilder.append("KW3817 : 'KW' '3817';\n"); - grammarBuilder.append("KW3818 : 'KW' '3818';\n"); - grammarBuilder.append("KW3819 : 'KW' '3819';\n"); - grammarBuilder.append("KW3820 : 'KW' '3820';\n"); - grammarBuilder.append("KW3821 : 'KW' '3821';\n"); - grammarBuilder.append("KW3822 : 'KW' '3822';\n"); - grammarBuilder.append("KW3823 : 'KW' '3823';\n"); - grammarBuilder.append("KW3824 : 'KW' '3824';\n"); - grammarBuilder.append("KW3825 : 'KW' '3825';\n"); - grammarBuilder.append("KW3826 : 'KW' '3826';\n"); - grammarBuilder.append("KW3827 : 'KW' '3827';\n"); - grammarBuilder.append("KW3828 : 'KW' '3828';\n"); - grammarBuilder.append("KW3829 : 'KW' '3829';\n"); - grammarBuilder.append("KW3830 : 'KW' '3830';\n"); - grammarBuilder.append("KW3831 : 'KW' '3831';\n"); - grammarBuilder.append("KW3832 : 'KW' '3832';\n"); - grammarBuilder.append("KW3833 : 'KW' '3833';\n"); - grammarBuilder.append("KW3834 : 'KW' '3834';\n"); - grammarBuilder.append("KW3835 : 'KW' '3835';\n"); - grammarBuilder.append("KW3836 : 'KW' '3836';\n"); - grammarBuilder.append("KW3837 : 'KW' '3837';\n"); - grammarBuilder.append("KW3838 : 'KW' '3838';\n"); - grammarBuilder.append("KW3839 : 'KW' '3839';\n"); - grammarBuilder.append("KW3840 : 'KW' '3840';\n"); - grammarBuilder.append("KW3841 : 'KW' '3841';\n"); - grammarBuilder.append("KW3842 : 'KW' '3842';\n"); - grammarBuilder.append("KW3843 : 'KW' '3843';\n"); - grammarBuilder.append("KW3844 : 'KW' '3844';\n"); - grammarBuilder.append("KW3845 : 'KW' '3845';\n"); - grammarBuilder.append("KW3846 : 'KW' '3846';\n"); - grammarBuilder.append("KW3847 : 'KW' '3847';\n"); - grammarBuilder.append("KW3848 : 'KW' '3848';\n"); - grammarBuilder.append("KW3849 : 'KW' '3849';\n"); - grammarBuilder.append("KW3850 : 'KW' '3850';\n"); - grammarBuilder.append("KW3851 : 'KW' '3851';\n"); - grammarBuilder.append("KW3852 : 'KW' '3852';\n"); - grammarBuilder.append("KW3853 : 'KW' '3853';\n"); - grammarBuilder.append("KW3854 : 'KW' '3854';\n"); - grammarBuilder.append("KW3855 : 'KW' '3855';\n"); - grammarBuilder.append("KW3856 : 'KW' '3856';\n"); - grammarBuilder.append("KW3857 : 'KW' '3857';\n"); - grammarBuilder.append("KW3858 : 'KW' '3858';\n"); - grammarBuilder.append("KW3859 : 'KW' '3859';\n"); - grammarBuilder.append("KW3860 : 'KW' '3860';\n"); - grammarBuilder.append("KW3861 : 'KW' '3861';\n"); - grammarBuilder.append("KW3862 : 'KW' '3862';\n"); - grammarBuilder.append("KW3863 : 'KW' '3863';\n"); - grammarBuilder.append("KW3864 : 'KW' '3864';\n"); - grammarBuilder.append("KW3865 : 'KW' '3865';\n"); - grammarBuilder.append("KW3866 : 'KW' '3866';\n"); - grammarBuilder.append("KW3867 : 'KW' '3867';\n"); - grammarBuilder.append("KW3868 : 'KW' '3868';\n"); - grammarBuilder.append("KW3869 : 'KW' '3869';\n"); - grammarBuilder.append("KW3870 : 'KW' '3870';\n"); - grammarBuilder.append("KW3871 : 'KW' '3871';\n"); - grammarBuilder.append("KW3872 : 'KW' '3872';\n"); - grammarBuilder.append("KW3873 : 'KW' '3873';\n"); - grammarBuilder.append("KW3874 : 'KW' '3874';\n"); - grammarBuilder.append("KW3875 : 'KW' '3875';\n"); - grammarBuilder.append("KW3876 : 'KW' '3876';\n"); - grammarBuilder.append("KW3877 : 'KW' '3877';\n"); - grammarBuilder.append("KW3878 : 'KW' '3878';\n"); - grammarBuilder.append("KW3879 : 'KW' '3879';\n"); - grammarBuilder.append("KW3880 : 'KW' '3880';\n"); - grammarBuilder.append("KW3881 : 'KW' '3881';\n"); - grammarBuilder.append("KW3882 : 'KW' '3882';\n"); - grammarBuilder.append("KW3883 : 'KW' '3883';\n"); - grammarBuilder.append("KW3884 : 'KW' '3884';\n"); - grammarBuilder.append("KW3885 : 'KW' '3885';\n"); - grammarBuilder.append("KW3886 : 'KW' '3886';\n"); - grammarBuilder.append("KW3887 : 'KW' '3887';\n"); - grammarBuilder.append("KW3888 : 'KW' '3888';\n"); - grammarBuilder.append("KW3889 : 'KW' '3889';\n"); - grammarBuilder.append("KW3890 : 'KW' '3890';\n"); - grammarBuilder.append("KW3891 : 'KW' '3891';\n"); - grammarBuilder.append("KW3892 : 'KW' '3892';\n"); - grammarBuilder.append("KW3893 : 'KW' '3893';\n"); - grammarBuilder.append("KW3894 : 'KW' '3894';\n"); - grammarBuilder.append("KW3895 : 'KW' '3895';\n"); - grammarBuilder.append("KW3896 : 'KW' '3896';\n"); - grammarBuilder.append("KW3897 : 'KW' '3897';\n"); - grammarBuilder.append("KW3898 : 'KW' '3898';\n"); - grammarBuilder.append("KW3899 : 'KW' '3899';\n"); - grammarBuilder.append("KW3900 : 'KW' '3900';\n"); - grammarBuilder.append("KW3901 : 'KW' '3901';\n"); - grammarBuilder.append("KW3902 : 'KW' '3902';\n"); - grammarBuilder.append("KW3903 : 'KW' '3903';\n"); - grammarBuilder.append("KW3904 : 'KW' '3904';\n"); - grammarBuilder.append("KW3905 : 'KW' '3905';\n"); - grammarBuilder.append("KW3906 : 'KW' '3906';\n"); - grammarBuilder.append("KW3907 : 'KW' '3907';\n"); - grammarBuilder.append("KW3908 : 'KW' '3908';\n"); - grammarBuilder.append("KW3909 : 'KW' '3909';\n"); - grammarBuilder.append("KW3910 : 'KW' '3910';\n"); - grammarBuilder.append("KW3911 : 'KW' '3911';\n"); - grammarBuilder.append("KW3912 : 'KW' '3912';\n"); - grammarBuilder.append("KW3913 : 'KW' '3913';\n"); - grammarBuilder.append("KW3914 : 'KW' '3914';\n"); - grammarBuilder.append("KW3915 : 'KW' '3915';\n"); - grammarBuilder.append("KW3916 : 'KW' '3916';\n"); - grammarBuilder.append("KW3917 : 'KW' '3917';\n"); - grammarBuilder.append("KW3918 : 'KW' '3918';\n"); - grammarBuilder.append("KW3919 : 'KW' '3919';\n"); - grammarBuilder.append("KW3920 : 'KW' '3920';\n"); - grammarBuilder.append("KW3921 : 'KW' '3921';\n"); - grammarBuilder.append("KW3922 : 'KW' '3922';\n"); - grammarBuilder.append("KW3923 : 'KW' '3923';\n"); - grammarBuilder.append("KW3924 : 'KW' '3924';\n"); - grammarBuilder.append("KW3925 : 'KW' '3925';\n"); - grammarBuilder.append("KW3926 : 'KW' '3926';\n"); - grammarBuilder.append("KW3927 : 'KW' '3927';\n"); - grammarBuilder.append("KW3928 : 'KW' '3928';\n"); - grammarBuilder.append("KW3929 : 'KW' '3929';\n"); - grammarBuilder.append("KW3930 : 'KW' '3930';\n"); - grammarBuilder.append("KW3931 : 'KW' '3931';\n"); - grammarBuilder.append("KW3932 : 'KW' '3932';\n"); - grammarBuilder.append("KW3933 : 'KW' '3933';\n"); - grammarBuilder.append("KW3934 : 'KW' '3934';\n"); - grammarBuilder.append("KW3935 : 'KW' '3935';\n"); - grammarBuilder.append("KW3936 : 'KW' '3936';\n"); - grammarBuilder.append("KW3937 : 'KW' '3937';\n"); - grammarBuilder.append("KW3938 : 'KW' '3938';\n"); - grammarBuilder.append("KW3939 : 'KW' '3939';\n"); - grammarBuilder.append("KW3940 : 'KW' '3940';\n"); - grammarBuilder.append("KW3941 : 'KW' '3941';\n"); - grammarBuilder.append("KW3942 : 'KW' '3942';\n"); - grammarBuilder.append("KW3943 : 'KW' '3943';\n"); - grammarBuilder.append("KW3944 : 'KW' '3944';\n"); - grammarBuilder.append("KW3945 : 'KW' '3945';\n"); - grammarBuilder.append("KW3946 : 'KW' '3946';\n"); - grammarBuilder.append("KW3947 : 'KW' '3947';\n"); - grammarBuilder.append("KW3948 : 'KW' '3948';\n"); - grammarBuilder.append("KW3949 : 'KW' '3949';\n"); - grammarBuilder.append("KW3950 : 'KW' '3950';\n"); - grammarBuilder.append("KW3951 : 'KW' '3951';\n"); - grammarBuilder.append("KW3952 : 'KW' '3952';\n"); - grammarBuilder.append("KW3953 : 'KW' '3953';\n"); - grammarBuilder.append("KW3954 : 'KW' '3954';\n"); - grammarBuilder.append("KW3955 : 'KW' '3955';\n"); - grammarBuilder.append("KW3956 : 'KW' '3956';\n"); - grammarBuilder.append("KW3957 : 'KW' '3957';\n"); - grammarBuilder.append("KW3958 : 'KW' '3958';\n"); - grammarBuilder.append("KW3959 : 'KW' '3959';\n"); - grammarBuilder.append("KW3960 : 'KW' '3960';\n"); - grammarBuilder.append("KW3961 : 'KW' '3961';\n"); - grammarBuilder.append("KW3962 : 'KW' '3962';\n"); - grammarBuilder.append("KW3963 : 'KW' '3963';\n"); - grammarBuilder.append("KW3964 : 'KW' '3964';\n"); - grammarBuilder.append("KW3965 : 'KW' '3965';\n"); - grammarBuilder.append("KW3966 : 'KW' '3966';\n"); - grammarBuilder.append("KW3967 : 'KW' '3967';\n"); - grammarBuilder.append("KW3968 : 'KW' '3968';\n"); - grammarBuilder.append("KW3969 : 'KW' '3969';\n"); - grammarBuilder.append("KW3970 : 'KW' '3970';\n"); - grammarBuilder.append("KW3971 : 'KW' '3971';\n"); - grammarBuilder.append("KW3972 : 'KW' '3972';\n"); - grammarBuilder.append("KW3973 : 'KW' '3973';\n"); - grammarBuilder.append("KW3974 : 'KW' '3974';\n"); - grammarBuilder.append("KW3975 : 'KW' '3975';\n"); - grammarBuilder.append("KW3976 : 'KW' '3976';\n"); - grammarBuilder.append("KW3977 : 'KW' '3977';\n"); - grammarBuilder.append("KW3978 : 'KW' '3978';\n"); - grammarBuilder.append("KW3979 : 'KW' '3979';\n"); - grammarBuilder.append("KW3980 : 'KW' '3980';\n"); - grammarBuilder.append("KW3981 : 'KW' '3981';\n"); - grammarBuilder.append("KW3982 : 'KW' '3982';\n"); - grammarBuilder.append("KW3983 : 'KW' '3983';\n"); - grammarBuilder.append("KW3984 : 'KW' '3984';\n"); - grammarBuilder.append("KW3985 : 'KW' '3985';\n"); - grammarBuilder.append("KW3986 : 'KW' '3986';\n"); - grammarBuilder.append("KW3987 : 'KW' '3987';\n"); - grammarBuilder.append("KW3988 : 'KW' '3988';\n"); - grammarBuilder.append("KW3989 : 'KW' '3989';\n"); - grammarBuilder.append("KW3990 : 'KW' '3990';\n"); - grammarBuilder.append("KW3991 : 'KW' '3991';\n"); - grammarBuilder.append("KW3992 : 'KW' '3992';\n"); - grammarBuilder.append("KW3993 : 'KW' '3993';\n"); - grammarBuilder.append("KW3994 : 'KW' '3994';\n"); - grammarBuilder.append("KW3995 : 'KW' '3995';\n"); - grammarBuilder.append("KW3996 : 'KW' '3996';\n"); - grammarBuilder.append("KW3997 : 'KW' '3997';\n"); - grammarBuilder.append("KW3998 : 'KW' '3998';\n"); - grammarBuilder.append("KW3999 : 'KW' '3999';"); - String grammar = grammarBuilder.toString(); - String input ="KW400"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='KW400',<402>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyClosure() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyConfigs() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : .*? ('a' | 'ab') {fmt.Println(l.GetText())} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : . {fmt.Println(l.GetText())};"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "a\n" + - "b\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:1='b',<3>,1:1]\n" + - "[@2,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyOptional() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyPositiveClosure() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination1() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); - String grammar = grammarBuilder.toString(); - String input ="\"hi\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:3='\"hi\"',<1>,1:0]\n" + - "[@1,4:8='\"mom\"',<1>,1:4]\n" + - "[@2,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination2() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); - String grammar = grammarBuilder.toString(); - String input ="\"\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParentheses() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("START_BLOCK: '-.-.-';\n"); - grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); - grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); - grammarBuilder.append("fragment L_A: '.-';\n"); - grammarBuilder.append("fragment L_K: '-.-';\n"); - grammarBuilder.append("SEPARATOR: '!';"); - String grammar = grammarBuilder.toString(); - String input ="-.-.-!"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='-.-.-',<1>,1:0]\n" + - "[@1,5:5='!',<3>,1:5]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPositionAdjustingLexer() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(2692); - grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("func (p *PositionAdjustingLexer) NextToken() antlr.Token {\n"); - grammarBuilder.append(" if _, ok := p.Interpreter.(*PositionAdjustingLexerATNSimulator); !ok {\n"); - grammarBuilder.append(" p.Interpreter = NewPositionAdjustingLexerATNSimulator(p, lexerAtn, p.Interpreter.DecisionToDFA(), p.Interpreter.SharedContextCache())\n"); - grammarBuilder.append(" p.Virt = p\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return p.BaseLexer.NextToken()\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (p *PositionAdjustingLexer) Emit() antlr.Token {\n"); - grammarBuilder.append(" switch p.GetType() {\n"); - grammarBuilder.append(" case PositionAdjustingLexerTOKENS:\n"); - grammarBuilder.append(" p.HandleAcceptPositionForKeyword(\"tokens\")\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" case PositionAdjustingLexerLABEL:\n"); - grammarBuilder.append(" p.HandleAcceptPositionForIdentifier()\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return p.BaseLexer.Emit()\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func isIdentifierChar(c rune) bool {\n"); - grammarBuilder.append(" return unicode.IsLetter(c) || unicode.IsDigit(c) || c == '_'\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (p *PositionAdjustingLexer) HandleAcceptPositionForIdentifier() bool {\n"); - grammarBuilder.append(" var tokenText = p.GetText()\n"); - grammarBuilder.append(" var identifierLength int\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" for identifierLength < len(tokenText) && isIdentifierChar([]rune(tokenText)[identifierLength]) {\n"); - grammarBuilder.append(" identifierLength++\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" if p.GetInputStream().Index() <= p.TokenStartCharIndex + identifierLength {\n"); - grammarBuilder.append(" return false\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" var offset = identifierLength - 1\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" p.GetInterpreter().(*PositionAdjustingLexerATNSimulator).ResetAcceptPosition(p.GetInputStream(), p.TokenStartCharIndex + offset, p.TokenStartLine, p.TokenStartColumn + offset)\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (p *PositionAdjustingLexer) HandleAcceptPositionForKeyword(keyword string) bool {\n"); - grammarBuilder.append(" if p.GetInputStream().Index() <= p.TokenStartCharIndex + len(keyword) {\n"); - grammarBuilder.append(" return false\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" var offset = len(keyword) - 1\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" p.GetInterpreter().(*PositionAdjustingLexerATNSimulator).ResetAcceptPosition(p.GetInputStream(), p.TokenStartCharIndex + offset, p.TokenStartLine, p.TokenStartColumn + offset)\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("type PositionAdjustingLexerATNSimulator struct {\n"); - grammarBuilder.append(" *antlr.LexerATNSimulator\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewPositionAdjustingLexerATNSimulator(recog antlr.Lexer, atn *antlr.ATN, decisionToDFA []*antlr.DFA, sharedContextCache *antlr.PredictionContextCache) *PositionAdjustingLexerATNSimulator {\n"); - grammarBuilder.append(" return &PositionAdjustingLexerATNSimulator{\n"); - grammarBuilder.append(" LexerATNSimulator: antlr.NewLexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache),\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (p *PositionAdjustingLexerATNSimulator) ResetAcceptPosition(input antlr.CharStream, index, line, charPositionInLine int) {\n"); - grammarBuilder.append(" input.Seek(index)\n"); - grammarBuilder.append(" p.Line = line\n"); - grammarBuilder.append(" p.CharPositionInLine = charPositionInLine\n"); - grammarBuilder.append(" p.Consume(input)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ASSIGN : '=' ;\n"); - grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); - grammarBuilder.append("LCURLY: '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// 'tokens' followed by '{'\n"); - grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); - grammarBuilder.append("LABEL\n"); - grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("IDENTIFIER\n"); - grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("IGNORED\n"); - grammarBuilder.append(" : [ \\t\\r\\n]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("NEWLINE\n"); - grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS\n"); - grammarBuilder.append(" : [ \\t]+ -> skip\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input = - "tokens\n" + - "tokens {\n" + - "notLabel\n" + - "label1 =\n" + - "label2 +=\n" + - "notLabel\n"; - String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); - assertEquals( - "[@0,0:5='tokens',<6>,1:0]\n" + - "[@1,7:12='tokens',<4>,2:0]\n" + - "[@2,14:14='{',<3>,2:7]\n" + - "[@3,16:23='notLabel',<6>,3:0]\n" + - "[@4,25:30='label1',<5>,4:0]\n" + - "[@5,32:32='=',<1>,4:7]\n" + - "[@6,34:39='label2',<5>,5:0]\n" + - "[@7,41:42='+=',<2>,5:7]\n" + - "[@8,44:51='notLabel',<6>,6:0]\n" + - "[@9,53:52='',<-1>,7:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testQuoteTranslation() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); - String grammar = grammarBuilder.toString(); - String input ="\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\"',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : '-' I ;\n"); - grammarBuilder.append("I : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 -21 3"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='34',<2>,1:0]\n" + - "[@1,3:5='-21',<1>,1:3]\n" + - "[@2,7:7='3',<2>,1:7]\n" + - "[@3,8:7='',<-1>,1:8]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSlashes() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("Backslash : '\\\\';\n"); - grammarBuilder.append("Slash : '/';\n"); - grammarBuilder.append("Vee : '\\\\/';\n"); - grammarBuilder.append("Wedge : '/\\\\';\n"); - grammarBuilder.append("WS : [ \\t] -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="\\ / \\/ /\\"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\\',<1>,1:0]\n" + - "[@1,2:2='/',<2>,1:2]\n" + - "[@2,4:5='\\/',<3>,1:4]\n" + - "[@3,7:8='/\\',<4>,1:7]\n" + - "[@4,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testZeroLengthToken() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("BeginString\n"); - grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("mode StringMode;\n"); - grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); - grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); - grammarBuilder.append("mode EndStringMode; \n"); - grammarBuilder.append(" EndString : '\\'' -> popMode;"); - String grammar = grammarBuilder.toString(); - String input ="'xxx'"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4=''xxx'',<1>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestListeners.java index 69b0dd4f9..a59376588 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestListeners.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestListeners.java @@ -1,377 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestListeners extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(526); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("type LeafListener struct {\n"); - grammarBuilder.append(" *BaseTListener\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); - grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) VisitTerminal(node antlr.TerminalNode) {\n"); - grammarBuilder.append(" fmt.Println(node.GetSymbol().GetText())\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1\n" + - "2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(698); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("type LeafListener struct {\n"); - grammarBuilder.append(" *BaseTListener\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); - grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) ExitE(ctx *EContext) {\n"); - grammarBuilder.append(" if ctx.GetChildCount() == 3 {\n"); - grammarBuilder.append(" fmt.Printf(\"%s %s %s\\n\", ctx.E(0).GetStart().GetText(), ctx.E(1).GetStart().GetText(), ctx.AllE()[0].GetStart().GetText())\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" fmt.Println(ctx.INT().GetSymbol().GetText())\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1\n" + - "2\n" + - "3\n" + - "2 3 2\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(706); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("type LeafListener struct {\n"); - grammarBuilder.append(" *BaseTListener\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); - grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) ExitCall(ctx *CallContext) {\n"); - grammarBuilder.append(" fmt.Printf(\"%s %s\", ctx.E().GetStart().GetText(), ctx.EList().String(nil, nil))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) ExitInt(ctx *IntContext) {\n"); - grammarBuilder.append(" fmt.Println(ctx.INT().GetSymbol().GetText())\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1\n" + - "2\n" + - "3\n" + - "1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(721); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("type LeafListener struct {\n"); - grammarBuilder.append(" *BaseTListener\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); - grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); - grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); - grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.B(0).GetStart().GetText(), ctx.B(1).GetStart().GetText(), ctx.AllB()[0].GetStart().GetText())\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" fmt.Println(ctx.B(0).GetStart().GetText())\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(721); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("type LeafListener struct {\n"); - grammarBuilder.append(" *BaseTListener\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); - grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); - grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); - grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.B(0).GetStart().GetText(), ctx.B(1).GetStart().GetText(), ctx.AllB()[0].GetStart().GetText())\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" fmt.Println(ctx.B(0).GetStart().GetText())\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(714); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("type LeafListener struct {\n"); - grammarBuilder.append(" *BaseTListener\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); - grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); - grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); - grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.INT(0).GetSymbol().GetText(), ctx.INT(1).GetSymbol().GetText(), antlr.PrintArrayJavaStyle(antlr.TerminalNodeToStringArray(ctx.AllINT())))\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" fmt.Println(ctx.ID().GetSymbol())\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(714); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("type LeafListener struct {\n"); - grammarBuilder.append(" *BaseTListener\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewLeafListener() *LeafListener {\n"); - grammarBuilder.append(" return &LeafListener{BaseTListener: &BaseTListener{}}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (*LeafListener) ExitA(ctx *AContext) {\n"); - grammarBuilder.append(" if ctx.GetChildCount() == 2 {\n"); - grammarBuilder.append(" fmt.Printf(\"%s %s %s\", ctx.INT(0).GetSymbol().GetText(), ctx.INT(1).GetSymbol().GetText(), antlr.PrintArrayJavaStyle(antlr.TerminalNodeToStringArray(ctx.AllINT())))\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" fmt.Println(ctx.ID().GetSymbol())\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("var walker = antlr.NewParseTreeWalker()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("walker.Walk(NewLeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParseTrees.java index 8e10f9e40..fad86b4f6 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParseTrees.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParseTrees.java @@ -1,277 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestParseTrees extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2AltLoop() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xyyxyxz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a x y y x y x z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2Alts() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAltNum() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(640); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("type MyRuleNode struct {\n"); - grammarBuilder.append(" *antlr.BaseParserRuleContext\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" altNum int\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func NewMyRuleNode(parent antlr.ParserRuleContext, invokingStateNumber int) *MyRuleNode {\n"); - grammarBuilder.append(" return &MyRuleNode{\n"); - grammarBuilder.append(" BaseParserRuleContext : antlr.NewBaseParserRuleContext(parent, invokingStateNumber),\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (m *MyRuleNode) GetAltNumber() int {\n"); - grammarBuilder.append(" return m.altNum\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("func (m *MyRuleNode) SetAltNumber(altNum int) {\n"); - grammarBuilder.append(" m.altNum = altNum\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("a : 'f'\n"); - grammarBuilder.append(" | 'g'\n"); - grammarBuilder.append(" | 'x' b 'z'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'e' {} | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xyz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a:3 x (b:2 y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExtraToken() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - String input ="xzy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a x z y)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAlt() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - String input ="z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a z)\n", found); - - assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleRef() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(136); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b 'x'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'y' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="yx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a (b y) x)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSync() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(143); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'* '!'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xzyy!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a x z y y !)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToken2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(125); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("(a x y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenAndRuleContextString() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(194); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("p.BuildParseTrees = true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($r.ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' { \n"); - grammarBuilder.append("fmt.Println(antlr.PrintArrayJavaStyle(p.GetRuleInvocationStack(nil)))\n"); - grammarBuilder.append("} ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "[a, s]\n" + - "(a x)\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserErrors.java index 468487bd7..7f46a024d 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserErrors.java @@ -1,592 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestParserErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpToken() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(74); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x='b' {fmt.Println(\"conjured=\" + fmt.Sprint($x))} 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpTokenFromSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x=('b'|'c') {fmt.Println(\"conjured=\" + fmt.Sprint($x))} 'd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testContextListGetters() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(175); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members{\n"); - grammarBuilder.append("func foo() {\n"); - grammarBuilder.append(" // TODO\n"); - grammarBuilder.append(" // var s SContext\n"); - grammarBuilder.append(" // var a = s.A()\n"); - grammarBuilder.append(" // var b = s.B()\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : (a | b)+;\n"); - grammarBuilder.append("a : 'a' {fmt.Print(\"a\")};\n"); - grammarBuilder.append("b : 'b' {fmt.Print(\"b\")};"); - String grammar = grammarBuilder.toString(); - String input ="abab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals("abab\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xxxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidATNStateRemoval() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input ="x:x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidEmptyInput() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID+;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, true); - assertEquals("", found); - - assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1ErrorInfo() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(314); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); - grammarBuilder.append("animal : (DOG | CAT );\n"); - grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); - grammarBuilder.append("AND : 'and';\n"); - grammarBuilder.append("DOG : 'dog';\n"); - grammarBuilder.append("CAT : 'cat';\n"); - grammarBuilder.append("HARDWARE: 'hardware';\n"); - grammarBuilder.append("SOFTWARE: 'software';\n"); - grammarBuilder.append("WS : ' ' -> skip ;\n"); - grammarBuilder.append("acClass\n"); - grammarBuilder.append("@init\n"); - grammarBuilder.append("{fmt.Println(p.GetExpectedTokens().StringVerbose(p.GetTokenNames(), nil, false))}\n"); - grammarBuilder.append(" : ;"); - String grammar = grammarBuilder.toString(); - String input ="dog and software"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals("{'hardware', 'software'}\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'\n"); - grammarBuilder.append(" | 'a' 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="ae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(55); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c'\n"); - grammarBuilder.append(" | 'a' 'b' 'd'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="abe"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLLStar() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="aaae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c';"); - String grammar = grammarBuilder.toString(); - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); - String grammar = grammarBuilder.toString(); - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAltAvoidance() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e '!' ;\n"); - grammarBuilder.append("e : 'a' 'b'\n"); - grammarBuilder.append(" | 'a'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a."; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertion() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(34); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertionConsumption() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(93); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {fmt.Println(\"\" + fmt.Sprint($myset.stop))} ; "); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("[@0,0:0='a',<3>,1:0]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletion() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeAlt() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('b' | 'c')\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'a'\n"); - grammarBuilder.append(";"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(25); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* ;"); - String grammar = grammarBuilder.toString(); - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(32); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); - String grammar = grammarBuilder.toString(); - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforePredict() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="caaab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionConsumption() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(93); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {fmt.Println(\"\" + fmt.Sprint($myset.stop))} ; "); - String grammar = grammarBuilder.toString(); - String input ="aabd"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("[@2,2:2='b',<1>,1:2]\n", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionExpectingSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenInsertion() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); - grammarBuilder.append("expr: ID '=' STR ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="( ~FORCE_ERROR~ "; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "stat", input, false); - assertEquals("", found); - - assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserExec.java index 89d9e9398..2eb3e12c4 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestParserExec.java @@ -1,661 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestParserExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAPlus() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID+ {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAPlus() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)+ {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorB() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID {\n"); - grammarBuilder.append("fmt.Println(\"alt 1\")\n"); - grammarBuilder.append("} | INT {\n"); - grammarBuilder.append("fmt.Println(\"alt 2\")\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBPlus() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(111); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})+ {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(111); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(111); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID INT {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abc34\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFInClosure() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : stat EOF;\n"); - grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(193); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("fmt.Println($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(169); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : a* EOF;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : label=subrule {fmt.Println($label.text)} #One\n"); - grammarBuilder.append(" | label='y' {fmt.Println($label.text)} #Two\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("subrule : 'x';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals( - "x\n" + - "y\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabels() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); - grammarBuilder.append("b : id_=ID val+=INT*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelForClosureContext() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(420); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("ifStatement\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : 'if' expression\n"); - grammarBuilder.append(" ( ( 'then'\n"); - grammarBuilder.append(" executableStatement*\n"); - grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); - grammarBuilder.append(" elseStatement?\n"); - grammarBuilder.append(" 'end' 'if'\n"); - grammarBuilder.append(" ) | executableStatement )\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("elseIfStatement\n"); - grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expression : 'a' ;\n"); - grammarBuilder.append("executableStatement : 'a' ;\n"); - grammarBuilder.append("elseStatement : 'a' ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "expression", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelsOnSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b b* ';' ;\n"); - grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleEOFHandling() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(42); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_4() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserProperty() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(181); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("func (p *TParser) Property() bool {\n"); - grammarBuilder.append(" return true\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("a : {$parser.Property()}? ID {fmt.Println(\"valid\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("valid\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedIfIfElse() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(183); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : stmt EOF ;\n"); - grammarBuilder.append("stmt : ifStmt | ID;\n"); - grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { p.GetTokenStream().LA(1) != TParserELSE }?);\n"); - grammarBuilder.append("ELSE : 'else';\n"); - grammarBuilder.append("ID : [a-zA-Z]+;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="if x if x a else b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredictionIssue334() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_ @init{\n"); - grammarBuilder.append("p.SetErrorHandler(antlr.NewBailErrorStrategy())\n"); - grammarBuilder.append("} \n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); - grammarBuilder.append("item : A B?;\n"); - grammarBuilder.append("SEMICOLON: ';';\n"); - grammarBuilder.append("A : 'a'|'A';\n"); - grammarBuilder.append("B : 'b'|'B';\n"); - grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "file_", input, false); - assertEquals("(file_ (item a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(112); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {fmt.Println($text)} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(112); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {fmt.Println($text)} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestPerformance.java index 53ffcfac3..005898caf 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestPerformance.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestPerformance.java @@ -1,209 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestPerformance extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test(timeout = 60000) - public void testExpressionGrammar_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test(timeout = 60000) - public void testExpressionGrammar_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java index 028a6984e..6b99a94bb 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java @@ -1,203 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestSemPredEvalLexer extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisableRule() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("E1 : 'enum' { false }? ;\n"); - grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<3>,1:5]\n" + - "[@2,8:7='',<-1>,1:8]\n" + - "s0-' '->:s5=>4\n" + - "s0-'a'->:s6=>3\n" + - "s0-'e'->:s1=>3\n" + - ":s1=>3-'n'->:s2=>3\n" + - ":s2=>3-'u'->:s3=>3\n" + - ":s6=>3-'b'->:s6=>3\n" + - ":s6=>3-'c'->:s6=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnumNotID() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(100); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { p.GetText() == \"enum\" }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<1>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s3=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDnotEnum() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s2=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDvsEnum() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s5=>3\n" + - "s0-'a'->:s4=>2\n" + - "s0-'e'->:s1=>2\n" + - ":s1=>2-'n'->:s2=>2\n" + - ":s2=>2-'u'->:s3=>2\n" + - ":s4=>2-'b'->:s4=>2\n" + - ":s4=>2-'c'->:s4=>2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndent() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(139); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { p.TokenStartColumn == 0 }?\n"); - grammarBuilder.append(" { fmt.Println(\"INDENT\") } ;\n"); - grammarBuilder.append("NL : '\\n';\n"); - grammarBuilder.append("WS : [ \\t]+ ;"); - String grammar = grammarBuilder.toString(); - String input = - "abc\n" + - " def \n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "INDENT\n" + - "[@0,0:2='abc',<1>,1:0]\n" + - "[@1,3:3='\\n',<3>,1:3]\n" + - "[@2,4:5=' ',<2>,2:0]\n" + - "[@3,6:8='def',<1>,2:2]\n" + - "[@4,9:10=' ',<4>,2:5]\n" + - "[@5,11:11='\\n',<3>,2:7]\n" + - "[@6,12:11='',<-1>,3:0]\n" + - "s0-'\n" + - "'->:s2=>3\n" + - "s0-'a'->:s1=>1\n" + - "s0-'d'->:s1=>1\n" + - ":s1=>1-'b'->:s1=>1\n" + - ":s1=>1-'c'->:s1=>1\n" + - ":s1=>1-'e'->:s1=>1\n" + - ":s1=>1-'f'->:s1=>1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerInputPositionSensitivePredicates() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WORD1 : ID1+ { fmt.Println(l.GetText()) } ;\n"); - grammarBuilder.append("WORD2 : ID2+ { fmt.Println(l.GetText()) } ;\n"); - grammarBuilder.append("fragment ID1 : { p.GetCharPositionInLine() < 2 }? [a-zA-Z];\n"); - grammarBuilder.append("fragment ID2 : { p.GetCharPositionInLine() >= 2 }? [a-zA-Z];\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input = - "a cde\n" + - "abcde\n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "a\n" + - "cde\n" + - "ab\n" + - "cde\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:4='cde',<2>,1:2]\n" + - "[@2,6:7='ab',<1>,2:0]\n" + - "[@3,8:10='cde',<2>,2:2]\n" + - "[@4,12:11='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedKeywords() throws Exception { - mkdir(parserpkgdir); - - StringBuilder grammarBuilder = new StringBuilder(160); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { p.GetText() == \"enum\" }? { fmt.Println(\"enum!\") } ;\n"); - grammarBuilder.append("ID : [a-z]+ { fmt.Println(\"ID \" + l.GetText()) } ;\n"); - grammarBuilder.append("WS : [ \\n] -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="enum enu a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "enum!\n" + - "ID enu\n" + - "ID a\n" + - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='enu',<2>,1:5]\n" + - "[@2,9:9='a',<2>,1:9]\n" + - "[@3,10:9='',<-1>,1:10]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java index 06afd1458..19e35c36a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java @@ -1,661 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestSemPredEvalParser extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAlts() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(299); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);} a ';' a; // do 2x: once in ATN, next in DFA\n"); - grammarBuilder.append("a : ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" | {false}? ID {fmt.Println(\"alt 3\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - - assertEquals( - "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + - "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(350); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {p.Interpreter.SetPredictionMode(antlr.PredictionModeLLExactAmbigDetection);} a ';' a ';' a;\n"); - grammarBuilder.append("a : INT {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | ID {fmt.Println(\"alt 2\")} // must pick this one for ID since pred is false\n"); - grammarBuilder.append(" | ID {fmt.Println(\"alt 3\")}\n"); - grammarBuilder.append(" | {false}? ID {fmt.Println(\"alt 4\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34; x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, true); - assertEquals( - "alt 1\n" + - "alt 2\n" + - "alt 2\n", found); - - assertEquals( - "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + - "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionHidesPreds() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); - grammarBuilder.append("s : a+ ;\n"); - grammarBuilder.append("a : {i = 1;} ID {i == 1}? {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {i = 2;} ID {i == 2}? {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionsHidePredsInGlobalFOLLOW() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(286); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("func pred(v bool) bool {\n"); - grammarBuilder.append(" fmt.Println(\"eval=\" + fmt.Sprint(v))\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {} {pred(true)}? {fmt.Println(\"parse\")} '!' ;\n"); - grammarBuilder.append("t : e {} {pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAtomWithClosureInTranslatedLRRule() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : e[0] EOF;\n"); - grammarBuilder.append("e[int _p]\n"); - grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); - grammarBuilder.append(" ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b+a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDepedentPredsInGlobalFOLLOW() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(313); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("func pred(v bool) bool {\n"); - grammarBuilder.append(" fmt.Println(\"eval=\" + fmt.Sprint(v))\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : a[99] ;\n"); - grammarBuilder.append("a[int i] : e {pred($i == 99)}? {fmt.Println(\"parse\")} '!' ;\n"); - grammarBuilder.append("b[int i] : e {pred($i == 99)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(272); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); - grammarBuilder.append("b[int i] : a[i] ;\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i == 1}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {$i == 2}? ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisabledAlternative() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); - grammarBuilder.append("content: anything | {false}? .;\n"); - grammarBuilder.append("anything: ANY_CHAR;\n"); - grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); - String grammar = grammarBuilder.toString(); - String input ="hello"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "cppCompilationUnit", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(181); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b ';' | b '.' ;\n"); - grammarBuilder.append("b : a ;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : {false}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoTruePredsThrowsNoViableAlt() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(169); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {false}? ID INT {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {false}? ID INT {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOrder() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(295); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); - grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); - grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); - grammarBuilder.append("a : ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(213); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {fmt.Println($ctx.ToStringTree(nil, p))}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{p.GetTokenStream().LA(2) != TParserNL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - String input = - "s\n" + - "\n" + - "\n" + - "x\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); - - assertEquals( - "line 5:0 mismatched input '' expecting '\n" + - "'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(213); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {fmt.Println($ctx.ToStringTree(nil, p))}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{p.GetTokenStream().LA(2) != TParserNL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - String input = - "s\n" + - "\n" + - "\n" + - "x\n" + - "\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(233); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {var enumKeyword bool = true; var _ bool = enumKeyword; }\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {fmt.Println(\"ID \"+$ID.text)}\n"); - grammarBuilder.append(" | {!enumKeyword}? 'enum' {fmt.Println(\"enum\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "primary", input, false); - assertEquals("ID abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(233); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {var enumKeyword bool = true; var _ bool = enumKeyword; }\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {fmt.Println(\"ID \"+$ID.text)}\n"); - grammarBuilder.append(" | {!enumKeyword}? 'enum' {fmt.Println(\"enum\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="enum"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "primary", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(230); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i == 1}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {$i == 2}? ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(186); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i == 1}? ID \n"); - grammarBuilder.append(" | {$i == 2}? ID \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredsInGlobalFOLLOW() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(280); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("func pred(v bool) bool {\n"); - grammarBuilder.append(" fmt.Println(\"eval=\" + fmt.Sprint(v))\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {pred(true)}? {fmt.Println(\"parse\")} '!' ;\n"); - grammarBuilder.append("t : e {pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRewindBeforePredEval() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(241); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {p.GetTokenStream().LT(1).GetText() == \"x\"}? ID INT {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {p.GetTokenStream().LT(1).GetText() == \"y\"}? ID INT {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(253); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); - grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" | INT {fmt.Println(\"alt 3\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y 3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {true}? INT {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a;\n"); - grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {true}? INT {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="3 4 x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n", found); - - assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeft() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append(" s : a+ ;\n"); - grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {true}? ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeftWithVaryingPredicate() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(264); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {var i int = 0; var _ int = i; }\n"); - grammarBuilder.append("s : ({i += 1;\n"); - grammarBuilder.append("fmt.Print(\"i=\")\n"); - grammarBuilder.append("fmt.Println(i)} a)+ ;\n"); - grammarBuilder.append("a : {i % 2 == 0}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {i % 2 != 0}? ID {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "i=1\n" + - "alt 2\n" + - "i=2\n" + - "alt 1\n" + - "i=3\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testUnpredicatedPathsInAlt() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(181); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | b {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("a : {false}? ID INT\n"); - grammarBuilder.append(" | ID INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testValidateInDFA() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(330); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ';' a;\n"); - grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); - grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); - grammarBuilder.append("// throws an exception if the validating predicate fails\n"); - grammarBuilder.append("a : {false}? ID {fmt.Println(\"alt 1\")}\n"); - grammarBuilder.append(" | {true}? INT {fmt.Println(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x ; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 no viable alternative at input 'x'\n" + - "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java index 7211c4687..452065d76 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java @@ -1,384 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestSets extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetLiteral() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (A {fmt.Println($A.text)})+ ;\n"); - grammarBuilder.append("A : [AaBb] ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="A a B b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals( - "A\n" + - "a\n" + - "B\n" + - "b\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testComplementSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("parse : ~NEW_LINE;\n"); - grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "parse", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 token recognition error at: 'a'\n" + - "line 1:1 missing {} at ''\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerOptionalSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')? 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerPlusSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerStarSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotChar() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); - grammarBuilder.append("A : ~'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); - grammarBuilder.append("A : ~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithLabel() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); - grammarBuilder.append("A : h=~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithRuleRef3() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(124); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println($A.text)} ;\n"); - grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("B : ~('a'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalLexerSingleElement() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : 'b'? 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSingleElement() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(56); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~('x'|'y') 'z' {fmt.Println($t.text)} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotToken() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(72); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("zz\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotTokenWithLabel() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(50); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~'x' 'z' {fmt.Println($t.text)} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=('x'|'y') {fmt.Println($t.text)} ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusLexerSingleElement() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : 'b'+ 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleAsSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {fmt.Println(p.GetTokenStream().GetAllText())} : 'a' | 'b' |'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("b\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSeqDoesNotBecomeSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(122); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("fragment A : '1' | '2';\n"); - grammarBuilder.append("fragment B : '3' '4';\n"); - grammarBuilder.append("C : A | B;"); - String grammar = grammarBuilder.toString(); - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("34\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarSet() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestVisitors.java index 225d7eb3c..53a793e75 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestVisitors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestVisitors.java @@ -1,269 +1,27 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.go; -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestVisitors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testBasic() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(218); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "[ '1', '2' ]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLR() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(233); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1,,2,,32 3 21 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLRWithLabels() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(273); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1,,2,,3,1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - ",1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(260); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_1() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(218); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a 1 2)\n" + - ",1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_2() throws Exception { - mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(218); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("fmt.Println($ctx.r.ToStringTree(nil, p))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseGoTest()); } + @BeforeClass + public static void groupSetUp() throws Exception { BaseGoTest.groupSetUp(); } + + @AfterClass + public static void groupTearDown() throws Exception { BaseGoTest.groupTearDown(); } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Go"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseJavaTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseJavaTest.java new file mode 100644 index 000000000..4618e8205 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/BaseJavaTest.java @@ -0,0 +1,1378 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.java; + +import org.antlr.v4.Tool; +import org.antlr.v4.automata.ATNFactory; +import org.antlr.v4.automata.ATNPrinter; +import org.antlr.v4.automata.LexerATNFactory; +import org.antlr.v4.automata.ParserATNFactory; +import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.IntStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.RuleContext; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.WritableToken; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ATNSerializer; +import org.antlr.v4.runtime.atn.ATNState; +import org.antlr.v4.runtime.atn.DecisionState; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.IntegerList; +import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.misc.Pair; +import org.antlr.v4.runtime.misc.Utils; +import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.semantics.SemanticPipeline; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.SingleTest; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.DefaultToolListener; +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.antlr.v4.tool.LexerGrammar; +import org.antlr.v4.tool.Rule; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupString; + +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import java.io.PrintStream; +import java.io.StringReader; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertEquals; +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertNotNull; +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertArrayEquals; + +public class BaseJavaTest implements SingleTest { + // -J-Dorg.antlr.v4.test.BaseTest.level=FINE + private static final Logger LOGGER = Logger.getLogger(BaseJavaTest.class.getName()); + + public static final String newline = System.getProperty("line.separator"); + public static final String pathSep = System.getProperty("path.separator"); + + /** + * When the {@code antlr.testinprocess} runtime property is set to + * {@code true}, the test suite will attempt to load generated classes into + * the test process for direct execution rather than invoking the JVM in a + * new process for testing. + *

+ *

+ * In-process testing results in a substantial performance improvement, but + * some test environments created by IDEs do not support the mechanisms + * currently used by the tests to dynamically load compiled code. Therefore, + * the default behavior (used in all other cases) favors reliable + * cross-system test execution by executing generated test code in a + * separate process.

+ */ + public static final boolean TEST_IN_SAME_PROCESS = Boolean.parseBoolean(System.getProperty("antlr.testinprocess")); + + /** + * When the {@code antlr.preserve-test-dir} runtime property is set to + * {@code true}, the temporary directories created by the test run will not + * be removed at the end of the test run, even for tests that completed + * successfully. + *

+ *

+ * The default behavior (used in all other cases) is removing the temporary + * directories for all tests which completed successfully, and preserving + * the directories for tests which failed.

+ */ + public static final boolean PRESERVE_TEST_DIR = Boolean.parseBoolean(System.getProperty("antlr.preserve-test-dir")); + + /** + * The base test directory is the directory where generated files get placed + * during unit test execution. + *

+ *

+ * The default value for this property is the {@code java.io.tmpdir} system + * property, and can be overridden by setting the + * {@code antlr.java-test-dir} property to a custom location. Note that the + * {@code antlr.java-test-dir} property directly affects the + * {@link #CREATE_PER_TEST_DIRECTORIES} value as well.

+ */ + public static final String BASE_TEST_DIR; + + /** + * When {@code true}, a temporary directory will be created for each test + * executed during the test run. + *

+ *

+ * This value is {@code true} when the {@code antlr.java-test-dir} system + * property is set, and otherwise {@code false}.

+ */ + public static final boolean CREATE_PER_TEST_DIRECTORIES; + + static { + String baseTestDir = System.getProperty("antlr.java-test-dir"); + boolean perTestDirectories = false; + if ( baseTestDir==null || baseTestDir.isEmpty() ) { + baseTestDir = System.getProperty("java.io.tmpdir"); + perTestDirectories = true; + } + + if ( !new File(baseTestDir).isDirectory() ) { + throw new UnsupportedOperationException("The specified base test directory does not exist: "+baseTestDir); + } + + BASE_TEST_DIR = baseTestDir; + CREATE_PER_TEST_DIRECTORIES = perTestDirectories; + } + + /** + * Build up the full classpath we need, including the surefire path (if present) + */ + public static final String CLASSPATH = System.getProperty("java.class.path"); + + public String tmpdir = null; + + /** + * If error during parser execution, store stderr here; can't return + * stdout and stderr. This doesn't trap errors from running antlr. + */ + protected String stderrDuringParse; + + /** + * Errors found while running antlr + */ + protected StringBuilder antlrToolErrors; + + @Override + public void testSetUp() throws Exception { + if ( CREATE_PER_TEST_DIRECTORIES ) { + // new output dir for each test + String testDirectory = getClass().getSimpleName()+"-"+System.currentTimeMillis(); + tmpdir = new File(BASE_TEST_DIR, testDirectory).getAbsolutePath(); + } + else { + tmpdir = new File(BASE_TEST_DIR).getAbsolutePath(); + if ( !PRESERVE_TEST_DIR && new File(tmpdir).exists() ) { + eraseFiles(); + } + } + antlrToolErrors = new StringBuilder(); + } + + @Override + public void testTearDown() throws Exception { + } + + @Override + public String getTmpDir() { + return tmpdir; + } + + @Override + public String getStdout() { + return null; + } + + @Override + public String getParseErrors() { + return stderrDuringParse; + } + + @Override + public String getANTLRToolErrors() { + if ( antlrToolErrors.length()==0 ) { + return null; + } + return antlrToolErrors.toString(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { + Tool tool = new Tool(args); + return tool; + } + + protected Tool newTool() { + org.antlr.v4.Tool tool = new Tool(new String[]{"-o", tmpdir}); + return tool; + } + + protected ATN createATN(Grammar g, boolean useSerializer) { + if ( g.atn==null ) { + semanticProcess(g); + assertEquals(0, g.tool.getNumErrors()); + + ParserATNFactory f; + if ( g.isLexer() ) { + f = new LexerATNFactory((LexerGrammar) g); + } + else { + f = new ParserATNFactory(g); + } + + g.atn = f.createATN(); + assertEquals(0, g.tool.getNumErrors()); + } + + ATN atn = g.atn; + if ( useSerializer ) { + char[] serialized = ATNSerializer.getSerializedAsChars(atn); + return new ATNDeserializer().deserialize(serialized); + } + + return atn; + } + + protected void semanticProcess(Grammar g) { + if ( g.ast!=null && !g.ast.hasErrors ) { +// System.out.println(g.ast.toStringTree()); + Tool antlr = new Tool(); + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + if ( g.getImportedGrammars()!=null ) { // process imported grammars (if any) + for (Grammar imp : g.getImportedGrammars()) { + antlr.processNonCombinedGrammar(imp, false); + } + } + } + } + + public DFA createDFA(Grammar g, DecisionState s) { +// PredictionDFAFactory conv = new PredictionDFAFactory(g, s); +// DFA dfa = conv.createDFA(); +// conv.issueAmbiguityWarnings(); +// System.out.print("DFA="+dfa); +// return dfa; + return null; + } + +// public void minimizeDFA(DFA dfa) { +// DFAMinimizer dmin = new DFAMinimizer(dfa); +// dfa.minimized = dmin.minimize(); +// } + + IntegerList getTypesFromString(Grammar g, String expecting) { + IntegerList expectingTokenTypes = new IntegerList(); + if ( expecting!=null && !expecting.trim().isEmpty() ) { + for (String tname : expecting.replace(" ", "").split(",")) { + int ttype = g.getTokenType(tname); + expectingTokenTypes.add(ttype); + } + } + return expectingTokenTypes; + } + + public IntegerList getTokenTypesViaATN(String input, LexerATNSimulator lexerATN) { + ANTLRInputStream in = new ANTLRInputStream(input); + IntegerList tokenTypes = new IntegerList(); + int ttype; + do { + ttype = lexerATN.match(in, Lexer.DEFAULT_MODE); + tokenTypes.add(ttype); + } while ( ttype!=Token.EOF ); + return tokenTypes; + } + + public List getTokenTypes(LexerGrammar lg, + ATN atn, + CharStream input) { + LexerATNSimulator interp = new LexerATNSimulator(atn, new DFA[]{new DFA(atn.modeToStartState.get(Lexer.DEFAULT_MODE))}, null); + List tokenTypes = new ArrayList(); + int ttype; + boolean hitEOF = false; + do { + if ( hitEOF ) { + tokenTypes.add("EOF"); + break; + } + int t = input.LA(1); + ttype = interp.match(input, Lexer.DEFAULT_MODE); + if ( ttype==Token.EOF ) { + tokenTypes.add("EOF"); + } + else { + tokenTypes.add(lg.typeToTokenList.get(ttype)); + } + + if ( t==IntStream.EOF ) { + hitEOF = true; + } + } while ( ttype!=Token.EOF ); + return tokenTypes; + } + + List checkRuleDFA(String gtext, String ruleName, String expecting) + throws Exception { + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(gtext, equeue); + ATN atn = createATN(g, false); + ATNState s = atn.ruleToStartState[g.getRule(ruleName).index]; + if ( s==null ) { + System.err.println("no such rule: "+ruleName); + return null; + } + ATNState t = s.transition(0).target; + if ( !(t instanceof DecisionState) ) { + System.out.println(ruleName+" has no decision"); + return null; + } + DecisionState blk = (DecisionState) t; + checkRuleDFA(g, blk, expecting); + return equeue.all; + } + + List checkRuleDFA(String gtext, int decision, String expecting) + throws Exception { + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(gtext, equeue); + ATN atn = createATN(g, false); + DecisionState blk = atn.decisionToState.get(decision); + checkRuleDFA(g, blk, expecting); + return equeue.all; + } + + void checkRuleDFA(Grammar g, DecisionState blk, String expecting) + throws Exception { + DFA dfa = createDFA(g, blk); + String result = null; + if ( dfa!=null ) result = dfa.toString(); + assertEquals(expecting, result); + } + + List checkLexerDFA(String gtext, String expecting) + throws Exception { + return checkLexerDFA(gtext, LexerGrammar.DEFAULT_MODE_NAME, expecting); + } + + List checkLexerDFA(String gtext, String modeName, String expecting) + throws Exception { + ErrorQueue equeue = new ErrorQueue(); + LexerGrammar g = new LexerGrammar(gtext, equeue); + g.atn = createATN(g, false); +// LexerATNToDFAConverter conv = new LexerATNToDFAConverter(g); +// DFA dfa = conv.createDFA(modeName); +// g.setLookaheadDFA(0, dfa); // only one decision to worry about +// +// String result = null; +// if ( dfa!=null ) result = dfa.toString(); +// assertEquals(expecting, result); +// +// return equeue.all; + return null; + } + + protected String load(String fileName, String encoding) + throws IOException { + if ( fileName==null ) { + return null; + } + + String fullFileName = getClass().getPackage().getName().replace('.', '/')+'/'+fileName; + int size = 65000; + InputStreamReader isr; + InputStream fis = getClass().getClassLoader().getResourceAsStream(fullFileName); + if ( encoding!=null ) { + isr = new InputStreamReader(fis, encoding); + } + else { + isr = new InputStreamReader(fis); + } + try { + char[] data = new char[size]; + int n = isr.read(data); + return new String(data, 0, n); + } finally { + isr.close(); + } + } + + /** + * Wow! much faster than compiling outside of VM. Finicky though. + * Had rules called r and modulo. Wouldn't compile til I changed to 'a'. + */ + protected boolean compile(String... fileNames) { + List files = new ArrayList(); + for (String fileName : fileNames) { + File f = new File(tmpdir, fileName); + files.add(f); + } + + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); +// DiagnosticCollector diagnostics = +// new DiagnosticCollector(); + + StandardJavaFileManager fileManager = + compiler.getStandardFileManager(null, null, null); + + Iterable compilationUnits = + fileManager.getJavaFileObjectsFromFiles(files); + + Iterable compileOptions = + Arrays.asList("-g", "-source", "1.6", "-target", "1.6", "-implicit:class", "-Xlint:-options", "-d", tmpdir, "-cp", tmpdir+pathSep+CLASSPATH); + + JavaCompiler.CompilationTask task = + compiler.getTask(null, fileManager, null, compileOptions, null, + compilationUnits); + boolean ok = task.call(); + + try { + fileManager.close(); + } catch (IOException ioe) { + ioe.printStackTrace(System.err); + } + + return ok; + } + + protected ErrorQueue antlr(String grammarFileName, boolean defaultListener, String... extraOptions) { + final List options = new ArrayList(); + Collections.addAll(options, extraOptions); + if ( !options.contains("-o") ) { + options.add("-o"); + options.add(tmpdir); + } + if ( !options.contains("-lib") ) { + options.add("-lib"); + options.add(tmpdir); + } + if ( !options.contains("-encoding") ) { + options.add("-encoding"); + options.add("UTF-8"); + } + options.add(new File(tmpdir, grammarFileName).toString()); + + final String[] optionsA = new String[options.size()]; + options.toArray(optionsA); + Tool antlr = newTool(optionsA); + ErrorQueue equeue = new ErrorQueue(antlr); + antlr.addListener(equeue); + if ( defaultListener ) { + antlr.addListener(new DefaultToolListener(antlr)); + } + antlr.processGrammarsOnCommandLine(); + + if ( !defaultListener && !equeue.errors.isEmpty() ) { + for (int i = 0; i pl = getParserAndLexer(input, parserName, lexerName); + Parser parser = pl.a; + return execStartRule(startRuleName, parser); + } + + public ParseTree execStartRule(String startRuleName, Parser parser) + throws IllegalAccessException, InvocationTargetException, + NoSuchMethodException { + Method startRule = null; + Object[] args = null; + try { + startRule = parser.getClass().getMethod(startRuleName); + } catch (NoSuchMethodException nsme) { + // try with int _p arg for recursive func + startRule = parser.getClass().getMethod(startRuleName, int.class); + args = new Integer[]{0}; + } + ParseTree result = (ParseTree) startRule.invoke(parser, args); +// System.out.println("parse tree = "+result.toStringTree(parser)); + return result; + } + + public Pair getParserAndLexer(String input, + String parserName, String lexerName) + throws Exception { + final Class lexerClass = loadLexerClassFromTempDir(lexerName); + final Class parserClass = loadParserClassFromTempDir(parserName); + + ANTLRInputStream in = new ANTLRInputStream(new StringReader(input)); + + Class c = lexerClass.asSubclass(Lexer.class); + Constructor ctor = c.getConstructor(CharStream.class); + Lexer lexer = ctor.newInstance(in); + + Class pc = parserClass.asSubclass(Parser.class); + Constructor pctor = pc.getConstructor(TokenStream.class); + CommonTokenStream tokens = new CommonTokenStream(lexer); + Parser parser = pctor.newInstance(tokens); + return new Pair(parser, lexer); + } + + public Class loadClassFromTempDir(String name) throws Exception { + ClassLoader loader = + new URLClassLoader(new URL[]{new File(tmpdir).toURI().toURL()}, + ClassLoader.getSystemClassLoader()); + return loader.loadClass(name); + } + + public Class loadLexerClassFromTempDir(String name) throws Exception { + return loadClassFromTempDir(name).asSubclass(Lexer.class); + } + + public Class loadParserClassFromTempDir(String name) throws Exception { + return loadClassFromTempDir(name).asSubclass(Parser.class); + } + + @Override + public String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean showDiagnosticErrors) + { + return execParser(grammarFileName, grammarStr, parserName, lexerName, + listenerName, visitorName, startRuleName, input, showDiagnosticErrors, false); + } + + public String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean showDiagnosticErrors, + boolean profile) + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, + parserName, + lexerName, + "-visitor"); + assertTrue(success); + writeFile(tmpdir, "input", input); + return rawExecRecognizer(parserName, + lexerName, + startRuleName, + showDiagnosticErrors, + profile); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) + { + return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) + { + ErrorQueue equeue = + antlr(grammarFileName, grammarStr, defaultListener, extraOptions); + if (!equeue.errors.isEmpty()) { + return false; + } + + List files = new ArrayList(); + if ( lexerName!=null ) { + files.add(lexerName+".java"); + } + if ( parserName!=null ) { + files.add(parserName+".java"); + Set optionsSet = new HashSet(Arrays.asList(extraOptions)); + if (!optionsSet.contains("-no-listener")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"BaseListener.java"); + } + if (optionsSet.contains("-visitor")) { + files.add(grammarFileName.substring(0, grammarFileName.lastIndexOf('.'))+"BaseVisitor.java"); + } + } + boolean allIsWell = compile(files.toArray(new String[files.size()])); + return allIsWell; + } + + protected String rawExecRecognizer(String parserName, + String lexerName, + String parserStartRuleName, + boolean debug, + boolean profile) + { + this.stderrDuringParse = null; + if ( parserName==null ) { + writeLexerTestFile(lexerName, false); + } + else { + writeTestFile(parserName, + lexerName, + parserStartRuleName, + debug, + profile); + } + + compile("Test.java"); + return execClass("Test"); + } + + public String execRecognizer() { + return execClass("Test"); + } + + public String execClass(String className) { + if (TEST_IN_SAME_PROCESS) { + try { + ClassLoader loader = new URLClassLoader(new URL[] { new File(tmpdir).toURI().toURL() }, ClassLoader.getSystemClassLoader()); + final Class mainClass = (Class)loader.loadClass(className); + final Method mainMethod = mainClass.getDeclaredMethod("main", String[].class); + PipedInputStream stdoutIn = new PipedInputStream(); + PipedInputStream stderrIn = new PipedInputStream(); + PipedOutputStream stdoutOut = new PipedOutputStream(stdoutIn); + PipedOutputStream stderrOut = new PipedOutputStream(stderrIn); + StreamVacuum stdoutVacuum = new StreamVacuum(stdoutIn); + StreamVacuum stderrVacuum = new StreamVacuum(stderrIn); + + PrintStream originalOut = System.out; + System.setOut(new PrintStream(stdoutOut)); + try { + PrintStream originalErr = System.err; + try { + System.setErr(new PrintStream(stderrOut)); + stdoutVacuum.start(); + stderrVacuum.start(); + mainMethod.invoke(null, (Object)new String[] { new File(tmpdir, "input").getAbsolutePath() }); + } + finally { + System.setErr(originalErr); + } + } + finally { + System.setOut(originalOut); + } + + stdoutOut.close(); + stderrOut.close(); + stdoutVacuum.join(); + stderrVacuum.join(); + String output = stdoutVacuum.toString(); + if ( output.length()==0 ) { + output = null; + } + if ( stderrVacuum.toString().length()>0 ) { + this.stderrDuringParse = stderrVacuum.toString(); + } + return output; + } catch (MalformedURLException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (IOException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (InterruptedException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (IllegalAccessException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (IllegalArgumentException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (InvocationTargetException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (NoSuchMethodException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (SecurityException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } catch (ClassNotFoundException ex) { + LOGGER.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } + } + + try { + String[] args = new String[] { + "java", "-classpath", tmpdir+pathSep+CLASSPATH, + className, new File(tmpdir, "input").getAbsolutePath() + }; +// String cmdLine = Utils.join(args, " "); +// System.err.println("execParser: "+cmdLine); + Process process = + Runtime.getRuntime().exec(args, null, new File(tmpdir)); + StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + String output = stdoutVacuum.toString(); + if ( output.length()==0 ) { + output = null; + } + if ( stderrVacuum.toString().length()>0 ) { + this.stderrDuringParse = stderrVacuum.toString(); + } + return output; + } + catch (Exception e) { + System.err.println("can't exec recognizer"); + e.printStackTrace(System.err); + } + return null; + } + + public void testErrors(String[] pairs, boolean printTree) { + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; + + String[] lines = input.split("\n"); + String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); + ErrorQueue equeue = antlr(fileName, input, false); + + String actual = equeue.toString(true); + actual = actual.replace(tmpdir + File.separator, ""); +// System.err.println(actual); + String msg = input; + msg = msg.replace("\n","\\n"); + msg = msg.replace("\r","\\r"); + msg = msg.replace("\t","\\t"); + + assertEquals("error in: "+msg,expect,actual); + } + } + + public String getFilenameFromFirstLineOfGrammar(String line) { + String fileName = "A" + Tool.GRAMMAR_EXTENSION; + int grIndex = line.lastIndexOf("grammar"); + int semi = line.lastIndexOf(';'); + if ( grIndex>=0 && semi>=0 ) { + int space = line.indexOf(' ', grIndex); + fileName = line.substring(space+1, semi)+Tool.GRAMMAR_EXTENSION; + } + if ( fileName.length()==Tool.GRAMMAR_EXTENSION.length() ) fileName = "A" + Tool.GRAMMAR_EXTENSION; + return fileName; + } + +// void ambig(List msgs, int[] expectedAmbigAlts, String expectedAmbigInput) +// throws Exception +// { +// ambig(msgs, 0, expectedAmbigAlts, expectedAmbigInput); +// } + +// void ambig(List msgs, int i, int[] expectedAmbigAlts, String expectedAmbigInput) +// throws Exception +// { +// List amsgs = getMessagesOfType(msgs, AmbiguityMessage.class); +// AmbiguityMessage a = (AmbiguityMessage)amsgs.get(i); +// if ( a==null ) assertNull(expectedAmbigAlts); +// else { +// assertEquals(a.conflictingAlts.toString(), Arrays.toString(expectedAmbigAlts)); +// } +// assertEquals(expectedAmbigInput, a.input); +// } + +// void unreachable(List msgs, int[] expectedUnreachableAlts) +// throws Exception +// { +// unreachable(msgs, 0, expectedUnreachableAlts); +// } + +// void unreachable(List msgs, int i, int[] expectedUnreachableAlts) +// throws Exception +// { +// List amsgs = getMessagesOfType(msgs, UnreachableAltsMessage.class); +// UnreachableAltsMessage u = (UnreachableAltsMessage)amsgs.get(i); +// if ( u==null ) assertNull(expectedUnreachableAlts); +// else { +// assertEquals(u.conflictingAlts.toString(), Arrays.toString(expectedUnreachableAlts)); +// } +// } + + List getMessagesOfType(List msgs, Class c) { + List filtered = new ArrayList(); + for (ANTLRMessage m : msgs) { + if ( m.getClass() == c ) filtered.add(m); + } + return filtered; + } + + public void checkRuleATN(Grammar g, String ruleName, String expecting) { +// DOTGenerator dot = new DOTGenerator(g); +// System.out.println(dot.getDOT(g.atn.ruleToStartState[g.getRule(ruleName).index])); + + Rule r = g.getRule(ruleName); + ATNState startState = g.atn.ruleToStartState[r.index]; + ATNPrinter serializer = new ATNPrinter(g, startState); + String result = serializer.asString(); + + //System.out.print(result); + assertEquals(expecting, result); + } + + public void testActions(String templates, String actionName, String action, String expected) throws org.antlr.runtime.RecognitionException { + int lp = templates.indexOf('('); + String name = templates.substring(0, lp); + STGroup group = new STGroupString(templates); + ST st = group.getInstanceOf(name); + st.add(actionName, action); + String grammar = st.render(); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(grammar, equeue); + if ( g.ast!=null && !g.ast.hasErrors ) { + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + + ATNFactory factory = new ParserATNFactory(g); + if ( g.isLexer() ) factory = new LexerATNFactory((LexerGrammar)g); + g.atn = factory.createATN(); + + CodeGenerator gen = new CodeGenerator(g); + ST outputFileST = gen.generateParser(false); + String output = outputFileST.render(); + //System.out.println(output); + String b = "#" + actionName + "#"; + int start = output.indexOf(b); + String e = "#end-" + actionName + "#"; + int end = output.indexOf(e); + String snippet = output.substring(start+b.length(),end); + assertEquals(expected, snippet); + } + if ( equeue.size()>0 ) { +// System.err.println(equeue.toString()); + } + } + + public static class StreamVacuum implements Runnable { + StringBuilder buf = new StringBuilder(); + BufferedReader in; + Thread sucker; + public StreamVacuum(InputStream in) { + this.in = new BufferedReader( new InputStreamReader(in) ); + } + public void start() { + sucker = new Thread(this); + sucker.start(); + } + @Override + public void run() { + try { + String line = in.readLine(); + while (line!=null) { + buf.append(line); + buf.append('\n'); + line = in.readLine(); + } + } + catch (IOException ioe) { + System.err.println("can't read output from process"); + } + } + /** wait for the thread to finish */ + public void join() throws InterruptedException { + sucker.join(); + } + @Override + public String toString() { + return buf.toString(); + } + } + + protected void checkGrammarSemanticsError(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkGrammarSemanticsWarning(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) + throws Exception + { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage m = equeue.warnings.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); + if ( equeue.size()!=1 ) { + System.err.println(equeue); + } + } + + protected void checkError(ErrorQueue equeue, + ANTLRMessage expectedMessage) + throws Exception + { + //System.out.println("errors="+equeue); + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType()==expectedMessage.getErrorType() ) { + foundMsg = m; + } + } + assertTrue("no error; "+expectedMessage.getErrorType()+" expected", !equeue.errors.isEmpty()); + assertTrue("too many errors; "+equeue.errors, equeue.errors.size()<=1); + assertNotNull("couldn't find expected error: "+expectedMessage.getErrorType(), foundMsg); + /* + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + */ + assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); + } + + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { + return false; + } + + Token t = get(i); + if ( hide.contains(t.getType()) ) { + ((WritableToken)t).setChannel(Token.HIDDEN_CHANNEL); + } + + return true; + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } + + public static void writeFile(String dir, String fileName, String content) { + try { + Utils.writeFile(dir+"/"+fileName, content, "UTF-8"); + } + catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + protected void mkdir(String dir) { + File f = new File(dir); + f.mkdirs(); + } + + protected void writeTestFile(String parserName, + String lexerName, + String parserStartRuleName, + boolean debug, + boolean profile) + { + ST outputFileST = new ST( + "import org.antlr.v4.runtime.*;\n" + + "import org.antlr.v4.runtime.tree.*;\n" + + "import org.antlr.v4.runtime.atn.*;\n" + + "import java.util.Arrays;\n"+ + "\n" + + "public class Test {\n" + + " public static void main(String[] args) throws Exception {\n" + + " CharStream input = new ANTLRFileStream(args[0]);\n" + + " lex = new (input);\n" + + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + + " \n"+ + " parser.setBuildParseTree(true);\n" + + " \n"+ + " ParserRuleContext tree = parser.();\n" + + " System.out.println(Arrays.toString(profiler.getDecisionInfo()));\n" + + " ParseTreeWalker.DEFAULT.walk(new TreeShapeListener(), tree);\n" + + " }\n" + + "\n" + + " static class TreeShapeListener implements ParseTreeListener {\n" + + " @Override public void visitTerminal(TerminalNode node) { }\n" + + " @Override public void visitErrorNode(ErrorNode node) { }\n" + + " @Override public void exitEveryRule(ParserRuleContext ctx) { }\n" + + "\n" + + " @Override\n" + + " public void enterEveryRule(ParserRuleContext ctx) {\n" + + " for (int i = 0; i \\< ctx.getChildCount(); i++) {\n" + + " ParseTree parent = ctx.getChild(i).getParent();\n" + + " if (!(parent instanceof RuleNode) || ((RuleNode)parent).getRuleContext() != ctx) {\n" + + " throw new IllegalStateException(\"Invalid parse tree shape detected.\");\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}" + ); + ST createParserST = new ST(" parser = new (tokens);\n"); + if ( debug ) { + createParserST = + new ST( + " parser = new (tokens);\n" + + " parser.addErrorListener(new DiagnosticErrorListener());\n"); + } + if ( profile ) { + outputFileST.add("profile", + "ProfilingATNSimulator profiler = new ProfilingATNSimulator(parser);\n" + + "parser.setInterpreter(profiler);"); + } + else { + outputFileST.add("profile", new ArrayList()); + } + outputFileST.add("createParser", createParserST); + outputFileST.add("parserName", parserName); + outputFileST.add("lexerName", lexerName); + outputFileST.add("parserStartRuleName", parserStartRuleName); + writeFile(tmpdir, "Test.java", outputFileST.render()); + } + + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + ST outputFileST = new ST( + "import org.antlr.v4.runtime.*;\n" + + "\n" + + "public class Test {\n" + + " public static void main(String[] args) throws Exception {\n" + + " CharStream input = new ANTLRFileStream(args[0]);\n" + + " lex = new (input);\n" + + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + + " tokens.fill();\n" + + " for (Object t : tokens.getTokens()) System.out.println(t);\n" + + (showDFA?"System.out.print(lex.getInterpreter().getDFA(Lexer.DEFAULT_MODE).toLexerString());\n":"")+ + " }\n" + + "}" + ); + + outputFileST.add("lexerName", lexerName); + writeFile(tmpdir, "Test.java", outputFileST.render()); + } + + public void writeRecognizerAndCompile(String parserName, String lexerName, + String parserStartRuleName, + boolean debug, + boolean profile) { + if ( parserName==null ) { + writeLexerTestFile(lexerName, debug); + } + else { + writeTestFile(parserName, + lexerName, + parserStartRuleName, + debug, + profile); + } + + compile("Test.java"); + } + + + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(tmpdir+"/"+files[i]).delete(); + } + } + } + + protected void eraseFiles() { + if (tmpdir == null) { + return; + } + + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + new File(tmpdir+"/"+files[i]).delete(); + } + } + + public void eraseTempDir() { + File tmpdirF = new File(tmpdir); + if ( tmpdirF.exists() ) { + eraseFiles(); + tmpdirF.delete(); + } + } + + public String getFirstLineOfException() { + if ( this.stderrDuringParse ==null ) { + return null; + } + String[] lines = this.stderrDuringParse.split("\n"); + String prefix="Exception in thread \"main\" "; + return lines[0].substring(prefix.length(),lines[0].length()); + } + + /** + * When looking at a result set that consists of a Map/HashTable + * we cannot rely on the output order, as the hashing algorithm or other aspects + * of the implementation may be different on differnt JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a + * bit of a hack, but guarantees that we get the same order on all systems. We assume that + * the keys are strings. + * + * @param m The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } + + System.out.println("Map toString looks like: " + m.toString()); + + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); + + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } + + public List realElements(List elements) { + return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); + } + + public void assertNotNullOrEmpty(String message, String text) { + assertNotNull(message, text); + assertFalse(message, text.isEmpty()); + } + + public void assertNotNullOrEmpty(String text) { + assertNotNull(text); + assertFalse(text.isEmpty()); + } + + public static class IntTokenStream implements TokenStream { + public IntegerList types; + int p=0; + public IntTokenStream(IntegerList types) { this.types = types; } + + @Override + public void consume() { p++; } + + @Override + public int LA(int i) { return LT(i).getType(); } + + @Override + public int mark() { + return index(); + } + + @Override + public int index() { return p; } + + @Override + public void release(int marker) { + seek(marker); + } + + @Override + public void seek(int index) { + p = index; + } + + @Override + public int size() { + return types.size(); + } + + @Override + public String getSourceName() { + return UNKNOWN_SOURCE_NAME; + } + + @Override + public Token LT(int i) { + CommonToken t; + int rawIndex = p + i - 1; + if ( rawIndex>=types.size() ) t = new CommonToken(Token.EOF); + else t = new CommonToken(types.get(rawIndex)); + t.setTokenIndex(rawIndex); + return t; + } + + @Override + public Token get(int i) { + return new org.antlr.v4.runtime.CommonToken(types.get(i)); + } + + @Override + public TokenSource getTokenSource() { + return null; + } + + + @Override + public String getText() { + throw new UnsupportedOperationException("can't give strings"); + } + + + @Override + public String getText(Interval interval) { + throw new UnsupportedOperationException("can't give strings"); + } + + + @Override + public String getText(RuleContext ctx) { + throw new UnsupportedOperationException("can't give strings"); + } + + + @Override + public String getText(Token start, Token stop) { + throw new UnsupportedOperationException("can't give strings"); + } + } + + /** Sort a list */ + public > List sort(List data) { + List dup = new ArrayList(); + dup.addAll(data); + Collections.sort(dup); + return dup; + } + + /** Return map sorted by key */ + public ,V> LinkedHashMap sort(Map data) { + LinkedHashMap dup = new LinkedHashMap(); + List keys = new ArrayList(); + keys.addAll(data.keySet()); + Collections.sort(keys); + for (K k : keys) { + dup.put(k, data.get(k)); + } + return dup; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeLexers.java index fa3805b75..fe7d70c17 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeLexers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeLexers.java @@ -1,70 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestCompositeLexers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {System.out.println(\"S.A\");};\n" + - "C : 'c' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="abc"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "S.A\n" + - "[@0,0:0='a',<3>,1:0]\n" + - "[@1,1:1='b',<1>,1:1]\n" + - "[@2,2:2='c',<4>,1:2]\n" + - "[@3,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {System.out.println(\"S.A\");} ;\n" + - "B : 'b' {System.out.println(\"S.B\");} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(93); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("A : 'a' B {System.out.println(\"M.A\");} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "M.A\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Java"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeParsers.java index f5d6df6f8..e1e97ffde 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestCompositeParsers.java @@ -1,470 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.antlr.v4.tool.Grammar; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestCompositeParsers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBringInLiteralsFromDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : '=' 'a' {System.out.print(\"S.a\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="=a"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCombinedImportsCombined() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : 'x' INT {System.out.println(\"S.x\");};\n" + - "INT : '0'..'9'+ ;\n" + - "WS : (' '|'\\n') -> skip ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(31); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : x INT;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - new Grammar(tmpdir+"/M.g4", grammar, equeue); - assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); - - - String input ="x 34 9"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.x\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatesSeeSameTokenType() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : A {System.out.println(\"S.x\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { C, B, A } // reverse order\n" + - "y : A {System.out.println(\"T.y\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(598); - grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); - grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); - grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); - grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); - grammarBuilder.append("// mapping in each parser:\n"); - grammarBuilder.append("// public static final int C=6;\n"); - grammarBuilder.append("// public static final int EOF=-1;\n"); - grammarBuilder.append("// public static final int B=5;\n"); - grammarBuilder.append("// public static final int WS=7;\n"); - grammarBuilder.append("// public static final int A=4;\n"); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); - grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); - grammarBuilder.append("A : 'a' ; \n"); - grammarBuilder.append("C : 'c' ; \n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); - String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; - String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; - String expectedTypeToTokenList = "[B, A, C, WS]"; - assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); - assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); - assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); - assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); - - - String input ="aa"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals( - "S.x\n" + - "T.y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorAccessesDelegateMembers() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "@parser::members {\n" + - " public void foo() {System.out.println(\"foo\");}\n" + - "}\n" + - "a : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(122); - grammarBuilder.append("grammar M; // uses no rules from the import\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : 'b' {foo();} ; // gS is import pointer\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("foo\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {System.out.println(\"S.a\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a[int x] returns [int y] : B {System.out.print(\"S.a\");} {$y=1000;} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(145); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : label=a[3] {System.out.println($label.y);} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a1000\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {System.out.print(\"S.a\");} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(133); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a {System.out.print($a.text);} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.ab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {System.out.println(\"S.a\");};\n" + - "b : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "a : B {System.out.println(\"T.a\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {System.out.print(\"S.a\");};\n" + - "b : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("b : 'b'|'c';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "a", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegates() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {System.out.println(\"S.a\");};\n" + - "b : 'b' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { A }\n" + - "b : 'b' {System.out.println(\"T.b\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S, T;\n"); - grammarBuilder.append("b : 'b'|'c' {System.out.println(\"M.b\");}|B|A;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "a", input, false); - assertEquals( - "M.b\n" + - "S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "type_ : 'int' ;\n" + - "decl : type_ ID ';'\n" + - " | type_ ID init ';' {System.out.print(\"JavaDecl: \" + $text);};\n" + - "init : '=' INT;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("prog : decl ;\n"); - grammarBuilder.append("type_ : 'int' | 'float' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="float x = 3;"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "prog", input, false); - assertEquals("JavaDecl: floatx=3;\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportLexerWithOnlyFragmentRules() throws Exception { - mkdir(tmpdir); - - String slave_Unicode = - "lexer grammar Unicode;\n" + - "\n" + - "fragment\n" + - "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + - " | '\\u2000'..'\\u200A'\n" + - " | '\\u202F' | '\\u205F' | '\\u3000'\n" + - " ;\n"; - writeFile(tmpdir, "Unicode.g4", slave_Unicode); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar Test;\n"); - grammarBuilder.append("import Unicode;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program : 'test' 'test';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="test test"; - String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedGrammarWithEmptyOptions() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "options {}\n" + - "a : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedRuleWithAction() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a @after {int x = 0;} : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordVSIDOrder() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "ID : 'a'..'z'+;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(129); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("a : A {System.out.println(\"M.a: \" + $A);};\n"); - grammarBuilder.append("A : 'abc' {System.out.println(\"M.A\");};\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "a", input, false); - assertEquals( - "M.A\n" + - "M.a: [@0,0:2='abc',<1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestFullContextParsing.java index cfda2361f..ea330fc1e 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestFullContextParsing.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestFullContextParsing.java @@ -1,491 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestFullContextParsing extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigYieldsCtxSensitiveDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(101); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : ID | ID {} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-ID->:s1^=>1\n", found); - - assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbiguityNoLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(217); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(" : expr expr {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: '@'\n"); - grammarBuilder.append(" | ID '@'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a@"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, true); - assertEquals("alt 1\n", found); - - assertEquals( - "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + - "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + - "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFATwoDiffInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc @ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 2:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + - "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="@ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(": expr[0] {System.out.println($expr.ctx.toStringTree(this));};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("(expr a + (expr b))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(": expr[0] {System.out.println($expr.ctx.toStringTree(this));};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("(expr a + (expr b * (expr c)))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + - "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + - "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s1=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo else bar }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + - "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLoopsSimulateTailRecursion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);}\n"); - grammarBuilder.append(" : expr_or_assign*;\n"); - grammarBuilder.append("expr_or_assign\n"); - grammarBuilder.append(" : expr '++' {System.out.println(\"fail.\");}\n"); - grammarBuilder.append(" | expr {System.out.println(\"pass: \"+$expr.text);}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); - grammarBuilder.append("expr_primary\n"); - grammarBuilder.append(" : '(' ID ')'\n"); - grammarBuilder.append(" | ID '(' ID ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a(i)<-x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, true); - assertEquals("pass: a(i)<-x\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + - "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSLLSeesEOFInLLGrammar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : a;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + - "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLeftRecursion.java index 49c38cfec..a42e743d7 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLeftRecursion.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLeftRecursion.java @@ -1,3307 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestLeftRecursion extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="1\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a = 5\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="b = 6\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*2\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(*a)[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator * (declarator a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="**a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[3]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator b) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator ( (declarator a) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[]()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[][]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(399); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {System.out.println($ctx.toStringTree(this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {System.out.println($ctx.toStringTree(this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("(a (a x) y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {System.out.println($ctx.toStringTree(this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("(a (a (a x) y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 1) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) - (e 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.this"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) . this) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e - (e a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a|b&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f(x)==T.c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_11() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f().g(x,1)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_12() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new T[((n-1) * x) + 1]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a|b)&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a > b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) > (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a >> b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) >> (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a^b^c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new A().b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)t.f()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(178); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(178); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(178); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(729); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(729); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(729); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(729); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = ((BinaryContext)$ctx).e(0).v * ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = ((BinaryContext)$ctx).e(0).v + ((BinaryContext)$ctx).e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {assert(((UnaryContext)$ctx).INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {assert(((UnaryContext)$ctx).DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrecedenceFilterConsidersContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog \n"); - grammarBuilder.append("@after {System.out.println($ctx.toStringTree(this));}\n"); - grammarBuilder.append(": statement* EOF {};\n"); - grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); - grammarBuilder.append("letterA: 'a';"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, false); - assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(224); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (literal - 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(224); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1 + -1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(343); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(343); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a+b)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(343); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b+c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("((a=b)+c)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(461); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(461); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(461); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(461); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(308); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(308); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(308); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(308); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(325); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(325); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(325); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(325); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(261); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(261); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(261); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(261); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {System.out.println($e.v);}; \n"); - grammarBuilder.append("e returns [int v, List ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("9\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPred() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(143); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a {true}? ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPredFailOption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(167); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID {false}?\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a x) y z))\n", found); - - assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a x))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a x) y))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(291); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {System.out.println($ctx.toStringTree(this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1,3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1, 3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Java"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerErrors.java index b613dec8c..b7dc1f31c 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerErrors.java @@ -1,258 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestLexerErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatFailsBackToDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(39); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:3='ab',<1>,1:2]\n" + - "[@2,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;\n"); - grammarBuilder.append("C : 'abcd' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababcx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:4='abc',<2>,1:2]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { } }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='{ { } }',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testErrorInMiddle() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStart() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,1:0='',<-1>,1:1]\n", found); - - assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStartAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,2:1='',<-1>,1:2]\n", found); - - assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInTokenAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - - assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerExecDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar L;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - String input ="x : x"; - String found = execLexer("L.g4", grammar, "LLexer", input, false); - assertEquals( - "[@0,0:0='x',<3>,1:0]\n" + - "[@1,2:2=':',<1>,1:2]\n" + - "[@2,4:4='x',<3>,1:4]\n" + - "[@3,5:4='',<-1>,1:5]\n", found); - - assertEquals( - "line 1:1 token recognition error at: ' '\n" + - "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo\"]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerExec.java index 1c6183988..4712c862f 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestLexerExec.java @@ -1,5030 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestLexerExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionPlacement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(323); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ({System.out.println(\"stuff fail: \" + this.getText());} 'a'\n"); - grammarBuilder.append("| {System.out.println(\"stuff0: \" + this.getText());}\n"); - grammarBuilder.append(" 'a' {System.out.println(\"stuff1: \" + this.getText());}\n"); - grammarBuilder.append(" 'b' {System.out.println(\"stuff2: \" + this.getText());})\n"); - grammarBuilder.append(" {System.out.println(this.getText());} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "stuff0: \n" + - "stuff1: a\n" + - "stuff2: ab\n" + - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {System.out.println(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetInSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(93); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : (~[ab \\n]|'a') {System.out.println(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="a x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:2='x',<1>,1:2]\n" + - "[@2,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetNot() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(96); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {System.out.println(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="xaf"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:2='xaf',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(87); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {System.out.println(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(143); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {System.out.println(\"I\");} ;\n"); - grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {System.out.println(\"ID\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34 a2 abc \n" + - " "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "ID\n" + - "ID\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,7:8='a2',<2>,2:4]\n" + - "[@3,10:12='abc',<2>,2:7]\n" + - "[@4,18:17='',<-1>,3:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithEscapedChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DASHBRACK : [\\-\\]]+ {System.out.println(\"DASHBRACK\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="- ] "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "DASHBRACK\n" + - "DASHBRACK\n" + - "[@0,0:0='-',<1>,1:0]\n" + - "[@1,2:2=']',<1>,1:2]\n" + - "[@2,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEndRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-]+ {System.out.println(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="00\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='00',<1>,1:0]\n" + - "[@1,3:2='',<-1>,2:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEscapeChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {System.out.println(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(81); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"a-z]+ {System.out.println(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:2='b\"a',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"\\\\ab]+ {System.out.println(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"\\a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:3='b\"\\a',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithReversedRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(79); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [z-a9]+ {System.out.println(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="9"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:0='9',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFByItself() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DONE : EOF ;\n"); - grammarBuilder.append("A : 'a';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:-1='',<1>,1:0]\n" + - "[@1,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input ="a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ('a' | 'ab') {System.out.println(this.getText());} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testHexVsID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); - grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); - grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="x 0 1 a.b a.l"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='x',<5>,1:0]\n" + - "[@1,1:1=' ',<6>,1:1]\n" + - "[@2,2:2='0',<2>,1:2]\n" + - "[@3,3:3=' ',<6>,1:3]\n" + - "[@4,4:4='1',<2>,1:4]\n" + - "[@5,5:5=' ',<6>,1:5]\n" + - "[@6,6:6='a',<5>,1:6]\n" + - "[@7,7:7='.',<4>,1:7]\n" + - "[@8,8:8='b',<5>,1:8]\n" + - "[@9,9:9=' ',<6>,1:9]\n" + - "[@10,10:10='a',<5>,1:10]\n" + - "[@11,11:11='.',<4>,1:11]\n" + - "[@12,12:12='l',<5>,1:12]\n" + - "[@13,13:12='',<-1>,1:13]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("KEND : 'end' ; // has priority\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="end eend ending a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:2='end',<1>,1:0]\n" + - "[@1,3:3=' ',<3>,1:3]\n" + - "[@2,4:7='eend',<2>,1:4]\n" + - "[@3,8:8=' ',<3>,1:8]\n" + - "[@4,9:14='ending',<2>,1:9]\n" + - "[@5,15:15=' ',<3>,1:15]\n" + - "[@6,16:16='a',<2>,1:16]\n" + - "[@7,17:16='',<-1>,1:17]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLargeLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85821); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); - grammarBuilder.append("KW0 : 'KW' '0';\n"); - grammarBuilder.append("KW1 : 'KW' '1';\n"); - grammarBuilder.append("KW2 : 'KW' '2';\n"); - grammarBuilder.append("KW3 : 'KW' '3';\n"); - grammarBuilder.append("KW4 : 'KW' '4';\n"); - grammarBuilder.append("KW5 : 'KW' '5';\n"); - grammarBuilder.append("KW6 : 'KW' '6';\n"); - grammarBuilder.append("KW7 : 'KW' '7';\n"); - grammarBuilder.append("KW8 : 'KW' '8';\n"); - grammarBuilder.append("KW9 : 'KW' '9';\n"); - grammarBuilder.append("KW10 : 'KW' '10';\n"); - grammarBuilder.append("KW11 : 'KW' '11';\n"); - grammarBuilder.append("KW12 : 'KW' '12';\n"); - grammarBuilder.append("KW13 : 'KW' '13';\n"); - grammarBuilder.append("KW14 : 'KW' '14';\n"); - grammarBuilder.append("KW15 : 'KW' '15';\n"); - grammarBuilder.append("KW16 : 'KW' '16';\n"); - grammarBuilder.append("KW17 : 'KW' '17';\n"); - grammarBuilder.append("KW18 : 'KW' '18';\n"); - grammarBuilder.append("KW19 : 'KW' '19';\n"); - grammarBuilder.append("KW20 : 'KW' '20';\n"); - grammarBuilder.append("KW21 : 'KW' '21';\n"); - grammarBuilder.append("KW22 : 'KW' '22';\n"); - grammarBuilder.append("KW23 : 'KW' '23';\n"); - grammarBuilder.append("KW24 : 'KW' '24';\n"); - grammarBuilder.append("KW25 : 'KW' '25';\n"); - grammarBuilder.append("KW26 : 'KW' '26';\n"); - grammarBuilder.append("KW27 : 'KW' '27';\n"); - grammarBuilder.append("KW28 : 'KW' '28';\n"); - grammarBuilder.append("KW29 : 'KW' '29';\n"); - grammarBuilder.append("KW30 : 'KW' '30';\n"); - grammarBuilder.append("KW31 : 'KW' '31';\n"); - grammarBuilder.append("KW32 : 'KW' '32';\n"); - grammarBuilder.append("KW33 : 'KW' '33';\n"); - grammarBuilder.append("KW34 : 'KW' '34';\n"); - grammarBuilder.append("KW35 : 'KW' '35';\n"); - grammarBuilder.append("KW36 : 'KW' '36';\n"); - grammarBuilder.append("KW37 : 'KW' '37';\n"); - grammarBuilder.append("KW38 : 'KW' '38';\n"); - grammarBuilder.append("KW39 : 'KW' '39';\n"); - grammarBuilder.append("KW40 : 'KW' '40';\n"); - grammarBuilder.append("KW41 : 'KW' '41';\n"); - grammarBuilder.append("KW42 : 'KW' '42';\n"); - grammarBuilder.append("KW43 : 'KW' '43';\n"); - grammarBuilder.append("KW44 : 'KW' '44';\n"); - grammarBuilder.append("KW45 : 'KW' '45';\n"); - grammarBuilder.append("KW46 : 'KW' '46';\n"); - grammarBuilder.append("KW47 : 'KW' '47';\n"); - grammarBuilder.append("KW48 : 'KW' '48';\n"); - grammarBuilder.append("KW49 : 'KW' '49';\n"); - grammarBuilder.append("KW50 : 'KW' '50';\n"); - grammarBuilder.append("KW51 : 'KW' '51';\n"); - grammarBuilder.append("KW52 : 'KW' '52';\n"); - grammarBuilder.append("KW53 : 'KW' '53';\n"); - grammarBuilder.append("KW54 : 'KW' '54';\n"); - grammarBuilder.append("KW55 : 'KW' '55';\n"); - grammarBuilder.append("KW56 : 'KW' '56';\n"); - grammarBuilder.append("KW57 : 'KW' '57';\n"); - grammarBuilder.append("KW58 : 'KW' '58';\n"); - grammarBuilder.append("KW59 : 'KW' '59';\n"); - grammarBuilder.append("KW60 : 'KW' '60';\n"); - grammarBuilder.append("KW61 : 'KW' '61';\n"); - grammarBuilder.append("KW62 : 'KW' '62';\n"); - grammarBuilder.append("KW63 : 'KW' '63';\n"); - grammarBuilder.append("KW64 : 'KW' '64';\n"); - grammarBuilder.append("KW65 : 'KW' '65';\n"); - grammarBuilder.append("KW66 : 'KW' '66';\n"); - grammarBuilder.append("KW67 : 'KW' '67';\n"); - grammarBuilder.append("KW68 : 'KW' '68';\n"); - grammarBuilder.append("KW69 : 'KW' '69';\n"); - grammarBuilder.append("KW70 : 'KW' '70';\n"); - grammarBuilder.append("KW71 : 'KW' '71';\n"); - grammarBuilder.append("KW72 : 'KW' '72';\n"); - grammarBuilder.append("KW73 : 'KW' '73';\n"); - grammarBuilder.append("KW74 : 'KW' '74';\n"); - grammarBuilder.append("KW75 : 'KW' '75';\n"); - grammarBuilder.append("KW76 : 'KW' '76';\n"); - grammarBuilder.append("KW77 : 'KW' '77';\n"); - grammarBuilder.append("KW78 : 'KW' '78';\n"); - grammarBuilder.append("KW79 : 'KW' '79';\n"); - grammarBuilder.append("KW80 : 'KW' '80';\n"); - grammarBuilder.append("KW81 : 'KW' '81';\n"); - grammarBuilder.append("KW82 : 'KW' '82';\n"); - grammarBuilder.append("KW83 : 'KW' '83';\n"); - grammarBuilder.append("KW84 : 'KW' '84';\n"); - grammarBuilder.append("KW85 : 'KW' '85';\n"); - grammarBuilder.append("KW86 : 'KW' '86';\n"); - grammarBuilder.append("KW87 : 'KW' '87';\n"); - grammarBuilder.append("KW88 : 'KW' '88';\n"); - grammarBuilder.append("KW89 : 'KW' '89';\n"); - grammarBuilder.append("KW90 : 'KW' '90';\n"); - grammarBuilder.append("KW91 : 'KW' '91';\n"); - grammarBuilder.append("KW92 : 'KW' '92';\n"); - grammarBuilder.append("KW93 : 'KW' '93';\n"); - grammarBuilder.append("KW94 : 'KW' '94';\n"); - grammarBuilder.append("KW95 : 'KW' '95';\n"); - grammarBuilder.append("KW96 : 'KW' '96';\n"); - grammarBuilder.append("KW97 : 'KW' '97';\n"); - grammarBuilder.append("KW98 : 'KW' '98';\n"); - grammarBuilder.append("KW99 : 'KW' '99';\n"); - grammarBuilder.append("KW100 : 'KW' '100';\n"); - grammarBuilder.append("KW101 : 'KW' '101';\n"); - grammarBuilder.append("KW102 : 'KW' '102';\n"); - grammarBuilder.append("KW103 : 'KW' '103';\n"); - grammarBuilder.append("KW104 : 'KW' '104';\n"); - grammarBuilder.append("KW105 : 'KW' '105';\n"); - grammarBuilder.append("KW106 : 'KW' '106';\n"); - grammarBuilder.append("KW107 : 'KW' '107';\n"); - grammarBuilder.append("KW108 : 'KW' '108';\n"); - grammarBuilder.append("KW109 : 'KW' '109';\n"); - grammarBuilder.append("KW110 : 'KW' '110';\n"); - grammarBuilder.append("KW111 : 'KW' '111';\n"); - grammarBuilder.append("KW112 : 'KW' '112';\n"); - grammarBuilder.append("KW113 : 'KW' '113';\n"); - grammarBuilder.append("KW114 : 'KW' '114';\n"); - grammarBuilder.append("KW115 : 'KW' '115';\n"); - grammarBuilder.append("KW116 : 'KW' '116';\n"); - grammarBuilder.append("KW117 : 'KW' '117';\n"); - grammarBuilder.append("KW118 : 'KW' '118';\n"); - grammarBuilder.append("KW119 : 'KW' '119';\n"); - grammarBuilder.append("KW120 : 'KW' '120';\n"); - grammarBuilder.append("KW121 : 'KW' '121';\n"); - grammarBuilder.append("KW122 : 'KW' '122';\n"); - grammarBuilder.append("KW123 : 'KW' '123';\n"); - grammarBuilder.append("KW124 : 'KW' '124';\n"); - grammarBuilder.append("KW125 : 'KW' '125';\n"); - grammarBuilder.append("KW126 : 'KW' '126';\n"); - grammarBuilder.append("KW127 : 'KW' '127';\n"); - grammarBuilder.append("KW128 : 'KW' '128';\n"); - grammarBuilder.append("KW129 : 'KW' '129';\n"); - grammarBuilder.append("KW130 : 'KW' '130';\n"); - grammarBuilder.append("KW131 : 'KW' '131';\n"); - grammarBuilder.append("KW132 : 'KW' '132';\n"); - grammarBuilder.append("KW133 : 'KW' '133';\n"); - grammarBuilder.append("KW134 : 'KW' '134';\n"); - grammarBuilder.append("KW135 : 'KW' '135';\n"); - grammarBuilder.append("KW136 : 'KW' '136';\n"); - grammarBuilder.append("KW137 : 'KW' '137';\n"); - grammarBuilder.append("KW138 : 'KW' '138';\n"); - grammarBuilder.append("KW139 : 'KW' '139';\n"); - grammarBuilder.append("KW140 : 'KW' '140';\n"); - grammarBuilder.append("KW141 : 'KW' '141';\n"); - grammarBuilder.append("KW142 : 'KW' '142';\n"); - grammarBuilder.append("KW143 : 'KW' '143';\n"); - grammarBuilder.append("KW144 : 'KW' '144';\n"); - grammarBuilder.append("KW145 : 'KW' '145';\n"); - grammarBuilder.append("KW146 : 'KW' '146';\n"); - grammarBuilder.append("KW147 : 'KW' '147';\n"); - grammarBuilder.append("KW148 : 'KW' '148';\n"); - grammarBuilder.append("KW149 : 'KW' '149';\n"); - grammarBuilder.append("KW150 : 'KW' '150';\n"); - grammarBuilder.append("KW151 : 'KW' '151';\n"); - grammarBuilder.append("KW152 : 'KW' '152';\n"); - grammarBuilder.append("KW153 : 'KW' '153';\n"); - grammarBuilder.append("KW154 : 'KW' '154';\n"); - grammarBuilder.append("KW155 : 'KW' '155';\n"); - grammarBuilder.append("KW156 : 'KW' '156';\n"); - grammarBuilder.append("KW157 : 'KW' '157';\n"); - grammarBuilder.append("KW158 : 'KW' '158';\n"); - grammarBuilder.append("KW159 : 'KW' '159';\n"); - grammarBuilder.append("KW160 : 'KW' '160';\n"); - grammarBuilder.append("KW161 : 'KW' '161';\n"); - grammarBuilder.append("KW162 : 'KW' '162';\n"); - grammarBuilder.append("KW163 : 'KW' '163';\n"); - grammarBuilder.append("KW164 : 'KW' '164';\n"); - grammarBuilder.append("KW165 : 'KW' '165';\n"); - grammarBuilder.append("KW166 : 'KW' '166';\n"); - grammarBuilder.append("KW167 : 'KW' '167';\n"); - grammarBuilder.append("KW168 : 'KW' '168';\n"); - grammarBuilder.append("KW169 : 'KW' '169';\n"); - grammarBuilder.append("KW170 : 'KW' '170';\n"); - grammarBuilder.append("KW171 : 'KW' '171';\n"); - grammarBuilder.append("KW172 : 'KW' '172';\n"); - grammarBuilder.append("KW173 : 'KW' '173';\n"); - grammarBuilder.append("KW174 : 'KW' '174';\n"); - grammarBuilder.append("KW175 : 'KW' '175';\n"); - grammarBuilder.append("KW176 : 'KW' '176';\n"); - grammarBuilder.append("KW177 : 'KW' '177';\n"); - grammarBuilder.append("KW178 : 'KW' '178';\n"); - grammarBuilder.append("KW179 : 'KW' '179';\n"); - grammarBuilder.append("KW180 : 'KW' '180';\n"); - grammarBuilder.append("KW181 : 'KW' '181';\n"); - grammarBuilder.append("KW182 : 'KW' '182';\n"); - grammarBuilder.append("KW183 : 'KW' '183';\n"); - grammarBuilder.append("KW184 : 'KW' '184';\n"); - grammarBuilder.append("KW185 : 'KW' '185';\n"); - grammarBuilder.append("KW186 : 'KW' '186';\n"); - grammarBuilder.append("KW187 : 'KW' '187';\n"); - grammarBuilder.append("KW188 : 'KW' '188';\n"); - grammarBuilder.append("KW189 : 'KW' '189';\n"); - grammarBuilder.append("KW190 : 'KW' '190';\n"); - grammarBuilder.append("KW191 : 'KW' '191';\n"); - grammarBuilder.append("KW192 : 'KW' '192';\n"); - grammarBuilder.append("KW193 : 'KW' '193';\n"); - grammarBuilder.append("KW194 : 'KW' '194';\n"); - grammarBuilder.append("KW195 : 'KW' '195';\n"); - grammarBuilder.append("KW196 : 'KW' '196';\n"); - grammarBuilder.append("KW197 : 'KW' '197';\n"); - grammarBuilder.append("KW198 : 'KW' '198';\n"); - grammarBuilder.append("KW199 : 'KW' '199';\n"); - grammarBuilder.append("KW200 : 'KW' '200';\n"); - grammarBuilder.append("KW201 : 'KW' '201';\n"); - grammarBuilder.append("KW202 : 'KW' '202';\n"); - grammarBuilder.append("KW203 : 'KW' '203';\n"); - grammarBuilder.append("KW204 : 'KW' '204';\n"); - grammarBuilder.append("KW205 : 'KW' '205';\n"); - grammarBuilder.append("KW206 : 'KW' '206';\n"); - grammarBuilder.append("KW207 : 'KW' '207';\n"); - grammarBuilder.append("KW208 : 'KW' '208';\n"); - grammarBuilder.append("KW209 : 'KW' '209';\n"); - grammarBuilder.append("KW210 : 'KW' '210';\n"); - grammarBuilder.append("KW211 : 'KW' '211';\n"); - grammarBuilder.append("KW212 : 'KW' '212';\n"); - grammarBuilder.append("KW213 : 'KW' '213';\n"); - grammarBuilder.append("KW214 : 'KW' '214';\n"); - grammarBuilder.append("KW215 : 'KW' '215';\n"); - grammarBuilder.append("KW216 : 'KW' '216';\n"); - grammarBuilder.append("KW217 : 'KW' '217';\n"); - grammarBuilder.append("KW218 : 'KW' '218';\n"); - grammarBuilder.append("KW219 : 'KW' '219';\n"); - grammarBuilder.append("KW220 : 'KW' '220';\n"); - grammarBuilder.append("KW221 : 'KW' '221';\n"); - grammarBuilder.append("KW222 : 'KW' '222';\n"); - grammarBuilder.append("KW223 : 'KW' '223';\n"); - grammarBuilder.append("KW224 : 'KW' '224';\n"); - grammarBuilder.append("KW225 : 'KW' '225';\n"); - grammarBuilder.append("KW226 : 'KW' '226';\n"); - grammarBuilder.append("KW227 : 'KW' '227';\n"); - grammarBuilder.append("KW228 : 'KW' '228';\n"); - grammarBuilder.append("KW229 : 'KW' '229';\n"); - grammarBuilder.append("KW230 : 'KW' '230';\n"); - grammarBuilder.append("KW231 : 'KW' '231';\n"); - grammarBuilder.append("KW232 : 'KW' '232';\n"); - grammarBuilder.append("KW233 : 'KW' '233';\n"); - grammarBuilder.append("KW234 : 'KW' '234';\n"); - grammarBuilder.append("KW235 : 'KW' '235';\n"); - grammarBuilder.append("KW236 : 'KW' '236';\n"); - grammarBuilder.append("KW237 : 'KW' '237';\n"); - grammarBuilder.append("KW238 : 'KW' '238';\n"); - grammarBuilder.append("KW239 : 'KW' '239';\n"); - grammarBuilder.append("KW240 : 'KW' '240';\n"); - grammarBuilder.append("KW241 : 'KW' '241';\n"); - grammarBuilder.append("KW242 : 'KW' '242';\n"); - grammarBuilder.append("KW243 : 'KW' '243';\n"); - grammarBuilder.append("KW244 : 'KW' '244';\n"); - grammarBuilder.append("KW245 : 'KW' '245';\n"); - grammarBuilder.append("KW246 : 'KW' '246';\n"); - grammarBuilder.append("KW247 : 'KW' '247';\n"); - grammarBuilder.append("KW248 : 'KW' '248';\n"); - grammarBuilder.append("KW249 : 'KW' '249';\n"); - grammarBuilder.append("KW250 : 'KW' '250';\n"); - grammarBuilder.append("KW251 : 'KW' '251';\n"); - grammarBuilder.append("KW252 : 'KW' '252';\n"); - grammarBuilder.append("KW253 : 'KW' '253';\n"); - grammarBuilder.append("KW254 : 'KW' '254';\n"); - grammarBuilder.append("KW255 : 'KW' '255';\n"); - grammarBuilder.append("KW256 : 'KW' '256';\n"); - grammarBuilder.append("KW257 : 'KW' '257';\n"); - grammarBuilder.append("KW258 : 'KW' '258';\n"); - grammarBuilder.append("KW259 : 'KW' '259';\n"); - grammarBuilder.append("KW260 : 'KW' '260';\n"); - grammarBuilder.append("KW261 : 'KW' '261';\n"); - grammarBuilder.append("KW262 : 'KW' '262';\n"); - grammarBuilder.append("KW263 : 'KW' '263';\n"); - grammarBuilder.append("KW264 : 'KW' '264';\n"); - grammarBuilder.append("KW265 : 'KW' '265';\n"); - grammarBuilder.append("KW266 : 'KW' '266';\n"); - grammarBuilder.append("KW267 : 'KW' '267';\n"); - grammarBuilder.append("KW268 : 'KW' '268';\n"); - grammarBuilder.append("KW269 : 'KW' '269';\n"); - grammarBuilder.append("KW270 : 'KW' '270';\n"); - grammarBuilder.append("KW271 : 'KW' '271';\n"); - grammarBuilder.append("KW272 : 'KW' '272';\n"); - grammarBuilder.append("KW273 : 'KW' '273';\n"); - grammarBuilder.append("KW274 : 'KW' '274';\n"); - grammarBuilder.append("KW275 : 'KW' '275';\n"); - grammarBuilder.append("KW276 : 'KW' '276';\n"); - grammarBuilder.append("KW277 : 'KW' '277';\n"); - grammarBuilder.append("KW278 : 'KW' '278';\n"); - grammarBuilder.append("KW279 : 'KW' '279';\n"); - grammarBuilder.append("KW280 : 'KW' '280';\n"); - grammarBuilder.append("KW281 : 'KW' '281';\n"); - grammarBuilder.append("KW282 : 'KW' '282';\n"); - grammarBuilder.append("KW283 : 'KW' '283';\n"); - grammarBuilder.append("KW284 : 'KW' '284';\n"); - grammarBuilder.append("KW285 : 'KW' '285';\n"); - grammarBuilder.append("KW286 : 'KW' '286';\n"); - grammarBuilder.append("KW287 : 'KW' '287';\n"); - grammarBuilder.append("KW288 : 'KW' '288';\n"); - grammarBuilder.append("KW289 : 'KW' '289';\n"); - grammarBuilder.append("KW290 : 'KW' '290';\n"); - grammarBuilder.append("KW291 : 'KW' '291';\n"); - grammarBuilder.append("KW292 : 'KW' '292';\n"); - grammarBuilder.append("KW293 : 'KW' '293';\n"); - grammarBuilder.append("KW294 : 'KW' '294';\n"); - grammarBuilder.append("KW295 : 'KW' '295';\n"); - grammarBuilder.append("KW296 : 'KW' '296';\n"); - grammarBuilder.append("KW297 : 'KW' '297';\n"); - grammarBuilder.append("KW298 : 'KW' '298';\n"); - grammarBuilder.append("KW299 : 'KW' '299';\n"); - grammarBuilder.append("KW300 : 'KW' '300';\n"); - grammarBuilder.append("KW301 : 'KW' '301';\n"); - grammarBuilder.append("KW302 : 'KW' '302';\n"); - grammarBuilder.append("KW303 : 'KW' '303';\n"); - grammarBuilder.append("KW304 : 'KW' '304';\n"); - grammarBuilder.append("KW305 : 'KW' '305';\n"); - grammarBuilder.append("KW306 : 'KW' '306';\n"); - grammarBuilder.append("KW307 : 'KW' '307';\n"); - grammarBuilder.append("KW308 : 'KW' '308';\n"); - grammarBuilder.append("KW309 : 'KW' '309';\n"); - grammarBuilder.append("KW310 : 'KW' '310';\n"); - grammarBuilder.append("KW311 : 'KW' '311';\n"); - grammarBuilder.append("KW312 : 'KW' '312';\n"); - grammarBuilder.append("KW313 : 'KW' '313';\n"); - grammarBuilder.append("KW314 : 'KW' '314';\n"); - grammarBuilder.append("KW315 : 'KW' '315';\n"); - grammarBuilder.append("KW316 : 'KW' '316';\n"); - grammarBuilder.append("KW317 : 'KW' '317';\n"); - grammarBuilder.append("KW318 : 'KW' '318';\n"); - grammarBuilder.append("KW319 : 'KW' '319';\n"); - grammarBuilder.append("KW320 : 'KW' '320';\n"); - grammarBuilder.append("KW321 : 'KW' '321';\n"); - grammarBuilder.append("KW322 : 'KW' '322';\n"); - grammarBuilder.append("KW323 : 'KW' '323';\n"); - grammarBuilder.append("KW324 : 'KW' '324';\n"); - grammarBuilder.append("KW325 : 'KW' '325';\n"); - grammarBuilder.append("KW326 : 'KW' '326';\n"); - grammarBuilder.append("KW327 : 'KW' '327';\n"); - grammarBuilder.append("KW328 : 'KW' '328';\n"); - grammarBuilder.append("KW329 : 'KW' '329';\n"); - grammarBuilder.append("KW330 : 'KW' '330';\n"); - grammarBuilder.append("KW331 : 'KW' '331';\n"); - grammarBuilder.append("KW332 : 'KW' '332';\n"); - grammarBuilder.append("KW333 : 'KW' '333';\n"); - grammarBuilder.append("KW334 : 'KW' '334';\n"); - grammarBuilder.append("KW335 : 'KW' '335';\n"); - grammarBuilder.append("KW336 : 'KW' '336';\n"); - grammarBuilder.append("KW337 : 'KW' '337';\n"); - grammarBuilder.append("KW338 : 'KW' '338';\n"); - grammarBuilder.append("KW339 : 'KW' '339';\n"); - grammarBuilder.append("KW340 : 'KW' '340';\n"); - grammarBuilder.append("KW341 : 'KW' '341';\n"); - grammarBuilder.append("KW342 : 'KW' '342';\n"); - grammarBuilder.append("KW343 : 'KW' '343';\n"); - grammarBuilder.append("KW344 : 'KW' '344';\n"); - grammarBuilder.append("KW345 : 'KW' '345';\n"); - grammarBuilder.append("KW346 : 'KW' '346';\n"); - grammarBuilder.append("KW347 : 'KW' '347';\n"); - grammarBuilder.append("KW348 : 'KW' '348';\n"); - grammarBuilder.append("KW349 : 'KW' '349';\n"); - grammarBuilder.append("KW350 : 'KW' '350';\n"); - grammarBuilder.append("KW351 : 'KW' '351';\n"); - grammarBuilder.append("KW352 : 'KW' '352';\n"); - grammarBuilder.append("KW353 : 'KW' '353';\n"); - grammarBuilder.append("KW354 : 'KW' '354';\n"); - grammarBuilder.append("KW355 : 'KW' '355';\n"); - grammarBuilder.append("KW356 : 'KW' '356';\n"); - grammarBuilder.append("KW357 : 'KW' '357';\n"); - grammarBuilder.append("KW358 : 'KW' '358';\n"); - grammarBuilder.append("KW359 : 'KW' '359';\n"); - grammarBuilder.append("KW360 : 'KW' '360';\n"); - grammarBuilder.append("KW361 : 'KW' '361';\n"); - grammarBuilder.append("KW362 : 'KW' '362';\n"); - grammarBuilder.append("KW363 : 'KW' '363';\n"); - grammarBuilder.append("KW364 : 'KW' '364';\n"); - grammarBuilder.append("KW365 : 'KW' '365';\n"); - grammarBuilder.append("KW366 : 'KW' '366';\n"); - grammarBuilder.append("KW367 : 'KW' '367';\n"); - grammarBuilder.append("KW368 : 'KW' '368';\n"); - grammarBuilder.append("KW369 : 'KW' '369';\n"); - grammarBuilder.append("KW370 : 'KW' '370';\n"); - grammarBuilder.append("KW371 : 'KW' '371';\n"); - grammarBuilder.append("KW372 : 'KW' '372';\n"); - grammarBuilder.append("KW373 : 'KW' '373';\n"); - grammarBuilder.append("KW374 : 'KW' '374';\n"); - grammarBuilder.append("KW375 : 'KW' '375';\n"); - grammarBuilder.append("KW376 : 'KW' '376';\n"); - grammarBuilder.append("KW377 : 'KW' '377';\n"); - grammarBuilder.append("KW378 : 'KW' '378';\n"); - grammarBuilder.append("KW379 : 'KW' '379';\n"); - grammarBuilder.append("KW380 : 'KW' '380';\n"); - grammarBuilder.append("KW381 : 'KW' '381';\n"); - grammarBuilder.append("KW382 : 'KW' '382';\n"); - grammarBuilder.append("KW383 : 'KW' '383';\n"); - grammarBuilder.append("KW384 : 'KW' '384';\n"); - grammarBuilder.append("KW385 : 'KW' '385';\n"); - grammarBuilder.append("KW386 : 'KW' '386';\n"); - grammarBuilder.append("KW387 : 'KW' '387';\n"); - grammarBuilder.append("KW388 : 'KW' '388';\n"); - grammarBuilder.append("KW389 : 'KW' '389';\n"); - grammarBuilder.append("KW390 : 'KW' '390';\n"); - grammarBuilder.append("KW391 : 'KW' '391';\n"); - grammarBuilder.append("KW392 : 'KW' '392';\n"); - grammarBuilder.append("KW393 : 'KW' '393';\n"); - grammarBuilder.append("KW394 : 'KW' '394';\n"); - grammarBuilder.append("KW395 : 'KW' '395';\n"); - grammarBuilder.append("KW396 : 'KW' '396';\n"); - grammarBuilder.append("KW397 : 'KW' '397';\n"); - grammarBuilder.append("KW398 : 'KW' '398';\n"); - grammarBuilder.append("KW399 : 'KW' '399';\n"); - grammarBuilder.append("KW400 : 'KW' '400';\n"); - grammarBuilder.append("KW401 : 'KW' '401';\n"); - grammarBuilder.append("KW402 : 'KW' '402';\n"); - grammarBuilder.append("KW403 : 'KW' '403';\n"); - grammarBuilder.append("KW404 : 'KW' '404';\n"); - grammarBuilder.append("KW405 : 'KW' '405';\n"); - grammarBuilder.append("KW406 : 'KW' '406';\n"); - grammarBuilder.append("KW407 : 'KW' '407';\n"); - grammarBuilder.append("KW408 : 'KW' '408';\n"); - grammarBuilder.append("KW409 : 'KW' '409';\n"); - grammarBuilder.append("KW410 : 'KW' '410';\n"); - grammarBuilder.append("KW411 : 'KW' '411';\n"); - grammarBuilder.append("KW412 : 'KW' '412';\n"); - grammarBuilder.append("KW413 : 'KW' '413';\n"); - grammarBuilder.append("KW414 : 'KW' '414';\n"); - grammarBuilder.append("KW415 : 'KW' '415';\n"); - grammarBuilder.append("KW416 : 'KW' '416';\n"); - grammarBuilder.append("KW417 : 'KW' '417';\n"); - grammarBuilder.append("KW418 : 'KW' '418';\n"); - grammarBuilder.append("KW419 : 'KW' '419';\n"); - grammarBuilder.append("KW420 : 'KW' '420';\n"); - grammarBuilder.append("KW421 : 'KW' '421';\n"); - grammarBuilder.append("KW422 : 'KW' '422';\n"); - grammarBuilder.append("KW423 : 'KW' '423';\n"); - grammarBuilder.append("KW424 : 'KW' '424';\n"); - grammarBuilder.append("KW425 : 'KW' '425';\n"); - grammarBuilder.append("KW426 : 'KW' '426';\n"); - grammarBuilder.append("KW427 : 'KW' '427';\n"); - grammarBuilder.append("KW428 : 'KW' '428';\n"); - grammarBuilder.append("KW429 : 'KW' '429';\n"); - grammarBuilder.append("KW430 : 'KW' '430';\n"); - grammarBuilder.append("KW431 : 'KW' '431';\n"); - grammarBuilder.append("KW432 : 'KW' '432';\n"); - grammarBuilder.append("KW433 : 'KW' '433';\n"); - grammarBuilder.append("KW434 : 'KW' '434';\n"); - grammarBuilder.append("KW435 : 'KW' '435';\n"); - grammarBuilder.append("KW436 : 'KW' '436';\n"); - grammarBuilder.append("KW437 : 'KW' '437';\n"); - grammarBuilder.append("KW438 : 'KW' '438';\n"); - grammarBuilder.append("KW439 : 'KW' '439';\n"); - grammarBuilder.append("KW440 : 'KW' '440';\n"); - grammarBuilder.append("KW441 : 'KW' '441';\n"); - grammarBuilder.append("KW442 : 'KW' '442';\n"); - grammarBuilder.append("KW443 : 'KW' '443';\n"); - grammarBuilder.append("KW444 : 'KW' '444';\n"); - grammarBuilder.append("KW445 : 'KW' '445';\n"); - grammarBuilder.append("KW446 : 'KW' '446';\n"); - grammarBuilder.append("KW447 : 'KW' '447';\n"); - grammarBuilder.append("KW448 : 'KW' '448';\n"); - grammarBuilder.append("KW449 : 'KW' '449';\n"); - grammarBuilder.append("KW450 : 'KW' '450';\n"); - grammarBuilder.append("KW451 : 'KW' '451';\n"); - grammarBuilder.append("KW452 : 'KW' '452';\n"); - grammarBuilder.append("KW453 : 'KW' '453';\n"); - grammarBuilder.append("KW454 : 'KW' '454';\n"); - grammarBuilder.append("KW455 : 'KW' '455';\n"); - grammarBuilder.append("KW456 : 'KW' '456';\n"); - grammarBuilder.append("KW457 : 'KW' '457';\n"); - grammarBuilder.append("KW458 : 'KW' '458';\n"); - grammarBuilder.append("KW459 : 'KW' '459';\n"); - grammarBuilder.append("KW460 : 'KW' '460';\n"); - grammarBuilder.append("KW461 : 'KW' '461';\n"); - grammarBuilder.append("KW462 : 'KW' '462';\n"); - grammarBuilder.append("KW463 : 'KW' '463';\n"); - grammarBuilder.append("KW464 : 'KW' '464';\n"); - grammarBuilder.append("KW465 : 'KW' '465';\n"); - grammarBuilder.append("KW466 : 'KW' '466';\n"); - grammarBuilder.append("KW467 : 'KW' '467';\n"); - grammarBuilder.append("KW468 : 'KW' '468';\n"); - grammarBuilder.append("KW469 : 'KW' '469';\n"); - grammarBuilder.append("KW470 : 'KW' '470';\n"); - grammarBuilder.append("KW471 : 'KW' '471';\n"); - grammarBuilder.append("KW472 : 'KW' '472';\n"); - grammarBuilder.append("KW473 : 'KW' '473';\n"); - grammarBuilder.append("KW474 : 'KW' '474';\n"); - grammarBuilder.append("KW475 : 'KW' '475';\n"); - grammarBuilder.append("KW476 : 'KW' '476';\n"); - grammarBuilder.append("KW477 : 'KW' '477';\n"); - grammarBuilder.append("KW478 : 'KW' '478';\n"); - grammarBuilder.append("KW479 : 'KW' '479';\n"); - grammarBuilder.append("KW480 : 'KW' '480';\n"); - grammarBuilder.append("KW481 : 'KW' '481';\n"); - grammarBuilder.append("KW482 : 'KW' '482';\n"); - grammarBuilder.append("KW483 : 'KW' '483';\n"); - grammarBuilder.append("KW484 : 'KW' '484';\n"); - grammarBuilder.append("KW485 : 'KW' '485';\n"); - grammarBuilder.append("KW486 : 'KW' '486';\n"); - grammarBuilder.append("KW487 : 'KW' '487';\n"); - grammarBuilder.append("KW488 : 'KW' '488';\n"); - grammarBuilder.append("KW489 : 'KW' '489';\n"); - grammarBuilder.append("KW490 : 'KW' '490';\n"); - grammarBuilder.append("KW491 : 'KW' '491';\n"); - grammarBuilder.append("KW492 : 'KW' '492';\n"); - grammarBuilder.append("KW493 : 'KW' '493';\n"); - grammarBuilder.append("KW494 : 'KW' '494';\n"); - grammarBuilder.append("KW495 : 'KW' '495';\n"); - grammarBuilder.append("KW496 : 'KW' '496';\n"); - grammarBuilder.append("KW497 : 'KW' '497';\n"); - grammarBuilder.append("KW498 : 'KW' '498';\n"); - grammarBuilder.append("KW499 : 'KW' '499';\n"); - grammarBuilder.append("KW500 : 'KW' '500';\n"); - grammarBuilder.append("KW501 : 'KW' '501';\n"); - grammarBuilder.append("KW502 : 'KW' '502';\n"); - grammarBuilder.append("KW503 : 'KW' '503';\n"); - grammarBuilder.append("KW504 : 'KW' '504';\n"); - grammarBuilder.append("KW505 : 'KW' '505';\n"); - grammarBuilder.append("KW506 : 'KW' '506';\n"); - grammarBuilder.append("KW507 : 'KW' '507';\n"); - grammarBuilder.append("KW508 : 'KW' '508';\n"); - grammarBuilder.append("KW509 : 'KW' '509';\n"); - grammarBuilder.append("KW510 : 'KW' '510';\n"); - grammarBuilder.append("KW511 : 'KW' '511';\n"); - grammarBuilder.append("KW512 : 'KW' '512';\n"); - grammarBuilder.append("KW513 : 'KW' '513';\n"); - grammarBuilder.append("KW514 : 'KW' '514';\n"); - grammarBuilder.append("KW515 : 'KW' '515';\n"); - grammarBuilder.append("KW516 : 'KW' '516';\n"); - grammarBuilder.append("KW517 : 'KW' '517';\n"); - grammarBuilder.append("KW518 : 'KW' '518';\n"); - grammarBuilder.append("KW519 : 'KW' '519';\n"); - grammarBuilder.append("KW520 : 'KW' '520';\n"); - grammarBuilder.append("KW521 : 'KW' '521';\n"); - grammarBuilder.append("KW522 : 'KW' '522';\n"); - grammarBuilder.append("KW523 : 'KW' '523';\n"); - grammarBuilder.append("KW524 : 'KW' '524';\n"); - grammarBuilder.append("KW525 : 'KW' '525';\n"); - grammarBuilder.append("KW526 : 'KW' '526';\n"); - grammarBuilder.append("KW527 : 'KW' '527';\n"); - grammarBuilder.append("KW528 : 'KW' '528';\n"); - grammarBuilder.append("KW529 : 'KW' '529';\n"); - grammarBuilder.append("KW530 : 'KW' '530';\n"); - grammarBuilder.append("KW531 : 'KW' '531';\n"); - grammarBuilder.append("KW532 : 'KW' '532';\n"); - grammarBuilder.append("KW533 : 'KW' '533';\n"); - grammarBuilder.append("KW534 : 'KW' '534';\n"); - grammarBuilder.append("KW535 : 'KW' '535';\n"); - grammarBuilder.append("KW536 : 'KW' '536';\n"); - grammarBuilder.append("KW537 : 'KW' '537';\n"); - grammarBuilder.append("KW538 : 'KW' '538';\n"); - grammarBuilder.append("KW539 : 'KW' '539';\n"); - grammarBuilder.append("KW540 : 'KW' '540';\n"); - grammarBuilder.append("KW541 : 'KW' '541';\n"); - grammarBuilder.append("KW542 : 'KW' '542';\n"); - grammarBuilder.append("KW543 : 'KW' '543';\n"); - grammarBuilder.append("KW544 : 'KW' '544';\n"); - grammarBuilder.append("KW545 : 'KW' '545';\n"); - grammarBuilder.append("KW546 : 'KW' '546';\n"); - grammarBuilder.append("KW547 : 'KW' '547';\n"); - grammarBuilder.append("KW548 : 'KW' '548';\n"); - grammarBuilder.append("KW549 : 'KW' '549';\n"); - grammarBuilder.append("KW550 : 'KW' '550';\n"); - grammarBuilder.append("KW551 : 'KW' '551';\n"); - grammarBuilder.append("KW552 : 'KW' '552';\n"); - grammarBuilder.append("KW553 : 'KW' '553';\n"); - grammarBuilder.append("KW554 : 'KW' '554';\n"); - grammarBuilder.append("KW555 : 'KW' '555';\n"); - grammarBuilder.append("KW556 : 'KW' '556';\n"); - grammarBuilder.append("KW557 : 'KW' '557';\n"); - grammarBuilder.append("KW558 : 'KW' '558';\n"); - grammarBuilder.append("KW559 : 'KW' '559';\n"); - grammarBuilder.append("KW560 : 'KW' '560';\n"); - grammarBuilder.append("KW561 : 'KW' '561';\n"); - grammarBuilder.append("KW562 : 'KW' '562';\n"); - grammarBuilder.append("KW563 : 'KW' '563';\n"); - grammarBuilder.append("KW564 : 'KW' '564';\n"); - grammarBuilder.append("KW565 : 'KW' '565';\n"); - grammarBuilder.append("KW566 : 'KW' '566';\n"); - grammarBuilder.append("KW567 : 'KW' '567';\n"); - grammarBuilder.append("KW568 : 'KW' '568';\n"); - grammarBuilder.append("KW569 : 'KW' '569';\n"); - grammarBuilder.append("KW570 : 'KW' '570';\n"); - grammarBuilder.append("KW571 : 'KW' '571';\n"); - grammarBuilder.append("KW572 : 'KW' '572';\n"); - grammarBuilder.append("KW573 : 'KW' '573';\n"); - grammarBuilder.append("KW574 : 'KW' '574';\n"); - grammarBuilder.append("KW575 : 'KW' '575';\n"); - grammarBuilder.append("KW576 : 'KW' '576';\n"); - grammarBuilder.append("KW577 : 'KW' '577';\n"); - grammarBuilder.append("KW578 : 'KW' '578';\n"); - grammarBuilder.append("KW579 : 'KW' '579';\n"); - grammarBuilder.append("KW580 : 'KW' '580';\n"); - grammarBuilder.append("KW581 : 'KW' '581';\n"); - grammarBuilder.append("KW582 : 'KW' '582';\n"); - grammarBuilder.append("KW583 : 'KW' '583';\n"); - grammarBuilder.append("KW584 : 'KW' '584';\n"); - grammarBuilder.append("KW585 : 'KW' '585';\n"); - grammarBuilder.append("KW586 : 'KW' '586';\n"); - grammarBuilder.append("KW587 : 'KW' '587';\n"); - grammarBuilder.append("KW588 : 'KW' '588';\n"); - grammarBuilder.append("KW589 : 'KW' '589';\n"); - grammarBuilder.append("KW590 : 'KW' '590';\n"); - grammarBuilder.append("KW591 : 'KW' '591';\n"); - grammarBuilder.append("KW592 : 'KW' '592';\n"); - grammarBuilder.append("KW593 : 'KW' '593';\n"); - grammarBuilder.append("KW594 : 'KW' '594';\n"); - grammarBuilder.append("KW595 : 'KW' '595';\n"); - grammarBuilder.append("KW596 : 'KW' '596';\n"); - grammarBuilder.append("KW597 : 'KW' '597';\n"); - grammarBuilder.append("KW598 : 'KW' '598';\n"); - grammarBuilder.append("KW599 : 'KW' '599';\n"); - grammarBuilder.append("KW600 : 'KW' '600';\n"); - grammarBuilder.append("KW601 : 'KW' '601';\n"); - grammarBuilder.append("KW602 : 'KW' '602';\n"); - grammarBuilder.append("KW603 : 'KW' '603';\n"); - grammarBuilder.append("KW604 : 'KW' '604';\n"); - grammarBuilder.append("KW605 : 'KW' '605';\n"); - grammarBuilder.append("KW606 : 'KW' '606';\n"); - grammarBuilder.append("KW607 : 'KW' '607';\n"); - grammarBuilder.append("KW608 : 'KW' '608';\n"); - grammarBuilder.append("KW609 : 'KW' '609';\n"); - grammarBuilder.append("KW610 : 'KW' '610';\n"); - grammarBuilder.append("KW611 : 'KW' '611';\n"); - grammarBuilder.append("KW612 : 'KW' '612';\n"); - grammarBuilder.append("KW613 : 'KW' '613';\n"); - grammarBuilder.append("KW614 : 'KW' '614';\n"); - grammarBuilder.append("KW615 : 'KW' '615';\n"); - grammarBuilder.append("KW616 : 'KW' '616';\n"); - grammarBuilder.append("KW617 : 'KW' '617';\n"); - grammarBuilder.append("KW618 : 'KW' '618';\n"); - grammarBuilder.append("KW619 : 'KW' '619';\n"); - grammarBuilder.append("KW620 : 'KW' '620';\n"); - grammarBuilder.append("KW621 : 'KW' '621';\n"); - grammarBuilder.append("KW622 : 'KW' '622';\n"); - grammarBuilder.append("KW623 : 'KW' '623';\n"); - grammarBuilder.append("KW624 : 'KW' '624';\n"); - grammarBuilder.append("KW625 : 'KW' '625';\n"); - grammarBuilder.append("KW626 : 'KW' '626';\n"); - grammarBuilder.append("KW627 : 'KW' '627';\n"); - grammarBuilder.append("KW628 : 'KW' '628';\n"); - grammarBuilder.append("KW629 : 'KW' '629';\n"); - grammarBuilder.append("KW630 : 'KW' '630';\n"); - grammarBuilder.append("KW631 : 'KW' '631';\n"); - grammarBuilder.append("KW632 : 'KW' '632';\n"); - grammarBuilder.append("KW633 : 'KW' '633';\n"); - grammarBuilder.append("KW634 : 'KW' '634';\n"); - grammarBuilder.append("KW635 : 'KW' '635';\n"); - grammarBuilder.append("KW636 : 'KW' '636';\n"); - grammarBuilder.append("KW637 : 'KW' '637';\n"); - grammarBuilder.append("KW638 : 'KW' '638';\n"); - grammarBuilder.append("KW639 : 'KW' '639';\n"); - grammarBuilder.append("KW640 : 'KW' '640';\n"); - grammarBuilder.append("KW641 : 'KW' '641';\n"); - grammarBuilder.append("KW642 : 'KW' '642';\n"); - grammarBuilder.append("KW643 : 'KW' '643';\n"); - grammarBuilder.append("KW644 : 'KW' '644';\n"); - grammarBuilder.append("KW645 : 'KW' '645';\n"); - grammarBuilder.append("KW646 : 'KW' '646';\n"); - grammarBuilder.append("KW647 : 'KW' '647';\n"); - grammarBuilder.append("KW648 : 'KW' '648';\n"); - grammarBuilder.append("KW649 : 'KW' '649';\n"); - grammarBuilder.append("KW650 : 'KW' '650';\n"); - grammarBuilder.append("KW651 : 'KW' '651';\n"); - grammarBuilder.append("KW652 : 'KW' '652';\n"); - grammarBuilder.append("KW653 : 'KW' '653';\n"); - grammarBuilder.append("KW654 : 'KW' '654';\n"); - grammarBuilder.append("KW655 : 'KW' '655';\n"); - grammarBuilder.append("KW656 : 'KW' '656';\n"); - grammarBuilder.append("KW657 : 'KW' '657';\n"); - grammarBuilder.append("KW658 : 'KW' '658';\n"); - grammarBuilder.append("KW659 : 'KW' '659';\n"); - grammarBuilder.append("KW660 : 'KW' '660';\n"); - grammarBuilder.append("KW661 : 'KW' '661';\n"); - grammarBuilder.append("KW662 : 'KW' '662';\n"); - grammarBuilder.append("KW663 : 'KW' '663';\n"); - grammarBuilder.append("KW664 : 'KW' '664';\n"); - grammarBuilder.append("KW665 : 'KW' '665';\n"); - grammarBuilder.append("KW666 : 'KW' '666';\n"); - grammarBuilder.append("KW667 : 'KW' '667';\n"); - grammarBuilder.append("KW668 : 'KW' '668';\n"); - grammarBuilder.append("KW669 : 'KW' '669';\n"); - grammarBuilder.append("KW670 : 'KW' '670';\n"); - grammarBuilder.append("KW671 : 'KW' '671';\n"); - grammarBuilder.append("KW672 : 'KW' '672';\n"); - grammarBuilder.append("KW673 : 'KW' '673';\n"); - grammarBuilder.append("KW674 : 'KW' '674';\n"); - grammarBuilder.append("KW675 : 'KW' '675';\n"); - grammarBuilder.append("KW676 : 'KW' '676';\n"); - grammarBuilder.append("KW677 : 'KW' '677';\n"); - grammarBuilder.append("KW678 : 'KW' '678';\n"); - grammarBuilder.append("KW679 : 'KW' '679';\n"); - grammarBuilder.append("KW680 : 'KW' '680';\n"); - grammarBuilder.append("KW681 : 'KW' '681';\n"); - grammarBuilder.append("KW682 : 'KW' '682';\n"); - grammarBuilder.append("KW683 : 'KW' '683';\n"); - grammarBuilder.append("KW684 : 'KW' '684';\n"); - grammarBuilder.append("KW685 : 'KW' '685';\n"); - grammarBuilder.append("KW686 : 'KW' '686';\n"); - grammarBuilder.append("KW687 : 'KW' '687';\n"); - grammarBuilder.append("KW688 : 'KW' '688';\n"); - grammarBuilder.append("KW689 : 'KW' '689';\n"); - grammarBuilder.append("KW690 : 'KW' '690';\n"); - grammarBuilder.append("KW691 : 'KW' '691';\n"); - grammarBuilder.append("KW692 : 'KW' '692';\n"); - grammarBuilder.append("KW693 : 'KW' '693';\n"); - grammarBuilder.append("KW694 : 'KW' '694';\n"); - grammarBuilder.append("KW695 : 'KW' '695';\n"); - grammarBuilder.append("KW696 : 'KW' '696';\n"); - grammarBuilder.append("KW697 : 'KW' '697';\n"); - grammarBuilder.append("KW698 : 'KW' '698';\n"); - grammarBuilder.append("KW699 : 'KW' '699';\n"); - grammarBuilder.append("KW700 : 'KW' '700';\n"); - grammarBuilder.append("KW701 : 'KW' '701';\n"); - grammarBuilder.append("KW702 : 'KW' '702';\n"); - grammarBuilder.append("KW703 : 'KW' '703';\n"); - grammarBuilder.append("KW704 : 'KW' '704';\n"); - grammarBuilder.append("KW705 : 'KW' '705';\n"); - grammarBuilder.append("KW706 : 'KW' '706';\n"); - grammarBuilder.append("KW707 : 'KW' '707';\n"); - grammarBuilder.append("KW708 : 'KW' '708';\n"); - grammarBuilder.append("KW709 : 'KW' '709';\n"); - grammarBuilder.append("KW710 : 'KW' '710';\n"); - grammarBuilder.append("KW711 : 'KW' '711';\n"); - grammarBuilder.append("KW712 : 'KW' '712';\n"); - grammarBuilder.append("KW713 : 'KW' '713';\n"); - grammarBuilder.append("KW714 : 'KW' '714';\n"); - grammarBuilder.append("KW715 : 'KW' '715';\n"); - grammarBuilder.append("KW716 : 'KW' '716';\n"); - grammarBuilder.append("KW717 : 'KW' '717';\n"); - grammarBuilder.append("KW718 : 'KW' '718';\n"); - grammarBuilder.append("KW719 : 'KW' '719';\n"); - grammarBuilder.append("KW720 : 'KW' '720';\n"); - grammarBuilder.append("KW721 : 'KW' '721';\n"); - grammarBuilder.append("KW722 : 'KW' '722';\n"); - grammarBuilder.append("KW723 : 'KW' '723';\n"); - grammarBuilder.append("KW724 : 'KW' '724';\n"); - grammarBuilder.append("KW725 : 'KW' '725';\n"); - grammarBuilder.append("KW726 : 'KW' '726';\n"); - grammarBuilder.append("KW727 : 'KW' '727';\n"); - grammarBuilder.append("KW728 : 'KW' '728';\n"); - grammarBuilder.append("KW729 : 'KW' '729';\n"); - grammarBuilder.append("KW730 : 'KW' '730';\n"); - grammarBuilder.append("KW731 : 'KW' '731';\n"); - grammarBuilder.append("KW732 : 'KW' '732';\n"); - grammarBuilder.append("KW733 : 'KW' '733';\n"); - grammarBuilder.append("KW734 : 'KW' '734';\n"); - grammarBuilder.append("KW735 : 'KW' '735';\n"); - grammarBuilder.append("KW736 : 'KW' '736';\n"); - grammarBuilder.append("KW737 : 'KW' '737';\n"); - grammarBuilder.append("KW738 : 'KW' '738';\n"); - grammarBuilder.append("KW739 : 'KW' '739';\n"); - grammarBuilder.append("KW740 : 'KW' '740';\n"); - grammarBuilder.append("KW741 : 'KW' '741';\n"); - grammarBuilder.append("KW742 : 'KW' '742';\n"); - grammarBuilder.append("KW743 : 'KW' '743';\n"); - grammarBuilder.append("KW744 : 'KW' '744';\n"); - grammarBuilder.append("KW745 : 'KW' '745';\n"); - grammarBuilder.append("KW746 : 'KW' '746';\n"); - grammarBuilder.append("KW747 : 'KW' '747';\n"); - grammarBuilder.append("KW748 : 'KW' '748';\n"); - grammarBuilder.append("KW749 : 'KW' '749';\n"); - grammarBuilder.append("KW750 : 'KW' '750';\n"); - grammarBuilder.append("KW751 : 'KW' '751';\n"); - grammarBuilder.append("KW752 : 'KW' '752';\n"); - grammarBuilder.append("KW753 : 'KW' '753';\n"); - grammarBuilder.append("KW754 : 'KW' '754';\n"); - grammarBuilder.append("KW755 : 'KW' '755';\n"); - grammarBuilder.append("KW756 : 'KW' '756';\n"); - grammarBuilder.append("KW757 : 'KW' '757';\n"); - grammarBuilder.append("KW758 : 'KW' '758';\n"); - grammarBuilder.append("KW759 : 'KW' '759';\n"); - grammarBuilder.append("KW760 : 'KW' '760';\n"); - grammarBuilder.append("KW761 : 'KW' '761';\n"); - grammarBuilder.append("KW762 : 'KW' '762';\n"); - grammarBuilder.append("KW763 : 'KW' '763';\n"); - grammarBuilder.append("KW764 : 'KW' '764';\n"); - grammarBuilder.append("KW765 : 'KW' '765';\n"); - grammarBuilder.append("KW766 : 'KW' '766';\n"); - grammarBuilder.append("KW767 : 'KW' '767';\n"); - grammarBuilder.append("KW768 : 'KW' '768';\n"); - grammarBuilder.append("KW769 : 'KW' '769';\n"); - grammarBuilder.append("KW770 : 'KW' '770';\n"); - grammarBuilder.append("KW771 : 'KW' '771';\n"); - grammarBuilder.append("KW772 : 'KW' '772';\n"); - grammarBuilder.append("KW773 : 'KW' '773';\n"); - grammarBuilder.append("KW774 : 'KW' '774';\n"); - grammarBuilder.append("KW775 : 'KW' '775';\n"); - grammarBuilder.append("KW776 : 'KW' '776';\n"); - grammarBuilder.append("KW777 : 'KW' '777';\n"); - grammarBuilder.append("KW778 : 'KW' '778';\n"); - grammarBuilder.append("KW779 : 'KW' '779';\n"); - grammarBuilder.append("KW780 : 'KW' '780';\n"); - grammarBuilder.append("KW781 : 'KW' '781';\n"); - grammarBuilder.append("KW782 : 'KW' '782';\n"); - grammarBuilder.append("KW783 : 'KW' '783';\n"); - grammarBuilder.append("KW784 : 'KW' '784';\n"); - grammarBuilder.append("KW785 : 'KW' '785';\n"); - grammarBuilder.append("KW786 : 'KW' '786';\n"); - grammarBuilder.append("KW787 : 'KW' '787';\n"); - grammarBuilder.append("KW788 : 'KW' '788';\n"); - grammarBuilder.append("KW789 : 'KW' '789';\n"); - grammarBuilder.append("KW790 : 'KW' '790';\n"); - grammarBuilder.append("KW791 : 'KW' '791';\n"); - grammarBuilder.append("KW792 : 'KW' '792';\n"); - grammarBuilder.append("KW793 : 'KW' '793';\n"); - grammarBuilder.append("KW794 : 'KW' '794';\n"); - grammarBuilder.append("KW795 : 'KW' '795';\n"); - grammarBuilder.append("KW796 : 'KW' '796';\n"); - grammarBuilder.append("KW797 : 'KW' '797';\n"); - grammarBuilder.append("KW798 : 'KW' '798';\n"); - grammarBuilder.append("KW799 : 'KW' '799';\n"); - grammarBuilder.append("KW800 : 'KW' '800';\n"); - grammarBuilder.append("KW801 : 'KW' '801';\n"); - grammarBuilder.append("KW802 : 'KW' '802';\n"); - grammarBuilder.append("KW803 : 'KW' '803';\n"); - grammarBuilder.append("KW804 : 'KW' '804';\n"); - grammarBuilder.append("KW805 : 'KW' '805';\n"); - grammarBuilder.append("KW806 : 'KW' '806';\n"); - grammarBuilder.append("KW807 : 'KW' '807';\n"); - grammarBuilder.append("KW808 : 'KW' '808';\n"); - grammarBuilder.append("KW809 : 'KW' '809';\n"); - grammarBuilder.append("KW810 : 'KW' '810';\n"); - grammarBuilder.append("KW811 : 'KW' '811';\n"); - grammarBuilder.append("KW812 : 'KW' '812';\n"); - grammarBuilder.append("KW813 : 'KW' '813';\n"); - grammarBuilder.append("KW814 : 'KW' '814';\n"); - grammarBuilder.append("KW815 : 'KW' '815';\n"); - grammarBuilder.append("KW816 : 'KW' '816';\n"); - grammarBuilder.append("KW817 : 'KW' '817';\n"); - grammarBuilder.append("KW818 : 'KW' '818';\n"); - grammarBuilder.append("KW819 : 'KW' '819';\n"); - grammarBuilder.append("KW820 : 'KW' '820';\n"); - grammarBuilder.append("KW821 : 'KW' '821';\n"); - grammarBuilder.append("KW822 : 'KW' '822';\n"); - grammarBuilder.append("KW823 : 'KW' '823';\n"); - grammarBuilder.append("KW824 : 'KW' '824';\n"); - grammarBuilder.append("KW825 : 'KW' '825';\n"); - grammarBuilder.append("KW826 : 'KW' '826';\n"); - grammarBuilder.append("KW827 : 'KW' '827';\n"); - grammarBuilder.append("KW828 : 'KW' '828';\n"); - grammarBuilder.append("KW829 : 'KW' '829';\n"); - grammarBuilder.append("KW830 : 'KW' '830';\n"); - grammarBuilder.append("KW831 : 'KW' '831';\n"); - grammarBuilder.append("KW832 : 'KW' '832';\n"); - grammarBuilder.append("KW833 : 'KW' '833';\n"); - grammarBuilder.append("KW834 : 'KW' '834';\n"); - grammarBuilder.append("KW835 : 'KW' '835';\n"); - grammarBuilder.append("KW836 : 'KW' '836';\n"); - grammarBuilder.append("KW837 : 'KW' '837';\n"); - grammarBuilder.append("KW838 : 'KW' '838';\n"); - grammarBuilder.append("KW839 : 'KW' '839';\n"); - grammarBuilder.append("KW840 : 'KW' '840';\n"); - grammarBuilder.append("KW841 : 'KW' '841';\n"); - grammarBuilder.append("KW842 : 'KW' '842';\n"); - grammarBuilder.append("KW843 : 'KW' '843';\n"); - grammarBuilder.append("KW844 : 'KW' '844';\n"); - grammarBuilder.append("KW845 : 'KW' '845';\n"); - grammarBuilder.append("KW846 : 'KW' '846';\n"); - grammarBuilder.append("KW847 : 'KW' '847';\n"); - grammarBuilder.append("KW848 : 'KW' '848';\n"); - grammarBuilder.append("KW849 : 'KW' '849';\n"); - grammarBuilder.append("KW850 : 'KW' '850';\n"); - grammarBuilder.append("KW851 : 'KW' '851';\n"); - grammarBuilder.append("KW852 : 'KW' '852';\n"); - grammarBuilder.append("KW853 : 'KW' '853';\n"); - grammarBuilder.append("KW854 : 'KW' '854';\n"); - grammarBuilder.append("KW855 : 'KW' '855';\n"); - grammarBuilder.append("KW856 : 'KW' '856';\n"); - grammarBuilder.append("KW857 : 'KW' '857';\n"); - grammarBuilder.append("KW858 : 'KW' '858';\n"); - grammarBuilder.append("KW859 : 'KW' '859';\n"); - grammarBuilder.append("KW860 : 'KW' '860';\n"); - grammarBuilder.append("KW861 : 'KW' '861';\n"); - grammarBuilder.append("KW862 : 'KW' '862';\n"); - grammarBuilder.append("KW863 : 'KW' '863';\n"); - grammarBuilder.append("KW864 : 'KW' '864';\n"); - grammarBuilder.append("KW865 : 'KW' '865';\n"); - grammarBuilder.append("KW866 : 'KW' '866';\n"); - grammarBuilder.append("KW867 : 'KW' '867';\n"); - grammarBuilder.append("KW868 : 'KW' '868';\n"); - grammarBuilder.append("KW869 : 'KW' '869';\n"); - grammarBuilder.append("KW870 : 'KW' '870';\n"); - grammarBuilder.append("KW871 : 'KW' '871';\n"); - grammarBuilder.append("KW872 : 'KW' '872';\n"); - grammarBuilder.append("KW873 : 'KW' '873';\n"); - grammarBuilder.append("KW874 : 'KW' '874';\n"); - grammarBuilder.append("KW875 : 'KW' '875';\n"); - grammarBuilder.append("KW876 : 'KW' '876';\n"); - grammarBuilder.append("KW877 : 'KW' '877';\n"); - grammarBuilder.append("KW878 : 'KW' '878';\n"); - grammarBuilder.append("KW879 : 'KW' '879';\n"); - grammarBuilder.append("KW880 : 'KW' '880';\n"); - grammarBuilder.append("KW881 : 'KW' '881';\n"); - grammarBuilder.append("KW882 : 'KW' '882';\n"); - grammarBuilder.append("KW883 : 'KW' '883';\n"); - grammarBuilder.append("KW884 : 'KW' '884';\n"); - grammarBuilder.append("KW885 : 'KW' '885';\n"); - grammarBuilder.append("KW886 : 'KW' '886';\n"); - grammarBuilder.append("KW887 : 'KW' '887';\n"); - grammarBuilder.append("KW888 : 'KW' '888';\n"); - grammarBuilder.append("KW889 : 'KW' '889';\n"); - grammarBuilder.append("KW890 : 'KW' '890';\n"); - grammarBuilder.append("KW891 : 'KW' '891';\n"); - grammarBuilder.append("KW892 : 'KW' '892';\n"); - grammarBuilder.append("KW893 : 'KW' '893';\n"); - grammarBuilder.append("KW894 : 'KW' '894';\n"); - grammarBuilder.append("KW895 : 'KW' '895';\n"); - grammarBuilder.append("KW896 : 'KW' '896';\n"); - grammarBuilder.append("KW897 : 'KW' '897';\n"); - grammarBuilder.append("KW898 : 'KW' '898';\n"); - grammarBuilder.append("KW899 : 'KW' '899';\n"); - grammarBuilder.append("KW900 : 'KW' '900';\n"); - grammarBuilder.append("KW901 : 'KW' '901';\n"); - grammarBuilder.append("KW902 : 'KW' '902';\n"); - grammarBuilder.append("KW903 : 'KW' '903';\n"); - grammarBuilder.append("KW904 : 'KW' '904';\n"); - grammarBuilder.append("KW905 : 'KW' '905';\n"); - grammarBuilder.append("KW906 : 'KW' '906';\n"); - grammarBuilder.append("KW907 : 'KW' '907';\n"); - grammarBuilder.append("KW908 : 'KW' '908';\n"); - grammarBuilder.append("KW909 : 'KW' '909';\n"); - grammarBuilder.append("KW910 : 'KW' '910';\n"); - grammarBuilder.append("KW911 : 'KW' '911';\n"); - grammarBuilder.append("KW912 : 'KW' '912';\n"); - grammarBuilder.append("KW913 : 'KW' '913';\n"); - grammarBuilder.append("KW914 : 'KW' '914';\n"); - grammarBuilder.append("KW915 : 'KW' '915';\n"); - grammarBuilder.append("KW916 : 'KW' '916';\n"); - grammarBuilder.append("KW917 : 'KW' '917';\n"); - grammarBuilder.append("KW918 : 'KW' '918';\n"); - grammarBuilder.append("KW919 : 'KW' '919';\n"); - grammarBuilder.append("KW920 : 'KW' '920';\n"); - grammarBuilder.append("KW921 : 'KW' '921';\n"); - grammarBuilder.append("KW922 : 'KW' '922';\n"); - grammarBuilder.append("KW923 : 'KW' '923';\n"); - grammarBuilder.append("KW924 : 'KW' '924';\n"); - grammarBuilder.append("KW925 : 'KW' '925';\n"); - grammarBuilder.append("KW926 : 'KW' '926';\n"); - grammarBuilder.append("KW927 : 'KW' '927';\n"); - grammarBuilder.append("KW928 : 'KW' '928';\n"); - grammarBuilder.append("KW929 : 'KW' '929';\n"); - grammarBuilder.append("KW930 : 'KW' '930';\n"); - grammarBuilder.append("KW931 : 'KW' '931';\n"); - grammarBuilder.append("KW932 : 'KW' '932';\n"); - grammarBuilder.append("KW933 : 'KW' '933';\n"); - grammarBuilder.append("KW934 : 'KW' '934';\n"); - grammarBuilder.append("KW935 : 'KW' '935';\n"); - grammarBuilder.append("KW936 : 'KW' '936';\n"); - grammarBuilder.append("KW937 : 'KW' '937';\n"); - grammarBuilder.append("KW938 : 'KW' '938';\n"); - grammarBuilder.append("KW939 : 'KW' '939';\n"); - grammarBuilder.append("KW940 : 'KW' '940';\n"); - grammarBuilder.append("KW941 : 'KW' '941';\n"); - grammarBuilder.append("KW942 : 'KW' '942';\n"); - grammarBuilder.append("KW943 : 'KW' '943';\n"); - grammarBuilder.append("KW944 : 'KW' '944';\n"); - grammarBuilder.append("KW945 : 'KW' '945';\n"); - grammarBuilder.append("KW946 : 'KW' '946';\n"); - grammarBuilder.append("KW947 : 'KW' '947';\n"); - grammarBuilder.append("KW948 : 'KW' '948';\n"); - grammarBuilder.append("KW949 : 'KW' '949';\n"); - grammarBuilder.append("KW950 : 'KW' '950';\n"); - grammarBuilder.append("KW951 : 'KW' '951';\n"); - grammarBuilder.append("KW952 : 'KW' '952';\n"); - grammarBuilder.append("KW953 : 'KW' '953';\n"); - grammarBuilder.append("KW954 : 'KW' '954';\n"); - grammarBuilder.append("KW955 : 'KW' '955';\n"); - grammarBuilder.append("KW956 : 'KW' '956';\n"); - grammarBuilder.append("KW957 : 'KW' '957';\n"); - grammarBuilder.append("KW958 : 'KW' '958';\n"); - grammarBuilder.append("KW959 : 'KW' '959';\n"); - grammarBuilder.append("KW960 : 'KW' '960';\n"); - grammarBuilder.append("KW961 : 'KW' '961';\n"); - grammarBuilder.append("KW962 : 'KW' '962';\n"); - grammarBuilder.append("KW963 : 'KW' '963';\n"); - grammarBuilder.append("KW964 : 'KW' '964';\n"); - grammarBuilder.append("KW965 : 'KW' '965';\n"); - grammarBuilder.append("KW966 : 'KW' '966';\n"); - grammarBuilder.append("KW967 : 'KW' '967';\n"); - grammarBuilder.append("KW968 : 'KW' '968';\n"); - grammarBuilder.append("KW969 : 'KW' '969';\n"); - grammarBuilder.append("KW970 : 'KW' '970';\n"); - grammarBuilder.append("KW971 : 'KW' '971';\n"); - grammarBuilder.append("KW972 : 'KW' '972';\n"); - grammarBuilder.append("KW973 : 'KW' '973';\n"); - grammarBuilder.append("KW974 : 'KW' '974';\n"); - grammarBuilder.append("KW975 : 'KW' '975';\n"); - grammarBuilder.append("KW976 : 'KW' '976';\n"); - grammarBuilder.append("KW977 : 'KW' '977';\n"); - grammarBuilder.append("KW978 : 'KW' '978';\n"); - grammarBuilder.append("KW979 : 'KW' '979';\n"); - grammarBuilder.append("KW980 : 'KW' '980';\n"); - grammarBuilder.append("KW981 : 'KW' '981';\n"); - grammarBuilder.append("KW982 : 'KW' '982';\n"); - grammarBuilder.append("KW983 : 'KW' '983';\n"); - grammarBuilder.append("KW984 : 'KW' '984';\n"); - grammarBuilder.append("KW985 : 'KW' '985';\n"); - grammarBuilder.append("KW986 : 'KW' '986';\n"); - grammarBuilder.append("KW987 : 'KW' '987';\n"); - grammarBuilder.append("KW988 : 'KW' '988';\n"); - grammarBuilder.append("KW989 : 'KW' '989';\n"); - grammarBuilder.append("KW990 : 'KW' '990';\n"); - grammarBuilder.append("KW991 : 'KW' '991';\n"); - grammarBuilder.append("KW992 : 'KW' '992';\n"); - grammarBuilder.append("KW993 : 'KW' '993';\n"); - grammarBuilder.append("KW994 : 'KW' '994';\n"); - grammarBuilder.append("KW995 : 'KW' '995';\n"); - grammarBuilder.append("KW996 : 'KW' '996';\n"); - grammarBuilder.append("KW997 : 'KW' '997';\n"); - grammarBuilder.append("KW998 : 'KW' '998';\n"); - grammarBuilder.append("KW999 : 'KW' '999';\n"); - grammarBuilder.append("KW1000 : 'KW' '1000';\n"); - grammarBuilder.append("KW1001 : 'KW' '1001';\n"); - grammarBuilder.append("KW1002 : 'KW' '1002';\n"); - grammarBuilder.append("KW1003 : 'KW' '1003';\n"); - grammarBuilder.append("KW1004 : 'KW' '1004';\n"); - grammarBuilder.append("KW1005 : 'KW' '1005';\n"); - grammarBuilder.append("KW1006 : 'KW' '1006';\n"); - grammarBuilder.append("KW1007 : 'KW' '1007';\n"); - grammarBuilder.append("KW1008 : 'KW' '1008';\n"); - grammarBuilder.append("KW1009 : 'KW' '1009';\n"); - grammarBuilder.append("KW1010 : 'KW' '1010';\n"); - grammarBuilder.append("KW1011 : 'KW' '1011';\n"); - grammarBuilder.append("KW1012 : 'KW' '1012';\n"); - grammarBuilder.append("KW1013 : 'KW' '1013';\n"); - grammarBuilder.append("KW1014 : 'KW' '1014';\n"); - grammarBuilder.append("KW1015 : 'KW' '1015';\n"); - grammarBuilder.append("KW1016 : 'KW' '1016';\n"); - grammarBuilder.append("KW1017 : 'KW' '1017';\n"); - grammarBuilder.append("KW1018 : 'KW' '1018';\n"); - grammarBuilder.append("KW1019 : 'KW' '1019';\n"); - grammarBuilder.append("KW1020 : 'KW' '1020';\n"); - grammarBuilder.append("KW1021 : 'KW' '1021';\n"); - grammarBuilder.append("KW1022 : 'KW' '1022';\n"); - grammarBuilder.append("KW1023 : 'KW' '1023';\n"); - grammarBuilder.append("KW1024 : 'KW' '1024';\n"); - grammarBuilder.append("KW1025 : 'KW' '1025';\n"); - grammarBuilder.append("KW1026 : 'KW' '1026';\n"); - grammarBuilder.append("KW1027 : 'KW' '1027';\n"); - grammarBuilder.append("KW1028 : 'KW' '1028';\n"); - grammarBuilder.append("KW1029 : 'KW' '1029';\n"); - grammarBuilder.append("KW1030 : 'KW' '1030';\n"); - grammarBuilder.append("KW1031 : 'KW' '1031';\n"); - grammarBuilder.append("KW1032 : 'KW' '1032';\n"); - grammarBuilder.append("KW1033 : 'KW' '1033';\n"); - grammarBuilder.append("KW1034 : 'KW' '1034';\n"); - grammarBuilder.append("KW1035 : 'KW' '1035';\n"); - grammarBuilder.append("KW1036 : 'KW' '1036';\n"); - grammarBuilder.append("KW1037 : 'KW' '1037';\n"); - grammarBuilder.append("KW1038 : 'KW' '1038';\n"); - grammarBuilder.append("KW1039 : 'KW' '1039';\n"); - grammarBuilder.append("KW1040 : 'KW' '1040';\n"); - grammarBuilder.append("KW1041 : 'KW' '1041';\n"); - grammarBuilder.append("KW1042 : 'KW' '1042';\n"); - grammarBuilder.append("KW1043 : 'KW' '1043';\n"); - grammarBuilder.append("KW1044 : 'KW' '1044';\n"); - grammarBuilder.append("KW1045 : 'KW' '1045';\n"); - grammarBuilder.append("KW1046 : 'KW' '1046';\n"); - grammarBuilder.append("KW1047 : 'KW' '1047';\n"); - grammarBuilder.append("KW1048 : 'KW' '1048';\n"); - grammarBuilder.append("KW1049 : 'KW' '1049';\n"); - grammarBuilder.append("KW1050 : 'KW' '1050';\n"); - grammarBuilder.append("KW1051 : 'KW' '1051';\n"); - grammarBuilder.append("KW1052 : 'KW' '1052';\n"); - grammarBuilder.append("KW1053 : 'KW' '1053';\n"); - grammarBuilder.append("KW1054 : 'KW' '1054';\n"); - grammarBuilder.append("KW1055 : 'KW' '1055';\n"); - grammarBuilder.append("KW1056 : 'KW' '1056';\n"); - grammarBuilder.append("KW1057 : 'KW' '1057';\n"); - grammarBuilder.append("KW1058 : 'KW' '1058';\n"); - grammarBuilder.append("KW1059 : 'KW' '1059';\n"); - grammarBuilder.append("KW1060 : 'KW' '1060';\n"); - grammarBuilder.append("KW1061 : 'KW' '1061';\n"); - grammarBuilder.append("KW1062 : 'KW' '1062';\n"); - grammarBuilder.append("KW1063 : 'KW' '1063';\n"); - grammarBuilder.append("KW1064 : 'KW' '1064';\n"); - grammarBuilder.append("KW1065 : 'KW' '1065';\n"); - grammarBuilder.append("KW1066 : 'KW' '1066';\n"); - grammarBuilder.append("KW1067 : 'KW' '1067';\n"); - grammarBuilder.append("KW1068 : 'KW' '1068';\n"); - grammarBuilder.append("KW1069 : 'KW' '1069';\n"); - grammarBuilder.append("KW1070 : 'KW' '1070';\n"); - grammarBuilder.append("KW1071 : 'KW' '1071';\n"); - grammarBuilder.append("KW1072 : 'KW' '1072';\n"); - grammarBuilder.append("KW1073 : 'KW' '1073';\n"); - grammarBuilder.append("KW1074 : 'KW' '1074';\n"); - grammarBuilder.append("KW1075 : 'KW' '1075';\n"); - grammarBuilder.append("KW1076 : 'KW' '1076';\n"); - grammarBuilder.append("KW1077 : 'KW' '1077';\n"); - grammarBuilder.append("KW1078 : 'KW' '1078';\n"); - grammarBuilder.append("KW1079 : 'KW' '1079';\n"); - grammarBuilder.append("KW1080 : 'KW' '1080';\n"); - grammarBuilder.append("KW1081 : 'KW' '1081';\n"); - grammarBuilder.append("KW1082 : 'KW' '1082';\n"); - grammarBuilder.append("KW1083 : 'KW' '1083';\n"); - grammarBuilder.append("KW1084 : 'KW' '1084';\n"); - grammarBuilder.append("KW1085 : 'KW' '1085';\n"); - grammarBuilder.append("KW1086 : 'KW' '1086';\n"); - grammarBuilder.append("KW1087 : 'KW' '1087';\n"); - grammarBuilder.append("KW1088 : 'KW' '1088';\n"); - grammarBuilder.append("KW1089 : 'KW' '1089';\n"); - grammarBuilder.append("KW1090 : 'KW' '1090';\n"); - grammarBuilder.append("KW1091 : 'KW' '1091';\n"); - grammarBuilder.append("KW1092 : 'KW' '1092';\n"); - grammarBuilder.append("KW1093 : 'KW' '1093';\n"); - grammarBuilder.append("KW1094 : 'KW' '1094';\n"); - grammarBuilder.append("KW1095 : 'KW' '1095';\n"); - grammarBuilder.append("KW1096 : 'KW' '1096';\n"); - grammarBuilder.append("KW1097 : 'KW' '1097';\n"); - grammarBuilder.append("KW1098 : 'KW' '1098';\n"); - grammarBuilder.append("KW1099 : 'KW' '1099';\n"); - grammarBuilder.append("KW1100 : 'KW' '1100';\n"); - grammarBuilder.append("KW1101 : 'KW' '1101';\n"); - grammarBuilder.append("KW1102 : 'KW' '1102';\n"); - grammarBuilder.append("KW1103 : 'KW' '1103';\n"); - grammarBuilder.append("KW1104 : 'KW' '1104';\n"); - grammarBuilder.append("KW1105 : 'KW' '1105';\n"); - grammarBuilder.append("KW1106 : 'KW' '1106';\n"); - grammarBuilder.append("KW1107 : 'KW' '1107';\n"); - grammarBuilder.append("KW1108 : 'KW' '1108';\n"); - grammarBuilder.append("KW1109 : 'KW' '1109';\n"); - grammarBuilder.append("KW1110 : 'KW' '1110';\n"); - grammarBuilder.append("KW1111 : 'KW' '1111';\n"); - grammarBuilder.append("KW1112 : 'KW' '1112';\n"); - grammarBuilder.append("KW1113 : 'KW' '1113';\n"); - grammarBuilder.append("KW1114 : 'KW' '1114';\n"); - grammarBuilder.append("KW1115 : 'KW' '1115';\n"); - grammarBuilder.append("KW1116 : 'KW' '1116';\n"); - grammarBuilder.append("KW1117 : 'KW' '1117';\n"); - grammarBuilder.append("KW1118 : 'KW' '1118';\n"); - grammarBuilder.append("KW1119 : 'KW' '1119';\n"); - grammarBuilder.append("KW1120 : 'KW' '1120';\n"); - grammarBuilder.append("KW1121 : 'KW' '1121';\n"); - grammarBuilder.append("KW1122 : 'KW' '1122';\n"); - grammarBuilder.append("KW1123 : 'KW' '1123';\n"); - grammarBuilder.append("KW1124 : 'KW' '1124';\n"); - grammarBuilder.append("KW1125 : 'KW' '1125';\n"); - grammarBuilder.append("KW1126 : 'KW' '1126';\n"); - grammarBuilder.append("KW1127 : 'KW' '1127';\n"); - grammarBuilder.append("KW1128 : 'KW' '1128';\n"); - grammarBuilder.append("KW1129 : 'KW' '1129';\n"); - grammarBuilder.append("KW1130 : 'KW' '1130';\n"); - grammarBuilder.append("KW1131 : 'KW' '1131';\n"); - grammarBuilder.append("KW1132 : 'KW' '1132';\n"); - grammarBuilder.append("KW1133 : 'KW' '1133';\n"); - grammarBuilder.append("KW1134 : 'KW' '1134';\n"); - grammarBuilder.append("KW1135 : 'KW' '1135';\n"); - grammarBuilder.append("KW1136 : 'KW' '1136';\n"); - grammarBuilder.append("KW1137 : 'KW' '1137';\n"); - grammarBuilder.append("KW1138 : 'KW' '1138';\n"); - grammarBuilder.append("KW1139 : 'KW' '1139';\n"); - grammarBuilder.append("KW1140 : 'KW' '1140';\n"); - grammarBuilder.append("KW1141 : 'KW' '1141';\n"); - grammarBuilder.append("KW1142 : 'KW' '1142';\n"); - grammarBuilder.append("KW1143 : 'KW' '1143';\n"); - grammarBuilder.append("KW1144 : 'KW' '1144';\n"); - grammarBuilder.append("KW1145 : 'KW' '1145';\n"); - grammarBuilder.append("KW1146 : 'KW' '1146';\n"); - grammarBuilder.append("KW1147 : 'KW' '1147';\n"); - grammarBuilder.append("KW1148 : 'KW' '1148';\n"); - grammarBuilder.append("KW1149 : 'KW' '1149';\n"); - grammarBuilder.append("KW1150 : 'KW' '1150';\n"); - grammarBuilder.append("KW1151 : 'KW' '1151';\n"); - grammarBuilder.append("KW1152 : 'KW' '1152';\n"); - grammarBuilder.append("KW1153 : 'KW' '1153';\n"); - grammarBuilder.append("KW1154 : 'KW' '1154';\n"); - grammarBuilder.append("KW1155 : 'KW' '1155';\n"); - grammarBuilder.append("KW1156 : 'KW' '1156';\n"); - grammarBuilder.append("KW1157 : 'KW' '1157';\n"); - grammarBuilder.append("KW1158 : 'KW' '1158';\n"); - grammarBuilder.append("KW1159 : 'KW' '1159';\n"); - grammarBuilder.append("KW1160 : 'KW' '1160';\n"); - grammarBuilder.append("KW1161 : 'KW' '1161';\n"); - grammarBuilder.append("KW1162 : 'KW' '1162';\n"); - grammarBuilder.append("KW1163 : 'KW' '1163';\n"); - grammarBuilder.append("KW1164 : 'KW' '1164';\n"); - grammarBuilder.append("KW1165 : 'KW' '1165';\n"); - grammarBuilder.append("KW1166 : 'KW' '1166';\n"); - grammarBuilder.append("KW1167 : 'KW' '1167';\n"); - grammarBuilder.append("KW1168 : 'KW' '1168';\n"); - grammarBuilder.append("KW1169 : 'KW' '1169';\n"); - grammarBuilder.append("KW1170 : 'KW' '1170';\n"); - grammarBuilder.append("KW1171 : 'KW' '1171';\n"); - grammarBuilder.append("KW1172 : 'KW' '1172';\n"); - grammarBuilder.append("KW1173 : 'KW' '1173';\n"); - grammarBuilder.append("KW1174 : 'KW' '1174';\n"); - grammarBuilder.append("KW1175 : 'KW' '1175';\n"); - grammarBuilder.append("KW1176 : 'KW' '1176';\n"); - grammarBuilder.append("KW1177 : 'KW' '1177';\n"); - grammarBuilder.append("KW1178 : 'KW' '1178';\n"); - grammarBuilder.append("KW1179 : 'KW' '1179';\n"); - grammarBuilder.append("KW1180 : 'KW' '1180';\n"); - grammarBuilder.append("KW1181 : 'KW' '1181';\n"); - grammarBuilder.append("KW1182 : 'KW' '1182';\n"); - grammarBuilder.append("KW1183 : 'KW' '1183';\n"); - grammarBuilder.append("KW1184 : 'KW' '1184';\n"); - grammarBuilder.append("KW1185 : 'KW' '1185';\n"); - grammarBuilder.append("KW1186 : 'KW' '1186';\n"); - grammarBuilder.append("KW1187 : 'KW' '1187';\n"); - grammarBuilder.append("KW1188 : 'KW' '1188';\n"); - grammarBuilder.append("KW1189 : 'KW' '1189';\n"); - grammarBuilder.append("KW1190 : 'KW' '1190';\n"); - grammarBuilder.append("KW1191 : 'KW' '1191';\n"); - grammarBuilder.append("KW1192 : 'KW' '1192';\n"); - grammarBuilder.append("KW1193 : 'KW' '1193';\n"); - grammarBuilder.append("KW1194 : 'KW' '1194';\n"); - grammarBuilder.append("KW1195 : 'KW' '1195';\n"); - grammarBuilder.append("KW1196 : 'KW' '1196';\n"); - grammarBuilder.append("KW1197 : 'KW' '1197';\n"); - grammarBuilder.append("KW1198 : 'KW' '1198';\n"); - grammarBuilder.append("KW1199 : 'KW' '1199';\n"); - grammarBuilder.append("KW1200 : 'KW' '1200';\n"); - grammarBuilder.append("KW1201 : 'KW' '1201';\n"); - grammarBuilder.append("KW1202 : 'KW' '1202';\n"); - grammarBuilder.append("KW1203 : 'KW' '1203';\n"); - grammarBuilder.append("KW1204 : 'KW' '1204';\n"); - grammarBuilder.append("KW1205 : 'KW' '1205';\n"); - grammarBuilder.append("KW1206 : 'KW' '1206';\n"); - grammarBuilder.append("KW1207 : 'KW' '1207';\n"); - grammarBuilder.append("KW1208 : 'KW' '1208';\n"); - grammarBuilder.append("KW1209 : 'KW' '1209';\n"); - grammarBuilder.append("KW1210 : 'KW' '1210';\n"); - grammarBuilder.append("KW1211 : 'KW' '1211';\n"); - grammarBuilder.append("KW1212 : 'KW' '1212';\n"); - grammarBuilder.append("KW1213 : 'KW' '1213';\n"); - grammarBuilder.append("KW1214 : 'KW' '1214';\n"); - grammarBuilder.append("KW1215 : 'KW' '1215';\n"); - grammarBuilder.append("KW1216 : 'KW' '1216';\n"); - grammarBuilder.append("KW1217 : 'KW' '1217';\n"); - grammarBuilder.append("KW1218 : 'KW' '1218';\n"); - grammarBuilder.append("KW1219 : 'KW' '1219';\n"); - grammarBuilder.append("KW1220 : 'KW' '1220';\n"); - grammarBuilder.append("KW1221 : 'KW' '1221';\n"); - grammarBuilder.append("KW1222 : 'KW' '1222';\n"); - grammarBuilder.append("KW1223 : 'KW' '1223';\n"); - grammarBuilder.append("KW1224 : 'KW' '1224';\n"); - grammarBuilder.append("KW1225 : 'KW' '1225';\n"); - grammarBuilder.append("KW1226 : 'KW' '1226';\n"); - grammarBuilder.append("KW1227 : 'KW' '1227';\n"); - grammarBuilder.append("KW1228 : 'KW' '1228';\n"); - grammarBuilder.append("KW1229 : 'KW' '1229';\n"); - grammarBuilder.append("KW1230 : 'KW' '1230';\n"); - grammarBuilder.append("KW1231 : 'KW' '1231';\n"); - grammarBuilder.append("KW1232 : 'KW' '1232';\n"); - grammarBuilder.append("KW1233 : 'KW' '1233';\n"); - grammarBuilder.append("KW1234 : 'KW' '1234';\n"); - grammarBuilder.append("KW1235 : 'KW' '1235';\n"); - grammarBuilder.append("KW1236 : 'KW' '1236';\n"); - grammarBuilder.append("KW1237 : 'KW' '1237';\n"); - grammarBuilder.append("KW1238 : 'KW' '1238';\n"); - grammarBuilder.append("KW1239 : 'KW' '1239';\n"); - grammarBuilder.append("KW1240 : 'KW' '1240';\n"); - grammarBuilder.append("KW1241 : 'KW' '1241';\n"); - grammarBuilder.append("KW1242 : 'KW' '1242';\n"); - grammarBuilder.append("KW1243 : 'KW' '1243';\n"); - grammarBuilder.append("KW1244 : 'KW' '1244';\n"); - grammarBuilder.append("KW1245 : 'KW' '1245';\n"); - grammarBuilder.append("KW1246 : 'KW' '1246';\n"); - grammarBuilder.append("KW1247 : 'KW' '1247';\n"); - grammarBuilder.append("KW1248 : 'KW' '1248';\n"); - grammarBuilder.append("KW1249 : 'KW' '1249';\n"); - grammarBuilder.append("KW1250 : 'KW' '1250';\n"); - grammarBuilder.append("KW1251 : 'KW' '1251';\n"); - grammarBuilder.append("KW1252 : 'KW' '1252';\n"); - grammarBuilder.append("KW1253 : 'KW' '1253';\n"); - grammarBuilder.append("KW1254 : 'KW' '1254';\n"); - grammarBuilder.append("KW1255 : 'KW' '1255';\n"); - grammarBuilder.append("KW1256 : 'KW' '1256';\n"); - grammarBuilder.append("KW1257 : 'KW' '1257';\n"); - grammarBuilder.append("KW1258 : 'KW' '1258';\n"); - grammarBuilder.append("KW1259 : 'KW' '1259';\n"); - grammarBuilder.append("KW1260 : 'KW' '1260';\n"); - grammarBuilder.append("KW1261 : 'KW' '1261';\n"); - grammarBuilder.append("KW1262 : 'KW' '1262';\n"); - grammarBuilder.append("KW1263 : 'KW' '1263';\n"); - grammarBuilder.append("KW1264 : 'KW' '1264';\n"); - grammarBuilder.append("KW1265 : 'KW' '1265';\n"); - grammarBuilder.append("KW1266 : 'KW' '1266';\n"); - grammarBuilder.append("KW1267 : 'KW' '1267';\n"); - grammarBuilder.append("KW1268 : 'KW' '1268';\n"); - grammarBuilder.append("KW1269 : 'KW' '1269';\n"); - grammarBuilder.append("KW1270 : 'KW' '1270';\n"); - grammarBuilder.append("KW1271 : 'KW' '1271';\n"); - grammarBuilder.append("KW1272 : 'KW' '1272';\n"); - grammarBuilder.append("KW1273 : 'KW' '1273';\n"); - grammarBuilder.append("KW1274 : 'KW' '1274';\n"); - grammarBuilder.append("KW1275 : 'KW' '1275';\n"); - grammarBuilder.append("KW1276 : 'KW' '1276';\n"); - grammarBuilder.append("KW1277 : 'KW' '1277';\n"); - grammarBuilder.append("KW1278 : 'KW' '1278';\n"); - grammarBuilder.append("KW1279 : 'KW' '1279';\n"); - grammarBuilder.append("KW1280 : 'KW' '1280';\n"); - grammarBuilder.append("KW1281 : 'KW' '1281';\n"); - grammarBuilder.append("KW1282 : 'KW' '1282';\n"); - grammarBuilder.append("KW1283 : 'KW' '1283';\n"); - grammarBuilder.append("KW1284 : 'KW' '1284';\n"); - grammarBuilder.append("KW1285 : 'KW' '1285';\n"); - grammarBuilder.append("KW1286 : 'KW' '1286';\n"); - grammarBuilder.append("KW1287 : 'KW' '1287';\n"); - grammarBuilder.append("KW1288 : 'KW' '1288';\n"); - grammarBuilder.append("KW1289 : 'KW' '1289';\n"); - grammarBuilder.append("KW1290 : 'KW' '1290';\n"); - grammarBuilder.append("KW1291 : 'KW' '1291';\n"); - grammarBuilder.append("KW1292 : 'KW' '1292';\n"); - grammarBuilder.append("KW1293 : 'KW' '1293';\n"); - grammarBuilder.append("KW1294 : 'KW' '1294';\n"); - grammarBuilder.append("KW1295 : 'KW' '1295';\n"); - grammarBuilder.append("KW1296 : 'KW' '1296';\n"); - grammarBuilder.append("KW1297 : 'KW' '1297';\n"); - grammarBuilder.append("KW1298 : 'KW' '1298';\n"); - grammarBuilder.append("KW1299 : 'KW' '1299';\n"); - grammarBuilder.append("KW1300 : 'KW' '1300';\n"); - grammarBuilder.append("KW1301 : 'KW' '1301';\n"); - grammarBuilder.append("KW1302 : 'KW' '1302';\n"); - grammarBuilder.append("KW1303 : 'KW' '1303';\n"); - grammarBuilder.append("KW1304 : 'KW' '1304';\n"); - grammarBuilder.append("KW1305 : 'KW' '1305';\n"); - grammarBuilder.append("KW1306 : 'KW' '1306';\n"); - grammarBuilder.append("KW1307 : 'KW' '1307';\n"); - grammarBuilder.append("KW1308 : 'KW' '1308';\n"); - grammarBuilder.append("KW1309 : 'KW' '1309';\n"); - grammarBuilder.append("KW1310 : 'KW' '1310';\n"); - grammarBuilder.append("KW1311 : 'KW' '1311';\n"); - grammarBuilder.append("KW1312 : 'KW' '1312';\n"); - grammarBuilder.append("KW1313 : 'KW' '1313';\n"); - grammarBuilder.append("KW1314 : 'KW' '1314';\n"); - grammarBuilder.append("KW1315 : 'KW' '1315';\n"); - grammarBuilder.append("KW1316 : 'KW' '1316';\n"); - grammarBuilder.append("KW1317 : 'KW' '1317';\n"); - grammarBuilder.append("KW1318 : 'KW' '1318';\n"); - grammarBuilder.append("KW1319 : 'KW' '1319';\n"); - grammarBuilder.append("KW1320 : 'KW' '1320';\n"); - grammarBuilder.append("KW1321 : 'KW' '1321';\n"); - grammarBuilder.append("KW1322 : 'KW' '1322';\n"); - grammarBuilder.append("KW1323 : 'KW' '1323';\n"); - grammarBuilder.append("KW1324 : 'KW' '1324';\n"); - grammarBuilder.append("KW1325 : 'KW' '1325';\n"); - grammarBuilder.append("KW1326 : 'KW' '1326';\n"); - grammarBuilder.append("KW1327 : 'KW' '1327';\n"); - grammarBuilder.append("KW1328 : 'KW' '1328';\n"); - grammarBuilder.append("KW1329 : 'KW' '1329';\n"); - grammarBuilder.append("KW1330 : 'KW' '1330';\n"); - grammarBuilder.append("KW1331 : 'KW' '1331';\n"); - grammarBuilder.append("KW1332 : 'KW' '1332';\n"); - grammarBuilder.append("KW1333 : 'KW' '1333';\n"); - grammarBuilder.append("KW1334 : 'KW' '1334';\n"); - grammarBuilder.append("KW1335 : 'KW' '1335';\n"); - grammarBuilder.append("KW1336 : 'KW' '1336';\n"); - grammarBuilder.append("KW1337 : 'KW' '1337';\n"); - grammarBuilder.append("KW1338 : 'KW' '1338';\n"); - grammarBuilder.append("KW1339 : 'KW' '1339';\n"); - grammarBuilder.append("KW1340 : 'KW' '1340';\n"); - grammarBuilder.append("KW1341 : 'KW' '1341';\n"); - grammarBuilder.append("KW1342 : 'KW' '1342';\n"); - grammarBuilder.append("KW1343 : 'KW' '1343';\n"); - grammarBuilder.append("KW1344 : 'KW' '1344';\n"); - grammarBuilder.append("KW1345 : 'KW' '1345';\n"); - grammarBuilder.append("KW1346 : 'KW' '1346';\n"); - grammarBuilder.append("KW1347 : 'KW' '1347';\n"); - grammarBuilder.append("KW1348 : 'KW' '1348';\n"); - grammarBuilder.append("KW1349 : 'KW' '1349';\n"); - grammarBuilder.append("KW1350 : 'KW' '1350';\n"); - grammarBuilder.append("KW1351 : 'KW' '1351';\n"); - grammarBuilder.append("KW1352 : 'KW' '1352';\n"); - grammarBuilder.append("KW1353 : 'KW' '1353';\n"); - grammarBuilder.append("KW1354 : 'KW' '1354';\n"); - grammarBuilder.append("KW1355 : 'KW' '1355';\n"); - grammarBuilder.append("KW1356 : 'KW' '1356';\n"); - grammarBuilder.append("KW1357 : 'KW' '1357';\n"); - grammarBuilder.append("KW1358 : 'KW' '1358';\n"); - grammarBuilder.append("KW1359 : 'KW' '1359';\n"); - grammarBuilder.append("KW1360 : 'KW' '1360';\n"); - grammarBuilder.append("KW1361 : 'KW' '1361';\n"); - grammarBuilder.append("KW1362 : 'KW' '1362';\n"); - grammarBuilder.append("KW1363 : 'KW' '1363';\n"); - grammarBuilder.append("KW1364 : 'KW' '1364';\n"); - grammarBuilder.append("KW1365 : 'KW' '1365';\n"); - grammarBuilder.append("KW1366 : 'KW' '1366';\n"); - grammarBuilder.append("KW1367 : 'KW' '1367';\n"); - grammarBuilder.append("KW1368 : 'KW' '1368';\n"); - grammarBuilder.append("KW1369 : 'KW' '1369';\n"); - grammarBuilder.append("KW1370 : 'KW' '1370';\n"); - grammarBuilder.append("KW1371 : 'KW' '1371';\n"); - grammarBuilder.append("KW1372 : 'KW' '1372';\n"); - grammarBuilder.append("KW1373 : 'KW' '1373';\n"); - grammarBuilder.append("KW1374 : 'KW' '1374';\n"); - grammarBuilder.append("KW1375 : 'KW' '1375';\n"); - grammarBuilder.append("KW1376 : 'KW' '1376';\n"); - grammarBuilder.append("KW1377 : 'KW' '1377';\n"); - grammarBuilder.append("KW1378 : 'KW' '1378';\n"); - grammarBuilder.append("KW1379 : 'KW' '1379';\n"); - grammarBuilder.append("KW1380 : 'KW' '1380';\n"); - grammarBuilder.append("KW1381 : 'KW' '1381';\n"); - grammarBuilder.append("KW1382 : 'KW' '1382';\n"); - grammarBuilder.append("KW1383 : 'KW' '1383';\n"); - grammarBuilder.append("KW1384 : 'KW' '1384';\n"); - grammarBuilder.append("KW1385 : 'KW' '1385';\n"); - grammarBuilder.append("KW1386 : 'KW' '1386';\n"); - grammarBuilder.append("KW1387 : 'KW' '1387';\n"); - grammarBuilder.append("KW1388 : 'KW' '1388';\n"); - grammarBuilder.append("KW1389 : 'KW' '1389';\n"); - grammarBuilder.append("KW1390 : 'KW' '1390';\n"); - grammarBuilder.append("KW1391 : 'KW' '1391';\n"); - grammarBuilder.append("KW1392 : 'KW' '1392';\n"); - grammarBuilder.append("KW1393 : 'KW' '1393';\n"); - grammarBuilder.append("KW1394 : 'KW' '1394';\n"); - grammarBuilder.append("KW1395 : 'KW' '1395';\n"); - grammarBuilder.append("KW1396 : 'KW' '1396';\n"); - grammarBuilder.append("KW1397 : 'KW' '1397';\n"); - grammarBuilder.append("KW1398 : 'KW' '1398';\n"); - grammarBuilder.append("KW1399 : 'KW' '1399';\n"); - grammarBuilder.append("KW1400 : 'KW' '1400';\n"); - grammarBuilder.append("KW1401 : 'KW' '1401';\n"); - grammarBuilder.append("KW1402 : 'KW' '1402';\n"); - grammarBuilder.append("KW1403 : 'KW' '1403';\n"); - grammarBuilder.append("KW1404 : 'KW' '1404';\n"); - grammarBuilder.append("KW1405 : 'KW' '1405';\n"); - grammarBuilder.append("KW1406 : 'KW' '1406';\n"); - grammarBuilder.append("KW1407 : 'KW' '1407';\n"); - grammarBuilder.append("KW1408 : 'KW' '1408';\n"); - grammarBuilder.append("KW1409 : 'KW' '1409';\n"); - grammarBuilder.append("KW1410 : 'KW' '1410';\n"); - grammarBuilder.append("KW1411 : 'KW' '1411';\n"); - grammarBuilder.append("KW1412 : 'KW' '1412';\n"); - grammarBuilder.append("KW1413 : 'KW' '1413';\n"); - grammarBuilder.append("KW1414 : 'KW' '1414';\n"); - grammarBuilder.append("KW1415 : 'KW' '1415';\n"); - grammarBuilder.append("KW1416 : 'KW' '1416';\n"); - grammarBuilder.append("KW1417 : 'KW' '1417';\n"); - grammarBuilder.append("KW1418 : 'KW' '1418';\n"); - grammarBuilder.append("KW1419 : 'KW' '1419';\n"); - grammarBuilder.append("KW1420 : 'KW' '1420';\n"); - grammarBuilder.append("KW1421 : 'KW' '1421';\n"); - grammarBuilder.append("KW1422 : 'KW' '1422';\n"); - grammarBuilder.append("KW1423 : 'KW' '1423';\n"); - grammarBuilder.append("KW1424 : 'KW' '1424';\n"); - grammarBuilder.append("KW1425 : 'KW' '1425';\n"); - grammarBuilder.append("KW1426 : 'KW' '1426';\n"); - grammarBuilder.append("KW1427 : 'KW' '1427';\n"); - grammarBuilder.append("KW1428 : 'KW' '1428';\n"); - grammarBuilder.append("KW1429 : 'KW' '1429';\n"); - grammarBuilder.append("KW1430 : 'KW' '1430';\n"); - grammarBuilder.append("KW1431 : 'KW' '1431';\n"); - grammarBuilder.append("KW1432 : 'KW' '1432';\n"); - grammarBuilder.append("KW1433 : 'KW' '1433';\n"); - grammarBuilder.append("KW1434 : 'KW' '1434';\n"); - grammarBuilder.append("KW1435 : 'KW' '1435';\n"); - grammarBuilder.append("KW1436 : 'KW' '1436';\n"); - grammarBuilder.append("KW1437 : 'KW' '1437';\n"); - grammarBuilder.append("KW1438 : 'KW' '1438';\n"); - grammarBuilder.append("KW1439 : 'KW' '1439';\n"); - grammarBuilder.append("KW1440 : 'KW' '1440';\n"); - grammarBuilder.append("KW1441 : 'KW' '1441';\n"); - grammarBuilder.append("KW1442 : 'KW' '1442';\n"); - grammarBuilder.append("KW1443 : 'KW' '1443';\n"); - grammarBuilder.append("KW1444 : 'KW' '1444';\n"); - grammarBuilder.append("KW1445 : 'KW' '1445';\n"); - grammarBuilder.append("KW1446 : 'KW' '1446';\n"); - grammarBuilder.append("KW1447 : 'KW' '1447';\n"); - grammarBuilder.append("KW1448 : 'KW' '1448';\n"); - grammarBuilder.append("KW1449 : 'KW' '1449';\n"); - grammarBuilder.append("KW1450 : 'KW' '1450';\n"); - grammarBuilder.append("KW1451 : 'KW' '1451';\n"); - grammarBuilder.append("KW1452 : 'KW' '1452';\n"); - grammarBuilder.append("KW1453 : 'KW' '1453';\n"); - grammarBuilder.append("KW1454 : 'KW' '1454';\n"); - grammarBuilder.append("KW1455 : 'KW' '1455';\n"); - grammarBuilder.append("KW1456 : 'KW' '1456';\n"); - grammarBuilder.append("KW1457 : 'KW' '1457';\n"); - grammarBuilder.append("KW1458 : 'KW' '1458';\n"); - grammarBuilder.append("KW1459 : 'KW' '1459';\n"); - grammarBuilder.append("KW1460 : 'KW' '1460';\n"); - grammarBuilder.append("KW1461 : 'KW' '1461';\n"); - grammarBuilder.append("KW1462 : 'KW' '1462';\n"); - grammarBuilder.append("KW1463 : 'KW' '1463';\n"); - grammarBuilder.append("KW1464 : 'KW' '1464';\n"); - grammarBuilder.append("KW1465 : 'KW' '1465';\n"); - grammarBuilder.append("KW1466 : 'KW' '1466';\n"); - grammarBuilder.append("KW1467 : 'KW' '1467';\n"); - grammarBuilder.append("KW1468 : 'KW' '1468';\n"); - grammarBuilder.append("KW1469 : 'KW' '1469';\n"); - grammarBuilder.append("KW1470 : 'KW' '1470';\n"); - grammarBuilder.append("KW1471 : 'KW' '1471';\n"); - grammarBuilder.append("KW1472 : 'KW' '1472';\n"); - grammarBuilder.append("KW1473 : 'KW' '1473';\n"); - grammarBuilder.append("KW1474 : 'KW' '1474';\n"); - grammarBuilder.append("KW1475 : 'KW' '1475';\n"); - grammarBuilder.append("KW1476 : 'KW' '1476';\n"); - grammarBuilder.append("KW1477 : 'KW' '1477';\n"); - grammarBuilder.append("KW1478 : 'KW' '1478';\n"); - grammarBuilder.append("KW1479 : 'KW' '1479';\n"); - grammarBuilder.append("KW1480 : 'KW' '1480';\n"); - grammarBuilder.append("KW1481 : 'KW' '1481';\n"); - grammarBuilder.append("KW1482 : 'KW' '1482';\n"); - grammarBuilder.append("KW1483 : 'KW' '1483';\n"); - grammarBuilder.append("KW1484 : 'KW' '1484';\n"); - grammarBuilder.append("KW1485 : 'KW' '1485';\n"); - grammarBuilder.append("KW1486 : 'KW' '1486';\n"); - grammarBuilder.append("KW1487 : 'KW' '1487';\n"); - grammarBuilder.append("KW1488 : 'KW' '1488';\n"); - grammarBuilder.append("KW1489 : 'KW' '1489';\n"); - grammarBuilder.append("KW1490 : 'KW' '1490';\n"); - grammarBuilder.append("KW1491 : 'KW' '1491';\n"); - grammarBuilder.append("KW1492 : 'KW' '1492';\n"); - grammarBuilder.append("KW1493 : 'KW' '1493';\n"); - grammarBuilder.append("KW1494 : 'KW' '1494';\n"); - grammarBuilder.append("KW1495 : 'KW' '1495';\n"); - grammarBuilder.append("KW1496 : 'KW' '1496';\n"); - grammarBuilder.append("KW1497 : 'KW' '1497';\n"); - grammarBuilder.append("KW1498 : 'KW' '1498';\n"); - grammarBuilder.append("KW1499 : 'KW' '1499';\n"); - grammarBuilder.append("KW1500 : 'KW' '1500';\n"); - grammarBuilder.append("KW1501 : 'KW' '1501';\n"); - grammarBuilder.append("KW1502 : 'KW' '1502';\n"); - grammarBuilder.append("KW1503 : 'KW' '1503';\n"); - grammarBuilder.append("KW1504 : 'KW' '1504';\n"); - grammarBuilder.append("KW1505 : 'KW' '1505';\n"); - grammarBuilder.append("KW1506 : 'KW' '1506';\n"); - grammarBuilder.append("KW1507 : 'KW' '1507';\n"); - grammarBuilder.append("KW1508 : 'KW' '1508';\n"); - grammarBuilder.append("KW1509 : 'KW' '1509';\n"); - grammarBuilder.append("KW1510 : 'KW' '1510';\n"); - grammarBuilder.append("KW1511 : 'KW' '1511';\n"); - grammarBuilder.append("KW1512 : 'KW' '1512';\n"); - grammarBuilder.append("KW1513 : 'KW' '1513';\n"); - grammarBuilder.append("KW1514 : 'KW' '1514';\n"); - grammarBuilder.append("KW1515 : 'KW' '1515';\n"); - grammarBuilder.append("KW1516 : 'KW' '1516';\n"); - grammarBuilder.append("KW1517 : 'KW' '1517';\n"); - grammarBuilder.append("KW1518 : 'KW' '1518';\n"); - grammarBuilder.append("KW1519 : 'KW' '1519';\n"); - grammarBuilder.append("KW1520 : 'KW' '1520';\n"); - grammarBuilder.append("KW1521 : 'KW' '1521';\n"); - grammarBuilder.append("KW1522 : 'KW' '1522';\n"); - grammarBuilder.append("KW1523 : 'KW' '1523';\n"); - grammarBuilder.append("KW1524 : 'KW' '1524';\n"); - grammarBuilder.append("KW1525 : 'KW' '1525';\n"); - grammarBuilder.append("KW1526 : 'KW' '1526';\n"); - grammarBuilder.append("KW1527 : 'KW' '1527';\n"); - grammarBuilder.append("KW1528 : 'KW' '1528';\n"); - grammarBuilder.append("KW1529 : 'KW' '1529';\n"); - grammarBuilder.append("KW1530 : 'KW' '1530';\n"); - grammarBuilder.append("KW1531 : 'KW' '1531';\n"); - grammarBuilder.append("KW1532 : 'KW' '1532';\n"); - grammarBuilder.append("KW1533 : 'KW' '1533';\n"); - grammarBuilder.append("KW1534 : 'KW' '1534';\n"); - grammarBuilder.append("KW1535 : 'KW' '1535';\n"); - grammarBuilder.append("KW1536 : 'KW' '1536';\n"); - grammarBuilder.append("KW1537 : 'KW' '1537';\n"); - grammarBuilder.append("KW1538 : 'KW' '1538';\n"); - grammarBuilder.append("KW1539 : 'KW' '1539';\n"); - grammarBuilder.append("KW1540 : 'KW' '1540';\n"); - grammarBuilder.append("KW1541 : 'KW' '1541';\n"); - grammarBuilder.append("KW1542 : 'KW' '1542';\n"); - grammarBuilder.append("KW1543 : 'KW' '1543';\n"); - grammarBuilder.append("KW1544 : 'KW' '1544';\n"); - grammarBuilder.append("KW1545 : 'KW' '1545';\n"); - grammarBuilder.append("KW1546 : 'KW' '1546';\n"); - grammarBuilder.append("KW1547 : 'KW' '1547';\n"); - grammarBuilder.append("KW1548 : 'KW' '1548';\n"); - grammarBuilder.append("KW1549 : 'KW' '1549';\n"); - grammarBuilder.append("KW1550 : 'KW' '1550';\n"); - grammarBuilder.append("KW1551 : 'KW' '1551';\n"); - grammarBuilder.append("KW1552 : 'KW' '1552';\n"); - grammarBuilder.append("KW1553 : 'KW' '1553';\n"); - grammarBuilder.append("KW1554 : 'KW' '1554';\n"); - grammarBuilder.append("KW1555 : 'KW' '1555';\n"); - grammarBuilder.append("KW1556 : 'KW' '1556';\n"); - grammarBuilder.append("KW1557 : 'KW' '1557';\n"); - grammarBuilder.append("KW1558 : 'KW' '1558';\n"); - grammarBuilder.append("KW1559 : 'KW' '1559';\n"); - grammarBuilder.append("KW1560 : 'KW' '1560';\n"); - grammarBuilder.append("KW1561 : 'KW' '1561';\n"); - grammarBuilder.append("KW1562 : 'KW' '1562';\n"); - grammarBuilder.append("KW1563 : 'KW' '1563';\n"); - grammarBuilder.append("KW1564 : 'KW' '1564';\n"); - grammarBuilder.append("KW1565 : 'KW' '1565';\n"); - grammarBuilder.append("KW1566 : 'KW' '1566';\n"); - grammarBuilder.append("KW1567 : 'KW' '1567';\n"); - grammarBuilder.append("KW1568 : 'KW' '1568';\n"); - grammarBuilder.append("KW1569 : 'KW' '1569';\n"); - grammarBuilder.append("KW1570 : 'KW' '1570';\n"); - grammarBuilder.append("KW1571 : 'KW' '1571';\n"); - grammarBuilder.append("KW1572 : 'KW' '1572';\n"); - grammarBuilder.append("KW1573 : 'KW' '1573';\n"); - grammarBuilder.append("KW1574 : 'KW' '1574';\n"); - grammarBuilder.append("KW1575 : 'KW' '1575';\n"); - grammarBuilder.append("KW1576 : 'KW' '1576';\n"); - grammarBuilder.append("KW1577 : 'KW' '1577';\n"); - grammarBuilder.append("KW1578 : 'KW' '1578';\n"); - grammarBuilder.append("KW1579 : 'KW' '1579';\n"); - grammarBuilder.append("KW1580 : 'KW' '1580';\n"); - grammarBuilder.append("KW1581 : 'KW' '1581';\n"); - grammarBuilder.append("KW1582 : 'KW' '1582';\n"); - grammarBuilder.append("KW1583 : 'KW' '1583';\n"); - grammarBuilder.append("KW1584 : 'KW' '1584';\n"); - grammarBuilder.append("KW1585 : 'KW' '1585';\n"); - grammarBuilder.append("KW1586 : 'KW' '1586';\n"); - grammarBuilder.append("KW1587 : 'KW' '1587';\n"); - grammarBuilder.append("KW1588 : 'KW' '1588';\n"); - grammarBuilder.append("KW1589 : 'KW' '1589';\n"); - grammarBuilder.append("KW1590 : 'KW' '1590';\n"); - grammarBuilder.append("KW1591 : 'KW' '1591';\n"); - grammarBuilder.append("KW1592 : 'KW' '1592';\n"); - grammarBuilder.append("KW1593 : 'KW' '1593';\n"); - grammarBuilder.append("KW1594 : 'KW' '1594';\n"); - grammarBuilder.append("KW1595 : 'KW' '1595';\n"); - grammarBuilder.append("KW1596 : 'KW' '1596';\n"); - grammarBuilder.append("KW1597 : 'KW' '1597';\n"); - grammarBuilder.append("KW1598 : 'KW' '1598';\n"); - grammarBuilder.append("KW1599 : 'KW' '1599';\n"); - grammarBuilder.append("KW1600 : 'KW' '1600';\n"); - grammarBuilder.append("KW1601 : 'KW' '1601';\n"); - grammarBuilder.append("KW1602 : 'KW' '1602';\n"); - grammarBuilder.append("KW1603 : 'KW' '1603';\n"); - grammarBuilder.append("KW1604 : 'KW' '1604';\n"); - grammarBuilder.append("KW1605 : 'KW' '1605';\n"); - grammarBuilder.append("KW1606 : 'KW' '1606';\n"); - grammarBuilder.append("KW1607 : 'KW' '1607';\n"); - grammarBuilder.append("KW1608 : 'KW' '1608';\n"); - grammarBuilder.append("KW1609 : 'KW' '1609';\n"); - grammarBuilder.append("KW1610 : 'KW' '1610';\n"); - grammarBuilder.append("KW1611 : 'KW' '1611';\n"); - grammarBuilder.append("KW1612 : 'KW' '1612';\n"); - grammarBuilder.append("KW1613 : 'KW' '1613';\n"); - grammarBuilder.append("KW1614 : 'KW' '1614';\n"); - grammarBuilder.append("KW1615 : 'KW' '1615';\n"); - grammarBuilder.append("KW1616 : 'KW' '1616';\n"); - grammarBuilder.append("KW1617 : 'KW' '1617';\n"); - grammarBuilder.append("KW1618 : 'KW' '1618';\n"); - grammarBuilder.append("KW1619 : 'KW' '1619';\n"); - grammarBuilder.append("KW1620 : 'KW' '1620';\n"); - grammarBuilder.append("KW1621 : 'KW' '1621';\n"); - grammarBuilder.append("KW1622 : 'KW' '1622';\n"); - grammarBuilder.append("KW1623 : 'KW' '1623';\n"); - grammarBuilder.append("KW1624 : 'KW' '1624';\n"); - grammarBuilder.append("KW1625 : 'KW' '1625';\n"); - grammarBuilder.append("KW1626 : 'KW' '1626';\n"); - grammarBuilder.append("KW1627 : 'KW' '1627';\n"); - grammarBuilder.append("KW1628 : 'KW' '1628';\n"); - grammarBuilder.append("KW1629 : 'KW' '1629';\n"); - grammarBuilder.append("KW1630 : 'KW' '1630';\n"); - grammarBuilder.append("KW1631 : 'KW' '1631';\n"); - grammarBuilder.append("KW1632 : 'KW' '1632';\n"); - grammarBuilder.append("KW1633 : 'KW' '1633';\n"); - grammarBuilder.append("KW1634 : 'KW' '1634';\n"); - grammarBuilder.append("KW1635 : 'KW' '1635';\n"); - grammarBuilder.append("KW1636 : 'KW' '1636';\n"); - grammarBuilder.append("KW1637 : 'KW' '1637';\n"); - grammarBuilder.append("KW1638 : 'KW' '1638';\n"); - grammarBuilder.append("KW1639 : 'KW' '1639';\n"); - grammarBuilder.append("KW1640 : 'KW' '1640';\n"); - grammarBuilder.append("KW1641 : 'KW' '1641';\n"); - grammarBuilder.append("KW1642 : 'KW' '1642';\n"); - grammarBuilder.append("KW1643 : 'KW' '1643';\n"); - grammarBuilder.append("KW1644 : 'KW' '1644';\n"); - grammarBuilder.append("KW1645 : 'KW' '1645';\n"); - grammarBuilder.append("KW1646 : 'KW' '1646';\n"); - grammarBuilder.append("KW1647 : 'KW' '1647';\n"); - grammarBuilder.append("KW1648 : 'KW' '1648';\n"); - grammarBuilder.append("KW1649 : 'KW' '1649';\n"); - grammarBuilder.append("KW1650 : 'KW' '1650';\n"); - grammarBuilder.append("KW1651 : 'KW' '1651';\n"); - grammarBuilder.append("KW1652 : 'KW' '1652';\n"); - grammarBuilder.append("KW1653 : 'KW' '1653';\n"); - grammarBuilder.append("KW1654 : 'KW' '1654';\n"); - grammarBuilder.append("KW1655 : 'KW' '1655';\n"); - grammarBuilder.append("KW1656 : 'KW' '1656';\n"); - grammarBuilder.append("KW1657 : 'KW' '1657';\n"); - grammarBuilder.append("KW1658 : 'KW' '1658';\n"); - grammarBuilder.append("KW1659 : 'KW' '1659';\n"); - grammarBuilder.append("KW1660 : 'KW' '1660';\n"); - grammarBuilder.append("KW1661 : 'KW' '1661';\n"); - grammarBuilder.append("KW1662 : 'KW' '1662';\n"); - grammarBuilder.append("KW1663 : 'KW' '1663';\n"); - grammarBuilder.append("KW1664 : 'KW' '1664';\n"); - grammarBuilder.append("KW1665 : 'KW' '1665';\n"); - grammarBuilder.append("KW1666 : 'KW' '1666';\n"); - grammarBuilder.append("KW1667 : 'KW' '1667';\n"); - grammarBuilder.append("KW1668 : 'KW' '1668';\n"); - grammarBuilder.append("KW1669 : 'KW' '1669';\n"); - grammarBuilder.append("KW1670 : 'KW' '1670';\n"); - grammarBuilder.append("KW1671 : 'KW' '1671';\n"); - grammarBuilder.append("KW1672 : 'KW' '1672';\n"); - grammarBuilder.append("KW1673 : 'KW' '1673';\n"); - grammarBuilder.append("KW1674 : 'KW' '1674';\n"); - grammarBuilder.append("KW1675 : 'KW' '1675';\n"); - grammarBuilder.append("KW1676 : 'KW' '1676';\n"); - grammarBuilder.append("KW1677 : 'KW' '1677';\n"); - grammarBuilder.append("KW1678 : 'KW' '1678';\n"); - grammarBuilder.append("KW1679 : 'KW' '1679';\n"); - grammarBuilder.append("KW1680 : 'KW' '1680';\n"); - grammarBuilder.append("KW1681 : 'KW' '1681';\n"); - grammarBuilder.append("KW1682 : 'KW' '1682';\n"); - grammarBuilder.append("KW1683 : 'KW' '1683';\n"); - grammarBuilder.append("KW1684 : 'KW' '1684';\n"); - grammarBuilder.append("KW1685 : 'KW' '1685';\n"); - grammarBuilder.append("KW1686 : 'KW' '1686';\n"); - grammarBuilder.append("KW1687 : 'KW' '1687';\n"); - grammarBuilder.append("KW1688 : 'KW' '1688';\n"); - grammarBuilder.append("KW1689 : 'KW' '1689';\n"); - grammarBuilder.append("KW1690 : 'KW' '1690';\n"); - grammarBuilder.append("KW1691 : 'KW' '1691';\n"); - grammarBuilder.append("KW1692 : 'KW' '1692';\n"); - grammarBuilder.append("KW1693 : 'KW' '1693';\n"); - grammarBuilder.append("KW1694 : 'KW' '1694';\n"); - grammarBuilder.append("KW1695 : 'KW' '1695';\n"); - grammarBuilder.append("KW1696 : 'KW' '1696';\n"); - grammarBuilder.append("KW1697 : 'KW' '1697';\n"); - grammarBuilder.append("KW1698 : 'KW' '1698';\n"); - grammarBuilder.append("KW1699 : 'KW' '1699';\n"); - grammarBuilder.append("KW1700 : 'KW' '1700';\n"); - grammarBuilder.append("KW1701 : 'KW' '1701';\n"); - grammarBuilder.append("KW1702 : 'KW' '1702';\n"); - grammarBuilder.append("KW1703 : 'KW' '1703';\n"); - grammarBuilder.append("KW1704 : 'KW' '1704';\n"); - grammarBuilder.append("KW1705 : 'KW' '1705';\n"); - grammarBuilder.append("KW1706 : 'KW' '1706';\n"); - grammarBuilder.append("KW1707 : 'KW' '1707';\n"); - grammarBuilder.append("KW1708 : 'KW' '1708';\n"); - grammarBuilder.append("KW1709 : 'KW' '1709';\n"); - grammarBuilder.append("KW1710 : 'KW' '1710';\n"); - grammarBuilder.append("KW1711 : 'KW' '1711';\n"); - grammarBuilder.append("KW1712 : 'KW' '1712';\n"); - grammarBuilder.append("KW1713 : 'KW' '1713';\n"); - grammarBuilder.append("KW1714 : 'KW' '1714';\n"); - grammarBuilder.append("KW1715 : 'KW' '1715';\n"); - grammarBuilder.append("KW1716 : 'KW' '1716';\n"); - grammarBuilder.append("KW1717 : 'KW' '1717';\n"); - grammarBuilder.append("KW1718 : 'KW' '1718';\n"); - grammarBuilder.append("KW1719 : 'KW' '1719';\n"); - grammarBuilder.append("KW1720 : 'KW' '1720';\n"); - grammarBuilder.append("KW1721 : 'KW' '1721';\n"); - grammarBuilder.append("KW1722 : 'KW' '1722';\n"); - grammarBuilder.append("KW1723 : 'KW' '1723';\n"); - grammarBuilder.append("KW1724 : 'KW' '1724';\n"); - grammarBuilder.append("KW1725 : 'KW' '1725';\n"); - grammarBuilder.append("KW1726 : 'KW' '1726';\n"); - grammarBuilder.append("KW1727 : 'KW' '1727';\n"); - grammarBuilder.append("KW1728 : 'KW' '1728';\n"); - grammarBuilder.append("KW1729 : 'KW' '1729';\n"); - grammarBuilder.append("KW1730 : 'KW' '1730';\n"); - grammarBuilder.append("KW1731 : 'KW' '1731';\n"); - grammarBuilder.append("KW1732 : 'KW' '1732';\n"); - grammarBuilder.append("KW1733 : 'KW' '1733';\n"); - grammarBuilder.append("KW1734 : 'KW' '1734';\n"); - grammarBuilder.append("KW1735 : 'KW' '1735';\n"); - grammarBuilder.append("KW1736 : 'KW' '1736';\n"); - grammarBuilder.append("KW1737 : 'KW' '1737';\n"); - grammarBuilder.append("KW1738 : 'KW' '1738';\n"); - grammarBuilder.append("KW1739 : 'KW' '1739';\n"); - grammarBuilder.append("KW1740 : 'KW' '1740';\n"); - grammarBuilder.append("KW1741 : 'KW' '1741';\n"); - grammarBuilder.append("KW1742 : 'KW' '1742';\n"); - grammarBuilder.append("KW1743 : 'KW' '1743';\n"); - grammarBuilder.append("KW1744 : 'KW' '1744';\n"); - grammarBuilder.append("KW1745 : 'KW' '1745';\n"); - grammarBuilder.append("KW1746 : 'KW' '1746';\n"); - grammarBuilder.append("KW1747 : 'KW' '1747';\n"); - grammarBuilder.append("KW1748 : 'KW' '1748';\n"); - grammarBuilder.append("KW1749 : 'KW' '1749';\n"); - grammarBuilder.append("KW1750 : 'KW' '1750';\n"); - grammarBuilder.append("KW1751 : 'KW' '1751';\n"); - grammarBuilder.append("KW1752 : 'KW' '1752';\n"); - grammarBuilder.append("KW1753 : 'KW' '1753';\n"); - grammarBuilder.append("KW1754 : 'KW' '1754';\n"); - grammarBuilder.append("KW1755 : 'KW' '1755';\n"); - grammarBuilder.append("KW1756 : 'KW' '1756';\n"); - grammarBuilder.append("KW1757 : 'KW' '1757';\n"); - grammarBuilder.append("KW1758 : 'KW' '1758';\n"); - grammarBuilder.append("KW1759 : 'KW' '1759';\n"); - grammarBuilder.append("KW1760 : 'KW' '1760';\n"); - grammarBuilder.append("KW1761 : 'KW' '1761';\n"); - grammarBuilder.append("KW1762 : 'KW' '1762';\n"); - grammarBuilder.append("KW1763 : 'KW' '1763';\n"); - grammarBuilder.append("KW1764 : 'KW' '1764';\n"); - grammarBuilder.append("KW1765 : 'KW' '1765';\n"); - grammarBuilder.append("KW1766 : 'KW' '1766';\n"); - grammarBuilder.append("KW1767 : 'KW' '1767';\n"); - grammarBuilder.append("KW1768 : 'KW' '1768';\n"); - grammarBuilder.append("KW1769 : 'KW' '1769';\n"); - grammarBuilder.append("KW1770 : 'KW' '1770';\n"); - grammarBuilder.append("KW1771 : 'KW' '1771';\n"); - grammarBuilder.append("KW1772 : 'KW' '1772';\n"); - grammarBuilder.append("KW1773 : 'KW' '1773';\n"); - grammarBuilder.append("KW1774 : 'KW' '1774';\n"); - grammarBuilder.append("KW1775 : 'KW' '1775';\n"); - grammarBuilder.append("KW1776 : 'KW' '1776';\n"); - grammarBuilder.append("KW1777 : 'KW' '1777';\n"); - grammarBuilder.append("KW1778 : 'KW' '1778';\n"); - grammarBuilder.append("KW1779 : 'KW' '1779';\n"); - grammarBuilder.append("KW1780 : 'KW' '1780';\n"); - grammarBuilder.append("KW1781 : 'KW' '1781';\n"); - grammarBuilder.append("KW1782 : 'KW' '1782';\n"); - grammarBuilder.append("KW1783 : 'KW' '1783';\n"); - grammarBuilder.append("KW1784 : 'KW' '1784';\n"); - grammarBuilder.append("KW1785 : 'KW' '1785';\n"); - grammarBuilder.append("KW1786 : 'KW' '1786';\n"); - grammarBuilder.append("KW1787 : 'KW' '1787';\n"); - grammarBuilder.append("KW1788 : 'KW' '1788';\n"); - grammarBuilder.append("KW1789 : 'KW' '1789';\n"); - grammarBuilder.append("KW1790 : 'KW' '1790';\n"); - grammarBuilder.append("KW1791 : 'KW' '1791';\n"); - grammarBuilder.append("KW1792 : 'KW' '1792';\n"); - grammarBuilder.append("KW1793 : 'KW' '1793';\n"); - grammarBuilder.append("KW1794 : 'KW' '1794';\n"); - grammarBuilder.append("KW1795 : 'KW' '1795';\n"); - grammarBuilder.append("KW1796 : 'KW' '1796';\n"); - grammarBuilder.append("KW1797 : 'KW' '1797';\n"); - grammarBuilder.append("KW1798 : 'KW' '1798';\n"); - grammarBuilder.append("KW1799 : 'KW' '1799';\n"); - grammarBuilder.append("KW1800 : 'KW' '1800';\n"); - grammarBuilder.append("KW1801 : 'KW' '1801';\n"); - grammarBuilder.append("KW1802 : 'KW' '1802';\n"); - grammarBuilder.append("KW1803 : 'KW' '1803';\n"); - grammarBuilder.append("KW1804 : 'KW' '1804';\n"); - grammarBuilder.append("KW1805 : 'KW' '1805';\n"); - grammarBuilder.append("KW1806 : 'KW' '1806';\n"); - grammarBuilder.append("KW1807 : 'KW' '1807';\n"); - grammarBuilder.append("KW1808 : 'KW' '1808';\n"); - grammarBuilder.append("KW1809 : 'KW' '1809';\n"); - grammarBuilder.append("KW1810 : 'KW' '1810';\n"); - grammarBuilder.append("KW1811 : 'KW' '1811';\n"); - grammarBuilder.append("KW1812 : 'KW' '1812';\n"); - grammarBuilder.append("KW1813 : 'KW' '1813';\n"); - grammarBuilder.append("KW1814 : 'KW' '1814';\n"); - grammarBuilder.append("KW1815 : 'KW' '1815';\n"); - grammarBuilder.append("KW1816 : 'KW' '1816';\n"); - grammarBuilder.append("KW1817 : 'KW' '1817';\n"); - grammarBuilder.append("KW1818 : 'KW' '1818';\n"); - grammarBuilder.append("KW1819 : 'KW' '1819';\n"); - grammarBuilder.append("KW1820 : 'KW' '1820';\n"); - grammarBuilder.append("KW1821 : 'KW' '1821';\n"); - grammarBuilder.append("KW1822 : 'KW' '1822';\n"); - grammarBuilder.append("KW1823 : 'KW' '1823';\n"); - grammarBuilder.append("KW1824 : 'KW' '1824';\n"); - grammarBuilder.append("KW1825 : 'KW' '1825';\n"); - grammarBuilder.append("KW1826 : 'KW' '1826';\n"); - grammarBuilder.append("KW1827 : 'KW' '1827';\n"); - grammarBuilder.append("KW1828 : 'KW' '1828';\n"); - grammarBuilder.append("KW1829 : 'KW' '1829';\n"); - grammarBuilder.append("KW1830 : 'KW' '1830';\n"); - grammarBuilder.append("KW1831 : 'KW' '1831';\n"); - grammarBuilder.append("KW1832 : 'KW' '1832';\n"); - grammarBuilder.append("KW1833 : 'KW' '1833';\n"); - grammarBuilder.append("KW1834 : 'KW' '1834';\n"); - grammarBuilder.append("KW1835 : 'KW' '1835';\n"); - grammarBuilder.append("KW1836 : 'KW' '1836';\n"); - grammarBuilder.append("KW1837 : 'KW' '1837';\n"); - grammarBuilder.append("KW1838 : 'KW' '1838';\n"); - grammarBuilder.append("KW1839 : 'KW' '1839';\n"); - grammarBuilder.append("KW1840 : 'KW' '1840';\n"); - grammarBuilder.append("KW1841 : 'KW' '1841';\n"); - grammarBuilder.append("KW1842 : 'KW' '1842';\n"); - grammarBuilder.append("KW1843 : 'KW' '1843';\n"); - grammarBuilder.append("KW1844 : 'KW' '1844';\n"); - grammarBuilder.append("KW1845 : 'KW' '1845';\n"); - grammarBuilder.append("KW1846 : 'KW' '1846';\n"); - grammarBuilder.append("KW1847 : 'KW' '1847';\n"); - grammarBuilder.append("KW1848 : 'KW' '1848';\n"); - grammarBuilder.append("KW1849 : 'KW' '1849';\n"); - grammarBuilder.append("KW1850 : 'KW' '1850';\n"); - grammarBuilder.append("KW1851 : 'KW' '1851';\n"); - grammarBuilder.append("KW1852 : 'KW' '1852';\n"); - grammarBuilder.append("KW1853 : 'KW' '1853';\n"); - grammarBuilder.append("KW1854 : 'KW' '1854';\n"); - grammarBuilder.append("KW1855 : 'KW' '1855';\n"); - grammarBuilder.append("KW1856 : 'KW' '1856';\n"); - grammarBuilder.append("KW1857 : 'KW' '1857';\n"); - grammarBuilder.append("KW1858 : 'KW' '1858';\n"); - grammarBuilder.append("KW1859 : 'KW' '1859';\n"); - grammarBuilder.append("KW1860 : 'KW' '1860';\n"); - grammarBuilder.append("KW1861 : 'KW' '1861';\n"); - grammarBuilder.append("KW1862 : 'KW' '1862';\n"); - grammarBuilder.append("KW1863 : 'KW' '1863';\n"); - grammarBuilder.append("KW1864 : 'KW' '1864';\n"); - grammarBuilder.append("KW1865 : 'KW' '1865';\n"); - grammarBuilder.append("KW1866 : 'KW' '1866';\n"); - grammarBuilder.append("KW1867 : 'KW' '1867';\n"); - grammarBuilder.append("KW1868 : 'KW' '1868';\n"); - grammarBuilder.append("KW1869 : 'KW' '1869';\n"); - grammarBuilder.append("KW1870 : 'KW' '1870';\n"); - grammarBuilder.append("KW1871 : 'KW' '1871';\n"); - grammarBuilder.append("KW1872 : 'KW' '1872';\n"); - grammarBuilder.append("KW1873 : 'KW' '1873';\n"); - grammarBuilder.append("KW1874 : 'KW' '1874';\n"); - grammarBuilder.append("KW1875 : 'KW' '1875';\n"); - grammarBuilder.append("KW1876 : 'KW' '1876';\n"); - grammarBuilder.append("KW1877 : 'KW' '1877';\n"); - grammarBuilder.append("KW1878 : 'KW' '1878';\n"); - grammarBuilder.append("KW1879 : 'KW' '1879';\n"); - grammarBuilder.append("KW1880 : 'KW' '1880';\n"); - grammarBuilder.append("KW1881 : 'KW' '1881';\n"); - grammarBuilder.append("KW1882 : 'KW' '1882';\n"); - grammarBuilder.append("KW1883 : 'KW' '1883';\n"); - grammarBuilder.append("KW1884 : 'KW' '1884';\n"); - grammarBuilder.append("KW1885 : 'KW' '1885';\n"); - grammarBuilder.append("KW1886 : 'KW' '1886';\n"); - grammarBuilder.append("KW1887 : 'KW' '1887';\n"); - grammarBuilder.append("KW1888 : 'KW' '1888';\n"); - grammarBuilder.append("KW1889 : 'KW' '1889';\n"); - grammarBuilder.append("KW1890 : 'KW' '1890';\n"); - grammarBuilder.append("KW1891 : 'KW' '1891';\n"); - grammarBuilder.append("KW1892 : 'KW' '1892';\n"); - grammarBuilder.append("KW1893 : 'KW' '1893';\n"); - grammarBuilder.append("KW1894 : 'KW' '1894';\n"); - grammarBuilder.append("KW1895 : 'KW' '1895';\n"); - grammarBuilder.append("KW1896 : 'KW' '1896';\n"); - grammarBuilder.append("KW1897 : 'KW' '1897';\n"); - grammarBuilder.append("KW1898 : 'KW' '1898';\n"); - grammarBuilder.append("KW1899 : 'KW' '1899';\n"); - grammarBuilder.append("KW1900 : 'KW' '1900';\n"); - grammarBuilder.append("KW1901 : 'KW' '1901';\n"); - grammarBuilder.append("KW1902 : 'KW' '1902';\n"); - grammarBuilder.append("KW1903 : 'KW' '1903';\n"); - grammarBuilder.append("KW1904 : 'KW' '1904';\n"); - grammarBuilder.append("KW1905 : 'KW' '1905';\n"); - grammarBuilder.append("KW1906 : 'KW' '1906';\n"); - grammarBuilder.append("KW1907 : 'KW' '1907';\n"); - grammarBuilder.append("KW1908 : 'KW' '1908';\n"); - grammarBuilder.append("KW1909 : 'KW' '1909';\n"); - grammarBuilder.append("KW1910 : 'KW' '1910';\n"); - grammarBuilder.append("KW1911 : 'KW' '1911';\n"); - grammarBuilder.append("KW1912 : 'KW' '1912';\n"); - grammarBuilder.append("KW1913 : 'KW' '1913';\n"); - grammarBuilder.append("KW1914 : 'KW' '1914';\n"); - grammarBuilder.append("KW1915 : 'KW' '1915';\n"); - grammarBuilder.append("KW1916 : 'KW' '1916';\n"); - grammarBuilder.append("KW1917 : 'KW' '1917';\n"); - grammarBuilder.append("KW1918 : 'KW' '1918';\n"); - grammarBuilder.append("KW1919 : 'KW' '1919';\n"); - grammarBuilder.append("KW1920 : 'KW' '1920';\n"); - grammarBuilder.append("KW1921 : 'KW' '1921';\n"); - grammarBuilder.append("KW1922 : 'KW' '1922';\n"); - grammarBuilder.append("KW1923 : 'KW' '1923';\n"); - grammarBuilder.append("KW1924 : 'KW' '1924';\n"); - grammarBuilder.append("KW1925 : 'KW' '1925';\n"); - grammarBuilder.append("KW1926 : 'KW' '1926';\n"); - grammarBuilder.append("KW1927 : 'KW' '1927';\n"); - grammarBuilder.append("KW1928 : 'KW' '1928';\n"); - grammarBuilder.append("KW1929 : 'KW' '1929';\n"); - grammarBuilder.append("KW1930 : 'KW' '1930';\n"); - grammarBuilder.append("KW1931 : 'KW' '1931';\n"); - grammarBuilder.append("KW1932 : 'KW' '1932';\n"); - grammarBuilder.append("KW1933 : 'KW' '1933';\n"); - grammarBuilder.append("KW1934 : 'KW' '1934';\n"); - grammarBuilder.append("KW1935 : 'KW' '1935';\n"); - grammarBuilder.append("KW1936 : 'KW' '1936';\n"); - grammarBuilder.append("KW1937 : 'KW' '1937';\n"); - grammarBuilder.append("KW1938 : 'KW' '1938';\n"); - grammarBuilder.append("KW1939 : 'KW' '1939';\n"); - grammarBuilder.append("KW1940 : 'KW' '1940';\n"); - grammarBuilder.append("KW1941 : 'KW' '1941';\n"); - grammarBuilder.append("KW1942 : 'KW' '1942';\n"); - grammarBuilder.append("KW1943 : 'KW' '1943';\n"); - grammarBuilder.append("KW1944 : 'KW' '1944';\n"); - grammarBuilder.append("KW1945 : 'KW' '1945';\n"); - grammarBuilder.append("KW1946 : 'KW' '1946';\n"); - grammarBuilder.append("KW1947 : 'KW' '1947';\n"); - grammarBuilder.append("KW1948 : 'KW' '1948';\n"); - grammarBuilder.append("KW1949 : 'KW' '1949';\n"); - grammarBuilder.append("KW1950 : 'KW' '1950';\n"); - grammarBuilder.append("KW1951 : 'KW' '1951';\n"); - grammarBuilder.append("KW1952 : 'KW' '1952';\n"); - grammarBuilder.append("KW1953 : 'KW' '1953';\n"); - grammarBuilder.append("KW1954 : 'KW' '1954';\n"); - grammarBuilder.append("KW1955 : 'KW' '1955';\n"); - grammarBuilder.append("KW1956 : 'KW' '1956';\n"); - grammarBuilder.append("KW1957 : 'KW' '1957';\n"); - grammarBuilder.append("KW1958 : 'KW' '1958';\n"); - grammarBuilder.append("KW1959 : 'KW' '1959';\n"); - grammarBuilder.append("KW1960 : 'KW' '1960';\n"); - grammarBuilder.append("KW1961 : 'KW' '1961';\n"); - grammarBuilder.append("KW1962 : 'KW' '1962';\n"); - grammarBuilder.append("KW1963 : 'KW' '1963';\n"); - grammarBuilder.append("KW1964 : 'KW' '1964';\n"); - grammarBuilder.append("KW1965 : 'KW' '1965';\n"); - grammarBuilder.append("KW1966 : 'KW' '1966';\n"); - grammarBuilder.append("KW1967 : 'KW' '1967';\n"); - grammarBuilder.append("KW1968 : 'KW' '1968';\n"); - grammarBuilder.append("KW1969 : 'KW' '1969';\n"); - grammarBuilder.append("KW1970 : 'KW' '1970';\n"); - grammarBuilder.append("KW1971 : 'KW' '1971';\n"); - grammarBuilder.append("KW1972 : 'KW' '1972';\n"); - grammarBuilder.append("KW1973 : 'KW' '1973';\n"); - grammarBuilder.append("KW1974 : 'KW' '1974';\n"); - grammarBuilder.append("KW1975 : 'KW' '1975';\n"); - grammarBuilder.append("KW1976 : 'KW' '1976';\n"); - grammarBuilder.append("KW1977 : 'KW' '1977';\n"); - grammarBuilder.append("KW1978 : 'KW' '1978';\n"); - grammarBuilder.append("KW1979 : 'KW' '1979';\n"); - grammarBuilder.append("KW1980 : 'KW' '1980';\n"); - grammarBuilder.append("KW1981 : 'KW' '1981';\n"); - grammarBuilder.append("KW1982 : 'KW' '1982';\n"); - grammarBuilder.append("KW1983 : 'KW' '1983';\n"); - grammarBuilder.append("KW1984 : 'KW' '1984';\n"); - grammarBuilder.append("KW1985 : 'KW' '1985';\n"); - grammarBuilder.append("KW1986 : 'KW' '1986';\n"); - grammarBuilder.append("KW1987 : 'KW' '1987';\n"); - grammarBuilder.append("KW1988 : 'KW' '1988';\n"); - grammarBuilder.append("KW1989 : 'KW' '1989';\n"); - grammarBuilder.append("KW1990 : 'KW' '1990';\n"); - grammarBuilder.append("KW1991 : 'KW' '1991';\n"); - grammarBuilder.append("KW1992 : 'KW' '1992';\n"); - grammarBuilder.append("KW1993 : 'KW' '1993';\n"); - grammarBuilder.append("KW1994 : 'KW' '1994';\n"); - grammarBuilder.append("KW1995 : 'KW' '1995';\n"); - grammarBuilder.append("KW1996 : 'KW' '1996';\n"); - grammarBuilder.append("KW1997 : 'KW' '1997';\n"); - grammarBuilder.append("KW1998 : 'KW' '1998';\n"); - grammarBuilder.append("KW1999 : 'KW' '1999';\n"); - grammarBuilder.append("KW2000 : 'KW' '2000';\n"); - grammarBuilder.append("KW2001 : 'KW' '2001';\n"); - grammarBuilder.append("KW2002 : 'KW' '2002';\n"); - grammarBuilder.append("KW2003 : 'KW' '2003';\n"); - grammarBuilder.append("KW2004 : 'KW' '2004';\n"); - grammarBuilder.append("KW2005 : 'KW' '2005';\n"); - grammarBuilder.append("KW2006 : 'KW' '2006';\n"); - grammarBuilder.append("KW2007 : 'KW' '2007';\n"); - grammarBuilder.append("KW2008 : 'KW' '2008';\n"); - grammarBuilder.append("KW2009 : 'KW' '2009';\n"); - grammarBuilder.append("KW2010 : 'KW' '2010';\n"); - grammarBuilder.append("KW2011 : 'KW' '2011';\n"); - grammarBuilder.append("KW2012 : 'KW' '2012';\n"); - grammarBuilder.append("KW2013 : 'KW' '2013';\n"); - grammarBuilder.append("KW2014 : 'KW' '2014';\n"); - grammarBuilder.append("KW2015 : 'KW' '2015';\n"); - grammarBuilder.append("KW2016 : 'KW' '2016';\n"); - grammarBuilder.append("KW2017 : 'KW' '2017';\n"); - grammarBuilder.append("KW2018 : 'KW' '2018';\n"); - grammarBuilder.append("KW2019 : 'KW' '2019';\n"); - grammarBuilder.append("KW2020 : 'KW' '2020';\n"); - grammarBuilder.append("KW2021 : 'KW' '2021';\n"); - grammarBuilder.append("KW2022 : 'KW' '2022';\n"); - grammarBuilder.append("KW2023 : 'KW' '2023';\n"); - grammarBuilder.append("KW2024 : 'KW' '2024';\n"); - grammarBuilder.append("KW2025 : 'KW' '2025';\n"); - grammarBuilder.append("KW2026 : 'KW' '2026';\n"); - grammarBuilder.append("KW2027 : 'KW' '2027';\n"); - grammarBuilder.append("KW2028 : 'KW' '2028';\n"); - grammarBuilder.append("KW2029 : 'KW' '2029';\n"); - grammarBuilder.append("KW2030 : 'KW' '2030';\n"); - grammarBuilder.append("KW2031 : 'KW' '2031';\n"); - grammarBuilder.append("KW2032 : 'KW' '2032';\n"); - grammarBuilder.append("KW2033 : 'KW' '2033';\n"); - grammarBuilder.append("KW2034 : 'KW' '2034';\n"); - grammarBuilder.append("KW2035 : 'KW' '2035';\n"); - grammarBuilder.append("KW2036 : 'KW' '2036';\n"); - grammarBuilder.append("KW2037 : 'KW' '2037';\n"); - grammarBuilder.append("KW2038 : 'KW' '2038';\n"); - grammarBuilder.append("KW2039 : 'KW' '2039';\n"); - grammarBuilder.append("KW2040 : 'KW' '2040';\n"); - grammarBuilder.append("KW2041 : 'KW' '2041';\n"); - grammarBuilder.append("KW2042 : 'KW' '2042';\n"); - grammarBuilder.append("KW2043 : 'KW' '2043';\n"); - grammarBuilder.append("KW2044 : 'KW' '2044';\n"); - grammarBuilder.append("KW2045 : 'KW' '2045';\n"); - grammarBuilder.append("KW2046 : 'KW' '2046';\n"); - grammarBuilder.append("KW2047 : 'KW' '2047';\n"); - grammarBuilder.append("KW2048 : 'KW' '2048';\n"); - grammarBuilder.append("KW2049 : 'KW' '2049';\n"); - grammarBuilder.append("KW2050 : 'KW' '2050';\n"); - grammarBuilder.append("KW2051 : 'KW' '2051';\n"); - grammarBuilder.append("KW2052 : 'KW' '2052';\n"); - grammarBuilder.append("KW2053 : 'KW' '2053';\n"); - grammarBuilder.append("KW2054 : 'KW' '2054';\n"); - grammarBuilder.append("KW2055 : 'KW' '2055';\n"); - grammarBuilder.append("KW2056 : 'KW' '2056';\n"); - grammarBuilder.append("KW2057 : 'KW' '2057';\n"); - grammarBuilder.append("KW2058 : 'KW' '2058';\n"); - grammarBuilder.append("KW2059 : 'KW' '2059';\n"); - grammarBuilder.append("KW2060 : 'KW' '2060';\n"); - grammarBuilder.append("KW2061 : 'KW' '2061';\n"); - grammarBuilder.append("KW2062 : 'KW' '2062';\n"); - grammarBuilder.append("KW2063 : 'KW' '2063';\n"); - grammarBuilder.append("KW2064 : 'KW' '2064';\n"); - grammarBuilder.append("KW2065 : 'KW' '2065';\n"); - grammarBuilder.append("KW2066 : 'KW' '2066';\n"); - grammarBuilder.append("KW2067 : 'KW' '2067';\n"); - grammarBuilder.append("KW2068 : 'KW' '2068';\n"); - grammarBuilder.append("KW2069 : 'KW' '2069';\n"); - grammarBuilder.append("KW2070 : 'KW' '2070';\n"); - grammarBuilder.append("KW2071 : 'KW' '2071';\n"); - grammarBuilder.append("KW2072 : 'KW' '2072';\n"); - grammarBuilder.append("KW2073 : 'KW' '2073';\n"); - grammarBuilder.append("KW2074 : 'KW' '2074';\n"); - grammarBuilder.append("KW2075 : 'KW' '2075';\n"); - grammarBuilder.append("KW2076 : 'KW' '2076';\n"); - grammarBuilder.append("KW2077 : 'KW' '2077';\n"); - grammarBuilder.append("KW2078 : 'KW' '2078';\n"); - grammarBuilder.append("KW2079 : 'KW' '2079';\n"); - grammarBuilder.append("KW2080 : 'KW' '2080';\n"); - grammarBuilder.append("KW2081 : 'KW' '2081';\n"); - grammarBuilder.append("KW2082 : 'KW' '2082';\n"); - grammarBuilder.append("KW2083 : 'KW' '2083';\n"); - grammarBuilder.append("KW2084 : 'KW' '2084';\n"); - grammarBuilder.append("KW2085 : 'KW' '2085';\n"); - grammarBuilder.append("KW2086 : 'KW' '2086';\n"); - grammarBuilder.append("KW2087 : 'KW' '2087';\n"); - grammarBuilder.append("KW2088 : 'KW' '2088';\n"); - grammarBuilder.append("KW2089 : 'KW' '2089';\n"); - grammarBuilder.append("KW2090 : 'KW' '2090';\n"); - grammarBuilder.append("KW2091 : 'KW' '2091';\n"); - grammarBuilder.append("KW2092 : 'KW' '2092';\n"); - grammarBuilder.append("KW2093 : 'KW' '2093';\n"); - grammarBuilder.append("KW2094 : 'KW' '2094';\n"); - grammarBuilder.append("KW2095 : 'KW' '2095';\n"); - grammarBuilder.append("KW2096 : 'KW' '2096';\n"); - grammarBuilder.append("KW2097 : 'KW' '2097';\n"); - grammarBuilder.append("KW2098 : 'KW' '2098';\n"); - grammarBuilder.append("KW2099 : 'KW' '2099';\n"); - grammarBuilder.append("KW2100 : 'KW' '2100';\n"); - grammarBuilder.append("KW2101 : 'KW' '2101';\n"); - grammarBuilder.append("KW2102 : 'KW' '2102';\n"); - grammarBuilder.append("KW2103 : 'KW' '2103';\n"); - grammarBuilder.append("KW2104 : 'KW' '2104';\n"); - grammarBuilder.append("KW2105 : 'KW' '2105';\n"); - grammarBuilder.append("KW2106 : 'KW' '2106';\n"); - grammarBuilder.append("KW2107 : 'KW' '2107';\n"); - grammarBuilder.append("KW2108 : 'KW' '2108';\n"); - grammarBuilder.append("KW2109 : 'KW' '2109';\n"); - grammarBuilder.append("KW2110 : 'KW' '2110';\n"); - grammarBuilder.append("KW2111 : 'KW' '2111';\n"); - grammarBuilder.append("KW2112 : 'KW' '2112';\n"); - grammarBuilder.append("KW2113 : 'KW' '2113';\n"); - grammarBuilder.append("KW2114 : 'KW' '2114';\n"); - grammarBuilder.append("KW2115 : 'KW' '2115';\n"); - grammarBuilder.append("KW2116 : 'KW' '2116';\n"); - grammarBuilder.append("KW2117 : 'KW' '2117';\n"); - grammarBuilder.append("KW2118 : 'KW' '2118';\n"); - grammarBuilder.append("KW2119 : 'KW' '2119';\n"); - grammarBuilder.append("KW2120 : 'KW' '2120';\n"); - grammarBuilder.append("KW2121 : 'KW' '2121';\n"); - grammarBuilder.append("KW2122 : 'KW' '2122';\n"); - grammarBuilder.append("KW2123 : 'KW' '2123';\n"); - grammarBuilder.append("KW2124 : 'KW' '2124';\n"); - grammarBuilder.append("KW2125 : 'KW' '2125';\n"); - grammarBuilder.append("KW2126 : 'KW' '2126';\n"); - grammarBuilder.append("KW2127 : 'KW' '2127';\n"); - grammarBuilder.append("KW2128 : 'KW' '2128';\n"); - grammarBuilder.append("KW2129 : 'KW' '2129';\n"); - grammarBuilder.append("KW2130 : 'KW' '2130';\n"); - grammarBuilder.append("KW2131 : 'KW' '2131';\n"); - grammarBuilder.append("KW2132 : 'KW' '2132';\n"); - grammarBuilder.append("KW2133 : 'KW' '2133';\n"); - grammarBuilder.append("KW2134 : 'KW' '2134';\n"); - grammarBuilder.append("KW2135 : 'KW' '2135';\n"); - grammarBuilder.append("KW2136 : 'KW' '2136';\n"); - grammarBuilder.append("KW2137 : 'KW' '2137';\n"); - grammarBuilder.append("KW2138 : 'KW' '2138';\n"); - grammarBuilder.append("KW2139 : 'KW' '2139';\n"); - grammarBuilder.append("KW2140 : 'KW' '2140';\n"); - grammarBuilder.append("KW2141 : 'KW' '2141';\n"); - grammarBuilder.append("KW2142 : 'KW' '2142';\n"); - grammarBuilder.append("KW2143 : 'KW' '2143';\n"); - grammarBuilder.append("KW2144 : 'KW' '2144';\n"); - grammarBuilder.append("KW2145 : 'KW' '2145';\n"); - grammarBuilder.append("KW2146 : 'KW' '2146';\n"); - grammarBuilder.append("KW2147 : 'KW' '2147';\n"); - grammarBuilder.append("KW2148 : 'KW' '2148';\n"); - grammarBuilder.append("KW2149 : 'KW' '2149';\n"); - grammarBuilder.append("KW2150 : 'KW' '2150';\n"); - grammarBuilder.append("KW2151 : 'KW' '2151';\n"); - grammarBuilder.append("KW2152 : 'KW' '2152';\n"); - grammarBuilder.append("KW2153 : 'KW' '2153';\n"); - grammarBuilder.append("KW2154 : 'KW' '2154';\n"); - grammarBuilder.append("KW2155 : 'KW' '2155';\n"); - grammarBuilder.append("KW2156 : 'KW' '2156';\n"); - grammarBuilder.append("KW2157 : 'KW' '2157';\n"); - grammarBuilder.append("KW2158 : 'KW' '2158';\n"); - grammarBuilder.append("KW2159 : 'KW' '2159';\n"); - grammarBuilder.append("KW2160 : 'KW' '2160';\n"); - grammarBuilder.append("KW2161 : 'KW' '2161';\n"); - grammarBuilder.append("KW2162 : 'KW' '2162';\n"); - grammarBuilder.append("KW2163 : 'KW' '2163';\n"); - grammarBuilder.append("KW2164 : 'KW' '2164';\n"); - grammarBuilder.append("KW2165 : 'KW' '2165';\n"); - grammarBuilder.append("KW2166 : 'KW' '2166';\n"); - grammarBuilder.append("KW2167 : 'KW' '2167';\n"); - grammarBuilder.append("KW2168 : 'KW' '2168';\n"); - grammarBuilder.append("KW2169 : 'KW' '2169';\n"); - grammarBuilder.append("KW2170 : 'KW' '2170';\n"); - grammarBuilder.append("KW2171 : 'KW' '2171';\n"); - grammarBuilder.append("KW2172 : 'KW' '2172';\n"); - grammarBuilder.append("KW2173 : 'KW' '2173';\n"); - grammarBuilder.append("KW2174 : 'KW' '2174';\n"); - grammarBuilder.append("KW2175 : 'KW' '2175';\n"); - grammarBuilder.append("KW2176 : 'KW' '2176';\n"); - grammarBuilder.append("KW2177 : 'KW' '2177';\n"); - grammarBuilder.append("KW2178 : 'KW' '2178';\n"); - grammarBuilder.append("KW2179 : 'KW' '2179';\n"); - grammarBuilder.append("KW2180 : 'KW' '2180';\n"); - grammarBuilder.append("KW2181 : 'KW' '2181';\n"); - grammarBuilder.append("KW2182 : 'KW' '2182';\n"); - grammarBuilder.append("KW2183 : 'KW' '2183';\n"); - grammarBuilder.append("KW2184 : 'KW' '2184';\n"); - grammarBuilder.append("KW2185 : 'KW' '2185';\n"); - grammarBuilder.append("KW2186 : 'KW' '2186';\n"); - grammarBuilder.append("KW2187 : 'KW' '2187';\n"); - grammarBuilder.append("KW2188 : 'KW' '2188';\n"); - grammarBuilder.append("KW2189 : 'KW' '2189';\n"); - grammarBuilder.append("KW2190 : 'KW' '2190';\n"); - grammarBuilder.append("KW2191 : 'KW' '2191';\n"); - grammarBuilder.append("KW2192 : 'KW' '2192';\n"); - grammarBuilder.append("KW2193 : 'KW' '2193';\n"); - grammarBuilder.append("KW2194 : 'KW' '2194';\n"); - grammarBuilder.append("KW2195 : 'KW' '2195';\n"); - grammarBuilder.append("KW2196 : 'KW' '2196';\n"); - grammarBuilder.append("KW2197 : 'KW' '2197';\n"); - grammarBuilder.append("KW2198 : 'KW' '2198';\n"); - grammarBuilder.append("KW2199 : 'KW' '2199';\n"); - grammarBuilder.append("KW2200 : 'KW' '2200';\n"); - grammarBuilder.append("KW2201 : 'KW' '2201';\n"); - grammarBuilder.append("KW2202 : 'KW' '2202';\n"); - grammarBuilder.append("KW2203 : 'KW' '2203';\n"); - grammarBuilder.append("KW2204 : 'KW' '2204';\n"); - grammarBuilder.append("KW2205 : 'KW' '2205';\n"); - grammarBuilder.append("KW2206 : 'KW' '2206';\n"); - grammarBuilder.append("KW2207 : 'KW' '2207';\n"); - grammarBuilder.append("KW2208 : 'KW' '2208';\n"); - grammarBuilder.append("KW2209 : 'KW' '2209';\n"); - grammarBuilder.append("KW2210 : 'KW' '2210';\n"); - grammarBuilder.append("KW2211 : 'KW' '2211';\n"); - grammarBuilder.append("KW2212 : 'KW' '2212';\n"); - grammarBuilder.append("KW2213 : 'KW' '2213';\n"); - grammarBuilder.append("KW2214 : 'KW' '2214';\n"); - grammarBuilder.append("KW2215 : 'KW' '2215';\n"); - grammarBuilder.append("KW2216 : 'KW' '2216';\n"); - grammarBuilder.append("KW2217 : 'KW' '2217';\n"); - grammarBuilder.append("KW2218 : 'KW' '2218';\n"); - grammarBuilder.append("KW2219 : 'KW' '2219';\n"); - grammarBuilder.append("KW2220 : 'KW' '2220';\n"); - grammarBuilder.append("KW2221 : 'KW' '2221';\n"); - grammarBuilder.append("KW2222 : 'KW' '2222';\n"); - grammarBuilder.append("KW2223 : 'KW' '2223';\n"); - grammarBuilder.append("KW2224 : 'KW' '2224';\n"); - grammarBuilder.append("KW2225 : 'KW' '2225';\n"); - grammarBuilder.append("KW2226 : 'KW' '2226';\n"); - grammarBuilder.append("KW2227 : 'KW' '2227';\n"); - grammarBuilder.append("KW2228 : 'KW' '2228';\n"); - grammarBuilder.append("KW2229 : 'KW' '2229';\n"); - grammarBuilder.append("KW2230 : 'KW' '2230';\n"); - grammarBuilder.append("KW2231 : 'KW' '2231';\n"); - grammarBuilder.append("KW2232 : 'KW' '2232';\n"); - grammarBuilder.append("KW2233 : 'KW' '2233';\n"); - grammarBuilder.append("KW2234 : 'KW' '2234';\n"); - grammarBuilder.append("KW2235 : 'KW' '2235';\n"); - grammarBuilder.append("KW2236 : 'KW' '2236';\n"); - grammarBuilder.append("KW2237 : 'KW' '2237';\n"); - grammarBuilder.append("KW2238 : 'KW' '2238';\n"); - grammarBuilder.append("KW2239 : 'KW' '2239';\n"); - grammarBuilder.append("KW2240 : 'KW' '2240';\n"); - grammarBuilder.append("KW2241 : 'KW' '2241';\n"); - grammarBuilder.append("KW2242 : 'KW' '2242';\n"); - grammarBuilder.append("KW2243 : 'KW' '2243';\n"); - grammarBuilder.append("KW2244 : 'KW' '2244';\n"); - grammarBuilder.append("KW2245 : 'KW' '2245';\n"); - grammarBuilder.append("KW2246 : 'KW' '2246';\n"); - grammarBuilder.append("KW2247 : 'KW' '2247';\n"); - grammarBuilder.append("KW2248 : 'KW' '2248';\n"); - grammarBuilder.append("KW2249 : 'KW' '2249';\n"); - grammarBuilder.append("KW2250 : 'KW' '2250';\n"); - grammarBuilder.append("KW2251 : 'KW' '2251';\n"); - grammarBuilder.append("KW2252 : 'KW' '2252';\n"); - grammarBuilder.append("KW2253 : 'KW' '2253';\n"); - grammarBuilder.append("KW2254 : 'KW' '2254';\n"); - grammarBuilder.append("KW2255 : 'KW' '2255';\n"); - grammarBuilder.append("KW2256 : 'KW' '2256';\n"); - grammarBuilder.append("KW2257 : 'KW' '2257';\n"); - grammarBuilder.append("KW2258 : 'KW' '2258';\n"); - grammarBuilder.append("KW2259 : 'KW' '2259';\n"); - grammarBuilder.append("KW2260 : 'KW' '2260';\n"); - grammarBuilder.append("KW2261 : 'KW' '2261';\n"); - grammarBuilder.append("KW2262 : 'KW' '2262';\n"); - grammarBuilder.append("KW2263 : 'KW' '2263';\n"); - grammarBuilder.append("KW2264 : 'KW' '2264';\n"); - grammarBuilder.append("KW2265 : 'KW' '2265';\n"); - grammarBuilder.append("KW2266 : 'KW' '2266';\n"); - grammarBuilder.append("KW2267 : 'KW' '2267';\n"); - grammarBuilder.append("KW2268 : 'KW' '2268';\n"); - grammarBuilder.append("KW2269 : 'KW' '2269';\n"); - grammarBuilder.append("KW2270 : 'KW' '2270';\n"); - grammarBuilder.append("KW2271 : 'KW' '2271';\n"); - grammarBuilder.append("KW2272 : 'KW' '2272';\n"); - grammarBuilder.append("KW2273 : 'KW' '2273';\n"); - grammarBuilder.append("KW2274 : 'KW' '2274';\n"); - grammarBuilder.append("KW2275 : 'KW' '2275';\n"); - grammarBuilder.append("KW2276 : 'KW' '2276';\n"); - grammarBuilder.append("KW2277 : 'KW' '2277';\n"); - grammarBuilder.append("KW2278 : 'KW' '2278';\n"); - grammarBuilder.append("KW2279 : 'KW' '2279';\n"); - grammarBuilder.append("KW2280 : 'KW' '2280';\n"); - grammarBuilder.append("KW2281 : 'KW' '2281';\n"); - grammarBuilder.append("KW2282 : 'KW' '2282';\n"); - grammarBuilder.append("KW2283 : 'KW' '2283';\n"); - grammarBuilder.append("KW2284 : 'KW' '2284';\n"); - grammarBuilder.append("KW2285 : 'KW' '2285';\n"); - grammarBuilder.append("KW2286 : 'KW' '2286';\n"); - grammarBuilder.append("KW2287 : 'KW' '2287';\n"); - grammarBuilder.append("KW2288 : 'KW' '2288';\n"); - grammarBuilder.append("KW2289 : 'KW' '2289';\n"); - grammarBuilder.append("KW2290 : 'KW' '2290';\n"); - grammarBuilder.append("KW2291 : 'KW' '2291';\n"); - grammarBuilder.append("KW2292 : 'KW' '2292';\n"); - grammarBuilder.append("KW2293 : 'KW' '2293';\n"); - grammarBuilder.append("KW2294 : 'KW' '2294';\n"); - grammarBuilder.append("KW2295 : 'KW' '2295';\n"); - grammarBuilder.append("KW2296 : 'KW' '2296';\n"); - grammarBuilder.append("KW2297 : 'KW' '2297';\n"); - grammarBuilder.append("KW2298 : 'KW' '2298';\n"); - grammarBuilder.append("KW2299 : 'KW' '2299';\n"); - grammarBuilder.append("KW2300 : 'KW' '2300';\n"); - grammarBuilder.append("KW2301 : 'KW' '2301';\n"); - grammarBuilder.append("KW2302 : 'KW' '2302';\n"); - grammarBuilder.append("KW2303 : 'KW' '2303';\n"); - grammarBuilder.append("KW2304 : 'KW' '2304';\n"); - grammarBuilder.append("KW2305 : 'KW' '2305';\n"); - grammarBuilder.append("KW2306 : 'KW' '2306';\n"); - grammarBuilder.append("KW2307 : 'KW' '2307';\n"); - grammarBuilder.append("KW2308 : 'KW' '2308';\n"); - grammarBuilder.append("KW2309 : 'KW' '2309';\n"); - grammarBuilder.append("KW2310 : 'KW' '2310';\n"); - grammarBuilder.append("KW2311 : 'KW' '2311';\n"); - grammarBuilder.append("KW2312 : 'KW' '2312';\n"); - grammarBuilder.append("KW2313 : 'KW' '2313';\n"); - grammarBuilder.append("KW2314 : 'KW' '2314';\n"); - grammarBuilder.append("KW2315 : 'KW' '2315';\n"); - grammarBuilder.append("KW2316 : 'KW' '2316';\n"); - grammarBuilder.append("KW2317 : 'KW' '2317';\n"); - grammarBuilder.append("KW2318 : 'KW' '2318';\n"); - grammarBuilder.append("KW2319 : 'KW' '2319';\n"); - grammarBuilder.append("KW2320 : 'KW' '2320';\n"); - grammarBuilder.append("KW2321 : 'KW' '2321';\n"); - grammarBuilder.append("KW2322 : 'KW' '2322';\n"); - grammarBuilder.append("KW2323 : 'KW' '2323';\n"); - grammarBuilder.append("KW2324 : 'KW' '2324';\n"); - grammarBuilder.append("KW2325 : 'KW' '2325';\n"); - grammarBuilder.append("KW2326 : 'KW' '2326';\n"); - grammarBuilder.append("KW2327 : 'KW' '2327';\n"); - grammarBuilder.append("KW2328 : 'KW' '2328';\n"); - grammarBuilder.append("KW2329 : 'KW' '2329';\n"); - grammarBuilder.append("KW2330 : 'KW' '2330';\n"); - grammarBuilder.append("KW2331 : 'KW' '2331';\n"); - grammarBuilder.append("KW2332 : 'KW' '2332';\n"); - grammarBuilder.append("KW2333 : 'KW' '2333';\n"); - grammarBuilder.append("KW2334 : 'KW' '2334';\n"); - grammarBuilder.append("KW2335 : 'KW' '2335';\n"); - grammarBuilder.append("KW2336 : 'KW' '2336';\n"); - grammarBuilder.append("KW2337 : 'KW' '2337';\n"); - grammarBuilder.append("KW2338 : 'KW' '2338';\n"); - grammarBuilder.append("KW2339 : 'KW' '2339';\n"); - grammarBuilder.append("KW2340 : 'KW' '2340';\n"); - grammarBuilder.append("KW2341 : 'KW' '2341';\n"); - grammarBuilder.append("KW2342 : 'KW' '2342';\n"); - grammarBuilder.append("KW2343 : 'KW' '2343';\n"); - grammarBuilder.append("KW2344 : 'KW' '2344';\n"); - grammarBuilder.append("KW2345 : 'KW' '2345';\n"); - grammarBuilder.append("KW2346 : 'KW' '2346';\n"); - grammarBuilder.append("KW2347 : 'KW' '2347';\n"); - grammarBuilder.append("KW2348 : 'KW' '2348';\n"); - grammarBuilder.append("KW2349 : 'KW' '2349';\n"); - grammarBuilder.append("KW2350 : 'KW' '2350';\n"); - grammarBuilder.append("KW2351 : 'KW' '2351';\n"); - grammarBuilder.append("KW2352 : 'KW' '2352';\n"); - grammarBuilder.append("KW2353 : 'KW' '2353';\n"); - grammarBuilder.append("KW2354 : 'KW' '2354';\n"); - grammarBuilder.append("KW2355 : 'KW' '2355';\n"); - grammarBuilder.append("KW2356 : 'KW' '2356';\n"); - grammarBuilder.append("KW2357 : 'KW' '2357';\n"); - grammarBuilder.append("KW2358 : 'KW' '2358';\n"); - grammarBuilder.append("KW2359 : 'KW' '2359';\n"); - grammarBuilder.append("KW2360 : 'KW' '2360';\n"); - grammarBuilder.append("KW2361 : 'KW' '2361';\n"); - grammarBuilder.append("KW2362 : 'KW' '2362';\n"); - grammarBuilder.append("KW2363 : 'KW' '2363';\n"); - grammarBuilder.append("KW2364 : 'KW' '2364';\n"); - grammarBuilder.append("KW2365 : 'KW' '2365';\n"); - grammarBuilder.append("KW2366 : 'KW' '2366';\n"); - grammarBuilder.append("KW2367 : 'KW' '2367';\n"); - grammarBuilder.append("KW2368 : 'KW' '2368';\n"); - grammarBuilder.append("KW2369 : 'KW' '2369';\n"); - grammarBuilder.append("KW2370 : 'KW' '2370';\n"); - grammarBuilder.append("KW2371 : 'KW' '2371';\n"); - grammarBuilder.append("KW2372 : 'KW' '2372';\n"); - grammarBuilder.append("KW2373 : 'KW' '2373';\n"); - grammarBuilder.append("KW2374 : 'KW' '2374';\n"); - grammarBuilder.append("KW2375 : 'KW' '2375';\n"); - grammarBuilder.append("KW2376 : 'KW' '2376';\n"); - grammarBuilder.append("KW2377 : 'KW' '2377';\n"); - grammarBuilder.append("KW2378 : 'KW' '2378';\n"); - grammarBuilder.append("KW2379 : 'KW' '2379';\n"); - grammarBuilder.append("KW2380 : 'KW' '2380';\n"); - grammarBuilder.append("KW2381 : 'KW' '2381';\n"); - grammarBuilder.append("KW2382 : 'KW' '2382';\n"); - grammarBuilder.append("KW2383 : 'KW' '2383';\n"); - grammarBuilder.append("KW2384 : 'KW' '2384';\n"); - grammarBuilder.append("KW2385 : 'KW' '2385';\n"); - grammarBuilder.append("KW2386 : 'KW' '2386';\n"); - grammarBuilder.append("KW2387 : 'KW' '2387';\n"); - grammarBuilder.append("KW2388 : 'KW' '2388';\n"); - grammarBuilder.append("KW2389 : 'KW' '2389';\n"); - grammarBuilder.append("KW2390 : 'KW' '2390';\n"); - grammarBuilder.append("KW2391 : 'KW' '2391';\n"); - grammarBuilder.append("KW2392 : 'KW' '2392';\n"); - grammarBuilder.append("KW2393 : 'KW' '2393';\n"); - grammarBuilder.append("KW2394 : 'KW' '2394';\n"); - grammarBuilder.append("KW2395 : 'KW' '2395';\n"); - grammarBuilder.append("KW2396 : 'KW' '2396';\n"); - grammarBuilder.append("KW2397 : 'KW' '2397';\n"); - grammarBuilder.append("KW2398 : 'KW' '2398';\n"); - grammarBuilder.append("KW2399 : 'KW' '2399';\n"); - grammarBuilder.append("KW2400 : 'KW' '2400';\n"); - grammarBuilder.append("KW2401 : 'KW' '2401';\n"); - grammarBuilder.append("KW2402 : 'KW' '2402';\n"); - grammarBuilder.append("KW2403 : 'KW' '2403';\n"); - grammarBuilder.append("KW2404 : 'KW' '2404';\n"); - grammarBuilder.append("KW2405 : 'KW' '2405';\n"); - grammarBuilder.append("KW2406 : 'KW' '2406';\n"); - grammarBuilder.append("KW2407 : 'KW' '2407';\n"); - grammarBuilder.append("KW2408 : 'KW' '2408';\n"); - grammarBuilder.append("KW2409 : 'KW' '2409';\n"); - grammarBuilder.append("KW2410 : 'KW' '2410';\n"); - grammarBuilder.append("KW2411 : 'KW' '2411';\n"); - grammarBuilder.append("KW2412 : 'KW' '2412';\n"); - grammarBuilder.append("KW2413 : 'KW' '2413';\n"); - grammarBuilder.append("KW2414 : 'KW' '2414';\n"); - grammarBuilder.append("KW2415 : 'KW' '2415';\n"); - grammarBuilder.append("KW2416 : 'KW' '2416';\n"); - grammarBuilder.append("KW2417 : 'KW' '2417';\n"); - grammarBuilder.append("KW2418 : 'KW' '2418';\n"); - grammarBuilder.append("KW2419 : 'KW' '2419';\n"); - grammarBuilder.append("KW2420 : 'KW' '2420';\n"); - grammarBuilder.append("KW2421 : 'KW' '2421';\n"); - grammarBuilder.append("KW2422 : 'KW' '2422';\n"); - grammarBuilder.append("KW2423 : 'KW' '2423';\n"); - grammarBuilder.append("KW2424 : 'KW' '2424';\n"); - grammarBuilder.append("KW2425 : 'KW' '2425';\n"); - grammarBuilder.append("KW2426 : 'KW' '2426';\n"); - grammarBuilder.append("KW2427 : 'KW' '2427';\n"); - grammarBuilder.append("KW2428 : 'KW' '2428';\n"); - grammarBuilder.append("KW2429 : 'KW' '2429';\n"); - grammarBuilder.append("KW2430 : 'KW' '2430';\n"); - grammarBuilder.append("KW2431 : 'KW' '2431';\n"); - grammarBuilder.append("KW2432 : 'KW' '2432';\n"); - grammarBuilder.append("KW2433 : 'KW' '2433';\n"); - grammarBuilder.append("KW2434 : 'KW' '2434';\n"); - grammarBuilder.append("KW2435 : 'KW' '2435';\n"); - grammarBuilder.append("KW2436 : 'KW' '2436';\n"); - grammarBuilder.append("KW2437 : 'KW' '2437';\n"); - grammarBuilder.append("KW2438 : 'KW' '2438';\n"); - grammarBuilder.append("KW2439 : 'KW' '2439';\n"); - grammarBuilder.append("KW2440 : 'KW' '2440';\n"); - grammarBuilder.append("KW2441 : 'KW' '2441';\n"); - grammarBuilder.append("KW2442 : 'KW' '2442';\n"); - grammarBuilder.append("KW2443 : 'KW' '2443';\n"); - grammarBuilder.append("KW2444 : 'KW' '2444';\n"); - grammarBuilder.append("KW2445 : 'KW' '2445';\n"); - grammarBuilder.append("KW2446 : 'KW' '2446';\n"); - grammarBuilder.append("KW2447 : 'KW' '2447';\n"); - grammarBuilder.append("KW2448 : 'KW' '2448';\n"); - grammarBuilder.append("KW2449 : 'KW' '2449';\n"); - grammarBuilder.append("KW2450 : 'KW' '2450';\n"); - grammarBuilder.append("KW2451 : 'KW' '2451';\n"); - grammarBuilder.append("KW2452 : 'KW' '2452';\n"); - grammarBuilder.append("KW2453 : 'KW' '2453';\n"); - grammarBuilder.append("KW2454 : 'KW' '2454';\n"); - grammarBuilder.append("KW2455 : 'KW' '2455';\n"); - grammarBuilder.append("KW2456 : 'KW' '2456';\n"); - grammarBuilder.append("KW2457 : 'KW' '2457';\n"); - grammarBuilder.append("KW2458 : 'KW' '2458';\n"); - grammarBuilder.append("KW2459 : 'KW' '2459';\n"); - grammarBuilder.append("KW2460 : 'KW' '2460';\n"); - grammarBuilder.append("KW2461 : 'KW' '2461';\n"); - grammarBuilder.append("KW2462 : 'KW' '2462';\n"); - grammarBuilder.append("KW2463 : 'KW' '2463';\n"); - grammarBuilder.append("KW2464 : 'KW' '2464';\n"); - grammarBuilder.append("KW2465 : 'KW' '2465';\n"); - grammarBuilder.append("KW2466 : 'KW' '2466';\n"); - grammarBuilder.append("KW2467 : 'KW' '2467';\n"); - grammarBuilder.append("KW2468 : 'KW' '2468';\n"); - grammarBuilder.append("KW2469 : 'KW' '2469';\n"); - grammarBuilder.append("KW2470 : 'KW' '2470';\n"); - grammarBuilder.append("KW2471 : 'KW' '2471';\n"); - grammarBuilder.append("KW2472 : 'KW' '2472';\n"); - grammarBuilder.append("KW2473 : 'KW' '2473';\n"); - grammarBuilder.append("KW2474 : 'KW' '2474';\n"); - grammarBuilder.append("KW2475 : 'KW' '2475';\n"); - grammarBuilder.append("KW2476 : 'KW' '2476';\n"); - grammarBuilder.append("KW2477 : 'KW' '2477';\n"); - grammarBuilder.append("KW2478 : 'KW' '2478';\n"); - grammarBuilder.append("KW2479 : 'KW' '2479';\n"); - grammarBuilder.append("KW2480 : 'KW' '2480';\n"); - grammarBuilder.append("KW2481 : 'KW' '2481';\n"); - grammarBuilder.append("KW2482 : 'KW' '2482';\n"); - grammarBuilder.append("KW2483 : 'KW' '2483';\n"); - grammarBuilder.append("KW2484 : 'KW' '2484';\n"); - grammarBuilder.append("KW2485 : 'KW' '2485';\n"); - grammarBuilder.append("KW2486 : 'KW' '2486';\n"); - grammarBuilder.append("KW2487 : 'KW' '2487';\n"); - grammarBuilder.append("KW2488 : 'KW' '2488';\n"); - grammarBuilder.append("KW2489 : 'KW' '2489';\n"); - grammarBuilder.append("KW2490 : 'KW' '2490';\n"); - grammarBuilder.append("KW2491 : 'KW' '2491';\n"); - grammarBuilder.append("KW2492 : 'KW' '2492';\n"); - grammarBuilder.append("KW2493 : 'KW' '2493';\n"); - grammarBuilder.append("KW2494 : 'KW' '2494';\n"); - grammarBuilder.append("KW2495 : 'KW' '2495';\n"); - grammarBuilder.append("KW2496 : 'KW' '2496';\n"); - grammarBuilder.append("KW2497 : 'KW' '2497';\n"); - grammarBuilder.append("KW2498 : 'KW' '2498';\n"); - grammarBuilder.append("KW2499 : 'KW' '2499';\n"); - grammarBuilder.append("KW2500 : 'KW' '2500';\n"); - grammarBuilder.append("KW2501 : 'KW' '2501';\n"); - grammarBuilder.append("KW2502 : 'KW' '2502';\n"); - grammarBuilder.append("KW2503 : 'KW' '2503';\n"); - grammarBuilder.append("KW2504 : 'KW' '2504';\n"); - grammarBuilder.append("KW2505 : 'KW' '2505';\n"); - grammarBuilder.append("KW2506 : 'KW' '2506';\n"); - grammarBuilder.append("KW2507 : 'KW' '2507';\n"); - grammarBuilder.append("KW2508 : 'KW' '2508';\n"); - grammarBuilder.append("KW2509 : 'KW' '2509';\n"); - grammarBuilder.append("KW2510 : 'KW' '2510';\n"); - grammarBuilder.append("KW2511 : 'KW' '2511';\n"); - grammarBuilder.append("KW2512 : 'KW' '2512';\n"); - grammarBuilder.append("KW2513 : 'KW' '2513';\n"); - grammarBuilder.append("KW2514 : 'KW' '2514';\n"); - grammarBuilder.append("KW2515 : 'KW' '2515';\n"); - grammarBuilder.append("KW2516 : 'KW' '2516';\n"); - grammarBuilder.append("KW2517 : 'KW' '2517';\n"); - grammarBuilder.append("KW2518 : 'KW' '2518';\n"); - grammarBuilder.append("KW2519 : 'KW' '2519';\n"); - grammarBuilder.append("KW2520 : 'KW' '2520';\n"); - grammarBuilder.append("KW2521 : 'KW' '2521';\n"); - grammarBuilder.append("KW2522 : 'KW' '2522';\n"); - grammarBuilder.append("KW2523 : 'KW' '2523';\n"); - grammarBuilder.append("KW2524 : 'KW' '2524';\n"); - grammarBuilder.append("KW2525 : 'KW' '2525';\n"); - grammarBuilder.append("KW2526 : 'KW' '2526';\n"); - grammarBuilder.append("KW2527 : 'KW' '2527';\n"); - grammarBuilder.append("KW2528 : 'KW' '2528';\n"); - grammarBuilder.append("KW2529 : 'KW' '2529';\n"); - grammarBuilder.append("KW2530 : 'KW' '2530';\n"); - grammarBuilder.append("KW2531 : 'KW' '2531';\n"); - grammarBuilder.append("KW2532 : 'KW' '2532';\n"); - grammarBuilder.append("KW2533 : 'KW' '2533';\n"); - grammarBuilder.append("KW2534 : 'KW' '2534';\n"); - grammarBuilder.append("KW2535 : 'KW' '2535';\n"); - grammarBuilder.append("KW2536 : 'KW' '2536';\n"); - grammarBuilder.append("KW2537 : 'KW' '2537';\n"); - grammarBuilder.append("KW2538 : 'KW' '2538';\n"); - grammarBuilder.append("KW2539 : 'KW' '2539';\n"); - grammarBuilder.append("KW2540 : 'KW' '2540';\n"); - grammarBuilder.append("KW2541 : 'KW' '2541';\n"); - grammarBuilder.append("KW2542 : 'KW' '2542';\n"); - grammarBuilder.append("KW2543 : 'KW' '2543';\n"); - grammarBuilder.append("KW2544 : 'KW' '2544';\n"); - grammarBuilder.append("KW2545 : 'KW' '2545';\n"); - grammarBuilder.append("KW2546 : 'KW' '2546';\n"); - grammarBuilder.append("KW2547 : 'KW' '2547';\n"); - grammarBuilder.append("KW2548 : 'KW' '2548';\n"); - grammarBuilder.append("KW2549 : 'KW' '2549';\n"); - grammarBuilder.append("KW2550 : 'KW' '2550';\n"); - grammarBuilder.append("KW2551 : 'KW' '2551';\n"); - grammarBuilder.append("KW2552 : 'KW' '2552';\n"); - grammarBuilder.append("KW2553 : 'KW' '2553';\n"); - grammarBuilder.append("KW2554 : 'KW' '2554';\n"); - grammarBuilder.append("KW2555 : 'KW' '2555';\n"); - grammarBuilder.append("KW2556 : 'KW' '2556';\n"); - grammarBuilder.append("KW2557 : 'KW' '2557';\n"); - grammarBuilder.append("KW2558 : 'KW' '2558';\n"); - grammarBuilder.append("KW2559 : 'KW' '2559';\n"); - grammarBuilder.append("KW2560 : 'KW' '2560';\n"); - grammarBuilder.append("KW2561 : 'KW' '2561';\n"); - grammarBuilder.append("KW2562 : 'KW' '2562';\n"); - grammarBuilder.append("KW2563 : 'KW' '2563';\n"); - grammarBuilder.append("KW2564 : 'KW' '2564';\n"); - grammarBuilder.append("KW2565 : 'KW' '2565';\n"); - grammarBuilder.append("KW2566 : 'KW' '2566';\n"); - grammarBuilder.append("KW2567 : 'KW' '2567';\n"); - grammarBuilder.append("KW2568 : 'KW' '2568';\n"); - grammarBuilder.append("KW2569 : 'KW' '2569';\n"); - grammarBuilder.append("KW2570 : 'KW' '2570';\n"); - grammarBuilder.append("KW2571 : 'KW' '2571';\n"); - grammarBuilder.append("KW2572 : 'KW' '2572';\n"); - grammarBuilder.append("KW2573 : 'KW' '2573';\n"); - grammarBuilder.append("KW2574 : 'KW' '2574';\n"); - grammarBuilder.append("KW2575 : 'KW' '2575';\n"); - grammarBuilder.append("KW2576 : 'KW' '2576';\n"); - grammarBuilder.append("KW2577 : 'KW' '2577';\n"); - grammarBuilder.append("KW2578 : 'KW' '2578';\n"); - grammarBuilder.append("KW2579 : 'KW' '2579';\n"); - grammarBuilder.append("KW2580 : 'KW' '2580';\n"); - grammarBuilder.append("KW2581 : 'KW' '2581';\n"); - grammarBuilder.append("KW2582 : 'KW' '2582';\n"); - grammarBuilder.append("KW2583 : 'KW' '2583';\n"); - grammarBuilder.append("KW2584 : 'KW' '2584';\n"); - grammarBuilder.append("KW2585 : 'KW' '2585';\n"); - grammarBuilder.append("KW2586 : 'KW' '2586';\n"); - grammarBuilder.append("KW2587 : 'KW' '2587';\n"); - grammarBuilder.append("KW2588 : 'KW' '2588';\n"); - grammarBuilder.append("KW2589 : 'KW' '2589';\n"); - grammarBuilder.append("KW2590 : 'KW' '2590';\n"); - grammarBuilder.append("KW2591 : 'KW' '2591';\n"); - grammarBuilder.append("KW2592 : 'KW' '2592';\n"); - grammarBuilder.append("KW2593 : 'KW' '2593';\n"); - grammarBuilder.append("KW2594 : 'KW' '2594';\n"); - grammarBuilder.append("KW2595 : 'KW' '2595';\n"); - grammarBuilder.append("KW2596 : 'KW' '2596';\n"); - grammarBuilder.append("KW2597 : 'KW' '2597';\n"); - grammarBuilder.append("KW2598 : 'KW' '2598';\n"); - grammarBuilder.append("KW2599 : 'KW' '2599';\n"); - grammarBuilder.append("KW2600 : 'KW' '2600';\n"); - grammarBuilder.append("KW2601 : 'KW' '2601';\n"); - grammarBuilder.append("KW2602 : 'KW' '2602';\n"); - grammarBuilder.append("KW2603 : 'KW' '2603';\n"); - grammarBuilder.append("KW2604 : 'KW' '2604';\n"); - grammarBuilder.append("KW2605 : 'KW' '2605';\n"); - grammarBuilder.append("KW2606 : 'KW' '2606';\n"); - grammarBuilder.append("KW2607 : 'KW' '2607';\n"); - grammarBuilder.append("KW2608 : 'KW' '2608';\n"); - grammarBuilder.append("KW2609 : 'KW' '2609';\n"); - grammarBuilder.append("KW2610 : 'KW' '2610';\n"); - grammarBuilder.append("KW2611 : 'KW' '2611';\n"); - grammarBuilder.append("KW2612 : 'KW' '2612';\n"); - grammarBuilder.append("KW2613 : 'KW' '2613';\n"); - grammarBuilder.append("KW2614 : 'KW' '2614';\n"); - grammarBuilder.append("KW2615 : 'KW' '2615';\n"); - grammarBuilder.append("KW2616 : 'KW' '2616';\n"); - grammarBuilder.append("KW2617 : 'KW' '2617';\n"); - grammarBuilder.append("KW2618 : 'KW' '2618';\n"); - grammarBuilder.append("KW2619 : 'KW' '2619';\n"); - grammarBuilder.append("KW2620 : 'KW' '2620';\n"); - grammarBuilder.append("KW2621 : 'KW' '2621';\n"); - grammarBuilder.append("KW2622 : 'KW' '2622';\n"); - grammarBuilder.append("KW2623 : 'KW' '2623';\n"); - grammarBuilder.append("KW2624 : 'KW' '2624';\n"); - grammarBuilder.append("KW2625 : 'KW' '2625';\n"); - grammarBuilder.append("KW2626 : 'KW' '2626';\n"); - grammarBuilder.append("KW2627 : 'KW' '2627';\n"); - grammarBuilder.append("KW2628 : 'KW' '2628';\n"); - grammarBuilder.append("KW2629 : 'KW' '2629';\n"); - grammarBuilder.append("KW2630 : 'KW' '2630';\n"); - grammarBuilder.append("KW2631 : 'KW' '2631';\n"); - grammarBuilder.append("KW2632 : 'KW' '2632';\n"); - grammarBuilder.append("KW2633 : 'KW' '2633';\n"); - grammarBuilder.append("KW2634 : 'KW' '2634';\n"); - grammarBuilder.append("KW2635 : 'KW' '2635';\n"); - grammarBuilder.append("KW2636 : 'KW' '2636';\n"); - grammarBuilder.append("KW2637 : 'KW' '2637';\n"); - grammarBuilder.append("KW2638 : 'KW' '2638';\n"); - grammarBuilder.append("KW2639 : 'KW' '2639';\n"); - grammarBuilder.append("KW2640 : 'KW' '2640';\n"); - grammarBuilder.append("KW2641 : 'KW' '2641';\n"); - grammarBuilder.append("KW2642 : 'KW' '2642';\n"); - grammarBuilder.append("KW2643 : 'KW' '2643';\n"); - grammarBuilder.append("KW2644 : 'KW' '2644';\n"); - grammarBuilder.append("KW2645 : 'KW' '2645';\n"); - grammarBuilder.append("KW2646 : 'KW' '2646';\n"); - grammarBuilder.append("KW2647 : 'KW' '2647';\n"); - grammarBuilder.append("KW2648 : 'KW' '2648';\n"); - grammarBuilder.append("KW2649 : 'KW' '2649';\n"); - grammarBuilder.append("KW2650 : 'KW' '2650';\n"); - grammarBuilder.append("KW2651 : 'KW' '2651';\n"); - grammarBuilder.append("KW2652 : 'KW' '2652';\n"); - grammarBuilder.append("KW2653 : 'KW' '2653';\n"); - grammarBuilder.append("KW2654 : 'KW' '2654';\n"); - grammarBuilder.append("KW2655 : 'KW' '2655';\n"); - grammarBuilder.append("KW2656 : 'KW' '2656';\n"); - grammarBuilder.append("KW2657 : 'KW' '2657';\n"); - grammarBuilder.append("KW2658 : 'KW' '2658';\n"); - grammarBuilder.append("KW2659 : 'KW' '2659';\n"); - grammarBuilder.append("KW2660 : 'KW' '2660';\n"); - grammarBuilder.append("KW2661 : 'KW' '2661';\n"); - grammarBuilder.append("KW2662 : 'KW' '2662';\n"); - grammarBuilder.append("KW2663 : 'KW' '2663';\n"); - grammarBuilder.append("KW2664 : 'KW' '2664';\n"); - grammarBuilder.append("KW2665 : 'KW' '2665';\n"); - grammarBuilder.append("KW2666 : 'KW' '2666';\n"); - grammarBuilder.append("KW2667 : 'KW' '2667';\n"); - grammarBuilder.append("KW2668 : 'KW' '2668';\n"); - grammarBuilder.append("KW2669 : 'KW' '2669';\n"); - grammarBuilder.append("KW2670 : 'KW' '2670';\n"); - grammarBuilder.append("KW2671 : 'KW' '2671';\n"); - grammarBuilder.append("KW2672 : 'KW' '2672';\n"); - grammarBuilder.append("KW2673 : 'KW' '2673';\n"); - grammarBuilder.append("KW2674 : 'KW' '2674';\n"); - grammarBuilder.append("KW2675 : 'KW' '2675';\n"); - grammarBuilder.append("KW2676 : 'KW' '2676';\n"); - grammarBuilder.append("KW2677 : 'KW' '2677';\n"); - grammarBuilder.append("KW2678 : 'KW' '2678';\n"); - grammarBuilder.append("KW2679 : 'KW' '2679';\n"); - grammarBuilder.append("KW2680 : 'KW' '2680';\n"); - grammarBuilder.append("KW2681 : 'KW' '2681';\n"); - grammarBuilder.append("KW2682 : 'KW' '2682';\n"); - grammarBuilder.append("KW2683 : 'KW' '2683';\n"); - grammarBuilder.append("KW2684 : 'KW' '2684';\n"); - grammarBuilder.append("KW2685 : 'KW' '2685';\n"); - grammarBuilder.append("KW2686 : 'KW' '2686';\n"); - grammarBuilder.append("KW2687 : 'KW' '2687';\n"); - grammarBuilder.append("KW2688 : 'KW' '2688';\n"); - grammarBuilder.append("KW2689 : 'KW' '2689';\n"); - grammarBuilder.append("KW2690 : 'KW' '2690';\n"); - grammarBuilder.append("KW2691 : 'KW' '2691';\n"); - grammarBuilder.append("KW2692 : 'KW' '2692';\n"); - grammarBuilder.append("KW2693 : 'KW' '2693';\n"); - grammarBuilder.append("KW2694 : 'KW' '2694';\n"); - grammarBuilder.append("KW2695 : 'KW' '2695';\n"); - grammarBuilder.append("KW2696 : 'KW' '2696';\n"); - grammarBuilder.append("KW2697 : 'KW' '2697';\n"); - grammarBuilder.append("KW2698 : 'KW' '2698';\n"); - grammarBuilder.append("KW2699 : 'KW' '2699';\n"); - grammarBuilder.append("KW2700 : 'KW' '2700';\n"); - grammarBuilder.append("KW2701 : 'KW' '2701';\n"); - grammarBuilder.append("KW2702 : 'KW' '2702';\n"); - grammarBuilder.append("KW2703 : 'KW' '2703';\n"); - grammarBuilder.append("KW2704 : 'KW' '2704';\n"); - grammarBuilder.append("KW2705 : 'KW' '2705';\n"); - grammarBuilder.append("KW2706 : 'KW' '2706';\n"); - grammarBuilder.append("KW2707 : 'KW' '2707';\n"); - grammarBuilder.append("KW2708 : 'KW' '2708';\n"); - grammarBuilder.append("KW2709 : 'KW' '2709';\n"); - grammarBuilder.append("KW2710 : 'KW' '2710';\n"); - grammarBuilder.append("KW2711 : 'KW' '2711';\n"); - grammarBuilder.append("KW2712 : 'KW' '2712';\n"); - grammarBuilder.append("KW2713 : 'KW' '2713';\n"); - grammarBuilder.append("KW2714 : 'KW' '2714';\n"); - grammarBuilder.append("KW2715 : 'KW' '2715';\n"); - grammarBuilder.append("KW2716 : 'KW' '2716';\n"); - grammarBuilder.append("KW2717 : 'KW' '2717';\n"); - grammarBuilder.append("KW2718 : 'KW' '2718';\n"); - grammarBuilder.append("KW2719 : 'KW' '2719';\n"); - grammarBuilder.append("KW2720 : 'KW' '2720';\n"); - grammarBuilder.append("KW2721 : 'KW' '2721';\n"); - grammarBuilder.append("KW2722 : 'KW' '2722';\n"); - grammarBuilder.append("KW2723 : 'KW' '2723';\n"); - grammarBuilder.append("KW2724 : 'KW' '2724';\n"); - grammarBuilder.append("KW2725 : 'KW' '2725';\n"); - grammarBuilder.append("KW2726 : 'KW' '2726';\n"); - grammarBuilder.append("KW2727 : 'KW' '2727';\n"); - grammarBuilder.append("KW2728 : 'KW' '2728';\n"); - grammarBuilder.append("KW2729 : 'KW' '2729';\n"); - grammarBuilder.append("KW2730 : 'KW' '2730';\n"); - grammarBuilder.append("KW2731 : 'KW' '2731';\n"); - grammarBuilder.append("KW2732 : 'KW' '2732';\n"); - grammarBuilder.append("KW2733 : 'KW' '2733';\n"); - grammarBuilder.append("KW2734 : 'KW' '2734';\n"); - grammarBuilder.append("KW2735 : 'KW' '2735';\n"); - grammarBuilder.append("KW2736 : 'KW' '2736';\n"); - grammarBuilder.append("KW2737 : 'KW' '2737';\n"); - grammarBuilder.append("KW2738 : 'KW' '2738';\n"); - grammarBuilder.append("KW2739 : 'KW' '2739';\n"); - grammarBuilder.append("KW2740 : 'KW' '2740';\n"); - grammarBuilder.append("KW2741 : 'KW' '2741';\n"); - grammarBuilder.append("KW2742 : 'KW' '2742';\n"); - grammarBuilder.append("KW2743 : 'KW' '2743';\n"); - grammarBuilder.append("KW2744 : 'KW' '2744';\n"); - grammarBuilder.append("KW2745 : 'KW' '2745';\n"); - grammarBuilder.append("KW2746 : 'KW' '2746';\n"); - grammarBuilder.append("KW2747 : 'KW' '2747';\n"); - grammarBuilder.append("KW2748 : 'KW' '2748';\n"); - grammarBuilder.append("KW2749 : 'KW' '2749';\n"); - grammarBuilder.append("KW2750 : 'KW' '2750';\n"); - grammarBuilder.append("KW2751 : 'KW' '2751';\n"); - grammarBuilder.append("KW2752 : 'KW' '2752';\n"); - grammarBuilder.append("KW2753 : 'KW' '2753';\n"); - grammarBuilder.append("KW2754 : 'KW' '2754';\n"); - grammarBuilder.append("KW2755 : 'KW' '2755';\n"); - grammarBuilder.append("KW2756 : 'KW' '2756';\n"); - grammarBuilder.append("KW2757 : 'KW' '2757';\n"); - grammarBuilder.append("KW2758 : 'KW' '2758';\n"); - grammarBuilder.append("KW2759 : 'KW' '2759';\n"); - grammarBuilder.append("KW2760 : 'KW' '2760';\n"); - grammarBuilder.append("KW2761 : 'KW' '2761';\n"); - grammarBuilder.append("KW2762 : 'KW' '2762';\n"); - grammarBuilder.append("KW2763 : 'KW' '2763';\n"); - grammarBuilder.append("KW2764 : 'KW' '2764';\n"); - grammarBuilder.append("KW2765 : 'KW' '2765';\n"); - grammarBuilder.append("KW2766 : 'KW' '2766';\n"); - grammarBuilder.append("KW2767 : 'KW' '2767';\n"); - grammarBuilder.append("KW2768 : 'KW' '2768';\n"); - grammarBuilder.append("KW2769 : 'KW' '2769';\n"); - grammarBuilder.append("KW2770 : 'KW' '2770';\n"); - grammarBuilder.append("KW2771 : 'KW' '2771';\n"); - grammarBuilder.append("KW2772 : 'KW' '2772';\n"); - grammarBuilder.append("KW2773 : 'KW' '2773';\n"); - grammarBuilder.append("KW2774 : 'KW' '2774';\n"); - grammarBuilder.append("KW2775 : 'KW' '2775';\n"); - grammarBuilder.append("KW2776 : 'KW' '2776';\n"); - grammarBuilder.append("KW2777 : 'KW' '2777';\n"); - grammarBuilder.append("KW2778 : 'KW' '2778';\n"); - grammarBuilder.append("KW2779 : 'KW' '2779';\n"); - grammarBuilder.append("KW2780 : 'KW' '2780';\n"); - grammarBuilder.append("KW2781 : 'KW' '2781';\n"); - grammarBuilder.append("KW2782 : 'KW' '2782';\n"); - grammarBuilder.append("KW2783 : 'KW' '2783';\n"); - grammarBuilder.append("KW2784 : 'KW' '2784';\n"); - grammarBuilder.append("KW2785 : 'KW' '2785';\n"); - grammarBuilder.append("KW2786 : 'KW' '2786';\n"); - grammarBuilder.append("KW2787 : 'KW' '2787';\n"); - grammarBuilder.append("KW2788 : 'KW' '2788';\n"); - grammarBuilder.append("KW2789 : 'KW' '2789';\n"); - grammarBuilder.append("KW2790 : 'KW' '2790';\n"); - grammarBuilder.append("KW2791 : 'KW' '2791';\n"); - grammarBuilder.append("KW2792 : 'KW' '2792';\n"); - grammarBuilder.append("KW2793 : 'KW' '2793';\n"); - grammarBuilder.append("KW2794 : 'KW' '2794';\n"); - grammarBuilder.append("KW2795 : 'KW' '2795';\n"); - grammarBuilder.append("KW2796 : 'KW' '2796';\n"); - grammarBuilder.append("KW2797 : 'KW' '2797';\n"); - grammarBuilder.append("KW2798 : 'KW' '2798';\n"); - grammarBuilder.append("KW2799 : 'KW' '2799';\n"); - grammarBuilder.append("KW2800 : 'KW' '2800';\n"); - grammarBuilder.append("KW2801 : 'KW' '2801';\n"); - grammarBuilder.append("KW2802 : 'KW' '2802';\n"); - grammarBuilder.append("KW2803 : 'KW' '2803';\n"); - grammarBuilder.append("KW2804 : 'KW' '2804';\n"); - grammarBuilder.append("KW2805 : 'KW' '2805';\n"); - grammarBuilder.append("KW2806 : 'KW' '2806';\n"); - grammarBuilder.append("KW2807 : 'KW' '2807';\n"); - grammarBuilder.append("KW2808 : 'KW' '2808';\n"); - grammarBuilder.append("KW2809 : 'KW' '2809';\n"); - grammarBuilder.append("KW2810 : 'KW' '2810';\n"); - grammarBuilder.append("KW2811 : 'KW' '2811';\n"); - grammarBuilder.append("KW2812 : 'KW' '2812';\n"); - grammarBuilder.append("KW2813 : 'KW' '2813';\n"); - grammarBuilder.append("KW2814 : 'KW' '2814';\n"); - grammarBuilder.append("KW2815 : 'KW' '2815';\n"); - grammarBuilder.append("KW2816 : 'KW' '2816';\n"); - grammarBuilder.append("KW2817 : 'KW' '2817';\n"); - grammarBuilder.append("KW2818 : 'KW' '2818';\n"); - grammarBuilder.append("KW2819 : 'KW' '2819';\n"); - grammarBuilder.append("KW2820 : 'KW' '2820';\n"); - grammarBuilder.append("KW2821 : 'KW' '2821';\n"); - grammarBuilder.append("KW2822 : 'KW' '2822';\n"); - grammarBuilder.append("KW2823 : 'KW' '2823';\n"); - grammarBuilder.append("KW2824 : 'KW' '2824';\n"); - grammarBuilder.append("KW2825 : 'KW' '2825';\n"); - grammarBuilder.append("KW2826 : 'KW' '2826';\n"); - grammarBuilder.append("KW2827 : 'KW' '2827';\n"); - grammarBuilder.append("KW2828 : 'KW' '2828';\n"); - grammarBuilder.append("KW2829 : 'KW' '2829';\n"); - grammarBuilder.append("KW2830 : 'KW' '2830';\n"); - grammarBuilder.append("KW2831 : 'KW' '2831';\n"); - grammarBuilder.append("KW2832 : 'KW' '2832';\n"); - grammarBuilder.append("KW2833 : 'KW' '2833';\n"); - grammarBuilder.append("KW2834 : 'KW' '2834';\n"); - grammarBuilder.append("KW2835 : 'KW' '2835';\n"); - grammarBuilder.append("KW2836 : 'KW' '2836';\n"); - grammarBuilder.append("KW2837 : 'KW' '2837';\n"); - grammarBuilder.append("KW2838 : 'KW' '2838';\n"); - grammarBuilder.append("KW2839 : 'KW' '2839';\n"); - grammarBuilder.append("KW2840 : 'KW' '2840';\n"); - grammarBuilder.append("KW2841 : 'KW' '2841';\n"); - grammarBuilder.append("KW2842 : 'KW' '2842';\n"); - grammarBuilder.append("KW2843 : 'KW' '2843';\n"); - grammarBuilder.append("KW2844 : 'KW' '2844';\n"); - grammarBuilder.append("KW2845 : 'KW' '2845';\n"); - grammarBuilder.append("KW2846 : 'KW' '2846';\n"); - grammarBuilder.append("KW2847 : 'KW' '2847';\n"); - grammarBuilder.append("KW2848 : 'KW' '2848';\n"); - grammarBuilder.append("KW2849 : 'KW' '2849';\n"); - grammarBuilder.append("KW2850 : 'KW' '2850';\n"); - grammarBuilder.append("KW2851 : 'KW' '2851';\n"); - grammarBuilder.append("KW2852 : 'KW' '2852';\n"); - grammarBuilder.append("KW2853 : 'KW' '2853';\n"); - grammarBuilder.append("KW2854 : 'KW' '2854';\n"); - grammarBuilder.append("KW2855 : 'KW' '2855';\n"); - grammarBuilder.append("KW2856 : 'KW' '2856';\n"); - grammarBuilder.append("KW2857 : 'KW' '2857';\n"); - grammarBuilder.append("KW2858 : 'KW' '2858';\n"); - grammarBuilder.append("KW2859 : 'KW' '2859';\n"); - grammarBuilder.append("KW2860 : 'KW' '2860';\n"); - grammarBuilder.append("KW2861 : 'KW' '2861';\n"); - grammarBuilder.append("KW2862 : 'KW' '2862';\n"); - grammarBuilder.append("KW2863 : 'KW' '2863';\n"); - grammarBuilder.append("KW2864 : 'KW' '2864';\n"); - grammarBuilder.append("KW2865 : 'KW' '2865';\n"); - grammarBuilder.append("KW2866 : 'KW' '2866';\n"); - grammarBuilder.append("KW2867 : 'KW' '2867';\n"); - grammarBuilder.append("KW2868 : 'KW' '2868';\n"); - grammarBuilder.append("KW2869 : 'KW' '2869';\n"); - grammarBuilder.append("KW2870 : 'KW' '2870';\n"); - grammarBuilder.append("KW2871 : 'KW' '2871';\n"); - grammarBuilder.append("KW2872 : 'KW' '2872';\n"); - grammarBuilder.append("KW2873 : 'KW' '2873';\n"); - grammarBuilder.append("KW2874 : 'KW' '2874';\n"); - grammarBuilder.append("KW2875 : 'KW' '2875';\n"); - grammarBuilder.append("KW2876 : 'KW' '2876';\n"); - grammarBuilder.append("KW2877 : 'KW' '2877';\n"); - grammarBuilder.append("KW2878 : 'KW' '2878';\n"); - grammarBuilder.append("KW2879 : 'KW' '2879';\n"); - grammarBuilder.append("KW2880 : 'KW' '2880';\n"); - grammarBuilder.append("KW2881 : 'KW' '2881';\n"); - grammarBuilder.append("KW2882 : 'KW' '2882';\n"); - grammarBuilder.append("KW2883 : 'KW' '2883';\n"); - grammarBuilder.append("KW2884 : 'KW' '2884';\n"); - grammarBuilder.append("KW2885 : 'KW' '2885';\n"); - grammarBuilder.append("KW2886 : 'KW' '2886';\n"); - grammarBuilder.append("KW2887 : 'KW' '2887';\n"); - grammarBuilder.append("KW2888 : 'KW' '2888';\n"); - grammarBuilder.append("KW2889 : 'KW' '2889';\n"); - grammarBuilder.append("KW2890 : 'KW' '2890';\n"); - grammarBuilder.append("KW2891 : 'KW' '2891';\n"); - grammarBuilder.append("KW2892 : 'KW' '2892';\n"); - grammarBuilder.append("KW2893 : 'KW' '2893';\n"); - grammarBuilder.append("KW2894 : 'KW' '2894';\n"); - grammarBuilder.append("KW2895 : 'KW' '2895';\n"); - grammarBuilder.append("KW2896 : 'KW' '2896';\n"); - grammarBuilder.append("KW2897 : 'KW' '2897';\n"); - grammarBuilder.append("KW2898 : 'KW' '2898';\n"); - grammarBuilder.append("KW2899 : 'KW' '2899';\n"); - grammarBuilder.append("KW2900 : 'KW' '2900';\n"); - grammarBuilder.append("KW2901 : 'KW' '2901';\n"); - grammarBuilder.append("KW2902 : 'KW' '2902';\n"); - grammarBuilder.append("KW2903 : 'KW' '2903';\n"); - grammarBuilder.append("KW2904 : 'KW' '2904';\n"); - grammarBuilder.append("KW2905 : 'KW' '2905';\n"); - grammarBuilder.append("KW2906 : 'KW' '2906';\n"); - grammarBuilder.append("KW2907 : 'KW' '2907';\n"); - grammarBuilder.append("KW2908 : 'KW' '2908';\n"); - grammarBuilder.append("KW2909 : 'KW' '2909';\n"); - grammarBuilder.append("KW2910 : 'KW' '2910';\n"); - grammarBuilder.append("KW2911 : 'KW' '2911';\n"); - grammarBuilder.append("KW2912 : 'KW' '2912';\n"); - grammarBuilder.append("KW2913 : 'KW' '2913';\n"); - grammarBuilder.append("KW2914 : 'KW' '2914';\n"); - grammarBuilder.append("KW2915 : 'KW' '2915';\n"); - grammarBuilder.append("KW2916 : 'KW' '2916';\n"); - grammarBuilder.append("KW2917 : 'KW' '2917';\n"); - grammarBuilder.append("KW2918 : 'KW' '2918';\n"); - grammarBuilder.append("KW2919 : 'KW' '2919';\n"); - grammarBuilder.append("KW2920 : 'KW' '2920';\n"); - grammarBuilder.append("KW2921 : 'KW' '2921';\n"); - grammarBuilder.append("KW2922 : 'KW' '2922';\n"); - grammarBuilder.append("KW2923 : 'KW' '2923';\n"); - grammarBuilder.append("KW2924 : 'KW' '2924';\n"); - grammarBuilder.append("KW2925 : 'KW' '2925';\n"); - grammarBuilder.append("KW2926 : 'KW' '2926';\n"); - grammarBuilder.append("KW2927 : 'KW' '2927';\n"); - grammarBuilder.append("KW2928 : 'KW' '2928';\n"); - grammarBuilder.append("KW2929 : 'KW' '2929';\n"); - grammarBuilder.append("KW2930 : 'KW' '2930';\n"); - grammarBuilder.append("KW2931 : 'KW' '2931';\n"); - grammarBuilder.append("KW2932 : 'KW' '2932';\n"); - grammarBuilder.append("KW2933 : 'KW' '2933';\n"); - grammarBuilder.append("KW2934 : 'KW' '2934';\n"); - grammarBuilder.append("KW2935 : 'KW' '2935';\n"); - grammarBuilder.append("KW2936 : 'KW' '2936';\n"); - grammarBuilder.append("KW2937 : 'KW' '2937';\n"); - grammarBuilder.append("KW2938 : 'KW' '2938';\n"); - grammarBuilder.append("KW2939 : 'KW' '2939';\n"); - grammarBuilder.append("KW2940 : 'KW' '2940';\n"); - grammarBuilder.append("KW2941 : 'KW' '2941';\n"); - grammarBuilder.append("KW2942 : 'KW' '2942';\n"); - grammarBuilder.append("KW2943 : 'KW' '2943';\n"); - grammarBuilder.append("KW2944 : 'KW' '2944';\n"); - grammarBuilder.append("KW2945 : 'KW' '2945';\n"); - grammarBuilder.append("KW2946 : 'KW' '2946';\n"); - grammarBuilder.append("KW2947 : 'KW' '2947';\n"); - grammarBuilder.append("KW2948 : 'KW' '2948';\n"); - grammarBuilder.append("KW2949 : 'KW' '2949';\n"); - grammarBuilder.append("KW2950 : 'KW' '2950';\n"); - grammarBuilder.append("KW2951 : 'KW' '2951';\n"); - grammarBuilder.append("KW2952 : 'KW' '2952';\n"); - grammarBuilder.append("KW2953 : 'KW' '2953';\n"); - grammarBuilder.append("KW2954 : 'KW' '2954';\n"); - grammarBuilder.append("KW2955 : 'KW' '2955';\n"); - grammarBuilder.append("KW2956 : 'KW' '2956';\n"); - grammarBuilder.append("KW2957 : 'KW' '2957';\n"); - grammarBuilder.append("KW2958 : 'KW' '2958';\n"); - grammarBuilder.append("KW2959 : 'KW' '2959';\n"); - grammarBuilder.append("KW2960 : 'KW' '2960';\n"); - grammarBuilder.append("KW2961 : 'KW' '2961';\n"); - grammarBuilder.append("KW2962 : 'KW' '2962';\n"); - grammarBuilder.append("KW2963 : 'KW' '2963';\n"); - grammarBuilder.append("KW2964 : 'KW' '2964';\n"); - grammarBuilder.append("KW2965 : 'KW' '2965';\n"); - grammarBuilder.append("KW2966 : 'KW' '2966';\n"); - grammarBuilder.append("KW2967 : 'KW' '2967';\n"); - grammarBuilder.append("KW2968 : 'KW' '2968';\n"); - grammarBuilder.append("KW2969 : 'KW' '2969';\n"); - grammarBuilder.append("KW2970 : 'KW' '2970';\n"); - grammarBuilder.append("KW2971 : 'KW' '2971';\n"); - grammarBuilder.append("KW2972 : 'KW' '2972';\n"); - grammarBuilder.append("KW2973 : 'KW' '2973';\n"); - grammarBuilder.append("KW2974 : 'KW' '2974';\n"); - grammarBuilder.append("KW2975 : 'KW' '2975';\n"); - grammarBuilder.append("KW2976 : 'KW' '2976';\n"); - grammarBuilder.append("KW2977 : 'KW' '2977';\n"); - grammarBuilder.append("KW2978 : 'KW' '2978';\n"); - grammarBuilder.append("KW2979 : 'KW' '2979';\n"); - grammarBuilder.append("KW2980 : 'KW' '2980';\n"); - grammarBuilder.append("KW2981 : 'KW' '2981';\n"); - grammarBuilder.append("KW2982 : 'KW' '2982';\n"); - grammarBuilder.append("KW2983 : 'KW' '2983';\n"); - grammarBuilder.append("KW2984 : 'KW' '2984';\n"); - grammarBuilder.append("KW2985 : 'KW' '2985';\n"); - grammarBuilder.append("KW2986 : 'KW' '2986';\n"); - grammarBuilder.append("KW2987 : 'KW' '2987';\n"); - grammarBuilder.append("KW2988 : 'KW' '2988';\n"); - grammarBuilder.append("KW2989 : 'KW' '2989';\n"); - grammarBuilder.append("KW2990 : 'KW' '2990';\n"); - grammarBuilder.append("KW2991 : 'KW' '2991';\n"); - grammarBuilder.append("KW2992 : 'KW' '2992';\n"); - grammarBuilder.append("KW2993 : 'KW' '2993';\n"); - grammarBuilder.append("KW2994 : 'KW' '2994';\n"); - grammarBuilder.append("KW2995 : 'KW' '2995';\n"); - grammarBuilder.append("KW2996 : 'KW' '2996';\n"); - grammarBuilder.append("KW2997 : 'KW' '2997';\n"); - grammarBuilder.append("KW2998 : 'KW' '2998';\n"); - grammarBuilder.append("KW2999 : 'KW' '2999';\n"); - grammarBuilder.append("KW3000 : 'KW' '3000';\n"); - grammarBuilder.append("KW3001 : 'KW' '3001';\n"); - grammarBuilder.append("KW3002 : 'KW' '3002';\n"); - grammarBuilder.append("KW3003 : 'KW' '3003';\n"); - grammarBuilder.append("KW3004 : 'KW' '3004';\n"); - grammarBuilder.append("KW3005 : 'KW' '3005';\n"); - grammarBuilder.append("KW3006 : 'KW' '3006';\n"); - grammarBuilder.append("KW3007 : 'KW' '3007';\n"); - grammarBuilder.append("KW3008 : 'KW' '3008';\n"); - grammarBuilder.append("KW3009 : 'KW' '3009';\n"); - grammarBuilder.append("KW3010 : 'KW' '3010';\n"); - grammarBuilder.append("KW3011 : 'KW' '3011';\n"); - grammarBuilder.append("KW3012 : 'KW' '3012';\n"); - grammarBuilder.append("KW3013 : 'KW' '3013';\n"); - grammarBuilder.append("KW3014 : 'KW' '3014';\n"); - grammarBuilder.append("KW3015 : 'KW' '3015';\n"); - grammarBuilder.append("KW3016 : 'KW' '3016';\n"); - grammarBuilder.append("KW3017 : 'KW' '3017';\n"); - grammarBuilder.append("KW3018 : 'KW' '3018';\n"); - grammarBuilder.append("KW3019 : 'KW' '3019';\n"); - grammarBuilder.append("KW3020 : 'KW' '3020';\n"); - grammarBuilder.append("KW3021 : 'KW' '3021';\n"); - grammarBuilder.append("KW3022 : 'KW' '3022';\n"); - grammarBuilder.append("KW3023 : 'KW' '3023';\n"); - grammarBuilder.append("KW3024 : 'KW' '3024';\n"); - grammarBuilder.append("KW3025 : 'KW' '3025';\n"); - grammarBuilder.append("KW3026 : 'KW' '3026';\n"); - grammarBuilder.append("KW3027 : 'KW' '3027';\n"); - grammarBuilder.append("KW3028 : 'KW' '3028';\n"); - grammarBuilder.append("KW3029 : 'KW' '3029';\n"); - grammarBuilder.append("KW3030 : 'KW' '3030';\n"); - grammarBuilder.append("KW3031 : 'KW' '3031';\n"); - grammarBuilder.append("KW3032 : 'KW' '3032';\n"); - grammarBuilder.append("KW3033 : 'KW' '3033';\n"); - grammarBuilder.append("KW3034 : 'KW' '3034';\n"); - grammarBuilder.append("KW3035 : 'KW' '3035';\n"); - grammarBuilder.append("KW3036 : 'KW' '3036';\n"); - grammarBuilder.append("KW3037 : 'KW' '3037';\n"); - grammarBuilder.append("KW3038 : 'KW' '3038';\n"); - grammarBuilder.append("KW3039 : 'KW' '3039';\n"); - grammarBuilder.append("KW3040 : 'KW' '3040';\n"); - grammarBuilder.append("KW3041 : 'KW' '3041';\n"); - grammarBuilder.append("KW3042 : 'KW' '3042';\n"); - grammarBuilder.append("KW3043 : 'KW' '3043';\n"); - grammarBuilder.append("KW3044 : 'KW' '3044';\n"); - grammarBuilder.append("KW3045 : 'KW' '3045';\n"); - grammarBuilder.append("KW3046 : 'KW' '3046';\n"); - grammarBuilder.append("KW3047 : 'KW' '3047';\n"); - grammarBuilder.append("KW3048 : 'KW' '3048';\n"); - grammarBuilder.append("KW3049 : 'KW' '3049';\n"); - grammarBuilder.append("KW3050 : 'KW' '3050';\n"); - grammarBuilder.append("KW3051 : 'KW' '3051';\n"); - grammarBuilder.append("KW3052 : 'KW' '3052';\n"); - grammarBuilder.append("KW3053 : 'KW' '3053';\n"); - grammarBuilder.append("KW3054 : 'KW' '3054';\n"); - grammarBuilder.append("KW3055 : 'KW' '3055';\n"); - grammarBuilder.append("KW3056 : 'KW' '3056';\n"); - grammarBuilder.append("KW3057 : 'KW' '3057';\n"); - grammarBuilder.append("KW3058 : 'KW' '3058';\n"); - grammarBuilder.append("KW3059 : 'KW' '3059';\n"); - grammarBuilder.append("KW3060 : 'KW' '3060';\n"); - grammarBuilder.append("KW3061 : 'KW' '3061';\n"); - grammarBuilder.append("KW3062 : 'KW' '3062';\n"); - grammarBuilder.append("KW3063 : 'KW' '3063';\n"); - grammarBuilder.append("KW3064 : 'KW' '3064';\n"); - grammarBuilder.append("KW3065 : 'KW' '3065';\n"); - grammarBuilder.append("KW3066 : 'KW' '3066';\n"); - grammarBuilder.append("KW3067 : 'KW' '3067';\n"); - grammarBuilder.append("KW3068 : 'KW' '3068';\n"); - grammarBuilder.append("KW3069 : 'KW' '3069';\n"); - grammarBuilder.append("KW3070 : 'KW' '3070';\n"); - grammarBuilder.append("KW3071 : 'KW' '3071';\n"); - grammarBuilder.append("KW3072 : 'KW' '3072';\n"); - grammarBuilder.append("KW3073 : 'KW' '3073';\n"); - grammarBuilder.append("KW3074 : 'KW' '3074';\n"); - grammarBuilder.append("KW3075 : 'KW' '3075';\n"); - grammarBuilder.append("KW3076 : 'KW' '3076';\n"); - grammarBuilder.append("KW3077 : 'KW' '3077';\n"); - grammarBuilder.append("KW3078 : 'KW' '3078';\n"); - grammarBuilder.append("KW3079 : 'KW' '3079';\n"); - grammarBuilder.append("KW3080 : 'KW' '3080';\n"); - grammarBuilder.append("KW3081 : 'KW' '3081';\n"); - grammarBuilder.append("KW3082 : 'KW' '3082';\n"); - grammarBuilder.append("KW3083 : 'KW' '3083';\n"); - grammarBuilder.append("KW3084 : 'KW' '3084';\n"); - grammarBuilder.append("KW3085 : 'KW' '3085';\n"); - grammarBuilder.append("KW3086 : 'KW' '3086';\n"); - grammarBuilder.append("KW3087 : 'KW' '3087';\n"); - grammarBuilder.append("KW3088 : 'KW' '3088';\n"); - grammarBuilder.append("KW3089 : 'KW' '3089';\n"); - grammarBuilder.append("KW3090 : 'KW' '3090';\n"); - grammarBuilder.append("KW3091 : 'KW' '3091';\n"); - grammarBuilder.append("KW3092 : 'KW' '3092';\n"); - grammarBuilder.append("KW3093 : 'KW' '3093';\n"); - grammarBuilder.append("KW3094 : 'KW' '3094';\n"); - grammarBuilder.append("KW3095 : 'KW' '3095';\n"); - grammarBuilder.append("KW3096 : 'KW' '3096';\n"); - grammarBuilder.append("KW3097 : 'KW' '3097';\n"); - grammarBuilder.append("KW3098 : 'KW' '3098';\n"); - grammarBuilder.append("KW3099 : 'KW' '3099';\n"); - grammarBuilder.append("KW3100 : 'KW' '3100';\n"); - grammarBuilder.append("KW3101 : 'KW' '3101';\n"); - grammarBuilder.append("KW3102 : 'KW' '3102';\n"); - grammarBuilder.append("KW3103 : 'KW' '3103';\n"); - grammarBuilder.append("KW3104 : 'KW' '3104';\n"); - grammarBuilder.append("KW3105 : 'KW' '3105';\n"); - grammarBuilder.append("KW3106 : 'KW' '3106';\n"); - grammarBuilder.append("KW3107 : 'KW' '3107';\n"); - grammarBuilder.append("KW3108 : 'KW' '3108';\n"); - grammarBuilder.append("KW3109 : 'KW' '3109';\n"); - grammarBuilder.append("KW3110 : 'KW' '3110';\n"); - grammarBuilder.append("KW3111 : 'KW' '3111';\n"); - grammarBuilder.append("KW3112 : 'KW' '3112';\n"); - grammarBuilder.append("KW3113 : 'KW' '3113';\n"); - grammarBuilder.append("KW3114 : 'KW' '3114';\n"); - grammarBuilder.append("KW3115 : 'KW' '3115';\n"); - grammarBuilder.append("KW3116 : 'KW' '3116';\n"); - grammarBuilder.append("KW3117 : 'KW' '3117';\n"); - grammarBuilder.append("KW3118 : 'KW' '3118';\n"); - grammarBuilder.append("KW3119 : 'KW' '3119';\n"); - grammarBuilder.append("KW3120 : 'KW' '3120';\n"); - grammarBuilder.append("KW3121 : 'KW' '3121';\n"); - grammarBuilder.append("KW3122 : 'KW' '3122';\n"); - grammarBuilder.append("KW3123 : 'KW' '3123';\n"); - grammarBuilder.append("KW3124 : 'KW' '3124';\n"); - grammarBuilder.append("KW3125 : 'KW' '3125';\n"); - grammarBuilder.append("KW3126 : 'KW' '3126';\n"); - grammarBuilder.append("KW3127 : 'KW' '3127';\n"); - grammarBuilder.append("KW3128 : 'KW' '3128';\n"); - grammarBuilder.append("KW3129 : 'KW' '3129';\n"); - grammarBuilder.append("KW3130 : 'KW' '3130';\n"); - grammarBuilder.append("KW3131 : 'KW' '3131';\n"); - grammarBuilder.append("KW3132 : 'KW' '3132';\n"); - grammarBuilder.append("KW3133 : 'KW' '3133';\n"); - grammarBuilder.append("KW3134 : 'KW' '3134';\n"); - grammarBuilder.append("KW3135 : 'KW' '3135';\n"); - grammarBuilder.append("KW3136 : 'KW' '3136';\n"); - grammarBuilder.append("KW3137 : 'KW' '3137';\n"); - grammarBuilder.append("KW3138 : 'KW' '3138';\n"); - grammarBuilder.append("KW3139 : 'KW' '3139';\n"); - grammarBuilder.append("KW3140 : 'KW' '3140';\n"); - grammarBuilder.append("KW3141 : 'KW' '3141';\n"); - grammarBuilder.append("KW3142 : 'KW' '3142';\n"); - grammarBuilder.append("KW3143 : 'KW' '3143';\n"); - grammarBuilder.append("KW3144 : 'KW' '3144';\n"); - grammarBuilder.append("KW3145 : 'KW' '3145';\n"); - grammarBuilder.append("KW3146 : 'KW' '3146';\n"); - grammarBuilder.append("KW3147 : 'KW' '3147';\n"); - grammarBuilder.append("KW3148 : 'KW' '3148';\n"); - grammarBuilder.append("KW3149 : 'KW' '3149';\n"); - grammarBuilder.append("KW3150 : 'KW' '3150';\n"); - grammarBuilder.append("KW3151 : 'KW' '3151';\n"); - grammarBuilder.append("KW3152 : 'KW' '3152';\n"); - grammarBuilder.append("KW3153 : 'KW' '3153';\n"); - grammarBuilder.append("KW3154 : 'KW' '3154';\n"); - grammarBuilder.append("KW3155 : 'KW' '3155';\n"); - grammarBuilder.append("KW3156 : 'KW' '3156';\n"); - grammarBuilder.append("KW3157 : 'KW' '3157';\n"); - grammarBuilder.append("KW3158 : 'KW' '3158';\n"); - grammarBuilder.append("KW3159 : 'KW' '3159';\n"); - grammarBuilder.append("KW3160 : 'KW' '3160';\n"); - grammarBuilder.append("KW3161 : 'KW' '3161';\n"); - grammarBuilder.append("KW3162 : 'KW' '3162';\n"); - grammarBuilder.append("KW3163 : 'KW' '3163';\n"); - grammarBuilder.append("KW3164 : 'KW' '3164';\n"); - grammarBuilder.append("KW3165 : 'KW' '3165';\n"); - grammarBuilder.append("KW3166 : 'KW' '3166';\n"); - grammarBuilder.append("KW3167 : 'KW' '3167';\n"); - grammarBuilder.append("KW3168 : 'KW' '3168';\n"); - grammarBuilder.append("KW3169 : 'KW' '3169';\n"); - grammarBuilder.append("KW3170 : 'KW' '3170';\n"); - grammarBuilder.append("KW3171 : 'KW' '3171';\n"); - grammarBuilder.append("KW3172 : 'KW' '3172';\n"); - grammarBuilder.append("KW3173 : 'KW' '3173';\n"); - grammarBuilder.append("KW3174 : 'KW' '3174';\n"); - grammarBuilder.append("KW3175 : 'KW' '3175';\n"); - grammarBuilder.append("KW3176 : 'KW' '3176';\n"); - grammarBuilder.append("KW3177 : 'KW' '3177';\n"); - grammarBuilder.append("KW3178 : 'KW' '3178';\n"); - grammarBuilder.append("KW3179 : 'KW' '3179';\n"); - grammarBuilder.append("KW3180 : 'KW' '3180';\n"); - grammarBuilder.append("KW3181 : 'KW' '3181';\n"); - grammarBuilder.append("KW3182 : 'KW' '3182';\n"); - grammarBuilder.append("KW3183 : 'KW' '3183';\n"); - grammarBuilder.append("KW3184 : 'KW' '3184';\n"); - grammarBuilder.append("KW3185 : 'KW' '3185';\n"); - grammarBuilder.append("KW3186 : 'KW' '3186';\n"); - grammarBuilder.append("KW3187 : 'KW' '3187';\n"); - grammarBuilder.append("KW3188 : 'KW' '3188';\n"); - grammarBuilder.append("KW3189 : 'KW' '3189';\n"); - grammarBuilder.append("KW3190 : 'KW' '3190';\n"); - grammarBuilder.append("KW3191 : 'KW' '3191';\n"); - grammarBuilder.append("KW3192 : 'KW' '3192';\n"); - grammarBuilder.append("KW3193 : 'KW' '3193';\n"); - grammarBuilder.append("KW3194 : 'KW' '3194';\n"); - grammarBuilder.append("KW3195 : 'KW' '3195';\n"); - grammarBuilder.append("KW3196 : 'KW' '3196';\n"); - grammarBuilder.append("KW3197 : 'KW' '3197';\n"); - grammarBuilder.append("KW3198 : 'KW' '3198';\n"); - grammarBuilder.append("KW3199 : 'KW' '3199';\n"); - grammarBuilder.append("KW3200 : 'KW' '3200';\n"); - grammarBuilder.append("KW3201 : 'KW' '3201';\n"); - grammarBuilder.append("KW3202 : 'KW' '3202';\n"); - grammarBuilder.append("KW3203 : 'KW' '3203';\n"); - grammarBuilder.append("KW3204 : 'KW' '3204';\n"); - grammarBuilder.append("KW3205 : 'KW' '3205';\n"); - grammarBuilder.append("KW3206 : 'KW' '3206';\n"); - grammarBuilder.append("KW3207 : 'KW' '3207';\n"); - grammarBuilder.append("KW3208 : 'KW' '3208';\n"); - grammarBuilder.append("KW3209 : 'KW' '3209';\n"); - grammarBuilder.append("KW3210 : 'KW' '3210';\n"); - grammarBuilder.append("KW3211 : 'KW' '3211';\n"); - grammarBuilder.append("KW3212 : 'KW' '3212';\n"); - grammarBuilder.append("KW3213 : 'KW' '3213';\n"); - grammarBuilder.append("KW3214 : 'KW' '3214';\n"); - grammarBuilder.append("KW3215 : 'KW' '3215';\n"); - grammarBuilder.append("KW3216 : 'KW' '3216';\n"); - grammarBuilder.append("KW3217 : 'KW' '3217';\n"); - grammarBuilder.append("KW3218 : 'KW' '3218';\n"); - grammarBuilder.append("KW3219 : 'KW' '3219';\n"); - grammarBuilder.append("KW3220 : 'KW' '3220';\n"); - grammarBuilder.append("KW3221 : 'KW' '3221';\n"); - grammarBuilder.append("KW3222 : 'KW' '3222';\n"); - grammarBuilder.append("KW3223 : 'KW' '3223';\n"); - grammarBuilder.append("KW3224 : 'KW' '3224';\n"); - grammarBuilder.append("KW3225 : 'KW' '3225';\n"); - grammarBuilder.append("KW3226 : 'KW' '3226';\n"); - grammarBuilder.append("KW3227 : 'KW' '3227';\n"); - grammarBuilder.append("KW3228 : 'KW' '3228';\n"); - grammarBuilder.append("KW3229 : 'KW' '3229';\n"); - grammarBuilder.append("KW3230 : 'KW' '3230';\n"); - grammarBuilder.append("KW3231 : 'KW' '3231';\n"); - grammarBuilder.append("KW3232 : 'KW' '3232';\n"); - grammarBuilder.append("KW3233 : 'KW' '3233';\n"); - grammarBuilder.append("KW3234 : 'KW' '3234';\n"); - grammarBuilder.append("KW3235 : 'KW' '3235';\n"); - grammarBuilder.append("KW3236 : 'KW' '3236';\n"); - grammarBuilder.append("KW3237 : 'KW' '3237';\n"); - grammarBuilder.append("KW3238 : 'KW' '3238';\n"); - grammarBuilder.append("KW3239 : 'KW' '3239';\n"); - grammarBuilder.append("KW3240 : 'KW' '3240';\n"); - grammarBuilder.append("KW3241 : 'KW' '3241';\n"); - grammarBuilder.append("KW3242 : 'KW' '3242';\n"); - grammarBuilder.append("KW3243 : 'KW' '3243';\n"); - grammarBuilder.append("KW3244 : 'KW' '3244';\n"); - grammarBuilder.append("KW3245 : 'KW' '3245';\n"); - grammarBuilder.append("KW3246 : 'KW' '3246';\n"); - grammarBuilder.append("KW3247 : 'KW' '3247';\n"); - grammarBuilder.append("KW3248 : 'KW' '3248';\n"); - grammarBuilder.append("KW3249 : 'KW' '3249';\n"); - grammarBuilder.append("KW3250 : 'KW' '3250';\n"); - grammarBuilder.append("KW3251 : 'KW' '3251';\n"); - grammarBuilder.append("KW3252 : 'KW' '3252';\n"); - grammarBuilder.append("KW3253 : 'KW' '3253';\n"); - grammarBuilder.append("KW3254 : 'KW' '3254';\n"); - grammarBuilder.append("KW3255 : 'KW' '3255';\n"); - grammarBuilder.append("KW3256 : 'KW' '3256';\n"); - grammarBuilder.append("KW3257 : 'KW' '3257';\n"); - grammarBuilder.append("KW3258 : 'KW' '3258';\n"); - grammarBuilder.append("KW3259 : 'KW' '3259';\n"); - grammarBuilder.append("KW3260 : 'KW' '3260';\n"); - grammarBuilder.append("KW3261 : 'KW' '3261';\n"); - grammarBuilder.append("KW3262 : 'KW' '3262';\n"); - grammarBuilder.append("KW3263 : 'KW' '3263';\n"); - grammarBuilder.append("KW3264 : 'KW' '3264';\n"); - grammarBuilder.append("KW3265 : 'KW' '3265';\n"); - grammarBuilder.append("KW3266 : 'KW' '3266';\n"); - grammarBuilder.append("KW3267 : 'KW' '3267';\n"); - grammarBuilder.append("KW3268 : 'KW' '3268';\n"); - grammarBuilder.append("KW3269 : 'KW' '3269';\n"); - grammarBuilder.append("KW3270 : 'KW' '3270';\n"); - grammarBuilder.append("KW3271 : 'KW' '3271';\n"); - grammarBuilder.append("KW3272 : 'KW' '3272';\n"); - grammarBuilder.append("KW3273 : 'KW' '3273';\n"); - grammarBuilder.append("KW3274 : 'KW' '3274';\n"); - grammarBuilder.append("KW3275 : 'KW' '3275';\n"); - grammarBuilder.append("KW3276 : 'KW' '3276';\n"); - grammarBuilder.append("KW3277 : 'KW' '3277';\n"); - grammarBuilder.append("KW3278 : 'KW' '3278';\n"); - grammarBuilder.append("KW3279 : 'KW' '3279';\n"); - grammarBuilder.append("KW3280 : 'KW' '3280';\n"); - grammarBuilder.append("KW3281 : 'KW' '3281';\n"); - grammarBuilder.append("KW3282 : 'KW' '3282';\n"); - grammarBuilder.append("KW3283 : 'KW' '3283';\n"); - grammarBuilder.append("KW3284 : 'KW' '3284';\n"); - grammarBuilder.append("KW3285 : 'KW' '3285';\n"); - grammarBuilder.append("KW3286 : 'KW' '3286';\n"); - grammarBuilder.append("KW3287 : 'KW' '3287';\n"); - grammarBuilder.append("KW3288 : 'KW' '3288';\n"); - grammarBuilder.append("KW3289 : 'KW' '3289';\n"); - grammarBuilder.append("KW3290 : 'KW' '3290';\n"); - grammarBuilder.append("KW3291 : 'KW' '3291';\n"); - grammarBuilder.append("KW3292 : 'KW' '3292';\n"); - grammarBuilder.append("KW3293 : 'KW' '3293';\n"); - grammarBuilder.append("KW3294 : 'KW' '3294';\n"); - grammarBuilder.append("KW3295 : 'KW' '3295';\n"); - grammarBuilder.append("KW3296 : 'KW' '3296';\n"); - grammarBuilder.append("KW3297 : 'KW' '3297';\n"); - grammarBuilder.append("KW3298 : 'KW' '3298';\n"); - grammarBuilder.append("KW3299 : 'KW' '3299';\n"); - grammarBuilder.append("KW3300 : 'KW' '3300';\n"); - grammarBuilder.append("KW3301 : 'KW' '3301';\n"); - grammarBuilder.append("KW3302 : 'KW' '3302';\n"); - grammarBuilder.append("KW3303 : 'KW' '3303';\n"); - grammarBuilder.append("KW3304 : 'KW' '3304';\n"); - grammarBuilder.append("KW3305 : 'KW' '3305';\n"); - grammarBuilder.append("KW3306 : 'KW' '3306';\n"); - grammarBuilder.append("KW3307 : 'KW' '3307';\n"); - grammarBuilder.append("KW3308 : 'KW' '3308';\n"); - grammarBuilder.append("KW3309 : 'KW' '3309';\n"); - grammarBuilder.append("KW3310 : 'KW' '3310';\n"); - grammarBuilder.append("KW3311 : 'KW' '3311';\n"); - grammarBuilder.append("KW3312 : 'KW' '3312';\n"); - grammarBuilder.append("KW3313 : 'KW' '3313';\n"); - grammarBuilder.append("KW3314 : 'KW' '3314';\n"); - grammarBuilder.append("KW3315 : 'KW' '3315';\n"); - grammarBuilder.append("KW3316 : 'KW' '3316';\n"); - grammarBuilder.append("KW3317 : 'KW' '3317';\n"); - grammarBuilder.append("KW3318 : 'KW' '3318';\n"); - grammarBuilder.append("KW3319 : 'KW' '3319';\n"); - grammarBuilder.append("KW3320 : 'KW' '3320';\n"); - grammarBuilder.append("KW3321 : 'KW' '3321';\n"); - grammarBuilder.append("KW3322 : 'KW' '3322';\n"); - grammarBuilder.append("KW3323 : 'KW' '3323';\n"); - grammarBuilder.append("KW3324 : 'KW' '3324';\n"); - grammarBuilder.append("KW3325 : 'KW' '3325';\n"); - grammarBuilder.append("KW3326 : 'KW' '3326';\n"); - grammarBuilder.append("KW3327 : 'KW' '3327';\n"); - grammarBuilder.append("KW3328 : 'KW' '3328';\n"); - grammarBuilder.append("KW3329 : 'KW' '3329';\n"); - grammarBuilder.append("KW3330 : 'KW' '3330';\n"); - grammarBuilder.append("KW3331 : 'KW' '3331';\n"); - grammarBuilder.append("KW3332 : 'KW' '3332';\n"); - grammarBuilder.append("KW3333 : 'KW' '3333';\n"); - grammarBuilder.append("KW3334 : 'KW' '3334';\n"); - grammarBuilder.append("KW3335 : 'KW' '3335';\n"); - grammarBuilder.append("KW3336 : 'KW' '3336';\n"); - grammarBuilder.append("KW3337 : 'KW' '3337';\n"); - grammarBuilder.append("KW3338 : 'KW' '3338';\n"); - grammarBuilder.append("KW3339 : 'KW' '3339';\n"); - grammarBuilder.append("KW3340 : 'KW' '3340';\n"); - grammarBuilder.append("KW3341 : 'KW' '3341';\n"); - grammarBuilder.append("KW3342 : 'KW' '3342';\n"); - grammarBuilder.append("KW3343 : 'KW' '3343';\n"); - grammarBuilder.append("KW3344 : 'KW' '3344';\n"); - grammarBuilder.append("KW3345 : 'KW' '3345';\n"); - grammarBuilder.append("KW3346 : 'KW' '3346';\n"); - grammarBuilder.append("KW3347 : 'KW' '3347';\n"); - grammarBuilder.append("KW3348 : 'KW' '3348';\n"); - grammarBuilder.append("KW3349 : 'KW' '3349';\n"); - grammarBuilder.append("KW3350 : 'KW' '3350';\n"); - grammarBuilder.append("KW3351 : 'KW' '3351';\n"); - grammarBuilder.append("KW3352 : 'KW' '3352';\n"); - grammarBuilder.append("KW3353 : 'KW' '3353';\n"); - grammarBuilder.append("KW3354 : 'KW' '3354';\n"); - grammarBuilder.append("KW3355 : 'KW' '3355';\n"); - grammarBuilder.append("KW3356 : 'KW' '3356';\n"); - grammarBuilder.append("KW3357 : 'KW' '3357';\n"); - grammarBuilder.append("KW3358 : 'KW' '3358';\n"); - grammarBuilder.append("KW3359 : 'KW' '3359';\n"); - grammarBuilder.append("KW3360 : 'KW' '3360';\n"); - grammarBuilder.append("KW3361 : 'KW' '3361';\n"); - grammarBuilder.append("KW3362 : 'KW' '3362';\n"); - grammarBuilder.append("KW3363 : 'KW' '3363';\n"); - grammarBuilder.append("KW3364 : 'KW' '3364';\n"); - grammarBuilder.append("KW3365 : 'KW' '3365';\n"); - grammarBuilder.append("KW3366 : 'KW' '3366';\n"); - grammarBuilder.append("KW3367 : 'KW' '3367';\n"); - grammarBuilder.append("KW3368 : 'KW' '3368';\n"); - grammarBuilder.append("KW3369 : 'KW' '3369';\n"); - grammarBuilder.append("KW3370 : 'KW' '3370';\n"); - grammarBuilder.append("KW3371 : 'KW' '3371';\n"); - grammarBuilder.append("KW3372 : 'KW' '3372';\n"); - grammarBuilder.append("KW3373 : 'KW' '3373';\n"); - grammarBuilder.append("KW3374 : 'KW' '3374';\n"); - grammarBuilder.append("KW3375 : 'KW' '3375';\n"); - grammarBuilder.append("KW3376 : 'KW' '3376';\n"); - grammarBuilder.append("KW3377 : 'KW' '3377';\n"); - grammarBuilder.append("KW3378 : 'KW' '3378';\n"); - grammarBuilder.append("KW3379 : 'KW' '3379';\n"); - grammarBuilder.append("KW3380 : 'KW' '3380';\n"); - grammarBuilder.append("KW3381 : 'KW' '3381';\n"); - grammarBuilder.append("KW3382 : 'KW' '3382';\n"); - grammarBuilder.append("KW3383 : 'KW' '3383';\n"); - grammarBuilder.append("KW3384 : 'KW' '3384';\n"); - grammarBuilder.append("KW3385 : 'KW' '3385';\n"); - grammarBuilder.append("KW3386 : 'KW' '3386';\n"); - grammarBuilder.append("KW3387 : 'KW' '3387';\n"); - grammarBuilder.append("KW3388 : 'KW' '3388';\n"); - grammarBuilder.append("KW3389 : 'KW' '3389';\n"); - grammarBuilder.append("KW3390 : 'KW' '3390';\n"); - grammarBuilder.append("KW3391 : 'KW' '3391';\n"); - grammarBuilder.append("KW3392 : 'KW' '3392';\n"); - grammarBuilder.append("KW3393 : 'KW' '3393';\n"); - grammarBuilder.append("KW3394 : 'KW' '3394';\n"); - grammarBuilder.append("KW3395 : 'KW' '3395';\n"); - grammarBuilder.append("KW3396 : 'KW' '3396';\n"); - grammarBuilder.append("KW3397 : 'KW' '3397';\n"); - grammarBuilder.append("KW3398 : 'KW' '3398';\n"); - grammarBuilder.append("KW3399 : 'KW' '3399';\n"); - grammarBuilder.append("KW3400 : 'KW' '3400';\n"); - grammarBuilder.append("KW3401 : 'KW' '3401';\n"); - grammarBuilder.append("KW3402 : 'KW' '3402';\n"); - grammarBuilder.append("KW3403 : 'KW' '3403';\n"); - grammarBuilder.append("KW3404 : 'KW' '3404';\n"); - grammarBuilder.append("KW3405 : 'KW' '3405';\n"); - grammarBuilder.append("KW3406 : 'KW' '3406';\n"); - grammarBuilder.append("KW3407 : 'KW' '3407';\n"); - grammarBuilder.append("KW3408 : 'KW' '3408';\n"); - grammarBuilder.append("KW3409 : 'KW' '3409';\n"); - grammarBuilder.append("KW3410 : 'KW' '3410';\n"); - grammarBuilder.append("KW3411 : 'KW' '3411';\n"); - grammarBuilder.append("KW3412 : 'KW' '3412';\n"); - grammarBuilder.append("KW3413 : 'KW' '3413';\n"); - grammarBuilder.append("KW3414 : 'KW' '3414';\n"); - grammarBuilder.append("KW3415 : 'KW' '3415';\n"); - grammarBuilder.append("KW3416 : 'KW' '3416';\n"); - grammarBuilder.append("KW3417 : 'KW' '3417';\n"); - grammarBuilder.append("KW3418 : 'KW' '3418';\n"); - grammarBuilder.append("KW3419 : 'KW' '3419';\n"); - grammarBuilder.append("KW3420 : 'KW' '3420';\n"); - grammarBuilder.append("KW3421 : 'KW' '3421';\n"); - grammarBuilder.append("KW3422 : 'KW' '3422';\n"); - grammarBuilder.append("KW3423 : 'KW' '3423';\n"); - grammarBuilder.append("KW3424 : 'KW' '3424';\n"); - grammarBuilder.append("KW3425 : 'KW' '3425';\n"); - grammarBuilder.append("KW3426 : 'KW' '3426';\n"); - grammarBuilder.append("KW3427 : 'KW' '3427';\n"); - grammarBuilder.append("KW3428 : 'KW' '3428';\n"); - grammarBuilder.append("KW3429 : 'KW' '3429';\n"); - grammarBuilder.append("KW3430 : 'KW' '3430';\n"); - grammarBuilder.append("KW3431 : 'KW' '3431';\n"); - grammarBuilder.append("KW3432 : 'KW' '3432';\n"); - grammarBuilder.append("KW3433 : 'KW' '3433';\n"); - grammarBuilder.append("KW3434 : 'KW' '3434';\n"); - grammarBuilder.append("KW3435 : 'KW' '3435';\n"); - grammarBuilder.append("KW3436 : 'KW' '3436';\n"); - grammarBuilder.append("KW3437 : 'KW' '3437';\n"); - grammarBuilder.append("KW3438 : 'KW' '3438';\n"); - grammarBuilder.append("KW3439 : 'KW' '3439';\n"); - grammarBuilder.append("KW3440 : 'KW' '3440';\n"); - grammarBuilder.append("KW3441 : 'KW' '3441';\n"); - grammarBuilder.append("KW3442 : 'KW' '3442';\n"); - grammarBuilder.append("KW3443 : 'KW' '3443';\n"); - grammarBuilder.append("KW3444 : 'KW' '3444';\n"); - grammarBuilder.append("KW3445 : 'KW' '3445';\n"); - grammarBuilder.append("KW3446 : 'KW' '3446';\n"); - grammarBuilder.append("KW3447 : 'KW' '3447';\n"); - grammarBuilder.append("KW3448 : 'KW' '3448';\n"); - grammarBuilder.append("KW3449 : 'KW' '3449';\n"); - grammarBuilder.append("KW3450 : 'KW' '3450';\n"); - grammarBuilder.append("KW3451 : 'KW' '3451';\n"); - grammarBuilder.append("KW3452 : 'KW' '3452';\n"); - grammarBuilder.append("KW3453 : 'KW' '3453';\n"); - grammarBuilder.append("KW3454 : 'KW' '3454';\n"); - grammarBuilder.append("KW3455 : 'KW' '3455';\n"); - grammarBuilder.append("KW3456 : 'KW' '3456';\n"); - grammarBuilder.append("KW3457 : 'KW' '3457';\n"); - grammarBuilder.append("KW3458 : 'KW' '3458';\n"); - grammarBuilder.append("KW3459 : 'KW' '3459';\n"); - grammarBuilder.append("KW3460 : 'KW' '3460';\n"); - grammarBuilder.append("KW3461 : 'KW' '3461';\n"); - grammarBuilder.append("KW3462 : 'KW' '3462';\n"); - grammarBuilder.append("KW3463 : 'KW' '3463';\n"); - grammarBuilder.append("KW3464 : 'KW' '3464';\n"); - grammarBuilder.append("KW3465 : 'KW' '3465';\n"); - grammarBuilder.append("KW3466 : 'KW' '3466';\n"); - grammarBuilder.append("KW3467 : 'KW' '3467';\n"); - grammarBuilder.append("KW3468 : 'KW' '3468';\n"); - grammarBuilder.append("KW3469 : 'KW' '3469';\n"); - grammarBuilder.append("KW3470 : 'KW' '3470';\n"); - grammarBuilder.append("KW3471 : 'KW' '3471';\n"); - grammarBuilder.append("KW3472 : 'KW' '3472';\n"); - grammarBuilder.append("KW3473 : 'KW' '3473';\n"); - grammarBuilder.append("KW3474 : 'KW' '3474';\n"); - grammarBuilder.append("KW3475 : 'KW' '3475';\n"); - grammarBuilder.append("KW3476 : 'KW' '3476';\n"); - grammarBuilder.append("KW3477 : 'KW' '3477';\n"); - grammarBuilder.append("KW3478 : 'KW' '3478';\n"); - grammarBuilder.append("KW3479 : 'KW' '3479';\n"); - grammarBuilder.append("KW3480 : 'KW' '3480';\n"); - grammarBuilder.append("KW3481 : 'KW' '3481';\n"); - grammarBuilder.append("KW3482 : 'KW' '3482';\n"); - grammarBuilder.append("KW3483 : 'KW' '3483';\n"); - grammarBuilder.append("KW3484 : 'KW' '3484';\n"); - grammarBuilder.append("KW3485 : 'KW' '3485';\n"); - grammarBuilder.append("KW3486 : 'KW' '3486';\n"); - grammarBuilder.append("KW3487 : 'KW' '3487';\n"); - grammarBuilder.append("KW3488 : 'KW' '3488';\n"); - grammarBuilder.append("KW3489 : 'KW' '3489';\n"); - grammarBuilder.append("KW3490 : 'KW' '3490';\n"); - grammarBuilder.append("KW3491 : 'KW' '3491';\n"); - grammarBuilder.append("KW3492 : 'KW' '3492';\n"); - grammarBuilder.append("KW3493 : 'KW' '3493';\n"); - grammarBuilder.append("KW3494 : 'KW' '3494';\n"); - grammarBuilder.append("KW3495 : 'KW' '3495';\n"); - grammarBuilder.append("KW3496 : 'KW' '3496';\n"); - grammarBuilder.append("KW3497 : 'KW' '3497';\n"); - grammarBuilder.append("KW3498 : 'KW' '3498';\n"); - grammarBuilder.append("KW3499 : 'KW' '3499';\n"); - grammarBuilder.append("KW3500 : 'KW' '3500';\n"); - grammarBuilder.append("KW3501 : 'KW' '3501';\n"); - grammarBuilder.append("KW3502 : 'KW' '3502';\n"); - grammarBuilder.append("KW3503 : 'KW' '3503';\n"); - grammarBuilder.append("KW3504 : 'KW' '3504';\n"); - grammarBuilder.append("KW3505 : 'KW' '3505';\n"); - grammarBuilder.append("KW3506 : 'KW' '3506';\n"); - grammarBuilder.append("KW3507 : 'KW' '3507';\n"); - grammarBuilder.append("KW3508 : 'KW' '3508';\n"); - grammarBuilder.append("KW3509 : 'KW' '3509';\n"); - grammarBuilder.append("KW3510 : 'KW' '3510';\n"); - grammarBuilder.append("KW3511 : 'KW' '3511';\n"); - grammarBuilder.append("KW3512 : 'KW' '3512';\n"); - grammarBuilder.append("KW3513 : 'KW' '3513';\n"); - grammarBuilder.append("KW3514 : 'KW' '3514';\n"); - grammarBuilder.append("KW3515 : 'KW' '3515';\n"); - grammarBuilder.append("KW3516 : 'KW' '3516';\n"); - grammarBuilder.append("KW3517 : 'KW' '3517';\n"); - grammarBuilder.append("KW3518 : 'KW' '3518';\n"); - grammarBuilder.append("KW3519 : 'KW' '3519';\n"); - grammarBuilder.append("KW3520 : 'KW' '3520';\n"); - grammarBuilder.append("KW3521 : 'KW' '3521';\n"); - grammarBuilder.append("KW3522 : 'KW' '3522';\n"); - grammarBuilder.append("KW3523 : 'KW' '3523';\n"); - grammarBuilder.append("KW3524 : 'KW' '3524';\n"); - grammarBuilder.append("KW3525 : 'KW' '3525';\n"); - grammarBuilder.append("KW3526 : 'KW' '3526';\n"); - grammarBuilder.append("KW3527 : 'KW' '3527';\n"); - grammarBuilder.append("KW3528 : 'KW' '3528';\n"); - grammarBuilder.append("KW3529 : 'KW' '3529';\n"); - grammarBuilder.append("KW3530 : 'KW' '3530';\n"); - grammarBuilder.append("KW3531 : 'KW' '3531';\n"); - grammarBuilder.append("KW3532 : 'KW' '3532';\n"); - grammarBuilder.append("KW3533 : 'KW' '3533';\n"); - grammarBuilder.append("KW3534 : 'KW' '3534';\n"); - grammarBuilder.append("KW3535 : 'KW' '3535';\n"); - grammarBuilder.append("KW3536 : 'KW' '3536';\n"); - grammarBuilder.append("KW3537 : 'KW' '3537';\n"); - grammarBuilder.append("KW3538 : 'KW' '3538';\n"); - grammarBuilder.append("KW3539 : 'KW' '3539';\n"); - grammarBuilder.append("KW3540 : 'KW' '3540';\n"); - grammarBuilder.append("KW3541 : 'KW' '3541';\n"); - grammarBuilder.append("KW3542 : 'KW' '3542';\n"); - grammarBuilder.append("KW3543 : 'KW' '3543';\n"); - grammarBuilder.append("KW3544 : 'KW' '3544';\n"); - grammarBuilder.append("KW3545 : 'KW' '3545';\n"); - grammarBuilder.append("KW3546 : 'KW' '3546';\n"); - grammarBuilder.append("KW3547 : 'KW' '3547';\n"); - grammarBuilder.append("KW3548 : 'KW' '3548';\n"); - grammarBuilder.append("KW3549 : 'KW' '3549';\n"); - grammarBuilder.append("KW3550 : 'KW' '3550';\n"); - grammarBuilder.append("KW3551 : 'KW' '3551';\n"); - grammarBuilder.append("KW3552 : 'KW' '3552';\n"); - grammarBuilder.append("KW3553 : 'KW' '3553';\n"); - grammarBuilder.append("KW3554 : 'KW' '3554';\n"); - grammarBuilder.append("KW3555 : 'KW' '3555';\n"); - grammarBuilder.append("KW3556 : 'KW' '3556';\n"); - grammarBuilder.append("KW3557 : 'KW' '3557';\n"); - grammarBuilder.append("KW3558 : 'KW' '3558';\n"); - grammarBuilder.append("KW3559 : 'KW' '3559';\n"); - grammarBuilder.append("KW3560 : 'KW' '3560';\n"); - grammarBuilder.append("KW3561 : 'KW' '3561';\n"); - grammarBuilder.append("KW3562 : 'KW' '3562';\n"); - grammarBuilder.append("KW3563 : 'KW' '3563';\n"); - grammarBuilder.append("KW3564 : 'KW' '3564';\n"); - grammarBuilder.append("KW3565 : 'KW' '3565';\n"); - grammarBuilder.append("KW3566 : 'KW' '3566';\n"); - grammarBuilder.append("KW3567 : 'KW' '3567';\n"); - grammarBuilder.append("KW3568 : 'KW' '3568';\n"); - grammarBuilder.append("KW3569 : 'KW' '3569';\n"); - grammarBuilder.append("KW3570 : 'KW' '3570';\n"); - grammarBuilder.append("KW3571 : 'KW' '3571';\n"); - grammarBuilder.append("KW3572 : 'KW' '3572';\n"); - grammarBuilder.append("KW3573 : 'KW' '3573';\n"); - grammarBuilder.append("KW3574 : 'KW' '3574';\n"); - grammarBuilder.append("KW3575 : 'KW' '3575';\n"); - grammarBuilder.append("KW3576 : 'KW' '3576';\n"); - grammarBuilder.append("KW3577 : 'KW' '3577';\n"); - grammarBuilder.append("KW3578 : 'KW' '3578';\n"); - grammarBuilder.append("KW3579 : 'KW' '3579';\n"); - grammarBuilder.append("KW3580 : 'KW' '3580';\n"); - grammarBuilder.append("KW3581 : 'KW' '3581';\n"); - grammarBuilder.append("KW3582 : 'KW' '3582';\n"); - grammarBuilder.append("KW3583 : 'KW' '3583';\n"); - grammarBuilder.append("KW3584 : 'KW' '3584';\n"); - grammarBuilder.append("KW3585 : 'KW' '3585';\n"); - grammarBuilder.append("KW3586 : 'KW' '3586';\n"); - grammarBuilder.append("KW3587 : 'KW' '3587';\n"); - grammarBuilder.append("KW3588 : 'KW' '3588';\n"); - grammarBuilder.append("KW3589 : 'KW' '3589';\n"); - grammarBuilder.append("KW3590 : 'KW' '3590';\n"); - grammarBuilder.append("KW3591 : 'KW' '3591';\n"); - grammarBuilder.append("KW3592 : 'KW' '3592';\n"); - grammarBuilder.append("KW3593 : 'KW' '3593';\n"); - grammarBuilder.append("KW3594 : 'KW' '3594';\n"); - grammarBuilder.append("KW3595 : 'KW' '3595';\n"); - grammarBuilder.append("KW3596 : 'KW' '3596';\n"); - grammarBuilder.append("KW3597 : 'KW' '3597';\n"); - grammarBuilder.append("KW3598 : 'KW' '3598';\n"); - grammarBuilder.append("KW3599 : 'KW' '3599';\n"); - grammarBuilder.append("KW3600 : 'KW' '3600';\n"); - grammarBuilder.append("KW3601 : 'KW' '3601';\n"); - grammarBuilder.append("KW3602 : 'KW' '3602';\n"); - grammarBuilder.append("KW3603 : 'KW' '3603';\n"); - grammarBuilder.append("KW3604 : 'KW' '3604';\n"); - grammarBuilder.append("KW3605 : 'KW' '3605';\n"); - grammarBuilder.append("KW3606 : 'KW' '3606';\n"); - grammarBuilder.append("KW3607 : 'KW' '3607';\n"); - grammarBuilder.append("KW3608 : 'KW' '3608';\n"); - grammarBuilder.append("KW3609 : 'KW' '3609';\n"); - grammarBuilder.append("KW3610 : 'KW' '3610';\n"); - grammarBuilder.append("KW3611 : 'KW' '3611';\n"); - grammarBuilder.append("KW3612 : 'KW' '3612';\n"); - grammarBuilder.append("KW3613 : 'KW' '3613';\n"); - grammarBuilder.append("KW3614 : 'KW' '3614';\n"); - grammarBuilder.append("KW3615 : 'KW' '3615';\n"); - grammarBuilder.append("KW3616 : 'KW' '3616';\n"); - grammarBuilder.append("KW3617 : 'KW' '3617';\n"); - grammarBuilder.append("KW3618 : 'KW' '3618';\n"); - grammarBuilder.append("KW3619 : 'KW' '3619';\n"); - grammarBuilder.append("KW3620 : 'KW' '3620';\n"); - grammarBuilder.append("KW3621 : 'KW' '3621';\n"); - grammarBuilder.append("KW3622 : 'KW' '3622';\n"); - grammarBuilder.append("KW3623 : 'KW' '3623';\n"); - grammarBuilder.append("KW3624 : 'KW' '3624';\n"); - grammarBuilder.append("KW3625 : 'KW' '3625';\n"); - grammarBuilder.append("KW3626 : 'KW' '3626';\n"); - grammarBuilder.append("KW3627 : 'KW' '3627';\n"); - grammarBuilder.append("KW3628 : 'KW' '3628';\n"); - grammarBuilder.append("KW3629 : 'KW' '3629';\n"); - grammarBuilder.append("KW3630 : 'KW' '3630';\n"); - grammarBuilder.append("KW3631 : 'KW' '3631';\n"); - grammarBuilder.append("KW3632 : 'KW' '3632';\n"); - grammarBuilder.append("KW3633 : 'KW' '3633';\n"); - grammarBuilder.append("KW3634 : 'KW' '3634';\n"); - grammarBuilder.append("KW3635 : 'KW' '3635';\n"); - grammarBuilder.append("KW3636 : 'KW' '3636';\n"); - grammarBuilder.append("KW3637 : 'KW' '3637';\n"); - grammarBuilder.append("KW3638 : 'KW' '3638';\n"); - grammarBuilder.append("KW3639 : 'KW' '3639';\n"); - grammarBuilder.append("KW3640 : 'KW' '3640';\n"); - grammarBuilder.append("KW3641 : 'KW' '3641';\n"); - grammarBuilder.append("KW3642 : 'KW' '3642';\n"); - grammarBuilder.append("KW3643 : 'KW' '3643';\n"); - grammarBuilder.append("KW3644 : 'KW' '3644';\n"); - grammarBuilder.append("KW3645 : 'KW' '3645';\n"); - grammarBuilder.append("KW3646 : 'KW' '3646';\n"); - grammarBuilder.append("KW3647 : 'KW' '3647';\n"); - grammarBuilder.append("KW3648 : 'KW' '3648';\n"); - grammarBuilder.append("KW3649 : 'KW' '3649';\n"); - grammarBuilder.append("KW3650 : 'KW' '3650';\n"); - grammarBuilder.append("KW3651 : 'KW' '3651';\n"); - grammarBuilder.append("KW3652 : 'KW' '3652';\n"); - grammarBuilder.append("KW3653 : 'KW' '3653';\n"); - grammarBuilder.append("KW3654 : 'KW' '3654';\n"); - grammarBuilder.append("KW3655 : 'KW' '3655';\n"); - grammarBuilder.append("KW3656 : 'KW' '3656';\n"); - grammarBuilder.append("KW3657 : 'KW' '3657';\n"); - grammarBuilder.append("KW3658 : 'KW' '3658';\n"); - grammarBuilder.append("KW3659 : 'KW' '3659';\n"); - grammarBuilder.append("KW3660 : 'KW' '3660';\n"); - grammarBuilder.append("KW3661 : 'KW' '3661';\n"); - grammarBuilder.append("KW3662 : 'KW' '3662';\n"); - grammarBuilder.append("KW3663 : 'KW' '3663';\n"); - grammarBuilder.append("KW3664 : 'KW' '3664';\n"); - grammarBuilder.append("KW3665 : 'KW' '3665';\n"); - grammarBuilder.append("KW3666 : 'KW' '3666';\n"); - grammarBuilder.append("KW3667 : 'KW' '3667';\n"); - grammarBuilder.append("KW3668 : 'KW' '3668';\n"); - grammarBuilder.append("KW3669 : 'KW' '3669';\n"); - grammarBuilder.append("KW3670 : 'KW' '3670';\n"); - grammarBuilder.append("KW3671 : 'KW' '3671';\n"); - grammarBuilder.append("KW3672 : 'KW' '3672';\n"); - grammarBuilder.append("KW3673 : 'KW' '3673';\n"); - grammarBuilder.append("KW3674 : 'KW' '3674';\n"); - grammarBuilder.append("KW3675 : 'KW' '3675';\n"); - grammarBuilder.append("KW3676 : 'KW' '3676';\n"); - grammarBuilder.append("KW3677 : 'KW' '3677';\n"); - grammarBuilder.append("KW3678 : 'KW' '3678';\n"); - grammarBuilder.append("KW3679 : 'KW' '3679';\n"); - grammarBuilder.append("KW3680 : 'KW' '3680';\n"); - grammarBuilder.append("KW3681 : 'KW' '3681';\n"); - grammarBuilder.append("KW3682 : 'KW' '3682';\n"); - grammarBuilder.append("KW3683 : 'KW' '3683';\n"); - grammarBuilder.append("KW3684 : 'KW' '3684';\n"); - grammarBuilder.append("KW3685 : 'KW' '3685';\n"); - grammarBuilder.append("KW3686 : 'KW' '3686';\n"); - grammarBuilder.append("KW3687 : 'KW' '3687';\n"); - grammarBuilder.append("KW3688 : 'KW' '3688';\n"); - grammarBuilder.append("KW3689 : 'KW' '3689';\n"); - grammarBuilder.append("KW3690 : 'KW' '3690';\n"); - grammarBuilder.append("KW3691 : 'KW' '3691';\n"); - grammarBuilder.append("KW3692 : 'KW' '3692';\n"); - grammarBuilder.append("KW3693 : 'KW' '3693';\n"); - grammarBuilder.append("KW3694 : 'KW' '3694';\n"); - grammarBuilder.append("KW3695 : 'KW' '3695';\n"); - grammarBuilder.append("KW3696 : 'KW' '3696';\n"); - grammarBuilder.append("KW3697 : 'KW' '3697';\n"); - grammarBuilder.append("KW3698 : 'KW' '3698';\n"); - grammarBuilder.append("KW3699 : 'KW' '3699';\n"); - grammarBuilder.append("KW3700 : 'KW' '3700';\n"); - grammarBuilder.append("KW3701 : 'KW' '3701';\n"); - grammarBuilder.append("KW3702 : 'KW' '3702';\n"); - grammarBuilder.append("KW3703 : 'KW' '3703';\n"); - grammarBuilder.append("KW3704 : 'KW' '3704';\n"); - grammarBuilder.append("KW3705 : 'KW' '3705';\n"); - grammarBuilder.append("KW3706 : 'KW' '3706';\n"); - grammarBuilder.append("KW3707 : 'KW' '3707';\n"); - grammarBuilder.append("KW3708 : 'KW' '3708';\n"); - grammarBuilder.append("KW3709 : 'KW' '3709';\n"); - grammarBuilder.append("KW3710 : 'KW' '3710';\n"); - grammarBuilder.append("KW3711 : 'KW' '3711';\n"); - grammarBuilder.append("KW3712 : 'KW' '3712';\n"); - grammarBuilder.append("KW3713 : 'KW' '3713';\n"); - grammarBuilder.append("KW3714 : 'KW' '3714';\n"); - grammarBuilder.append("KW3715 : 'KW' '3715';\n"); - grammarBuilder.append("KW3716 : 'KW' '3716';\n"); - grammarBuilder.append("KW3717 : 'KW' '3717';\n"); - grammarBuilder.append("KW3718 : 'KW' '3718';\n"); - grammarBuilder.append("KW3719 : 'KW' '3719';\n"); - grammarBuilder.append("KW3720 : 'KW' '3720';\n"); - grammarBuilder.append("KW3721 : 'KW' '3721';\n"); - grammarBuilder.append("KW3722 : 'KW' '3722';\n"); - grammarBuilder.append("KW3723 : 'KW' '3723';\n"); - grammarBuilder.append("KW3724 : 'KW' '3724';\n"); - grammarBuilder.append("KW3725 : 'KW' '3725';\n"); - grammarBuilder.append("KW3726 : 'KW' '3726';\n"); - grammarBuilder.append("KW3727 : 'KW' '3727';\n"); - grammarBuilder.append("KW3728 : 'KW' '3728';\n"); - grammarBuilder.append("KW3729 : 'KW' '3729';\n"); - grammarBuilder.append("KW3730 : 'KW' '3730';\n"); - grammarBuilder.append("KW3731 : 'KW' '3731';\n"); - grammarBuilder.append("KW3732 : 'KW' '3732';\n"); - grammarBuilder.append("KW3733 : 'KW' '3733';\n"); - grammarBuilder.append("KW3734 : 'KW' '3734';\n"); - grammarBuilder.append("KW3735 : 'KW' '3735';\n"); - grammarBuilder.append("KW3736 : 'KW' '3736';\n"); - grammarBuilder.append("KW3737 : 'KW' '3737';\n"); - grammarBuilder.append("KW3738 : 'KW' '3738';\n"); - grammarBuilder.append("KW3739 : 'KW' '3739';\n"); - grammarBuilder.append("KW3740 : 'KW' '3740';\n"); - grammarBuilder.append("KW3741 : 'KW' '3741';\n"); - grammarBuilder.append("KW3742 : 'KW' '3742';\n"); - grammarBuilder.append("KW3743 : 'KW' '3743';\n"); - grammarBuilder.append("KW3744 : 'KW' '3744';\n"); - grammarBuilder.append("KW3745 : 'KW' '3745';\n"); - grammarBuilder.append("KW3746 : 'KW' '3746';\n"); - grammarBuilder.append("KW3747 : 'KW' '3747';\n"); - grammarBuilder.append("KW3748 : 'KW' '3748';\n"); - grammarBuilder.append("KW3749 : 'KW' '3749';\n"); - grammarBuilder.append("KW3750 : 'KW' '3750';\n"); - grammarBuilder.append("KW3751 : 'KW' '3751';\n"); - grammarBuilder.append("KW3752 : 'KW' '3752';\n"); - grammarBuilder.append("KW3753 : 'KW' '3753';\n"); - grammarBuilder.append("KW3754 : 'KW' '3754';\n"); - grammarBuilder.append("KW3755 : 'KW' '3755';\n"); - grammarBuilder.append("KW3756 : 'KW' '3756';\n"); - grammarBuilder.append("KW3757 : 'KW' '3757';\n"); - grammarBuilder.append("KW3758 : 'KW' '3758';\n"); - grammarBuilder.append("KW3759 : 'KW' '3759';\n"); - grammarBuilder.append("KW3760 : 'KW' '3760';\n"); - grammarBuilder.append("KW3761 : 'KW' '3761';\n"); - grammarBuilder.append("KW3762 : 'KW' '3762';\n"); - grammarBuilder.append("KW3763 : 'KW' '3763';\n"); - grammarBuilder.append("KW3764 : 'KW' '3764';\n"); - grammarBuilder.append("KW3765 : 'KW' '3765';\n"); - grammarBuilder.append("KW3766 : 'KW' '3766';\n"); - grammarBuilder.append("KW3767 : 'KW' '3767';\n"); - grammarBuilder.append("KW3768 : 'KW' '3768';\n"); - grammarBuilder.append("KW3769 : 'KW' '3769';\n"); - grammarBuilder.append("KW3770 : 'KW' '3770';\n"); - grammarBuilder.append("KW3771 : 'KW' '3771';\n"); - grammarBuilder.append("KW3772 : 'KW' '3772';\n"); - grammarBuilder.append("KW3773 : 'KW' '3773';\n"); - grammarBuilder.append("KW3774 : 'KW' '3774';\n"); - grammarBuilder.append("KW3775 : 'KW' '3775';\n"); - grammarBuilder.append("KW3776 : 'KW' '3776';\n"); - grammarBuilder.append("KW3777 : 'KW' '3777';\n"); - grammarBuilder.append("KW3778 : 'KW' '3778';\n"); - grammarBuilder.append("KW3779 : 'KW' '3779';\n"); - grammarBuilder.append("KW3780 : 'KW' '3780';\n"); - grammarBuilder.append("KW3781 : 'KW' '3781';\n"); - grammarBuilder.append("KW3782 : 'KW' '3782';\n"); - grammarBuilder.append("KW3783 : 'KW' '3783';\n"); - grammarBuilder.append("KW3784 : 'KW' '3784';\n"); - grammarBuilder.append("KW3785 : 'KW' '3785';\n"); - grammarBuilder.append("KW3786 : 'KW' '3786';\n"); - grammarBuilder.append("KW3787 : 'KW' '3787';\n"); - grammarBuilder.append("KW3788 : 'KW' '3788';\n"); - grammarBuilder.append("KW3789 : 'KW' '3789';\n"); - grammarBuilder.append("KW3790 : 'KW' '3790';\n"); - grammarBuilder.append("KW3791 : 'KW' '3791';\n"); - grammarBuilder.append("KW3792 : 'KW' '3792';\n"); - grammarBuilder.append("KW3793 : 'KW' '3793';\n"); - grammarBuilder.append("KW3794 : 'KW' '3794';\n"); - grammarBuilder.append("KW3795 : 'KW' '3795';\n"); - grammarBuilder.append("KW3796 : 'KW' '3796';\n"); - grammarBuilder.append("KW3797 : 'KW' '3797';\n"); - grammarBuilder.append("KW3798 : 'KW' '3798';\n"); - grammarBuilder.append("KW3799 : 'KW' '3799';\n"); - grammarBuilder.append("KW3800 : 'KW' '3800';\n"); - grammarBuilder.append("KW3801 : 'KW' '3801';\n"); - grammarBuilder.append("KW3802 : 'KW' '3802';\n"); - grammarBuilder.append("KW3803 : 'KW' '3803';\n"); - grammarBuilder.append("KW3804 : 'KW' '3804';\n"); - grammarBuilder.append("KW3805 : 'KW' '3805';\n"); - grammarBuilder.append("KW3806 : 'KW' '3806';\n"); - grammarBuilder.append("KW3807 : 'KW' '3807';\n"); - grammarBuilder.append("KW3808 : 'KW' '3808';\n"); - grammarBuilder.append("KW3809 : 'KW' '3809';\n"); - grammarBuilder.append("KW3810 : 'KW' '3810';\n"); - grammarBuilder.append("KW3811 : 'KW' '3811';\n"); - grammarBuilder.append("KW3812 : 'KW' '3812';\n"); - grammarBuilder.append("KW3813 : 'KW' '3813';\n"); - grammarBuilder.append("KW3814 : 'KW' '3814';\n"); - grammarBuilder.append("KW3815 : 'KW' '3815';\n"); - grammarBuilder.append("KW3816 : 'KW' '3816';\n"); - grammarBuilder.append("KW3817 : 'KW' '3817';\n"); - grammarBuilder.append("KW3818 : 'KW' '3818';\n"); - grammarBuilder.append("KW3819 : 'KW' '3819';\n"); - grammarBuilder.append("KW3820 : 'KW' '3820';\n"); - grammarBuilder.append("KW3821 : 'KW' '3821';\n"); - grammarBuilder.append("KW3822 : 'KW' '3822';\n"); - grammarBuilder.append("KW3823 : 'KW' '3823';\n"); - grammarBuilder.append("KW3824 : 'KW' '3824';\n"); - grammarBuilder.append("KW3825 : 'KW' '3825';\n"); - grammarBuilder.append("KW3826 : 'KW' '3826';\n"); - grammarBuilder.append("KW3827 : 'KW' '3827';\n"); - grammarBuilder.append("KW3828 : 'KW' '3828';\n"); - grammarBuilder.append("KW3829 : 'KW' '3829';\n"); - grammarBuilder.append("KW3830 : 'KW' '3830';\n"); - grammarBuilder.append("KW3831 : 'KW' '3831';\n"); - grammarBuilder.append("KW3832 : 'KW' '3832';\n"); - grammarBuilder.append("KW3833 : 'KW' '3833';\n"); - grammarBuilder.append("KW3834 : 'KW' '3834';\n"); - grammarBuilder.append("KW3835 : 'KW' '3835';\n"); - grammarBuilder.append("KW3836 : 'KW' '3836';\n"); - grammarBuilder.append("KW3837 : 'KW' '3837';\n"); - grammarBuilder.append("KW3838 : 'KW' '3838';\n"); - grammarBuilder.append("KW3839 : 'KW' '3839';\n"); - grammarBuilder.append("KW3840 : 'KW' '3840';\n"); - grammarBuilder.append("KW3841 : 'KW' '3841';\n"); - grammarBuilder.append("KW3842 : 'KW' '3842';\n"); - grammarBuilder.append("KW3843 : 'KW' '3843';\n"); - grammarBuilder.append("KW3844 : 'KW' '3844';\n"); - grammarBuilder.append("KW3845 : 'KW' '3845';\n"); - grammarBuilder.append("KW3846 : 'KW' '3846';\n"); - grammarBuilder.append("KW3847 : 'KW' '3847';\n"); - grammarBuilder.append("KW3848 : 'KW' '3848';\n"); - grammarBuilder.append("KW3849 : 'KW' '3849';\n"); - grammarBuilder.append("KW3850 : 'KW' '3850';\n"); - grammarBuilder.append("KW3851 : 'KW' '3851';\n"); - grammarBuilder.append("KW3852 : 'KW' '3852';\n"); - grammarBuilder.append("KW3853 : 'KW' '3853';\n"); - grammarBuilder.append("KW3854 : 'KW' '3854';\n"); - grammarBuilder.append("KW3855 : 'KW' '3855';\n"); - grammarBuilder.append("KW3856 : 'KW' '3856';\n"); - grammarBuilder.append("KW3857 : 'KW' '3857';\n"); - grammarBuilder.append("KW3858 : 'KW' '3858';\n"); - grammarBuilder.append("KW3859 : 'KW' '3859';\n"); - grammarBuilder.append("KW3860 : 'KW' '3860';\n"); - grammarBuilder.append("KW3861 : 'KW' '3861';\n"); - grammarBuilder.append("KW3862 : 'KW' '3862';\n"); - grammarBuilder.append("KW3863 : 'KW' '3863';\n"); - grammarBuilder.append("KW3864 : 'KW' '3864';\n"); - grammarBuilder.append("KW3865 : 'KW' '3865';\n"); - grammarBuilder.append("KW3866 : 'KW' '3866';\n"); - grammarBuilder.append("KW3867 : 'KW' '3867';\n"); - grammarBuilder.append("KW3868 : 'KW' '3868';\n"); - grammarBuilder.append("KW3869 : 'KW' '3869';\n"); - grammarBuilder.append("KW3870 : 'KW' '3870';\n"); - grammarBuilder.append("KW3871 : 'KW' '3871';\n"); - grammarBuilder.append("KW3872 : 'KW' '3872';\n"); - grammarBuilder.append("KW3873 : 'KW' '3873';\n"); - grammarBuilder.append("KW3874 : 'KW' '3874';\n"); - grammarBuilder.append("KW3875 : 'KW' '3875';\n"); - grammarBuilder.append("KW3876 : 'KW' '3876';\n"); - grammarBuilder.append("KW3877 : 'KW' '3877';\n"); - grammarBuilder.append("KW3878 : 'KW' '3878';\n"); - grammarBuilder.append("KW3879 : 'KW' '3879';\n"); - grammarBuilder.append("KW3880 : 'KW' '3880';\n"); - grammarBuilder.append("KW3881 : 'KW' '3881';\n"); - grammarBuilder.append("KW3882 : 'KW' '3882';\n"); - grammarBuilder.append("KW3883 : 'KW' '3883';\n"); - grammarBuilder.append("KW3884 : 'KW' '3884';\n"); - grammarBuilder.append("KW3885 : 'KW' '3885';\n"); - grammarBuilder.append("KW3886 : 'KW' '3886';\n"); - grammarBuilder.append("KW3887 : 'KW' '3887';\n"); - grammarBuilder.append("KW3888 : 'KW' '3888';\n"); - grammarBuilder.append("KW3889 : 'KW' '3889';\n"); - grammarBuilder.append("KW3890 : 'KW' '3890';\n"); - grammarBuilder.append("KW3891 : 'KW' '3891';\n"); - grammarBuilder.append("KW3892 : 'KW' '3892';\n"); - grammarBuilder.append("KW3893 : 'KW' '3893';\n"); - grammarBuilder.append("KW3894 : 'KW' '3894';\n"); - grammarBuilder.append("KW3895 : 'KW' '3895';\n"); - grammarBuilder.append("KW3896 : 'KW' '3896';\n"); - grammarBuilder.append("KW3897 : 'KW' '3897';\n"); - grammarBuilder.append("KW3898 : 'KW' '3898';\n"); - grammarBuilder.append("KW3899 : 'KW' '3899';\n"); - grammarBuilder.append("KW3900 : 'KW' '3900';\n"); - grammarBuilder.append("KW3901 : 'KW' '3901';\n"); - grammarBuilder.append("KW3902 : 'KW' '3902';\n"); - grammarBuilder.append("KW3903 : 'KW' '3903';\n"); - grammarBuilder.append("KW3904 : 'KW' '3904';\n"); - grammarBuilder.append("KW3905 : 'KW' '3905';\n"); - grammarBuilder.append("KW3906 : 'KW' '3906';\n"); - grammarBuilder.append("KW3907 : 'KW' '3907';\n"); - grammarBuilder.append("KW3908 : 'KW' '3908';\n"); - grammarBuilder.append("KW3909 : 'KW' '3909';\n"); - grammarBuilder.append("KW3910 : 'KW' '3910';\n"); - grammarBuilder.append("KW3911 : 'KW' '3911';\n"); - grammarBuilder.append("KW3912 : 'KW' '3912';\n"); - grammarBuilder.append("KW3913 : 'KW' '3913';\n"); - grammarBuilder.append("KW3914 : 'KW' '3914';\n"); - grammarBuilder.append("KW3915 : 'KW' '3915';\n"); - grammarBuilder.append("KW3916 : 'KW' '3916';\n"); - grammarBuilder.append("KW3917 : 'KW' '3917';\n"); - grammarBuilder.append("KW3918 : 'KW' '3918';\n"); - grammarBuilder.append("KW3919 : 'KW' '3919';\n"); - grammarBuilder.append("KW3920 : 'KW' '3920';\n"); - grammarBuilder.append("KW3921 : 'KW' '3921';\n"); - grammarBuilder.append("KW3922 : 'KW' '3922';\n"); - grammarBuilder.append("KW3923 : 'KW' '3923';\n"); - grammarBuilder.append("KW3924 : 'KW' '3924';\n"); - grammarBuilder.append("KW3925 : 'KW' '3925';\n"); - grammarBuilder.append("KW3926 : 'KW' '3926';\n"); - grammarBuilder.append("KW3927 : 'KW' '3927';\n"); - grammarBuilder.append("KW3928 : 'KW' '3928';\n"); - grammarBuilder.append("KW3929 : 'KW' '3929';\n"); - grammarBuilder.append("KW3930 : 'KW' '3930';\n"); - grammarBuilder.append("KW3931 : 'KW' '3931';\n"); - grammarBuilder.append("KW3932 : 'KW' '3932';\n"); - grammarBuilder.append("KW3933 : 'KW' '3933';\n"); - grammarBuilder.append("KW3934 : 'KW' '3934';\n"); - grammarBuilder.append("KW3935 : 'KW' '3935';\n"); - grammarBuilder.append("KW3936 : 'KW' '3936';\n"); - grammarBuilder.append("KW3937 : 'KW' '3937';\n"); - grammarBuilder.append("KW3938 : 'KW' '3938';\n"); - grammarBuilder.append("KW3939 : 'KW' '3939';\n"); - grammarBuilder.append("KW3940 : 'KW' '3940';\n"); - grammarBuilder.append("KW3941 : 'KW' '3941';\n"); - grammarBuilder.append("KW3942 : 'KW' '3942';\n"); - grammarBuilder.append("KW3943 : 'KW' '3943';\n"); - grammarBuilder.append("KW3944 : 'KW' '3944';\n"); - grammarBuilder.append("KW3945 : 'KW' '3945';\n"); - grammarBuilder.append("KW3946 : 'KW' '3946';\n"); - grammarBuilder.append("KW3947 : 'KW' '3947';\n"); - grammarBuilder.append("KW3948 : 'KW' '3948';\n"); - grammarBuilder.append("KW3949 : 'KW' '3949';\n"); - grammarBuilder.append("KW3950 : 'KW' '3950';\n"); - grammarBuilder.append("KW3951 : 'KW' '3951';\n"); - grammarBuilder.append("KW3952 : 'KW' '3952';\n"); - grammarBuilder.append("KW3953 : 'KW' '3953';\n"); - grammarBuilder.append("KW3954 : 'KW' '3954';\n"); - grammarBuilder.append("KW3955 : 'KW' '3955';\n"); - grammarBuilder.append("KW3956 : 'KW' '3956';\n"); - grammarBuilder.append("KW3957 : 'KW' '3957';\n"); - grammarBuilder.append("KW3958 : 'KW' '3958';\n"); - grammarBuilder.append("KW3959 : 'KW' '3959';\n"); - grammarBuilder.append("KW3960 : 'KW' '3960';\n"); - grammarBuilder.append("KW3961 : 'KW' '3961';\n"); - grammarBuilder.append("KW3962 : 'KW' '3962';\n"); - grammarBuilder.append("KW3963 : 'KW' '3963';\n"); - grammarBuilder.append("KW3964 : 'KW' '3964';\n"); - grammarBuilder.append("KW3965 : 'KW' '3965';\n"); - grammarBuilder.append("KW3966 : 'KW' '3966';\n"); - grammarBuilder.append("KW3967 : 'KW' '3967';\n"); - grammarBuilder.append("KW3968 : 'KW' '3968';\n"); - grammarBuilder.append("KW3969 : 'KW' '3969';\n"); - grammarBuilder.append("KW3970 : 'KW' '3970';\n"); - grammarBuilder.append("KW3971 : 'KW' '3971';\n"); - grammarBuilder.append("KW3972 : 'KW' '3972';\n"); - grammarBuilder.append("KW3973 : 'KW' '3973';\n"); - grammarBuilder.append("KW3974 : 'KW' '3974';\n"); - grammarBuilder.append("KW3975 : 'KW' '3975';\n"); - grammarBuilder.append("KW3976 : 'KW' '3976';\n"); - grammarBuilder.append("KW3977 : 'KW' '3977';\n"); - grammarBuilder.append("KW3978 : 'KW' '3978';\n"); - grammarBuilder.append("KW3979 : 'KW' '3979';\n"); - grammarBuilder.append("KW3980 : 'KW' '3980';\n"); - grammarBuilder.append("KW3981 : 'KW' '3981';\n"); - grammarBuilder.append("KW3982 : 'KW' '3982';\n"); - grammarBuilder.append("KW3983 : 'KW' '3983';\n"); - grammarBuilder.append("KW3984 : 'KW' '3984';\n"); - grammarBuilder.append("KW3985 : 'KW' '3985';\n"); - grammarBuilder.append("KW3986 : 'KW' '3986';\n"); - grammarBuilder.append("KW3987 : 'KW' '3987';\n"); - grammarBuilder.append("KW3988 : 'KW' '3988';\n"); - grammarBuilder.append("KW3989 : 'KW' '3989';\n"); - grammarBuilder.append("KW3990 : 'KW' '3990';\n"); - grammarBuilder.append("KW3991 : 'KW' '3991';\n"); - grammarBuilder.append("KW3992 : 'KW' '3992';\n"); - grammarBuilder.append("KW3993 : 'KW' '3993';\n"); - grammarBuilder.append("KW3994 : 'KW' '3994';\n"); - grammarBuilder.append("KW3995 : 'KW' '3995';\n"); - grammarBuilder.append("KW3996 : 'KW' '3996';\n"); - grammarBuilder.append("KW3997 : 'KW' '3997';\n"); - grammarBuilder.append("KW3998 : 'KW' '3998';\n"); - grammarBuilder.append("KW3999 : 'KW' '3999';"); - String grammar = grammarBuilder.toString(); - - String input ="KW400"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='KW400',<402>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(148); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : .*? ('a' | 'ab') {System.out.println(this.getText());} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : . {System.out.println(this.getText());};"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "a\n" + - "b\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:1='b',<3>,1:1]\n" + - "[@2,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"hi\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:3='\"hi\"',<1>,1:0]\n" + - "[@1,4:8='\"mom\"',<1>,1:4]\n" + - "[@2,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParentheses() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("START_BLOCK: '-.-.-';\n"); - grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); - grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); - grammarBuilder.append("fragment L_A: '.-';\n"); - grammarBuilder.append("fragment L_K: '-.-';\n"); - grammarBuilder.append("SEPARATOR: '!';"); - String grammar = grammarBuilder.toString(); - - String input ="-.-.-!"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='-.-.-',<1>,1:0]\n" + - "[@1,5:5='!',<3>,1:5]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPositionAdjustingLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2501); - grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("@Override\n"); - grammarBuilder.append("public Token nextToken() {\n"); - grammarBuilder.append(" if (!(_interp instanceof PositionAdjustingLexerATNSimulator)) {\n"); - grammarBuilder.append(" _interp = new PositionAdjustingLexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return super.nextToken();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@Override\n"); - grammarBuilder.append("public Token emit() {\n"); - grammarBuilder.append(" switch (_type) {\n"); - grammarBuilder.append(" case TOKENS:\n"); - grammarBuilder.append(" handleAcceptPositionForKeyword(\"tokens\");\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" case LABEL:\n"); - grammarBuilder.append(" handleAcceptPositionForIdentifier();\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" default:\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return super.emit();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("private boolean handleAcceptPositionForIdentifier() {\n"); - grammarBuilder.append(" String tokenText = getText();\n"); - grammarBuilder.append(" int identifierLength = 0;\n"); - grammarBuilder.append(" while (identifierLength < tokenText.length() && isIdentifierChar(tokenText.charAt(identifierLength))) {\n"); - grammarBuilder.append(" identifierLength++;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" if (getInputStream().index() > _tokenStartCharIndex + identifierLength) {\n"); - grammarBuilder.append(" int offset = identifierLength - 1;\n"); - grammarBuilder.append(" getInterpreter().resetAcceptPosition(getInputStream(), _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("private boolean handleAcceptPositionForKeyword(String keyword) {\n"); - grammarBuilder.append(" if (getInputStream().index() > _tokenStartCharIndex + keyword.length()) {\n"); - grammarBuilder.append(" int offset = keyword.length() - 1;\n"); - grammarBuilder.append(" getInterpreter().resetAcceptPosition(getInputStream(), _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@Override\n"); - grammarBuilder.append("public PositionAdjustingLexerATNSimulator getInterpreter() {\n"); - grammarBuilder.append(" return (PositionAdjustingLexerATNSimulator)super.getInterpreter();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("private static boolean isIdentifierChar(char c) {\n"); - grammarBuilder.append(" return Character.isLetterOrDigit(c) || c == '_';\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("protected static class PositionAdjustingLexerATNSimulator extends LexerATNSimulator {\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" public PositionAdjustingLexerATNSimulator(Lexer recog, ATN atn,\n"); - grammarBuilder.append(" DFA[] decisionToDFA,\n"); - grammarBuilder.append(" PredictionContextCache sharedContextCache)\n"); - grammarBuilder.append(" {\n"); - grammarBuilder.append(" super(recog, atn, decisionToDFA, sharedContextCache);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" protected void resetAcceptPosition(CharStream input, int index, int line, int charPositionInLine) {\n"); - grammarBuilder.append(" input.seek(index);\n"); - grammarBuilder.append(" this.line = line;\n"); - grammarBuilder.append(" this.charPositionInLine = charPositionInLine;\n"); - grammarBuilder.append(" consume(input);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ASSIGN : '=' ;\n"); - grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); - grammarBuilder.append("LCURLY: '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// 'tokens' followed by '{'\n"); - grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); - grammarBuilder.append("LABEL\n"); - grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("IDENTIFIER\n"); - grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("IGNORED\n"); - grammarBuilder.append(" : [ \\t\\r\\n]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("NEWLINE\n"); - grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS\n"); - grammarBuilder.append(" : [ \\t]+ -> skip\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - String input = - "tokens\n" + - "tokens {\n" + - "notLabel\n" + - "label1 =\n" + - "label2 +=\n" + - "notLabel\n"; - String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); - assertEquals( - "[@0,0:5='tokens',<6>,1:0]\n" + - "[@1,7:12='tokens',<4>,2:0]\n" + - "[@2,14:14='{',<3>,2:7]\n" + - "[@3,16:23='notLabel',<6>,3:0]\n" + - "[@4,25:30='label1',<5>,4:0]\n" + - "[@5,32:32='=',<1>,4:7]\n" + - "[@6,34:39='label2',<5>,5:0]\n" + - "[@7,41:42='+=',<2>,5:7]\n" + - "[@8,44:51='notLabel',<6>,6:0]\n" + - "[@9,53:52='',<-1>,7:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testQuoteTranslation() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); - String grammar = grammarBuilder.toString(); - - String input ="\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\"',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : '-' I ;\n"); - grammarBuilder.append("I : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 -21 3"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='34',<2>,1:0]\n" + - "[@1,3:5='-21',<1>,1:3]\n" + - "[@2,7:7='3',<2>,1:7]\n" + - "[@3,8:7='',<-1>,1:8]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSlashes() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("Backslash : '\\\\';\n"); - grammarBuilder.append("Slash : '/';\n"); - grammarBuilder.append("Vee : '\\\\/';\n"); - grammarBuilder.append("Wedge : '/\\\\';\n"); - grammarBuilder.append("WS : [ \\t] -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="\\ / \\/ /\\"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\\',<1>,1:0]\n" + - "[@1,2:2='/',<2>,1:2]\n" + - "[@2,4:5='\\/',<3>,1:4]\n" + - "[@3,7:8='/\\',<4>,1:7]\n" + - "[@4,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testZeroLengthToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("BeginString\n"); - grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("mode StringMode;\n"); - grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); - grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); - grammarBuilder.append("mode EndStringMode; \n"); - grammarBuilder.append(" EndString : '\\'' -> popMode;"); - String grammar = grammarBuilder.toString(); - - String input ="'xxx'"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4=''xxx'',<1>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestListeners.java index 1b3565821..12a1e4cbc 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestListeners.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestListeners.java @@ -1,348 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestListeners extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(453); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); - grammarBuilder.append(" public void visitTerminal(TerminalNode node) {\n"); - grammarBuilder.append(" System.out.println(node.getSymbol().getText());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1\n" + - "2\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(633); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); - grammarBuilder.append(" public void exitE(TParser.EContext ctx) {\n"); - grammarBuilder.append(" if (ctx.getChildCount()==3) {\n"); - grammarBuilder.append(" System.out.printf(\"%s %s %s\\n\",ctx.e(0).start.getText(),\n"); - grammarBuilder.append(" ctx.e(1).start.getText(), ctx.e().get(0).start.getText());\n"); - grammarBuilder.append(" } else\n"); - grammarBuilder.append(" System.out.println(ctx.INT().getSymbol().getText());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1\n" + - "2\n" + - "3\n" + - "2 3 2\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(630); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); - grammarBuilder.append(" public void exitCall(TParser.CallContext ctx) {\n"); - grammarBuilder.append(" System.out.printf(\"%s %s\",ctx.e().start.getText(),ctx.eList());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" public void exitInt(TParser.IntContext ctx) {\n"); - grammarBuilder.append(" System.out.println(ctx.INT().getSymbol().getText());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1\n" + - "2\n" + - "3\n" + - "1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(650); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); - grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.getChildCount()==2) {\n"); - grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.b(0).start.getText(),\n"); - grammarBuilder.append(" ctx.b(1).start.getText(),ctx.b().get(0).start.getText());\n"); - grammarBuilder.append(" } else\n"); - grammarBuilder.append(" System.out.println(ctx.b(0).start.getText());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(650); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); - grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.getChildCount()==2) {\n"); - grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.b(0).start.getText(),\n"); - grammarBuilder.append(" ctx.b(1).start.getText(),ctx.b().get(0).start.getText());\n"); - grammarBuilder.append(" } else\n"); - grammarBuilder.append(" System.out.println(ctx.b(0).start.getText());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(595); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); - grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.getChildCount()==2)\n"); - grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.INT(0).getSymbol().getText(),\n"); - grammarBuilder.append(" ctx.INT(1).getSymbol().getText(),ctx.INT());\n"); - grammarBuilder.append(" else\n"); - grammarBuilder.append(" System.out.println(ctx.ID().getSymbol());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(595); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class LeafListener extends TBaseListener {\n"); - grammarBuilder.append(" public void exitA(TParser.AContext ctx) {\n"); - grammarBuilder.append(" if (ctx.getChildCount()==2)\n"); - grammarBuilder.append(" System.out.printf(\"%s %s %s\",ctx.INT(0).getSymbol().getText(),\n"); - grammarBuilder.append(" ctx.INT(1).getSymbol().getText(),ctx.INT());\n"); - grammarBuilder.append(" else\n"); - grammarBuilder.append(" System.out.println(ctx.ID().getSymbol());\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("ParseTreeWalker walker = new ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParseTrees.java index 7a0a944df..28e3eb87d 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParseTrees.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParseTrees.java @@ -1,291 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestParseTrees extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2AltLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyyxyxz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x y y x y x z)\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2Alts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(133); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a y)\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAltNum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(562); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("public static class MyRuleNode extends ParserRuleContext {\n"); - grammarBuilder.append(" public int altNum;\n"); - grammarBuilder.append(" public MyRuleNode(ParserRuleContext parent, int invokingStateNumber) {\n"); - grammarBuilder.append(" super(parent, invokingStateNumber);\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" @Override public int getAltNumber() { return altNum; }\n"); - grammarBuilder.append(" @Override public void setAltNumber(int altNum) { this.altNum = altNum; }\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("a : 'f'\n"); - grammarBuilder.append(" | 'g'\n"); - grammarBuilder.append(" | 'x' b 'z'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'e' {} | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a:3 x (b:2 y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExtraToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(146); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="xzy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x z y)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(148); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a z)\n", found); - - assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleRef() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b 'x'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'y' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="yx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a (b y) x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSync() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'* '!'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xzyy!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x z y y !)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToken2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("(a x y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenAndRuleContextString() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(176); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("setBuildParseTree(true);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($r.ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' { \n"); - grammarBuilder.append("System.out.println(getRuleInvocationStack());\n"); - grammarBuilder.append("} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "[a, s]\n" + - "(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserErrors.java index 5a960a52f..fe5c38ecc 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserErrors.java @@ -1,687 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestParserErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x='b' {System.out.println(\"conjured=\" + $x);} 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpTokenFromSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(76); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x=('b'|'c') {System.out.println(\"conjured=\" + $x);} 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testContextListGetters() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(221); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members{\n"); - grammarBuilder.append("void foo() {\n"); - grammarBuilder.append(" SContext s = null;\n"); - grammarBuilder.append(" List a = s.a();\n"); - grammarBuilder.append(" List b = s.b();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : (a | b)+;\n"); - grammarBuilder.append("a : 'a' {System.out.print(\"a\");};\n"); - grammarBuilder.append("b : 'b' {System.out.print(\"b\");};"); - String grammar = grammarBuilder.toString(); - - - String input ="abab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("abab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidATNStateRemoval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input ="x:x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidEmptyInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID+;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, true); - assertEquals("", found); - - assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1ErrorInfo() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(306); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); - grammarBuilder.append("animal : (DOG | CAT );\n"); - grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); - grammarBuilder.append("AND : 'and';\n"); - grammarBuilder.append("DOG : 'dog';\n"); - grammarBuilder.append("CAT : 'cat';\n"); - grammarBuilder.append("HARDWARE: 'hardware';\n"); - grammarBuilder.append("SOFTWARE: 'software';\n"); - grammarBuilder.append("WS : ' ' -> skip ;\n"); - grammarBuilder.append("acClass\n"); - grammarBuilder.append("@init\n"); - grammarBuilder.append("{System.out.println(this.getExpectedTokens().toString(this.tokenNames));}\n"); - grammarBuilder.append(" : ;"); - String grammar = grammarBuilder.toString(); - - - String input ="dog and software"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals("{'hardware', 'software'}\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'\n"); - grammarBuilder.append(" | 'a' 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(55); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c'\n"); - grammarBuilder.append(" | 'a' 'b' 'd'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abe"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLLStar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aaae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAltAvoidance() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e '!' ;\n"); - grammarBuilder.append("e : 'a' 'b'\n"); - grammarBuilder.append(" | 'a'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a."; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(34); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(89); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {System.out.println(\"\" + $myset.stop);} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("[@0,0:0='a',<3>,1:0]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('b' | 'c')\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'a'\n"); - grammarBuilder.append(";"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(25); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(32); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforePredict() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="caaab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(89); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {System.out.println(\"\" + $myset.stop);} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="aabd"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("[@2,2:2='b',<1>,1:2]\n", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionExpectingSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); - grammarBuilder.append("expr: ID '=' STR ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="( ~FORCE_ERROR~ "; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - - assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserExec.java index 1ead05bd7..3da16988b 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestParserExec.java @@ -1,758 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestParserExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID+ {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(96); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)+ {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(96); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(96); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorB() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID {\n"); - grammarBuilder.append("System.out.println(\"alt 1\");\n"); - grammarBuilder.append("} | INT {\n"); - grammarBuilder.append("System.out.println(\"alt 2\");\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})+ {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(112); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID INT {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abc34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFInClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : stat EOF;\n"); - grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(200); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(200); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(201); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(200); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(117); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(117); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("System.out.println($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : a* EOF;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : label=subrule {System.out.println($label.text);} #One\n"); - grammarBuilder.append(" | label='y' {System.out.println($label.text);} #Two\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("subrule : 'x';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals( - "x\n" + - "y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); - grammarBuilder.append("b : id_=ID val+=INT*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelForClosureContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(462); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("ifStatement\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("List __ttt__ = $ctx.elseIfStatement();\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : 'if' expression\n"); - grammarBuilder.append(" ( ( 'then'\n"); - grammarBuilder.append(" executableStatement*\n"); - grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); - grammarBuilder.append(" elseStatement?\n"); - grammarBuilder.append(" 'end' 'if'\n"); - grammarBuilder.append(" ) | executableStatement )\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("elseIfStatement\n"); - grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expression : 'a' ;\n"); - grammarBuilder.append("executableStatement : 'a' ;\n"); - grammarBuilder.append("elseStatement : 'a' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "expression", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelsOnSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b b* ';' ;\n"); - grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleEOFHandling() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(42); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserProperty() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(168); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("boolean Property() {\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("a : {$parser.Property()}? ID {System.out.println(\"valid\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("valid\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedIfIfElse() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(175); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : stmt EOF ;\n"); - grammarBuilder.append("stmt : ifStmt | ID;\n"); - grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { this._input.LA(1)!=TParser.ELSE }?);\n"); - grammarBuilder.append("ELSE : 'else';\n"); - grammarBuilder.append("ID : [a-zA-Z]+;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x if x a else b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredictionIssue334() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(255); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_ @init{\n"); - grammarBuilder.append("setErrorHandler(new BailErrorStrategy());\n"); - grammarBuilder.append("} \n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); - grammarBuilder.append("item : A B?;\n"); - grammarBuilder.append("SEMICOLON: ';';\n"); - grammarBuilder.append("A : 'a'|'A';\n"); - grammarBuilder.append("B : 'b'|'B';\n"); - grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "file_", input, false); - assertEquals("(file_ (item a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(120); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {System.out.println($text);} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(120); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {System.out.println($text);} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestPerformance.java index c4a70e309..af40cb55a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestPerformance.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestPerformance.java @@ -1,215 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestPerformance extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test(timeout = 60000) - public void testExpressionGrammar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test(timeout = 60000) - public void testExpressionGrammar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Java"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalLexer.java index 86e3adbda..286f70955 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalLexer.java @@ -1,217 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestSemPredEvalLexer extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisableRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("E1 : 'enum' { false }? ;\n"); - grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<3>,1:5]\n" + - "[@2,8:7='',<-1>,1:8]\n" + - "s0-' '->:s5=>4\n" + - "s0-'a'->:s6=>3\n" + - "s0-'e'->:s1=>3\n" + - ":s1=>3-'n'->:s2=>3\n" + - ":s2=>3-'u'->:s3=>3\n" + - ":s6=>3-'b'->:s6=>3\n" + - ":s6=>3-'c'->:s6=>3\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnumNotID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(108); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { this.getText().equals(\"enum\") }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<1>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s3=>3\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDnotEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s2=>3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDvsEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s5=>3\n" + - "s0-'a'->:s4=>2\n" + - "s0-'e'->:s1=>2\n" + - ":s1=>2-'n'->:s2=>2\n" + - ":s2=>2-'u'->:s3=>2\n" + - ":s4=>2-'b'->:s4=>2\n" + - ":s4=>2-'c'->:s4=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndent() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(161); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { this._tokenStartCharPositionInLine==0 }?\n"); - grammarBuilder.append(" { System.out.println(\"INDENT\"); } ;\n"); - grammarBuilder.append("NL : '\\n';\n"); - grammarBuilder.append("WS : [ \\t]+ ;"); - String grammar = grammarBuilder.toString(); - - String input = - "abc\n" + - " def \n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "INDENT\n" + - "[@0,0:2='abc',<1>,1:0]\n" + - "[@1,3:3='\\n',<3>,1:3]\n" + - "[@2,4:5=' ',<2>,2:0]\n" + - "[@3,6:8='def',<1>,2:2]\n" + - "[@4,9:10=' ',<4>,2:5]\n" + - "[@5,11:11='\\n',<3>,2:7]\n" + - "[@6,12:11='',<-1>,3:0]\n" + - "s0-'\n" + - "'->:s2=>3\n" + - "s0-'a'->:s1=>1\n" + - "s0-'d'->:s1=>1\n" + - ":s1=>1-'b'->:s1=>1\n" + - ":s1=>1-'c'->:s1=>1\n" + - ":s1=>1-'e'->:s1=>1\n" + - ":s1=>1-'f'->:s1=>1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerInputPositionSensitivePredicates() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(278); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WORD1 : ID1+ { System.out.println(this.getText()); } ;\n"); - grammarBuilder.append("WORD2 : ID2+ { System.out.println(this.getText()); } ;\n"); - grammarBuilder.append("fragment ID1 : { this.getCharPositionInLine() < 2 }? [a-zA-Z];\n"); - grammarBuilder.append("fragment ID2 : { this.getCharPositionInLine() >= 2 }? [a-zA-Z];\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input = - "a cde\n" + - "abcde\n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "a\n" + - "cde\n" + - "ab\n" + - "cde\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:4='cde',<2>,1:2]\n" + - "[@2,6:7='ab',<1>,2:0]\n" + - "[@3,8:10='cde',<2>,2:2]\n" + - "[@4,12:11='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedKeywords() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(187); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { this.getText().equals(\"enum\") }? { System.out.println(\"enum!\"); } ;\n"); - grammarBuilder.append("ID : [a-z]+ { System.out.println(\"ID \" + this.getText()); } ;\n"); - grammarBuilder.append("WS : [ \\n] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="enum enu a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "enum!\n" + - "ID enu\n" + - "ID a\n" + - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='enu',<2>,1:5]\n" + - "[@2,9:9='a',<2>,1:9]\n" + - "[@3,10:9='',<-1>,1:10]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalParser.java index 039286088..fe4c46fda 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSemPredEvalParser.java @@ -1,736 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestSemPredEvalParser extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAlts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(315); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);} a ';' a; // do 2x: once in ATN, next in DFA\n"); - grammarBuilder.append("a : ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" | {false}? ID {System.out.println(\"alt 3\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - - assertEquals( - "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + - "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(374); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {_interp.setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);} a ';' a ';' a;\n"); - grammarBuilder.append("a : INT {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | ID {System.out.println(\"alt 2\");} // must pick this one for ID since pred is false\n"); - grammarBuilder.append(" | ID {System.out.println(\"alt 3\");}\n"); - grammarBuilder.append(" | {false}? ID {System.out.println(\"alt 4\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34; x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, true); - assertEquals( - "alt 1\n" + - "alt 2\n" + - "alt 2\n", found); - - assertEquals( - "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + - "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionHidesPreds() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a+ ;\n"); - grammarBuilder.append("a : {this.i = 1;} ID {this.i == 1}? {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {this.i = 2;} ID {this.i == 2}? {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionsHidePredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(299); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("boolean pred(boolean v) {\n"); - grammarBuilder.append(" System.out.println(\"eval=\"+v);\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {} {this.pred(true)}? {System.out.println(\"parse\");} '!' ;\n"); - grammarBuilder.append("t : e {} {this.pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAtomWithClosureInTranslatedLRRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : e[0] EOF;\n"); - grammarBuilder.append("e[int _p]\n"); - grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); - grammarBuilder.append(" ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b+a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDepedentPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(322); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("boolean pred(boolean v) {\n"); - grammarBuilder.append(" System.out.println(\"eval=\"+v);\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : a[99] ;\n"); - grammarBuilder.append("a[int i] : e {this.pred($i==99)}? {System.out.println(\"parse\");} '!' ;\n"); - grammarBuilder.append("b[int i] : e {this.pred($i==99)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(284); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); - grammarBuilder.append("b[int i] : a[i] ;\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {$i==2}? ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisabledAlternative() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); - grammarBuilder.append("content: anything | {false}? .;\n"); - grammarBuilder.append("anything: ANY_CHAR;\n"); - grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); - String grammar = grammarBuilder.toString(); - - - String input ="hello"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "cppCompilationUnit", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(197); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b ';' | b '.' ;\n"); - grammarBuilder.append("b : a ;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : {false}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoTruePredsThrowsNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(185); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {false}? ID INT {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {false}? ID INT {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOrder() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(311); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); - grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); - grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); - grammarBuilder.append("a : ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(211); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {System.out.println($ctx.toStringTree(this));}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); - - assertEquals( - "line 5:0 mismatched input '' expecting '\n" + - "'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(211); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {System.out.println($ctx.toStringTree(this));}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n" + - "\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(226); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {boolean enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {System.out.println(\"ID \"+$ID.text);}\n"); - grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {System.out.println(\"enum\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "primary", input, false); - assertEquals("ID abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(226); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {boolean enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {System.out.println(\"ID \"+$ID.text);}\n"); - grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {System.out.println(\"enum\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="enum"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "primary", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(222); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {$i==2}? ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID \n"); - grammarBuilder.append(" | {$i==2}? ID \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(293); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("boolean pred(boolean v) {\n"); - grammarBuilder.append(" System.out.println(\"eval=\"+v);\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {this.pred(true)}? {System.out.println(\"parse\");} '!' ;\n"); - grammarBuilder.append("t : e {this.pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRewindBeforePredEval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(253); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {this._input.LT(1).getText().equals(\"x\")}? ID INT {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {this._input.LT(1).getText().equals(\"y\")}? ID INT {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(277); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); - grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" | INT {System.out.println(\"alt 3\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y 3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(178); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(181); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a;\n"); - grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="3 4 x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n", found); - - assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeft() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(178); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append(" s : a+ ;\n"); - grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeftWithVaryingPredicate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(296); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {int i = 0;}\n"); - grammarBuilder.append("s : ({this.i += 1;\n"); - grammarBuilder.append("System.out.print(\"i=\");\n"); - grammarBuilder.append("System.out.println(this.i);} a)+ ;\n"); - grammarBuilder.append("a : {this.i % 2 == 0}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {this.i % 2 != 0}? ID {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "i=1\n" + - "alt 2\n" + - "i=2\n" + - "alt 1\n" + - "i=3\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testUnpredicatedPathsInAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(197); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | b {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("a : {false}? ID INT\n"); - grammarBuilder.append(" | ID INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testValidateInDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(346); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ';' a;\n"); - grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); - grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); - grammarBuilder.append("// throws an exception if the validating predicate fails\n"); - grammarBuilder.append("a : {false}? ID {System.out.println(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {System.out.println(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x ; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 no viable alternative at input 'x'\n" + - "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSets.java index c1d55808d..4de093729 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestSets.java @@ -1,453 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestSets extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetLiteral() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(92); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (A {System.out.println($A.text);})+ ;\n"); - grammarBuilder.append("A : [AaBb] ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="A a B b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals( - "A\n" + - "a\n" + - "B\n" + - "b\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testComplementSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("parse : ~NEW_LINE;\n"); - grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "parse", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 token recognition error at: 'a'\n" + - "line 1:1 missing {} at ''\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); - grammarBuilder.append("A : ~'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(66); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); - grammarBuilder.append("A : ~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(68); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); - grammarBuilder.append("A : h=~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithRuleRef3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(132); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println($A.text);} ;\n"); - grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("B : ~('a'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(76); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {System.out.println(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~('x'|'y') 'z' {System.out.println($t.text);} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {System.out.println(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("zz\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotTokenWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~'x' 'z' {System.out.println($t.text);} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=('x'|'y') {System.out.println($t.text);} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(76); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {System.out.println(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleAsSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {System.out.println(this._input.getText());} : 'a' | 'b' |'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("b\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSeqDoesNotBecomeSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(120); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("fragment A : '1' | '2';\n"); - grammarBuilder.append("fragment B : '3' '4';\n"); - grammarBuilder.append("C : A | B;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {System.out.println(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(76); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {System.out.println(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestVisitors.java index 0db79a147..48b102eec 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestVisitors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/java/TestVisitors.java @@ -1,290 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.java; -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class TestVisitors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(224); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - "[ '1', '2' ]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseJavaTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(239); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1,,2,,32 3 21 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Java"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(279); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1,,2,,3,1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - ",1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(266); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(224); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a 1 2)\n" + - ",1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(224); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("System.out.println($ctx.r.toStringTree(this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/browser/BaseBrowserTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/browser/BaseBrowserTest.java index 6878dfeab..d2133a89c 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/browser/BaseBrowserTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/browser/BaseBrowserTest.java @@ -54,8 +54,10 @@ import org.antlr.v4.runtime.atn.LexerATNSimulator; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntegerList; import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.misc.Utils; import org.antlr.v4.semantics.SemanticPipeline; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.SingleTest; import org.antlr.v4.tool.ANTLRMessage; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.DefaultToolListener; @@ -68,7 +70,6 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.DefaultHandler; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; -import org.junit.Before; import org.junit.rules.TestRule; import org.junit.rules.TestWatcher; import org.junit.runner.Description; @@ -102,7 +103,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public abstract class BaseBrowserTest { +public abstract class BaseBrowserTest implements SingleTest { // -J-Dorg.antlr.v4.test.BaseTest.level=FINE // private static final Logger LOGGER = Logger.getLogger(BaseTest.class.getName()); @@ -113,10 +114,13 @@ public abstract class BaseBrowserTest { public String tmpdir = null; /** If error during parser execution, store stderr here; can't return - * stdout and stderr. This doesn't trap errors from running antlr. - */ + * stdout and stderr. This doesn't trap errors from running antlr. + */ protected String stderrDuringParse; + /** Errors found while running antlr */ + protected StringBuilder antlrToolErrors; + @org.junit.Rule public final TestRule testWatcher = new TestWatcher() { @@ -128,21 +132,42 @@ public abstract class BaseBrowserTest { }; - @Before - public void setUp() throws Exception { - // new output dir for each test - String prop = System.getProperty("antlr-javascript-test-dir"); - if(prop!=null && prop.length()>0) - httpdir = prop; - else - httpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); - File dir = new File(httpdir); - if(dir.exists()) - this.eraseFiles(dir); - tmpdir = new File(httpdir, "parser").getAbsolutePath(); - } - protected org.antlr.v4.Tool newTool(String[] args) { + @Override + public void testSetUp() throws Exception { + // new output dir for each test + String prop = System.getProperty("antlr-javascript-test-dir"); + if(prop!=null && prop.length()>0) + httpdir = prop; + else + httpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); + File dir = new File(httpdir); + if(dir.exists()) + this.eraseFiles(dir); + tmpdir = new File(httpdir, "parser").getAbsolutePath(); + } + + @Override + public String getTmpDir() { + return tmpdir; + } + + @Override + public String getStdout() { + return null; + } + + @Override + public String getParseErrors() { + return stderrDuringParse; + } + + @Override + public String getANTLRToolErrors() { + return null; + } + + protected org.antlr.v4.Tool newTool(String[] args) { Tool tool = new Tool(args); return tool; } @@ -216,8 +241,8 @@ public abstract class BaseBrowserTest { } public List getTokenTypes(LexerGrammar lg, - ATN atn, - CharStream input) + ATN atn, + CharStream input) { LexerATNSimulator interp = new LexerATNSimulator(atn,new DFA[] { new DFA(atn.modeToStartState.get(Lexer.DEFAULT_MODE)) },null); List tokenTypes = new ArrayList(); @@ -247,7 +272,6 @@ public abstract class BaseBrowserTest { /** Return true if all is ok, no errors */ protected ErrorQueue antlr(String fileName, String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { - System.out.println("dir "+tmpdir); mkdir(tmpdir); writeFile(tmpdir, fileName, grammarStr); final List options = new ArrayList(); @@ -270,86 +294,104 @@ public abstract class BaseBrowserTest { antlr.processGrammarsOnCommandLine(); if ( !defaultListener && !equeue.errors.isEmpty() ) { - System.err.println("antlr reports errors from "+options); for (int i = 0; i < equeue.errors.size(); i++) { ANTLRMessage msg = equeue.errors.get(i); - System.err.println(msg); + antlrToolErrors.append(msg.toString()); + } + try { + antlrToolErrors.append(new String(Utils.readFile(tmpdir+"/"+grammarFileName))); + } + catch (IOException ioe) { + antlrToolErrors.append(ioe.toString()); } - System.out.println("!!!\ngrammar:"); - System.out.println(grammarStr); - System.out.println("###"); } if ( !defaultListener && !equeue.warnings.isEmpty() ) { - System.err.println("antlr reports warnings from "+options); for (int i = 0; i < equeue.warnings.size(); i++) { ANTLRMessage msg = equeue.warnings.get(i); - System.err.println(msg); + // antlrToolErrors.append(msg); warnings are hushed } } return equeue; } - protected String execLexer(String grammarFileName, - String grammarStr, - String lexerName, - String input, boolean showDFA) throws Exception + @Override + public String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, boolean showDFA) { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, - grammarStr, - null, - lexerName,"-no-listener"); + grammarStr, + null, + lexerName,"-no-listener"); assertTrue(success); writeLexerTestFile(lexerName, showDFA); - String output = execHtmlPage("Test.html", input); - if ( stderrDuringParse!=null && stderrDuringParse.length()>0 ) { - System.err.println(stderrDuringParse); + String output = null; + try { + output = execHtmlPage("Test.html", input); + } + catch (Exception e) { + e.printStackTrace(System.err); } return output; } - protected String execParser(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String listenerName, - String visitorName, - String startRuleName, - String input, - boolean debug) throws Exception + @Override + public String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean showDiagnosticErrors) { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, - grammarStr, - parserName, - lexerName, - "-visitor"); + grammarStr, + parserName, + lexerName, + "-visitor"); assertTrue(success); rawBuildRecognizerTestFile(parserName, - lexerName, - listenerName, - visitorName, - startRuleName, - debug); - return execRecognizer(input); + lexerName, + listenerName, + visitorName, + startRuleName, + showDiagnosticErrors); + String result = null; + try { + result = execRecognizer(input); + } + catch (Exception e) { + e.printStackTrace(System.err); + } + return result; + } + + @Override + public void testTearDown() throws Exception { + } /** Return true if all is well */ protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String... extraOptions) + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) { return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); } /** Return true if all is well */ protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - boolean defaultListener, - String... extraOptions) + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) { ErrorQueue equeue = antlr(grammarFileName, grammarFileName, grammarStr, defaultListener, extraOptions); @@ -375,22 +417,22 @@ public abstract class BaseBrowserTest { } protected void rawBuildRecognizerTestFile(String parserName, - String lexerName, - String listenerName, - String visitorName, - String parserStartRuleName, boolean debug) + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, boolean debug) { - this.stderrDuringParse = null; + this.stderrDuringParse = null; if ( parserName==null ) { writeLexerTestFile(lexerName, false); } else { writeParserTestFile(parserName, - lexerName, - listenerName, - visitorName, - parserStartRuleName, - debug); + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug); } } @@ -437,7 +479,7 @@ public abstract class BaseBrowserTest { } } } - + protected static WebDriver driver; public String execHtmlPage(String fileName, String input) throws Exception { @@ -499,9 +541,9 @@ public abstract class BaseBrowserTest { } public void testErrors(String[] pairs, boolean printTree) { - for (int i = 0; i < pairs.length; i+=2) { - String input = pairs[i]; - String expect = pairs[i+1]; + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; String[] lines = input.split("\n"); String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); @@ -515,9 +557,9 @@ public abstract class BaseBrowserTest { msg = msg.replace("\r","\\r"); msg = msg.replace("\t","\\t"); - assertEquals("error in: "+msg,expect,actual); - } - } + assertEquals("error in: "+msg,expect,actual); + } + } public String getFilenameFromFirstLineOfGrammar(String line) { String fileName = "A" + Tool.GRAMMAR_EXTENSION; @@ -624,7 +666,7 @@ public abstract class BaseBrowserTest { } protected void checkGrammarSemanticsError(ErrorQueue equeue, - GrammarSemanticsMessage expectedMessage) + GrammarSemanticsMessage expectedMessage) throws Exception { ANTLRMessage foundMsg = null; @@ -636,7 +678,7 @@ public abstract class BaseBrowserTest { } assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", - foundMsg instanceof GrammarSemanticsMessage); + foundMsg instanceof GrammarSemanticsMessage); assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); if ( equeue.size()!=1 ) { System.err.println(equeue); @@ -644,7 +686,7 @@ public abstract class BaseBrowserTest { } protected void checkGrammarSemanticsWarning(ErrorQueue equeue, - GrammarSemanticsMessage expectedMessage) + GrammarSemanticsMessage expectedMessage) throws Exception { ANTLRMessage foundMsg = null; @@ -656,7 +698,7 @@ public abstract class BaseBrowserTest { } assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", - foundMsg instanceof GrammarSemanticsMessage); + foundMsg instanceof GrammarSemanticsMessage); assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); if ( equeue.size()!=1 ) { System.err.println(equeue); @@ -664,7 +706,7 @@ public abstract class BaseBrowserTest { } protected void checkError(ErrorQueue equeue, - ANTLRMessage expectedMessage) + ANTLRMessage expectedMessage) throws Exception { //System.out.println("errors="+equeue); @@ -685,12 +727,12 @@ public abstract class BaseBrowserTest { assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); } - public static class FilteringTokenStream extends CommonTokenStream { - public FilteringTokenStream(TokenSource src) { super(src); } - Set hide = new HashSet(); - @Override - protected boolean sync(int i) { - if (!super.sync(i)) { + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { return false; } @@ -700,11 +742,11 @@ public abstract class BaseBrowserTest { } return true; - } - public void setTokenTypeChannel(int ttype, int channel) { - hide.add(ttype); - } - } + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } public static void writeFile(String dir, String fileName, String content) { try { @@ -727,204 +769,205 @@ public abstract class BaseBrowserTest { } protected void writeParserTestFile(String parserName, - String lexerName, - String listenerName, - String visitorName, - String parserStartRuleName, boolean debug) { + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, boolean debug) { String html = "\r\n" + - "\r\n" + - " \r\n" + - " \r\n" + - " \r\n" + - " \r\n" + - " \r\n" + - "
\r\n" + - "
\r\n" + - "
\r\n" + - "
\r\n" + - "
\r\n" + - " \r\n" + - "\r\n"; + "\r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + " \r\n" + + "\r\n"; writeFile(httpdir, "Test.html", html); }; protected void writeLexerTestFile(String lexerName, boolean showDFA) { String html = "\r\n" + - "\r\n" + - " \r\n" + - " \r\n" + - " \r\n" + - " \r\n" + - " \r\n" + - "
\r\n" + - "
\r\n" + - "
\r\n" + - "
\r\n" + - "
\r\n" + - " \r\n" + - "\r\n"; + "\r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + "
\r\n" + + " \r\n" + + "\r\n"; writeFile(httpdir, "Test.html", html); } public void writeRecognizer(String parserName, String lexerName, - String listenerName, String visitorName, - String parserStartRuleName, boolean debug) { + String listenerName, String visitorName, + String parserStartRuleName, boolean debug) { if ( parserName==null ) writeLexerTestFile(lexerName, debug); else writeParserTestFile(parserName, - lexerName, - listenerName, - visitorName, - parserStartRuleName, - debug); + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug); } - protected void eraseFiles(final String filesEndingWith) { - File tmpdirF = new File(httpdir); - String[] files = tmpdirF.list(); - for(int i = 0; files!=null && i < files.length; i++) { - if ( files[i].endsWith(filesEndingWith) ) { - new File(httpdir+"/"+files[i]).delete(); - } - } - } + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(httpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(httpdir+"/"+files[i]).delete(); + } + } + } - protected void eraseFiles(File dir) { - String[] files = dir.list(); - for(int i = 0; files!=null && i < files.length; i++) { - new File(dir,files[i]).delete(); - } - } + protected void eraseFiles(File dir) { + String[] files = dir.list(); + for(int i = 0; files!=null && i < files.length; i++) { + new File(dir,files[i]).delete(); + } + } - protected void eraseTempDir() { - boolean doErase = true; - String propName = "antlr-javascript-erase-test-dir"; - String prop = System.getProperty(propName); - if(prop!=null && prop.length()>0) - doErase = Boolean.getBoolean(prop); - if(doErase) { - File tmpdirF = new File(httpdir); - if ( tmpdirF.exists() ) { - eraseFiles(tmpdirF); - tmpdirF.delete(); - } - } - } + @Override + public void eraseTempDir() { + boolean doErase = true; + String propName = "antlr-javascript-erase-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + doErase = Boolean.getBoolean(prop); + if(doErase) { + File tmpdirF = new File(httpdir); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + } - public String getFirstLineOfException() { + public String getFirstLineOfException() { if ( this.stderrDuringParse ==null ) { return null; } @@ -933,33 +976,33 @@ public abstract class BaseBrowserTest { return lines[0].substring(prefix.length(),lines[0].length()); } - /** - * When looking at a result set that consists of a Map/HashTable - * we cannot rely on the output order, as the hashing algorithm or other aspects - * of the implementation may be different on differnt JDKs or platforms. Hence - * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a - * bit of a hack, but guarantees that we get the same order on all systems. We assume that - * the keys are strings. - * - * @param m The Map that contains keys we wish to return in sorted order - * @return A string that represents all the keys in sorted order. - */ - public String sortMapToString(Map m) { - // Pass in crap, and get nothing back - // - if (m == null) { - return null; - } + /** + * When looking at a result set that consists of a Map/HashTable + * we cannot rely on the output order, as the hashing algorithm or other aspects + * of the implementation may be different on differnt JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a + * bit of a hack, but guarantees that we get the same order on all systems. We assume that + * the keys are strings. + * + * @param m The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } - System.out.println("Map toString looks like: " + m.toString()); + System.out.println("Map toString looks like: " + m.toString()); - // Sort the keys in the Map - // - TreeMap nset = new TreeMap(m); + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); - System.out.println("Tree map looks like: " + nset.toString()); - return nset.toString(); - } + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } public List realElements(List elements) { return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/BaseTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/BaseChromeTest.java similarity index 97% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/BaseTest.java rename to runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/BaseChromeTest.java index 6d919a311..2e8e75400 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/BaseTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/BaseChromeTest.java @@ -33,8 +33,7 @@ import org.antlr.v4.test.runtime.javascript.browser.BaseBrowserTest; import org.junit.AfterClass; import org.junit.BeforeClass; -public abstract class BaseTest extends BaseBrowserTest { - +public class BaseChromeTest extends BaseBrowserTest { @BeforeClass public static void initWebDriver() { driver = SharedWebDriver.init(); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeLexers.java new file mode 100644 index 000000000..9f81ae55a --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeLexers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeParsers.java new file mode 100644 index 000000000..1f5dcd1c3 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestCompositeParsers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestFullContextParsing.java new file mode 100644 index 000000000..f9e1d8613 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestFullContextParsing.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLeftRecursion.java new file mode 100644 index 000000000..9282b7747 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLeftRecursion.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerErrors.java new file mode 100644 index 000000000..627325426 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerExec.java new file mode 100644 index 000000000..035d7584c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestLexerExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestListeners.java new file mode 100644 index 000000000..411b91285 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestListeners.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParseTrees.java new file mode 100644 index 000000000..24f59610f --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParseTrees.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserErrors.java new file mode 100644 index 000000000..e630bedf4 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserExec.java new file mode 100644 index 000000000..7f85ea762 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestParserExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestPerformance.java new file mode 100644 index 000000000..0155e4982 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestPerformance.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalLexer.java new file mode 100644 index 000000000..ccc8db93d --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalLexer.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalParser.java new file mode 100644 index 000000000..e40fa1d8e --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSemPredEvalParser.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSets.java new file mode 100644 index 000000000..050f4573f --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestSets.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestVisitors.java new file mode 100644 index 000000000..d439db73c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/chrome/TestVisitors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.chrome; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseChromeTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Chrome"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/BaseTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/BaseExplorerTest.java similarity index 97% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/BaseTest.java rename to runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/BaseExplorerTest.java index df354f69b..9e922bf14 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/BaseTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/BaseExplorerTest.java @@ -34,7 +34,7 @@ import org.junit.After; import org.junit.Before; import org.openqa.selenium.ie.InternetExplorerDriver; -public abstract class BaseTest extends BaseBrowserTest { +public class BaseExplorerTest extends BaseBrowserTest { @Before public void initWebDriver() { diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeLexers.java new file mode 100644 index 000000000..ca4c99c5c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeLexers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeParsers.java new file mode 100644 index 000000000..d43ecf29c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestCompositeParsers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestFullContextParsing.java new file mode 100644 index 000000000..2db4b9784 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestFullContextParsing.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLeftRecursion.java new file mode 100644 index 000000000..75e4cc9b1 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLeftRecursion.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerErrors.java new file mode 100644 index 000000000..508afb685 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerExec.java new file mode 100644 index 000000000..28c3d21eb --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestLexerExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestListeners.java new file mode 100644 index 000000000..c17a3d6a7 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestListeners.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParseTrees.java new file mode 100644 index 000000000..0248bbbdb --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParseTrees.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserErrors.java new file mode 100644 index 000000000..e9b7723f3 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserExec.java new file mode 100644 index 000000000..7b9cacf36 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestParserExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestPerformance.java new file mode 100644 index 000000000..492e81559 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestPerformance.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalLexer.java new file mode 100644 index 000000000..99cedfc5e --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalLexer.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalParser.java new file mode 100644 index 000000000..5de7c1bf5 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSemPredEvalParser.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSets.java new file mode 100644 index 000000000..c0e83972a --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestSets.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestVisitors.java new file mode 100644 index 000000000..79d443abb --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/explorer/TestVisitors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.explorer; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseExplorerTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Explorer"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/BaseTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/BaseFirefoxTest.java similarity index 93% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/BaseTest.java rename to runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/BaseFirefoxTest.java index ab932da7b..917678b16 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/BaseTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/BaseFirefoxTest.java @@ -29,10 +29,11 @@ */ package org.antlr.v4.test.runtime.javascript.firefox; +import org.antlr.v4.test.runtime.javascript.browser.BaseBrowserTest; import org.junit.AfterClass; import org.junit.BeforeClass; -public abstract class BaseTest extends org.antlr.v4.test.runtime.javascript.browser.BaseBrowserTest { +public class BaseFirefoxTest extends BaseBrowserTest { @BeforeClass public static void initWebDriver() { diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeLexers.java new file mode 100644 index 000000000..367a7d482 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeLexers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeParsers.java new file mode 100644 index 000000000..36a87544e --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestCompositeParsers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestFullContextParsing.java new file mode 100644 index 000000000..bfed281ee --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestFullContextParsing.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLeftRecursion.java new file mode 100644 index 000000000..96aae9433 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLeftRecursion.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerErrors.java new file mode 100644 index 000000000..b3a37dc3a --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerExec.java new file mode 100644 index 000000000..79868939c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestLexerExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestListeners.java new file mode 100644 index 000000000..622c505dd --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestListeners.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParseTrees.java new file mode 100644 index 000000000..aff67b1da --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParseTrees.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserErrors.java new file mode 100644 index 000000000..8cfe44173 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserExec.java new file mode 100644 index 000000000..92d3ee251 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestParserExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestPerformance.java new file mode 100644 index 000000000..4fab5169b --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestPerformance.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalLexer.java new file mode 100644 index 000000000..fa389c95c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalLexer.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalParser.java new file mode 100644 index 000000000..e9284dea1 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSemPredEvalParser.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSets.java new file mode 100644 index 000000000..2ae8bd917 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestSets.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestVisitors.java new file mode 100644 index 000000000..b0dc9cb0c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/firefox/TestVisitors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.firefox; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseFirefoxTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Firefox"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseNodeTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseNodeTest.java new file mode 100644 index 000000000..150a3c422 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/BaseNodeTest.java @@ -0,0 +1,1067 @@ +/* + * [The "BSD license"] + * Copyright (c) 2012 Terence Parr + * Copyright (c) 2012 Sam Harwell + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr.v4.test.runtime.javascript.node; + +import org.antlr.v4.Tool; +import org.antlr.v4.automata.ATNFactory; +import org.antlr.v4.automata.ATNPrinter; +import org.antlr.v4.automata.LexerATNFactory; +import org.antlr.v4.automata.ParserATNFactory; +import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.IntStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.RuleContext; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.WritableToken; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ATNSerializer; +import org.antlr.v4.runtime.atn.ATNState; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.IntegerList; +import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.misc.Utils; +import org.antlr.v4.semantics.SemanticPipeline; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.SingleTest; +import org.antlr.v4.tool.ANTLRMessage; +import org.antlr.v4.tool.DOTGenerator; +import org.antlr.v4.tool.DefaultToolListener; +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.antlr.v4.tool.LexerGrammar; +import org.antlr.v4.tool.Rule; +import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.STGroupString; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class BaseNodeTest implements SingleTest { + // -J-Dorg.antlr.v4.test.BaseTest.level=FINE + // private static final Logger LOGGER = + // Logger.getLogger(BaseTest.class.getName()); + + public static final String newline = System.getProperty("line.separator"); + public static final String pathSep = System.getProperty("path.separator"); + + public String tmpdir = null; + + /** + * If error during parser execution, store stderr here; can't return stdout + * and stderr. This doesn't trap errors from running antlr. + */ + protected String stderrDuringParse; + + /** Errors found while running antlr */ + protected StringBuilder antlrToolErrors; + + @Override + public void testSetUp() throws Exception { + // new output dir for each test + String prop = System.getProperty("antlr-javascript-test-dir"); + if (prop != null && prop.length() > 0) + tmpdir = prop; + else + tmpdir = new File(System.getProperty("java.io.tmpdir"), getClass() + .getSimpleName() + "-" + System.currentTimeMillis()) + .getAbsolutePath(); + File dir = new File(tmpdir); + if (dir.exists()) + this.eraseFiles(dir); + antlrToolErrors = new StringBuilder(); + } + + @Override + public void testTearDown() throws Exception { + } + + @Override + public String getTmpDir() { + return tmpdir; + } + + @Override + public String getStdout() { + return null; + } + + @Override + public String getParseErrors() { + return stderrDuringParse; + } + + @Override + public String getANTLRToolErrors() { + if ( antlrToolErrors.length()==0 ) { + return null; + } + return antlrToolErrors.toString(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { + Tool tool = new Tool(args); + return tool; + } + + protected Tool newTool() { + org.antlr.v4.Tool tool = new Tool(new String[] { "-o", tmpdir }); + return tool; + } + + protected ATN createATN(Grammar g, boolean useSerializer) { + if (g.atn == null) { + semanticProcess(g); + assertEquals(0, g.tool.getNumErrors()); + + ParserATNFactory f; + if (g.isLexer()) { + f = new LexerATNFactory((LexerGrammar) g); + } else { + f = new ParserATNFactory(g); + } + + g.atn = f.createATN(); + assertEquals(0, g.tool.getNumErrors()); + } + + ATN atn = g.atn; + if (useSerializer) { + char[] serialized = ATNSerializer.getSerializedAsChars(atn); + return new ATNDeserializer().deserialize(serialized); + } + + return atn; + } + + protected void semanticProcess(Grammar g) { + if (g.ast != null && !g.ast.hasErrors) { + System.out.println(g.ast.toStringTree()); + Tool antlr = new Tool(); + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + if (g.getImportedGrammars() != null) { // process imported grammars + // (if any) + for (Grammar imp : g.getImportedGrammars()) { + antlr.processNonCombinedGrammar(imp, false); + } + } + } + } + + IntegerList getTypesFromString(Grammar g, String expecting) { + IntegerList expectingTokenTypes = new IntegerList(); + if (expecting != null && !expecting.trim().isEmpty()) { + for (String tname : expecting.replace(" ", "").split(",")) { + int ttype = g.getTokenType(tname); + expectingTokenTypes.add(ttype); + } + } + return expectingTokenTypes; + } + + public IntegerList getTokenTypesViaATN(String input, + LexerATNSimulator lexerATN) { + ANTLRInputStream in = new ANTLRInputStream(input); + IntegerList tokenTypes = new IntegerList(); + int ttype; + do { + ttype = lexerATN.match(in, Lexer.DEFAULT_MODE); + tokenTypes.add(ttype); + } while (ttype != Token.EOF); + return tokenTypes; + } + + public List getTokenTypes(LexerGrammar lg, ATN atn, CharStream input) { + LexerATNSimulator interp = new LexerATNSimulator(atn, + new DFA[] { new DFA( + atn.modeToStartState.get(Lexer.DEFAULT_MODE)) }, null); + List tokenTypes = new ArrayList(); + int ttype; + boolean hitEOF = false; + do { + if (hitEOF) { + tokenTypes.add("EOF"); + break; + } + int t = input.LA(1); + ttype = interp.match(input, Lexer.DEFAULT_MODE); + if (ttype == Token.EOF) { + tokenTypes.add("EOF"); + } else { + tokenTypes.add(lg.typeToTokenList.get(ttype)); + } + + if (t == IntStream.EOF) { + hitEOF = true; + } + } while (ttype != Token.EOF); + return tokenTypes; + } + + /** Return true if all is ok, no errors */ + protected ErrorQueue antlr(String fileName, String grammarFileName, + String grammarStr, boolean defaultListener, String... extraOptions) { + if(grammarStr!=null) { + mkdir(tmpdir); + writeFile(tmpdir, fileName, grammarStr); + } + final List options = new ArrayList(); + Collections.addAll(options, extraOptions); + options.add("-Dlanguage=JavaScript"); + options.add("-o"); + options.add(tmpdir); + options.add("-lib"); + options.add(tmpdir); + options.add(new File(tmpdir, grammarFileName).toString()); + + final String[] optionsA = new String[options.size()]; + options.toArray(optionsA); + Tool antlr = newTool(optionsA); + ErrorQueue equeue = new ErrorQueue(antlr); + antlr.addListener(equeue); + if (defaultListener) { + antlr.addListener(new DefaultToolListener(antlr)); + } + antlr.processGrammarsOnCommandLine(); + + if ( !defaultListener && !equeue.errors.isEmpty() ) { + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage msg = equeue.errors.get(i); + antlrToolErrors.append(msg.toString()); + } + try { + antlrToolErrors.append(new String(Utils.readFile(tmpdir+"/"+grammarFileName))); + } + catch (IOException ioe) { + antlrToolErrors.append(ioe.toString()); + } + } + if ( !defaultListener && !equeue.warnings.isEmpty() ) { + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage msg = equeue.warnings.get(i); + // antlrToolErrors.append(msg); warnings are hushed + } + } + + return equeue; + } + + protected String execLexer(String grammarFileName, String grammarStr, + String lexerName, String input) { + return execLexer(grammarFileName, grammarStr, lexerName, input, false); + } + + @Override + public String execLexer(String grammarFileName, String grammarStr, + String lexerName, String input, boolean showDFA) { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, null, lexerName, "-no-listener"); + assertTrue(success); + writeFile(tmpdir, "input", input); + writeLexerTestFile(lexerName, showDFA); + String output = execModule("Test.js"); + if ( output.length()==0 ) { + output = null; + } + return output; + } + + @Override + public String execParser(String grammarFileName, String grammarStr, + String parserName, String lexerName, String listenerName, + String visitorName, String startRuleName, String input, + boolean showDiagnosticErrors) + { + boolean success = rawGenerateAndBuildRecognizer(grammarFileName, + grammarStr, parserName, lexerName, "-visitor"); + assertTrue(success); + writeFile(tmpdir, "input", input); + rawBuildRecognizerTestFile(parserName, lexerName, listenerName, + visitorName, startRuleName, showDiagnosticErrors); + return execRecognizer(); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, String parserName, String lexerName, + String... extraOptions) { + return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, + parserName, lexerName, false, extraOptions); + } + + /** Return true if all is well */ + protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, + String grammarStr, String parserName, String lexerName, + boolean defaultListener, String... extraOptions) { + ErrorQueue equeue = antlr(grammarFileName, grammarFileName, grammarStr, + defaultListener, extraOptions); + if (!equeue.errors.isEmpty()) { + return false; + } + + List files = new ArrayList(); + if (lexerName != null) { + files.add(lexerName + ".js"); + } + if (parserName != null) { + files.add(parserName + ".js"); + Set optionsSet = new HashSet( + Arrays.asList(extraOptions)); + if (!optionsSet.contains("-no-listener")) { + files.add(grammarFileName.substring(0, + grammarFileName.lastIndexOf('.')) + + "Listener.js"); + } + if (optionsSet.contains("-visitor")) { + files.add(grammarFileName.substring(0, + grammarFileName.lastIndexOf('.')) + + "Visitor.js"); + } + } + return true; // allIsWell: no compile + } + + protected void rawBuildRecognizerTestFile(String parserName, + String lexerName, String listenerName, String visitorName, + String parserStartRuleName, boolean debug) { + this.stderrDuringParse = null; + if (parserName == null) { + writeLexerTestFile(lexerName, false); + } else { + writeParserTestFile(parserName, lexerName, listenerName, + visitorName, parserStartRuleName, debug); + } + } + + public String execRecognizer() { + return execModule("Test.js"); + } + + public String execModule(String fileName) { + String nodejsPath = locateNodeJS(); + String runtimePath = locateRuntime(); + String modulePath = new File(new File(tmpdir), fileName) + .getAbsolutePath(); + String inputPath = new File(new File(tmpdir), "input") + .getAbsolutePath(); + try { + ProcessBuilder builder = new ProcessBuilder(nodejsPath, modulePath, + inputPath); + builder.environment().put("NODE_PATH", + runtimePath + File.pathSeparator + tmpdir); + builder.directory(new File(tmpdir)); + Process process = builder.start(); + StreamVacuum stdoutVacuum = new StreamVacuum( + process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum( + process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + String output = stdoutVacuum.toString(); + if ( output.length()==0 ) { + output = null; + } + if (stderrVacuum.toString().length() > 0) { + this.stderrDuringParse = stderrVacuum.toString(); + } + return output; + } + catch (Exception e) { + System.err.println("can't exec recognizer"); + e.printStackTrace(System.err); + } + return null; + } + + private String locateTool(String tool) { + String[] roots = { "/usr/bin/", "/usr/local/bin/" }; + for (String root : roots) { + if (new File(root + tool).exists()) { + return root + tool; + } + } + return null; + } + + private String locateNodeJS() { + // typically /usr/local/bin/node + String propName = "antlr-javascript-nodejs"; + String prop = System.getProperty(propName); + if (prop == null || prop.length() == 0) { + prop = locateTool("nodejs"); // seems to be nodejs on ubuntu + } + if ( prop==null ) { + prop = locateTool("node"); // seems to be node on mac + } + File file = new File(prop); + if (!file.exists()) { + throw new RuntimeException("Missing system property:" + propName); + } + return prop; + } + + private String locateRuntime() { + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + final URL runtimeSrc = loader.getResource("JavaScript/src"); + if ( runtimeSrc==null ) { + throw new RuntimeException("Cannot find JavaScript runtime"); + } + if(isWindows()){ + return runtimeSrc.getPath().replaceFirst("/", ""); + } + return runtimeSrc.getPath(); + } + + private boolean isWindows() { + return System.getProperty("os.name").toLowerCase().contains("windows"); + } + + public void testErrors(String[] pairs, boolean printTree) { + for (int i = 0; i < pairs.length; i += 2) { + String input = pairs[i]; + String expect = pairs[i + 1]; + + String[] lines = input.split("\n"); + String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); + ErrorQueue equeue = antlr(fileName, fileName, input, false); + + String actual = equeue.toString(true); + actual = actual.replace(tmpdir + File.separator, ""); + System.err.println(actual); + String msg = input; + msg = msg.replace("\n", "\\n"); + msg = msg.replace("\r", "\\r"); + msg = msg.replace("\t", "\\t"); + + assertEquals("error in: " + msg, expect, actual); + } + } + + public String getFilenameFromFirstLineOfGrammar(String line) { + String fileName = "A" + Tool.GRAMMAR_EXTENSION; + int grIndex = line.lastIndexOf("grammar"); + int semi = line.lastIndexOf(';'); + if (grIndex >= 0 && semi >= 0) { + int space = line.indexOf(' ', grIndex); + fileName = line.substring(space + 1, semi) + Tool.GRAMMAR_EXTENSION; + } + if (fileName.length() == Tool.GRAMMAR_EXTENSION.length()) + fileName = "A" + Tool.GRAMMAR_EXTENSION; + return fileName; + } + + // void ambig(List msgs, int[] expectedAmbigAlts, String + // expectedAmbigInput) + // throws Exception + // { + // ambig(msgs, 0, expectedAmbigAlts, expectedAmbigInput); + // } + + // void ambig(List msgs, int i, int[] expectedAmbigAlts, String + // expectedAmbigInput) + // throws Exception + // { + // List amsgs = getMessagesOfType(msgs, AmbiguityMessage.class); + // AmbiguityMessage a = (AmbiguityMessage)amsgs.get(i); + // if ( a==null ) assertNull(expectedAmbigAlts); + // else { + // assertEquals(a.conflictingAlts.toString(), + // Arrays.toString(expectedAmbigAlts)); + // } + // assertEquals(expectedAmbigInput, a.input); + // } + + // void unreachable(List msgs, int[] expectedUnreachableAlts) + // throws Exception + // { + // unreachable(msgs, 0, expectedUnreachableAlts); + // } + + // void unreachable(List msgs, int i, int[] + // expectedUnreachableAlts) + // throws Exception + // { + // List amsgs = getMessagesOfType(msgs, + // UnreachableAltsMessage.class); + // UnreachableAltsMessage u = (UnreachableAltsMessage)amsgs.get(i); + // if ( u==null ) assertNull(expectedUnreachableAlts); + // else { + // assertEquals(u.conflictingAlts.toString(), + // Arrays.toString(expectedUnreachableAlts)); + // } + // } + + List getMessagesOfType(List msgs, + Class c) { + List filtered = new ArrayList(); + for (ANTLRMessage m : msgs) { + if (m.getClass() == c) + filtered.add(m); + } + return filtered; + } + + void checkRuleATN(Grammar g, String ruleName, String expecting) { + ParserATNFactory f = new ParserATNFactory(g); + ATN atn = f.createATN(); + + DOTGenerator dot = new DOTGenerator(g); + System.out + .println(dot.getDOT(atn.ruleToStartState[g.getRule(ruleName).index])); + + Rule r = g.getRule(ruleName); + ATNState startState = atn.ruleToStartState[r.index]; + ATNPrinter serializer = new ATNPrinter(g, startState); + String result = serializer.asString(); + + // System.out.print(result); + assertEquals(expecting, result); + } + + public void testActions(String templates, String actionName, String action, + String expected) throws org.antlr.runtime.RecognitionException { + int lp = templates.indexOf('('); + String name = templates.substring(0, lp); + STGroup group = new STGroupString(templates); + ST st = group.getInstanceOf(name); + st.add(actionName, action); + String grammar = st.render(); + ErrorQueue equeue = new ErrorQueue(); + Grammar g = new Grammar(grammar, equeue); + if (g.ast != null && !g.ast.hasErrors) { + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + + ATNFactory factory = new ParserATNFactory(g); + if (g.isLexer()) + factory = new LexerATNFactory((LexerGrammar) g); + g.atn = factory.createATN(); + + CodeGenerator gen = new CodeGenerator(g); + ST outputFileST = gen.generateParser(); + String output = outputFileST.render(); + // System.out.println(output); + String b = "#" + actionName + "#"; + int start = output.indexOf(b); + String e = "#end-" + actionName + "#"; + int end = output.indexOf(e); + String snippet = output.substring(start + b.length(), end); + assertEquals(expected, snippet); + } + if (equeue.size() > 0) { + System.err.println(equeue.toString()); + } + } + + public static class StreamVacuum implements Runnable { + StringBuilder buf = new StringBuilder(); + BufferedReader in; + Thread sucker; + + public StreamVacuum(InputStream in) { + this.in = new BufferedReader(new InputStreamReader(in)); + } + + public void start() { + sucker = new Thread(this); + sucker.start(); + } + + @Override + public void run() { + try { + String line = in.readLine(); + while (line != null) { + buf.append(line); + buf.append('\n'); + line = in.readLine(); + } + } catch (IOException ioe) { + System.err.println("can't read output from process"); + } + } + + /** wait for the thread to finish */ + public void join() throws InterruptedException { + sucker.join(); + } + + @Override + public String toString() { + return buf.toString(); + } + } + + protected void checkGrammarSemanticsError(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) throws Exception { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType() == expectedMessage.getErrorType()) { + foundMsg = m; + } + } + assertNotNull("no error; " + expectedMessage.getErrorType() + + " expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), + Arrays.toString(foundMsg.getArgs())); + if (equeue.size() != 1) { + System.err.println(equeue); + } + } + + protected void checkGrammarSemanticsWarning(ErrorQueue equeue, + GrammarSemanticsMessage expectedMessage) throws Exception { + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.warnings.size(); i++) { + ANTLRMessage m = equeue.warnings.get(i); + if (m.getErrorType() == expectedMessage.getErrorType()) { + foundMsg = m; + } + } + assertNotNull("no error; " + expectedMessage.getErrorType() + + " expected", foundMsg); + assertTrue("error is not a GrammarSemanticsMessage", + foundMsg instanceof GrammarSemanticsMessage); + assertEquals(Arrays.toString(expectedMessage.getArgs()), + Arrays.toString(foundMsg.getArgs())); + if (equeue.size() != 1) { + System.err.println(equeue); + } + } + + protected void checkError(ErrorQueue equeue, ANTLRMessage expectedMessage) + throws Exception { + // System.out.println("errors="+equeue); + ANTLRMessage foundMsg = null; + for (int i = 0; i < equeue.errors.size(); i++) { + ANTLRMessage m = equeue.errors.get(i); + if (m.getErrorType() == expectedMessage.getErrorType()) { + foundMsg = m; + } + } + assertTrue("no error; " + expectedMessage.getErrorType() + " expected", + !equeue.errors.isEmpty()); + assertTrue("too many errors; " + equeue.errors, + equeue.errors.size() <= 1); + assertNotNull( + "couldn't find expected error: " + + expectedMessage.getErrorType(), foundMsg); + /* + * assertTrue("error is not a GrammarSemanticsMessage", foundMsg + * instanceof GrammarSemanticsMessage); + */ + assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); + } + + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { + super(src); + } + + Set hide = new HashSet(); + + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { + return false; + } + + Token t = get(i); + if (hide.contains(t.getType())) { + ((WritableToken) t).setChannel(Token.HIDDEN_CHANNEL); + } + + return true; + } + + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } + + public static void writeFile(String dir, String fileName, String content) { + try { + File f = new File(dir, fileName); + FileWriter w = new FileWriter(f); + BufferedWriter bw = new BufferedWriter(w); + bw.write(content); + bw.close(); + w.close(); + } catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + public static void writeFile(String dir, String fileName, InputStream content) { + try { + File f = new File(dir, fileName); + OutputStream output = new FileOutputStream(f); + while(content.available()>0) { + int b = content.read(); + output.write(b); + } + output.close(); + } catch (IOException ioe) { + System.err.println("can't write file"); + ioe.printStackTrace(System.err); + } + } + + protected void mkdir(String dir) { + File f = new File(dir); + f.mkdirs(); + } + + protected void writeParserTestFile(String parserName, String lexerName, + String listenerName, String visitorName, + String parserStartRuleName, boolean debug) { + ST outputFileST = new ST( + "var antlr4 = require('antlr4');\n" + + "var = require('./');\n" + + "var = require('./');\n" + + "var = require('./').;\n" + + "var = require('./').;\n" + + "\n" + + "function TreeShapeListener() {\n" + + " antlr4.tree.ParseTreeListener.call(this);\n" + + " return this;\n" + + "}\n" + + "\n" + + "TreeShapeListener.prototype = Object.create(antlr4.tree.ParseTreeListener.prototype);\n" + + "TreeShapeListener.prototype.constructor = TreeShapeListener;\n" + + "\n" + + "TreeShapeListener.prototype.enterEveryRule = function(ctx) {\n" + + " for(var i=0;i\\.(input);\n" + + " var stream = new antlr4.CommonTokenStream(lexer);\n" + + "" + + " parser.buildParseTrees = true;\n" + + " printer = function() {\n" + + " this.println = function(s) { console.log(s); }\n" + + " this.print = function(s) { process.stdout.write(s); }\n" + + " return this;\n" + + " };\n" + + " parser.printer = new printer();\n" + + " var tree = parser.();\n" + + " antlr4.tree.ParseTreeWalker.DEFAULT.walk(new TreeShapeListener(), tree);\n" + + "}\n" + "\n" + "main(process.argv);\n" + "\n"); + ST createParserST = new ST( + " var parser = new .(stream);\n"); + if (debug) { + createParserST = new ST( + " var parser = new .(stream);\n" + + " parser.addErrorListener(new antlr4.error.DiagnosticErrorListener());\n"); + } + outputFileST.add("createParser", createParserST); + outputFileST.add("parserName", parserName); + outputFileST.add("lexerName", lexerName); + outputFileST.add("listenerName", listenerName); + outputFileST.add("visitorName", visitorName); + outputFileST.add("parserStartRuleName", parserStartRuleName); + writeFile(tmpdir, "Test.js", outputFileST.render()); + } + + protected void writeLexerTestFile(String lexerName, boolean showDFA) { + ST outputFileST = new ST( + "var antlr4 = require('antlr4');\n" + + "var = require('./');\n" + + "\n" + + "function main(argv) {\n" + + " var input = new antlr4.FileStream(argv[2]);\n" + + " var lexer = new .(input);\n" + + " var stream = new antlr4.CommonTokenStream(lexer);\n" + + " stream.fill();\n" + + " for(var i=0; i\\ 0) + doErase = Boolean.getBoolean(prop); + if (doErase) { + File tmpdirF = new File(tmpdir); + if (tmpdirF.exists()) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + } + + public String getFirstLineOfException() { + if (this.stderrDuringParse == null) { + return null; + } + String[] lines = this.stderrDuringParse.split("\n"); + String prefix = "Exception in thread \"main\" "; + return lines[0].substring(prefix.length(), lines[0].length()); + } + + /** + * When looking at a result set that consists of a Map/HashTable we cannot + * rely on the output order, as the hashing algorithm or other aspects of + * the implementation may be different on differnt JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the + * Map, which is a bit of a hack, but guarantees that we get the same order + * on all systems. We assume that the keys are strings. + * + * @param m + * The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } + + System.out.println("Map toString looks like: " + m.toString()); + + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); + + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } + + public List realElements(List elements) { + return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); + } + + public void assertNotNullOrEmpty(String message, String text) { + assertNotNull(message, text); + assertFalse(message, text.isEmpty()); + } + + public void assertNotNullOrEmpty(String text) { + assertNotNull(text); + assertFalse(text.isEmpty()); + } + + public static class IntTokenStream implements TokenStream { + IntegerList types; + int p = 0; + + public IntTokenStream(IntegerList types) { + this.types = types; + } + + @Override + public void consume() { + p++; + } + + @Override + public int LA(int i) { + return LT(i).getType(); + } + + @Override + public int mark() { + return index(); + } + + @Override + public int index() { + return p; + } + + @Override + public void release(int marker) { + seek(marker); + } + + @Override + public void seek(int index) { + p = index; + } + + @Override + public int size() { + return types.size(); + } + + @Override + public String getSourceName() { + return null; + } + + @Override + public Token LT(int i) { + CommonToken t; + int rawIndex = p + i - 1; + if (rawIndex >= types.size()) + t = new CommonToken(Token.EOF); + else + t = new CommonToken(types.get(rawIndex)); + t.setTokenIndex(rawIndex); + return t; + } + + @Override + public Token get(int i) { + return new org.antlr.v4.runtime.CommonToken(types.get(i)); + } + + @Override + public TokenSource getTokenSource() { + return null; + } + + @Override + public String getText() { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Interval interval) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(RuleContext ctx) { + throw new UnsupportedOperationException("can't give strings"); + } + + @Override + public String getText(Token start, Token stop) { + throw new UnsupportedOperationException("can't give strings"); + } + } + + /** Sort a list */ + public > List sort(List data) { + List dup = new ArrayList(); + dup.addAll(data); + Collections.sort(dup); + return dup; + } + + /** Return map sorted by key */ + public , V> LinkedHashMap sort( + Map data) { + LinkedHashMap dup = new LinkedHashMap(); + List keys = new ArrayList(); + keys.addAll(data.keySet()); + Collections.sort(keys); + for (K k : keys) { + dup.put(k, data.get(k)); + } + return dup; + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeLexers.java index d14bf637e..19bf2248c 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeLexers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeLexers.java @@ -1,67 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeLexers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {console.log(\"S.A\");};\n" + - "C : 'c' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "S.A\n" + - "[@0,0:0='a',<3>,1:0]\n" + - "[@1,1:1='b',<1>,1:1]\n" + - "[@2,2:2='c',<4>,1:2]\n" + - "[@3,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {console.log(\"S.A\");} ;\n" + - "B : 'b' {console.log(\"S.B\");} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("A : 'a' B {console.log(\"M.A\");} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "M.A\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeParsers.java index 7edbe8a9b..be1b97582 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestCompositeParsers.java @@ -1,424 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeParsers extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBringInLiteralsFromDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : '=' 'a' {process.stdout.write(\"S.a\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="=a"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCombinedImportsCombined() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : 'x' INT {console.log(\"S.x\");};\n" + - "INT : '0'..'9'+ ;\n" + - "WS : (' '|'\\n') -> skip ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(31); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : x INT;"); - String grammar = grammarBuilder.toString(); - String input ="x 34 9"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("S.x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatesSeeSameTokenType() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : A {console.log(\"S.x\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { C, B, A } // reverse order\n" + - "y : A {console.log(\"T.y\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(598); - grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); - grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); - grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); - grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); - grammarBuilder.append("// mapping in each parser:\n"); - grammarBuilder.append("// public static final int C=6;\n"); - grammarBuilder.append("// public static final int EOF=-1;\n"); - grammarBuilder.append("// public static final int B=5;\n"); - grammarBuilder.append("// public static final int WS=7;\n"); - grammarBuilder.append("// public static final int A=4;\n"); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); - grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); - grammarBuilder.append("A : 'a' ; \n"); - grammarBuilder.append("C : 'c' ; \n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals( - "S.x\n" + - "T.y\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorAccessesDelegateMembers() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "@parser::members {\n" + - "this.foo = function() {console.log('foo');};\n" + - "}\n" + - "a : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar M; // uses no rules from the import\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : 'b' {this.foo();} ; // gS is import pointer\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("foo\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : B {console.log(\"S.a\");};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a[int x] returns [int y] : B {process.stdout.write(\"S.a\");} {$y=1000;} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(138); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : label=a[3] {console.log($label.y);} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("S.a1000\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : B {process.stdout.write(\"S.a\");} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(137); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a {process.stdout.write($a.text);} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("S.ab\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : b {console.log(\"S.a\");};\n" + - "b : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "a : B {console.log(\"T.a\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : b {process.stdout.write(\"S.a\");};\n" + - "b : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("b : 'b'|'c';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "a", input, false); - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegates() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a : b {console.log(\"S.a\");};\n" + - "b : 'b' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { A }\n" + - "b : 'b' {console.log(\"T.b\");};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S, T;\n"); - grammarBuilder.append("b : 'b'|'c' {console.log(\"M.b\");}|B|A;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "a", input, false); - assertEquals( - "M.b\n" + - "S.a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "type_ : 'int' ;\n" + - "decl : type_ ID ';'\n" + - " | type_ ID init ';' {process.stdout.write(\"JavaDecl: \" + $text);};\n" + - "init : '=' INT;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("prog : decl ;\n"); - grammarBuilder.append("type_ : 'int' | 'float' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="float x = 3;"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "prog", input, false); - assertEquals("JavaDecl: floatx=3;\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportLexerWithOnlyFragmentRules() throws Exception { - mkdir(tmpdir); - String slave_Unicode = - "lexer grammar Unicode;\n" + - "\n" + - "fragment\n" + - "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + - " | '\\u2000'..'\\u200A'\n" + - " | '\\u202F' | '\\u205F' | '\\u3000'\n" + - " ;\n"; - writeFile(tmpdir, "Unicode.g4", slave_Unicode); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar Test;\n"); - grammarBuilder.append("import Unicode;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program : 'test' 'test';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); - String grammar = grammarBuilder.toString(); - String input ="test test"; - String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", - "TestListener", "TestVisitor", - "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedGrammarWithEmptyOptions() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "options {}\n" + - "a : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedRuleWithAction() throws Exception { - mkdir(tmpdir); - String slave_S = - "parser grammar S;\n" + - "a @after {this.x = 0;} : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordVSIDOrder() throws Exception { - mkdir(tmpdir); - String slave_S = - "lexer grammar S;\n" + - "ID : 'a'..'z'+;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(115); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("a : A {console.log(\"M.a: \" + $A);};\n"); - grammarBuilder.append("A : 'abc' {console.log(\"M.A\");};\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", - "MListener", "MVisitor", - "a", input, false); - assertEquals( - "M.A\n" + - "M.a: [@0,0:2='abc',<1>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestFullContextParsing.java index 7e4bf2165..781c364c4 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestFullContextParsing.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestFullContextParsing.java @@ -1,462 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestFullContextParsing extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigYieldsCtxSensitiveDFA() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(101); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : ID | ID {} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-ID->:s1^=>1\n", found); - - assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbiguityNoLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(224); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append(" : expr expr {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: '@'\n"); - grammarBuilder.append(" | ID '@'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a@"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "prog", input, true); - assertEquals("alt 1\n", found); - - assertEquals( - "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + - "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + - "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFATwoDiffInput() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="$ 34 abc @ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 2:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + - "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="$ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(162); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="@ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(304); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append(": expr[0] {console.log($expr.ctx.toStringTree(null, this));};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals("(expr a + (expr b))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(304); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append(": expr[0] {console.log($expr.ctx.toStringTree(null, this));};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b*c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals("(expr a + (expr b * (expr c)))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + - "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + - "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then return }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s1=>2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="{ if x then if y then return else foo else bar }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + - "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(252); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append("@after {this.dumpDFA();}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLoopsSimulateTailRecursion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;}\n"); - grammarBuilder.append(" : expr_or_assign*;\n"); - grammarBuilder.append("expr_or_assign\n"); - grammarBuilder.append(" : expr '++' {console.log(\"fail.\");}\n"); - grammarBuilder.append(" | expr {console.log(\"pass: \"+$expr.text);}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); - grammarBuilder.append("expr_primary\n"); - grammarBuilder.append(" : '(' ID ')'\n"); - grammarBuilder.append(" | ID '(' ID ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;"); - String grammar = grammarBuilder.toString(); - String input ="a(i)<-x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "prog", input, true); - assertEquals("pass: a(i)<-x\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + - "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSLLSeesEOFInLLGrammar() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {this.dumpDFA();}\n"); - grammarBuilder.append(" : a;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "Decision 0:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + - "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLeftRecursion.java index 994875ca7..bc8c1a365 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLeftRecursion.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLeftRecursion.java @@ -1,3114 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLeftRecursion extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="1\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="a = 5\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="b = 6\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="a+b*2\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - String input ="(1+2)*3\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "prog", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_10() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(*a)[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="*a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator * (declarator a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="**a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[3]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator (declarator b) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(a)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator ( (declarator a) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[]()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a[][]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(398); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="*a[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {console.log($ctx.toStringTree(null, this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {console.log($ctx.toStringTree(null, this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("(a (a x) y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {console.log($ctx.toStringTree(null, this));} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("(a (a (a x) y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e 1) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) - (e 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.this"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) . this) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e - (e a)) )\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(257); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Node"); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a|b&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_10() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.f(x)==T.c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_11() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a.f().g(x,1)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_12() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="new T[((n-1) * x) + 1]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(a|b)&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a > b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) > (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a >> b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) >> (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a^b^c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(T)x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="new A().b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(1254); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(T)t.f()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(245); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(245); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(245); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{true}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{true}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(184); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(184); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(184); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(638); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(638); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(638); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(638); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {console.assert($ctx.INC() != null);$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {console.assert($ctx.DEC() != null);$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrecedenceFilterConsidersContext() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog \n"); - grammarBuilder.append("@after {console.log($ctx.toStringTree(null, this));}\n"); - grammarBuilder.append(": statement* EOF {};\n"); - grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); - grammarBuilder.append("letterA: 'a';"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "prog", input, false); - assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(223); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (literal - 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(223); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="-1 + -1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(336); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(336); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a+b)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(336); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.result);} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b+c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("((a=b)+c)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(454); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(454); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(454); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(454); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(307); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v, list ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v, list ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v, list ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(246); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {console.log($e.v);}; \n"); - grammarBuilder.append("e returns [int v, list ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="(1+2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("9\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPred() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); - grammarBuilder.append("a : a {true}? ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPredFailOption() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); - grammarBuilder.append("a : a ID {false}?\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (a (a x) y z))\n", found); - - assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (a x))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (a (a x) y))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(290); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_5() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_6() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_7() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_8() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_9() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {console.log($ctx.toStringTree(null, this));} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="Test(1,3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="Test(1, 3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerErrors.java index 409d38eb2..04b417743 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerErrors.java @@ -1,235 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatFailsBackToDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(39); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:3='ab',<1>,1:2]\n" + - "[@2,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;\n"); - grammarBuilder.append("C : 'abcd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababcx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:4='abc',<2>,1:2]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="{ { } }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='{ { } }',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="{ { }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testErrorInMiddle() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'abc' ;"); - String grammar = grammarBuilder.toString(); - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStart() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,1:0='',<-1>,1:1]\n", found); - - assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStartAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="ax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,2:1='',<-1>,1:2]\n", found); - - assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInTokenAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="abax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - - assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerExecDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar L;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input ="x : x"; - String found = execLexer("L.g4", grammar, "LLexer", input, false); - assertEquals( - "[@0,0:0='x',<3>,1:0]\n" + - "[@1,2:2=':',<1>,1:2]\n" + - "[@2,4:4='x',<3>,1:4]\n" + - "[@3,5:4='',<-1>,1:5]\n", found); - - assertEquals( - "line 1:1 token recognition error at: ' '\n" + - "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="[\"foo\"]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="[\"foo]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerExec.java index 44b14650a..18c4c6674 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestLexerExec.java @@ -1,4935 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionPlacement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(263); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ({console.log(\"stuff fail: \" + this.text);} 'a'\n"); - grammarBuilder.append("| {console.log(\"stuff0: \" + this.text);}\n"); - grammarBuilder.append(" 'a' {console.log(\"stuff1: \" + this.text);}\n"); - grammarBuilder.append(" 'b' {console.log(\"stuff2: \" + this.text);})\n"); - grammarBuilder.append(" {console.log(this.text);} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "stuff0: \n" + - "stuff1: a\n" + - "stuff2: ab\n" + - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(79); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {console.log(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetInSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(86); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : (~[ab \\n]|'a') {console.log(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:2='x',<1>,1:2]\n" + - "[@2,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetNot() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(89); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {console.log(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="xaf"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:2='xaf',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {console.log(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(129); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {console.log(\"I\");} ;\n"); - grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {console.log(\"ID\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input = - "34\n" + - " 34 a2 abc \n" + - " "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "ID\n" + - "ID\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,7:8='a2',<2>,2:4]\n" + - "[@3,10:12='abc',<2>,2:7]\n" + - "[@4,18:17='',<-1>,3:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithEscapedChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(88); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DASHBRACK : [\\-\\]]+ {console.log(\"DASHBRACK\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="- ] "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "DASHBRACK\n" + - "DASHBRACK\n" + - "[@0,0:0='-',<1>,1:0]\n" + - "[@1,2:2=']',<1>,1:2]\n" + - "[@2,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEndRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(76); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-]+ {console.log(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="00\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='00',<1>,1:0]\n" + - "[@1,3:2='',<-1>,2:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEscapeChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(71); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {console.log(\"I\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(74); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"a-z]+ {console.log(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b\"a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:2='b\"a',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(75); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"\\\\ab]+ {console.log(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="b\"\\a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:3='b\"\\a',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithReversedRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(72); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [z-a9]+ {console.log(\"A\");} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="9"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:0='9',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFByItself() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DONE : EOF ;\n"); - grammarBuilder.append("A : 'a';"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:-1='',<1>,1:0]\n" + - "[@1,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ('a' | 'ab') {console.log(this.text);} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testHexVsID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); - grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); - grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input ="x 0 1 a.b a.l"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='x',<5>,1:0]\n" + - "[@1,1:1=' ',<6>,1:1]\n" + - "[@2,2:2='0',<2>,1:2]\n" + - "[@3,3:3=' ',<6>,1:3]\n" + - "[@4,4:4='1',<2>,1:4]\n" + - "[@5,5:5=' ',<6>,1:5]\n" + - "[@6,6:6='a',<5>,1:6]\n" + - "[@7,7:7='.',<4>,1:7]\n" + - "[@8,8:8='b',<5>,1:8]\n" + - "[@9,9:9=' ',<6>,1:9]\n" + - "[@10,10:10='a',<5>,1:10]\n" + - "[@11,11:11='.',<4>,1:11]\n" + - "[@12,12:12='l',<5>,1:12]\n" + - "[@13,13:12='',<-1>,1:13]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("KEND : 'end' ; // has priority\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input ="end eend ending a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:2='end',<1>,1:0]\n" + - "[@1,3:3=' ',<3>,1:3]\n" + - "[@2,4:7='eend',<2>,1:4]\n" + - "[@3,8:8=' ',<3>,1:8]\n" + - "[@4,9:14='ending',<2>,1:9]\n" + - "[@5,15:15=' ',<3>,1:15]\n" + - "[@6,16:16='a',<2>,1:16]\n" + - "[@7,17:16='',<-1>,1:17]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLargeLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85821); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); - grammarBuilder.append("KW0 : 'KW' '0';\n"); - grammarBuilder.append("KW1 : 'KW' '1';\n"); - grammarBuilder.append("KW2 : 'KW' '2';\n"); - grammarBuilder.append("KW3 : 'KW' '3';\n"); - grammarBuilder.append("KW4 : 'KW' '4';\n"); - grammarBuilder.append("KW5 : 'KW' '5';\n"); - grammarBuilder.append("KW6 : 'KW' '6';\n"); - grammarBuilder.append("KW7 : 'KW' '7';\n"); - grammarBuilder.append("KW8 : 'KW' '8';\n"); - grammarBuilder.append("KW9 : 'KW' '9';\n"); - grammarBuilder.append("KW10 : 'KW' '10';\n"); - grammarBuilder.append("KW11 : 'KW' '11';\n"); - grammarBuilder.append("KW12 : 'KW' '12';\n"); - grammarBuilder.append("KW13 : 'KW' '13';\n"); - grammarBuilder.append("KW14 : 'KW' '14';\n"); - grammarBuilder.append("KW15 : 'KW' '15';\n"); - grammarBuilder.append("KW16 : 'KW' '16';\n"); - grammarBuilder.append("KW17 : 'KW' '17';\n"); - grammarBuilder.append("KW18 : 'KW' '18';\n"); - grammarBuilder.append("KW19 : 'KW' '19';\n"); - grammarBuilder.append("KW20 : 'KW' '20';\n"); - grammarBuilder.append("KW21 : 'KW' '21';\n"); - grammarBuilder.append("KW22 : 'KW' '22';\n"); - grammarBuilder.append("KW23 : 'KW' '23';\n"); - grammarBuilder.append("KW24 : 'KW' '24';\n"); - grammarBuilder.append("KW25 : 'KW' '25';\n"); - grammarBuilder.append("KW26 : 'KW' '26';\n"); - grammarBuilder.append("KW27 : 'KW' '27';\n"); - grammarBuilder.append("KW28 : 'KW' '28';\n"); - grammarBuilder.append("KW29 : 'KW' '29';\n"); - grammarBuilder.append("KW30 : 'KW' '30';\n"); - grammarBuilder.append("KW31 : 'KW' '31';\n"); - grammarBuilder.append("KW32 : 'KW' '32';\n"); - grammarBuilder.append("KW33 : 'KW' '33';\n"); - grammarBuilder.append("KW34 : 'KW' '34';\n"); - grammarBuilder.append("KW35 : 'KW' '35';\n"); - grammarBuilder.append("KW36 : 'KW' '36';\n"); - grammarBuilder.append("KW37 : 'KW' '37';\n"); - grammarBuilder.append("KW38 : 'KW' '38';\n"); - grammarBuilder.append("KW39 : 'KW' '39';\n"); - grammarBuilder.append("KW40 : 'KW' '40';\n"); - grammarBuilder.append("KW41 : 'KW' '41';\n"); - grammarBuilder.append("KW42 : 'KW' '42';\n"); - grammarBuilder.append("KW43 : 'KW' '43';\n"); - grammarBuilder.append("KW44 : 'KW' '44';\n"); - grammarBuilder.append("KW45 : 'KW' '45';\n"); - grammarBuilder.append("KW46 : 'KW' '46';\n"); - grammarBuilder.append("KW47 : 'KW' '47';\n"); - grammarBuilder.append("KW48 : 'KW' '48';\n"); - grammarBuilder.append("KW49 : 'KW' '49';\n"); - grammarBuilder.append("KW50 : 'KW' '50';\n"); - grammarBuilder.append("KW51 : 'KW' '51';\n"); - grammarBuilder.append("KW52 : 'KW' '52';\n"); - grammarBuilder.append("KW53 : 'KW' '53';\n"); - grammarBuilder.append("KW54 : 'KW' '54';\n"); - grammarBuilder.append("KW55 : 'KW' '55';\n"); - grammarBuilder.append("KW56 : 'KW' '56';\n"); - grammarBuilder.append("KW57 : 'KW' '57';\n"); - grammarBuilder.append("KW58 : 'KW' '58';\n"); - grammarBuilder.append("KW59 : 'KW' '59';\n"); - grammarBuilder.append("KW60 : 'KW' '60';\n"); - grammarBuilder.append("KW61 : 'KW' '61';\n"); - grammarBuilder.append("KW62 : 'KW' '62';\n"); - grammarBuilder.append("KW63 : 'KW' '63';\n"); - grammarBuilder.append("KW64 : 'KW' '64';\n"); - grammarBuilder.append("KW65 : 'KW' '65';\n"); - grammarBuilder.append("KW66 : 'KW' '66';\n"); - grammarBuilder.append("KW67 : 'KW' '67';\n"); - grammarBuilder.append("KW68 : 'KW' '68';\n"); - grammarBuilder.append("KW69 : 'KW' '69';\n"); - grammarBuilder.append("KW70 : 'KW' '70';\n"); - grammarBuilder.append("KW71 : 'KW' '71';\n"); - grammarBuilder.append("KW72 : 'KW' '72';\n"); - grammarBuilder.append("KW73 : 'KW' '73';\n"); - grammarBuilder.append("KW74 : 'KW' '74';\n"); - grammarBuilder.append("KW75 : 'KW' '75';\n"); - grammarBuilder.append("KW76 : 'KW' '76';\n"); - grammarBuilder.append("KW77 : 'KW' '77';\n"); - grammarBuilder.append("KW78 : 'KW' '78';\n"); - grammarBuilder.append("KW79 : 'KW' '79';\n"); - grammarBuilder.append("KW80 : 'KW' '80';\n"); - grammarBuilder.append("KW81 : 'KW' '81';\n"); - grammarBuilder.append("KW82 : 'KW' '82';\n"); - grammarBuilder.append("KW83 : 'KW' '83';\n"); - grammarBuilder.append("KW84 : 'KW' '84';\n"); - grammarBuilder.append("KW85 : 'KW' '85';\n"); - grammarBuilder.append("KW86 : 'KW' '86';\n"); - grammarBuilder.append("KW87 : 'KW' '87';\n"); - grammarBuilder.append("KW88 : 'KW' '88';\n"); - grammarBuilder.append("KW89 : 'KW' '89';\n"); - grammarBuilder.append("KW90 : 'KW' '90';\n"); - grammarBuilder.append("KW91 : 'KW' '91';\n"); - grammarBuilder.append("KW92 : 'KW' '92';\n"); - grammarBuilder.append("KW93 : 'KW' '93';\n"); - grammarBuilder.append("KW94 : 'KW' '94';\n"); - grammarBuilder.append("KW95 : 'KW' '95';\n"); - grammarBuilder.append("KW96 : 'KW' '96';\n"); - grammarBuilder.append("KW97 : 'KW' '97';\n"); - grammarBuilder.append("KW98 : 'KW' '98';\n"); - grammarBuilder.append("KW99 : 'KW' '99';\n"); - grammarBuilder.append("KW100 : 'KW' '100';\n"); - grammarBuilder.append("KW101 : 'KW' '101';\n"); - grammarBuilder.append("KW102 : 'KW' '102';\n"); - grammarBuilder.append("KW103 : 'KW' '103';\n"); - grammarBuilder.append("KW104 : 'KW' '104';\n"); - grammarBuilder.append("KW105 : 'KW' '105';\n"); - grammarBuilder.append("KW106 : 'KW' '106';\n"); - grammarBuilder.append("KW107 : 'KW' '107';\n"); - grammarBuilder.append("KW108 : 'KW' '108';\n"); - grammarBuilder.append("KW109 : 'KW' '109';\n"); - grammarBuilder.append("KW110 : 'KW' '110';\n"); - grammarBuilder.append("KW111 : 'KW' '111';\n"); - grammarBuilder.append("KW112 : 'KW' '112';\n"); - grammarBuilder.append("KW113 : 'KW' '113';\n"); - grammarBuilder.append("KW114 : 'KW' '114';\n"); - grammarBuilder.append("KW115 : 'KW' '115';\n"); - grammarBuilder.append("KW116 : 'KW' '116';\n"); - grammarBuilder.append("KW117 : 'KW' '117';\n"); - grammarBuilder.append("KW118 : 'KW' '118';\n"); - grammarBuilder.append("KW119 : 'KW' '119';\n"); - grammarBuilder.append("KW120 : 'KW' '120';\n"); - grammarBuilder.append("KW121 : 'KW' '121';\n"); - grammarBuilder.append("KW122 : 'KW' '122';\n"); - grammarBuilder.append("KW123 : 'KW' '123';\n"); - grammarBuilder.append("KW124 : 'KW' '124';\n"); - grammarBuilder.append("KW125 : 'KW' '125';\n"); - grammarBuilder.append("KW126 : 'KW' '126';\n"); - grammarBuilder.append("KW127 : 'KW' '127';\n"); - grammarBuilder.append("KW128 : 'KW' '128';\n"); - grammarBuilder.append("KW129 : 'KW' '129';\n"); - grammarBuilder.append("KW130 : 'KW' '130';\n"); - grammarBuilder.append("KW131 : 'KW' '131';\n"); - grammarBuilder.append("KW132 : 'KW' '132';\n"); - grammarBuilder.append("KW133 : 'KW' '133';\n"); - grammarBuilder.append("KW134 : 'KW' '134';\n"); - grammarBuilder.append("KW135 : 'KW' '135';\n"); - grammarBuilder.append("KW136 : 'KW' '136';\n"); - grammarBuilder.append("KW137 : 'KW' '137';\n"); - grammarBuilder.append("KW138 : 'KW' '138';\n"); - grammarBuilder.append("KW139 : 'KW' '139';\n"); - grammarBuilder.append("KW140 : 'KW' '140';\n"); - grammarBuilder.append("KW141 : 'KW' '141';\n"); - grammarBuilder.append("KW142 : 'KW' '142';\n"); - grammarBuilder.append("KW143 : 'KW' '143';\n"); - grammarBuilder.append("KW144 : 'KW' '144';\n"); - grammarBuilder.append("KW145 : 'KW' '145';\n"); - grammarBuilder.append("KW146 : 'KW' '146';\n"); - grammarBuilder.append("KW147 : 'KW' '147';\n"); - grammarBuilder.append("KW148 : 'KW' '148';\n"); - grammarBuilder.append("KW149 : 'KW' '149';\n"); - grammarBuilder.append("KW150 : 'KW' '150';\n"); - grammarBuilder.append("KW151 : 'KW' '151';\n"); - grammarBuilder.append("KW152 : 'KW' '152';\n"); - grammarBuilder.append("KW153 : 'KW' '153';\n"); - grammarBuilder.append("KW154 : 'KW' '154';\n"); - grammarBuilder.append("KW155 : 'KW' '155';\n"); - grammarBuilder.append("KW156 : 'KW' '156';\n"); - grammarBuilder.append("KW157 : 'KW' '157';\n"); - grammarBuilder.append("KW158 : 'KW' '158';\n"); - grammarBuilder.append("KW159 : 'KW' '159';\n"); - grammarBuilder.append("KW160 : 'KW' '160';\n"); - grammarBuilder.append("KW161 : 'KW' '161';\n"); - grammarBuilder.append("KW162 : 'KW' '162';\n"); - grammarBuilder.append("KW163 : 'KW' '163';\n"); - grammarBuilder.append("KW164 : 'KW' '164';\n"); - grammarBuilder.append("KW165 : 'KW' '165';\n"); - grammarBuilder.append("KW166 : 'KW' '166';\n"); - grammarBuilder.append("KW167 : 'KW' '167';\n"); - grammarBuilder.append("KW168 : 'KW' '168';\n"); - grammarBuilder.append("KW169 : 'KW' '169';\n"); - grammarBuilder.append("KW170 : 'KW' '170';\n"); - grammarBuilder.append("KW171 : 'KW' '171';\n"); - grammarBuilder.append("KW172 : 'KW' '172';\n"); - grammarBuilder.append("KW173 : 'KW' '173';\n"); - grammarBuilder.append("KW174 : 'KW' '174';\n"); - grammarBuilder.append("KW175 : 'KW' '175';\n"); - grammarBuilder.append("KW176 : 'KW' '176';\n"); - grammarBuilder.append("KW177 : 'KW' '177';\n"); - grammarBuilder.append("KW178 : 'KW' '178';\n"); - grammarBuilder.append("KW179 : 'KW' '179';\n"); - grammarBuilder.append("KW180 : 'KW' '180';\n"); - grammarBuilder.append("KW181 : 'KW' '181';\n"); - grammarBuilder.append("KW182 : 'KW' '182';\n"); - grammarBuilder.append("KW183 : 'KW' '183';\n"); - grammarBuilder.append("KW184 : 'KW' '184';\n"); - grammarBuilder.append("KW185 : 'KW' '185';\n"); - grammarBuilder.append("KW186 : 'KW' '186';\n"); - grammarBuilder.append("KW187 : 'KW' '187';\n"); - grammarBuilder.append("KW188 : 'KW' '188';\n"); - grammarBuilder.append("KW189 : 'KW' '189';\n"); - grammarBuilder.append("KW190 : 'KW' '190';\n"); - grammarBuilder.append("KW191 : 'KW' '191';\n"); - grammarBuilder.append("KW192 : 'KW' '192';\n"); - grammarBuilder.append("KW193 : 'KW' '193';\n"); - grammarBuilder.append("KW194 : 'KW' '194';\n"); - grammarBuilder.append("KW195 : 'KW' '195';\n"); - grammarBuilder.append("KW196 : 'KW' '196';\n"); - grammarBuilder.append("KW197 : 'KW' '197';\n"); - grammarBuilder.append("KW198 : 'KW' '198';\n"); - grammarBuilder.append("KW199 : 'KW' '199';\n"); - grammarBuilder.append("KW200 : 'KW' '200';\n"); - grammarBuilder.append("KW201 : 'KW' '201';\n"); - grammarBuilder.append("KW202 : 'KW' '202';\n"); - grammarBuilder.append("KW203 : 'KW' '203';\n"); - grammarBuilder.append("KW204 : 'KW' '204';\n"); - grammarBuilder.append("KW205 : 'KW' '205';\n"); - grammarBuilder.append("KW206 : 'KW' '206';\n"); - grammarBuilder.append("KW207 : 'KW' '207';\n"); - grammarBuilder.append("KW208 : 'KW' '208';\n"); - grammarBuilder.append("KW209 : 'KW' '209';\n"); - grammarBuilder.append("KW210 : 'KW' '210';\n"); - grammarBuilder.append("KW211 : 'KW' '211';\n"); - grammarBuilder.append("KW212 : 'KW' '212';\n"); - grammarBuilder.append("KW213 : 'KW' '213';\n"); - grammarBuilder.append("KW214 : 'KW' '214';\n"); - grammarBuilder.append("KW215 : 'KW' '215';\n"); - grammarBuilder.append("KW216 : 'KW' '216';\n"); - grammarBuilder.append("KW217 : 'KW' '217';\n"); - grammarBuilder.append("KW218 : 'KW' '218';\n"); - grammarBuilder.append("KW219 : 'KW' '219';\n"); - grammarBuilder.append("KW220 : 'KW' '220';\n"); - grammarBuilder.append("KW221 : 'KW' '221';\n"); - grammarBuilder.append("KW222 : 'KW' '222';\n"); - grammarBuilder.append("KW223 : 'KW' '223';\n"); - grammarBuilder.append("KW224 : 'KW' '224';\n"); - grammarBuilder.append("KW225 : 'KW' '225';\n"); - grammarBuilder.append("KW226 : 'KW' '226';\n"); - grammarBuilder.append("KW227 : 'KW' '227';\n"); - grammarBuilder.append("KW228 : 'KW' '228';\n"); - grammarBuilder.append("KW229 : 'KW' '229';\n"); - grammarBuilder.append("KW230 : 'KW' '230';\n"); - grammarBuilder.append("KW231 : 'KW' '231';\n"); - grammarBuilder.append("KW232 : 'KW' '232';\n"); - grammarBuilder.append("KW233 : 'KW' '233';\n"); - grammarBuilder.append("KW234 : 'KW' '234';\n"); - grammarBuilder.append("KW235 : 'KW' '235';\n"); - grammarBuilder.append("KW236 : 'KW' '236';\n"); - grammarBuilder.append("KW237 : 'KW' '237';\n"); - grammarBuilder.append("KW238 : 'KW' '238';\n"); - grammarBuilder.append("KW239 : 'KW' '239';\n"); - grammarBuilder.append("KW240 : 'KW' '240';\n"); - grammarBuilder.append("KW241 : 'KW' '241';\n"); - grammarBuilder.append("KW242 : 'KW' '242';\n"); - grammarBuilder.append("KW243 : 'KW' '243';\n"); - grammarBuilder.append("KW244 : 'KW' '244';\n"); - grammarBuilder.append("KW245 : 'KW' '245';\n"); - grammarBuilder.append("KW246 : 'KW' '246';\n"); - grammarBuilder.append("KW247 : 'KW' '247';\n"); - grammarBuilder.append("KW248 : 'KW' '248';\n"); - grammarBuilder.append("KW249 : 'KW' '249';\n"); - grammarBuilder.append("KW250 : 'KW' '250';\n"); - grammarBuilder.append("KW251 : 'KW' '251';\n"); - grammarBuilder.append("KW252 : 'KW' '252';\n"); - grammarBuilder.append("KW253 : 'KW' '253';\n"); - grammarBuilder.append("KW254 : 'KW' '254';\n"); - grammarBuilder.append("KW255 : 'KW' '255';\n"); - grammarBuilder.append("KW256 : 'KW' '256';\n"); - grammarBuilder.append("KW257 : 'KW' '257';\n"); - grammarBuilder.append("KW258 : 'KW' '258';\n"); - grammarBuilder.append("KW259 : 'KW' '259';\n"); - grammarBuilder.append("KW260 : 'KW' '260';\n"); - grammarBuilder.append("KW261 : 'KW' '261';\n"); - grammarBuilder.append("KW262 : 'KW' '262';\n"); - grammarBuilder.append("KW263 : 'KW' '263';\n"); - grammarBuilder.append("KW264 : 'KW' '264';\n"); - grammarBuilder.append("KW265 : 'KW' '265';\n"); - grammarBuilder.append("KW266 : 'KW' '266';\n"); - grammarBuilder.append("KW267 : 'KW' '267';\n"); - grammarBuilder.append("KW268 : 'KW' '268';\n"); - grammarBuilder.append("KW269 : 'KW' '269';\n"); - grammarBuilder.append("KW270 : 'KW' '270';\n"); - grammarBuilder.append("KW271 : 'KW' '271';\n"); - grammarBuilder.append("KW272 : 'KW' '272';\n"); - grammarBuilder.append("KW273 : 'KW' '273';\n"); - grammarBuilder.append("KW274 : 'KW' '274';\n"); - grammarBuilder.append("KW275 : 'KW' '275';\n"); - grammarBuilder.append("KW276 : 'KW' '276';\n"); - grammarBuilder.append("KW277 : 'KW' '277';\n"); - grammarBuilder.append("KW278 : 'KW' '278';\n"); - grammarBuilder.append("KW279 : 'KW' '279';\n"); - grammarBuilder.append("KW280 : 'KW' '280';\n"); - grammarBuilder.append("KW281 : 'KW' '281';\n"); - grammarBuilder.append("KW282 : 'KW' '282';\n"); - grammarBuilder.append("KW283 : 'KW' '283';\n"); - grammarBuilder.append("KW284 : 'KW' '284';\n"); - grammarBuilder.append("KW285 : 'KW' '285';\n"); - grammarBuilder.append("KW286 : 'KW' '286';\n"); - grammarBuilder.append("KW287 : 'KW' '287';\n"); - grammarBuilder.append("KW288 : 'KW' '288';\n"); - grammarBuilder.append("KW289 : 'KW' '289';\n"); - grammarBuilder.append("KW290 : 'KW' '290';\n"); - grammarBuilder.append("KW291 : 'KW' '291';\n"); - grammarBuilder.append("KW292 : 'KW' '292';\n"); - grammarBuilder.append("KW293 : 'KW' '293';\n"); - grammarBuilder.append("KW294 : 'KW' '294';\n"); - grammarBuilder.append("KW295 : 'KW' '295';\n"); - grammarBuilder.append("KW296 : 'KW' '296';\n"); - grammarBuilder.append("KW297 : 'KW' '297';\n"); - grammarBuilder.append("KW298 : 'KW' '298';\n"); - grammarBuilder.append("KW299 : 'KW' '299';\n"); - grammarBuilder.append("KW300 : 'KW' '300';\n"); - grammarBuilder.append("KW301 : 'KW' '301';\n"); - grammarBuilder.append("KW302 : 'KW' '302';\n"); - grammarBuilder.append("KW303 : 'KW' '303';\n"); - grammarBuilder.append("KW304 : 'KW' '304';\n"); - grammarBuilder.append("KW305 : 'KW' '305';\n"); - grammarBuilder.append("KW306 : 'KW' '306';\n"); - grammarBuilder.append("KW307 : 'KW' '307';\n"); - grammarBuilder.append("KW308 : 'KW' '308';\n"); - grammarBuilder.append("KW309 : 'KW' '309';\n"); - grammarBuilder.append("KW310 : 'KW' '310';\n"); - grammarBuilder.append("KW311 : 'KW' '311';\n"); - grammarBuilder.append("KW312 : 'KW' '312';\n"); - grammarBuilder.append("KW313 : 'KW' '313';\n"); - grammarBuilder.append("KW314 : 'KW' '314';\n"); - grammarBuilder.append("KW315 : 'KW' '315';\n"); - grammarBuilder.append("KW316 : 'KW' '316';\n"); - grammarBuilder.append("KW317 : 'KW' '317';\n"); - grammarBuilder.append("KW318 : 'KW' '318';\n"); - grammarBuilder.append("KW319 : 'KW' '319';\n"); - grammarBuilder.append("KW320 : 'KW' '320';\n"); - grammarBuilder.append("KW321 : 'KW' '321';\n"); - grammarBuilder.append("KW322 : 'KW' '322';\n"); - grammarBuilder.append("KW323 : 'KW' '323';\n"); - grammarBuilder.append("KW324 : 'KW' '324';\n"); - grammarBuilder.append("KW325 : 'KW' '325';\n"); - grammarBuilder.append("KW326 : 'KW' '326';\n"); - grammarBuilder.append("KW327 : 'KW' '327';\n"); - grammarBuilder.append("KW328 : 'KW' '328';\n"); - grammarBuilder.append("KW329 : 'KW' '329';\n"); - grammarBuilder.append("KW330 : 'KW' '330';\n"); - grammarBuilder.append("KW331 : 'KW' '331';\n"); - grammarBuilder.append("KW332 : 'KW' '332';\n"); - grammarBuilder.append("KW333 : 'KW' '333';\n"); - grammarBuilder.append("KW334 : 'KW' '334';\n"); - grammarBuilder.append("KW335 : 'KW' '335';\n"); - grammarBuilder.append("KW336 : 'KW' '336';\n"); - grammarBuilder.append("KW337 : 'KW' '337';\n"); - grammarBuilder.append("KW338 : 'KW' '338';\n"); - grammarBuilder.append("KW339 : 'KW' '339';\n"); - grammarBuilder.append("KW340 : 'KW' '340';\n"); - grammarBuilder.append("KW341 : 'KW' '341';\n"); - grammarBuilder.append("KW342 : 'KW' '342';\n"); - grammarBuilder.append("KW343 : 'KW' '343';\n"); - grammarBuilder.append("KW344 : 'KW' '344';\n"); - grammarBuilder.append("KW345 : 'KW' '345';\n"); - grammarBuilder.append("KW346 : 'KW' '346';\n"); - grammarBuilder.append("KW347 : 'KW' '347';\n"); - grammarBuilder.append("KW348 : 'KW' '348';\n"); - grammarBuilder.append("KW349 : 'KW' '349';\n"); - grammarBuilder.append("KW350 : 'KW' '350';\n"); - grammarBuilder.append("KW351 : 'KW' '351';\n"); - grammarBuilder.append("KW352 : 'KW' '352';\n"); - grammarBuilder.append("KW353 : 'KW' '353';\n"); - grammarBuilder.append("KW354 : 'KW' '354';\n"); - grammarBuilder.append("KW355 : 'KW' '355';\n"); - grammarBuilder.append("KW356 : 'KW' '356';\n"); - grammarBuilder.append("KW357 : 'KW' '357';\n"); - grammarBuilder.append("KW358 : 'KW' '358';\n"); - grammarBuilder.append("KW359 : 'KW' '359';\n"); - grammarBuilder.append("KW360 : 'KW' '360';\n"); - grammarBuilder.append("KW361 : 'KW' '361';\n"); - grammarBuilder.append("KW362 : 'KW' '362';\n"); - grammarBuilder.append("KW363 : 'KW' '363';\n"); - grammarBuilder.append("KW364 : 'KW' '364';\n"); - grammarBuilder.append("KW365 : 'KW' '365';\n"); - grammarBuilder.append("KW366 : 'KW' '366';\n"); - grammarBuilder.append("KW367 : 'KW' '367';\n"); - grammarBuilder.append("KW368 : 'KW' '368';\n"); - grammarBuilder.append("KW369 : 'KW' '369';\n"); - grammarBuilder.append("KW370 : 'KW' '370';\n"); - grammarBuilder.append("KW371 : 'KW' '371';\n"); - grammarBuilder.append("KW372 : 'KW' '372';\n"); - grammarBuilder.append("KW373 : 'KW' '373';\n"); - grammarBuilder.append("KW374 : 'KW' '374';\n"); - grammarBuilder.append("KW375 : 'KW' '375';\n"); - grammarBuilder.append("KW376 : 'KW' '376';\n"); - grammarBuilder.append("KW377 : 'KW' '377';\n"); - grammarBuilder.append("KW378 : 'KW' '378';\n"); - grammarBuilder.append("KW379 : 'KW' '379';\n"); - grammarBuilder.append("KW380 : 'KW' '380';\n"); - grammarBuilder.append("KW381 : 'KW' '381';\n"); - grammarBuilder.append("KW382 : 'KW' '382';\n"); - grammarBuilder.append("KW383 : 'KW' '383';\n"); - grammarBuilder.append("KW384 : 'KW' '384';\n"); - grammarBuilder.append("KW385 : 'KW' '385';\n"); - grammarBuilder.append("KW386 : 'KW' '386';\n"); - grammarBuilder.append("KW387 : 'KW' '387';\n"); - grammarBuilder.append("KW388 : 'KW' '388';\n"); - grammarBuilder.append("KW389 : 'KW' '389';\n"); - grammarBuilder.append("KW390 : 'KW' '390';\n"); - grammarBuilder.append("KW391 : 'KW' '391';\n"); - grammarBuilder.append("KW392 : 'KW' '392';\n"); - grammarBuilder.append("KW393 : 'KW' '393';\n"); - grammarBuilder.append("KW394 : 'KW' '394';\n"); - grammarBuilder.append("KW395 : 'KW' '395';\n"); - grammarBuilder.append("KW396 : 'KW' '396';\n"); - grammarBuilder.append("KW397 : 'KW' '397';\n"); - grammarBuilder.append("KW398 : 'KW' '398';\n"); - grammarBuilder.append("KW399 : 'KW' '399';\n"); - grammarBuilder.append("KW400 : 'KW' '400';\n"); - grammarBuilder.append("KW401 : 'KW' '401';\n"); - grammarBuilder.append("KW402 : 'KW' '402';\n"); - grammarBuilder.append("KW403 : 'KW' '403';\n"); - grammarBuilder.append("KW404 : 'KW' '404';\n"); - grammarBuilder.append("KW405 : 'KW' '405';\n"); - grammarBuilder.append("KW406 : 'KW' '406';\n"); - grammarBuilder.append("KW407 : 'KW' '407';\n"); - grammarBuilder.append("KW408 : 'KW' '408';\n"); - grammarBuilder.append("KW409 : 'KW' '409';\n"); - grammarBuilder.append("KW410 : 'KW' '410';\n"); - grammarBuilder.append("KW411 : 'KW' '411';\n"); - grammarBuilder.append("KW412 : 'KW' '412';\n"); - grammarBuilder.append("KW413 : 'KW' '413';\n"); - grammarBuilder.append("KW414 : 'KW' '414';\n"); - grammarBuilder.append("KW415 : 'KW' '415';\n"); - grammarBuilder.append("KW416 : 'KW' '416';\n"); - grammarBuilder.append("KW417 : 'KW' '417';\n"); - grammarBuilder.append("KW418 : 'KW' '418';\n"); - grammarBuilder.append("KW419 : 'KW' '419';\n"); - grammarBuilder.append("KW420 : 'KW' '420';\n"); - grammarBuilder.append("KW421 : 'KW' '421';\n"); - grammarBuilder.append("KW422 : 'KW' '422';\n"); - grammarBuilder.append("KW423 : 'KW' '423';\n"); - grammarBuilder.append("KW424 : 'KW' '424';\n"); - grammarBuilder.append("KW425 : 'KW' '425';\n"); - grammarBuilder.append("KW426 : 'KW' '426';\n"); - grammarBuilder.append("KW427 : 'KW' '427';\n"); - grammarBuilder.append("KW428 : 'KW' '428';\n"); - grammarBuilder.append("KW429 : 'KW' '429';\n"); - grammarBuilder.append("KW430 : 'KW' '430';\n"); - grammarBuilder.append("KW431 : 'KW' '431';\n"); - grammarBuilder.append("KW432 : 'KW' '432';\n"); - grammarBuilder.append("KW433 : 'KW' '433';\n"); - grammarBuilder.append("KW434 : 'KW' '434';\n"); - grammarBuilder.append("KW435 : 'KW' '435';\n"); - grammarBuilder.append("KW436 : 'KW' '436';\n"); - grammarBuilder.append("KW437 : 'KW' '437';\n"); - grammarBuilder.append("KW438 : 'KW' '438';\n"); - grammarBuilder.append("KW439 : 'KW' '439';\n"); - grammarBuilder.append("KW440 : 'KW' '440';\n"); - grammarBuilder.append("KW441 : 'KW' '441';\n"); - grammarBuilder.append("KW442 : 'KW' '442';\n"); - grammarBuilder.append("KW443 : 'KW' '443';\n"); - grammarBuilder.append("KW444 : 'KW' '444';\n"); - grammarBuilder.append("KW445 : 'KW' '445';\n"); - grammarBuilder.append("KW446 : 'KW' '446';\n"); - grammarBuilder.append("KW447 : 'KW' '447';\n"); - grammarBuilder.append("KW448 : 'KW' '448';\n"); - grammarBuilder.append("KW449 : 'KW' '449';\n"); - grammarBuilder.append("KW450 : 'KW' '450';\n"); - grammarBuilder.append("KW451 : 'KW' '451';\n"); - grammarBuilder.append("KW452 : 'KW' '452';\n"); - grammarBuilder.append("KW453 : 'KW' '453';\n"); - grammarBuilder.append("KW454 : 'KW' '454';\n"); - grammarBuilder.append("KW455 : 'KW' '455';\n"); - grammarBuilder.append("KW456 : 'KW' '456';\n"); - grammarBuilder.append("KW457 : 'KW' '457';\n"); - grammarBuilder.append("KW458 : 'KW' '458';\n"); - grammarBuilder.append("KW459 : 'KW' '459';\n"); - grammarBuilder.append("KW460 : 'KW' '460';\n"); - grammarBuilder.append("KW461 : 'KW' '461';\n"); - grammarBuilder.append("KW462 : 'KW' '462';\n"); - grammarBuilder.append("KW463 : 'KW' '463';\n"); - grammarBuilder.append("KW464 : 'KW' '464';\n"); - grammarBuilder.append("KW465 : 'KW' '465';\n"); - grammarBuilder.append("KW466 : 'KW' '466';\n"); - grammarBuilder.append("KW467 : 'KW' '467';\n"); - grammarBuilder.append("KW468 : 'KW' '468';\n"); - grammarBuilder.append("KW469 : 'KW' '469';\n"); - grammarBuilder.append("KW470 : 'KW' '470';\n"); - grammarBuilder.append("KW471 : 'KW' '471';\n"); - grammarBuilder.append("KW472 : 'KW' '472';\n"); - grammarBuilder.append("KW473 : 'KW' '473';\n"); - grammarBuilder.append("KW474 : 'KW' '474';\n"); - grammarBuilder.append("KW475 : 'KW' '475';\n"); - grammarBuilder.append("KW476 : 'KW' '476';\n"); - grammarBuilder.append("KW477 : 'KW' '477';\n"); - grammarBuilder.append("KW478 : 'KW' '478';\n"); - grammarBuilder.append("KW479 : 'KW' '479';\n"); - grammarBuilder.append("KW480 : 'KW' '480';\n"); - grammarBuilder.append("KW481 : 'KW' '481';\n"); - grammarBuilder.append("KW482 : 'KW' '482';\n"); - grammarBuilder.append("KW483 : 'KW' '483';\n"); - grammarBuilder.append("KW484 : 'KW' '484';\n"); - grammarBuilder.append("KW485 : 'KW' '485';\n"); - grammarBuilder.append("KW486 : 'KW' '486';\n"); - grammarBuilder.append("KW487 : 'KW' '487';\n"); - grammarBuilder.append("KW488 : 'KW' '488';\n"); - grammarBuilder.append("KW489 : 'KW' '489';\n"); - grammarBuilder.append("KW490 : 'KW' '490';\n"); - grammarBuilder.append("KW491 : 'KW' '491';\n"); - grammarBuilder.append("KW492 : 'KW' '492';\n"); - grammarBuilder.append("KW493 : 'KW' '493';\n"); - grammarBuilder.append("KW494 : 'KW' '494';\n"); - grammarBuilder.append("KW495 : 'KW' '495';\n"); - grammarBuilder.append("KW496 : 'KW' '496';\n"); - grammarBuilder.append("KW497 : 'KW' '497';\n"); - grammarBuilder.append("KW498 : 'KW' '498';\n"); - grammarBuilder.append("KW499 : 'KW' '499';\n"); - grammarBuilder.append("KW500 : 'KW' '500';\n"); - grammarBuilder.append("KW501 : 'KW' '501';\n"); - grammarBuilder.append("KW502 : 'KW' '502';\n"); - grammarBuilder.append("KW503 : 'KW' '503';\n"); - grammarBuilder.append("KW504 : 'KW' '504';\n"); - grammarBuilder.append("KW505 : 'KW' '505';\n"); - grammarBuilder.append("KW506 : 'KW' '506';\n"); - grammarBuilder.append("KW507 : 'KW' '507';\n"); - grammarBuilder.append("KW508 : 'KW' '508';\n"); - grammarBuilder.append("KW509 : 'KW' '509';\n"); - grammarBuilder.append("KW510 : 'KW' '510';\n"); - grammarBuilder.append("KW511 : 'KW' '511';\n"); - grammarBuilder.append("KW512 : 'KW' '512';\n"); - grammarBuilder.append("KW513 : 'KW' '513';\n"); - grammarBuilder.append("KW514 : 'KW' '514';\n"); - grammarBuilder.append("KW515 : 'KW' '515';\n"); - grammarBuilder.append("KW516 : 'KW' '516';\n"); - grammarBuilder.append("KW517 : 'KW' '517';\n"); - grammarBuilder.append("KW518 : 'KW' '518';\n"); - grammarBuilder.append("KW519 : 'KW' '519';\n"); - grammarBuilder.append("KW520 : 'KW' '520';\n"); - grammarBuilder.append("KW521 : 'KW' '521';\n"); - grammarBuilder.append("KW522 : 'KW' '522';\n"); - grammarBuilder.append("KW523 : 'KW' '523';\n"); - grammarBuilder.append("KW524 : 'KW' '524';\n"); - grammarBuilder.append("KW525 : 'KW' '525';\n"); - grammarBuilder.append("KW526 : 'KW' '526';\n"); - grammarBuilder.append("KW527 : 'KW' '527';\n"); - grammarBuilder.append("KW528 : 'KW' '528';\n"); - grammarBuilder.append("KW529 : 'KW' '529';\n"); - grammarBuilder.append("KW530 : 'KW' '530';\n"); - grammarBuilder.append("KW531 : 'KW' '531';\n"); - grammarBuilder.append("KW532 : 'KW' '532';\n"); - grammarBuilder.append("KW533 : 'KW' '533';\n"); - grammarBuilder.append("KW534 : 'KW' '534';\n"); - grammarBuilder.append("KW535 : 'KW' '535';\n"); - grammarBuilder.append("KW536 : 'KW' '536';\n"); - grammarBuilder.append("KW537 : 'KW' '537';\n"); - grammarBuilder.append("KW538 : 'KW' '538';\n"); - grammarBuilder.append("KW539 : 'KW' '539';\n"); - grammarBuilder.append("KW540 : 'KW' '540';\n"); - grammarBuilder.append("KW541 : 'KW' '541';\n"); - grammarBuilder.append("KW542 : 'KW' '542';\n"); - grammarBuilder.append("KW543 : 'KW' '543';\n"); - grammarBuilder.append("KW544 : 'KW' '544';\n"); - grammarBuilder.append("KW545 : 'KW' '545';\n"); - grammarBuilder.append("KW546 : 'KW' '546';\n"); - grammarBuilder.append("KW547 : 'KW' '547';\n"); - grammarBuilder.append("KW548 : 'KW' '548';\n"); - grammarBuilder.append("KW549 : 'KW' '549';\n"); - grammarBuilder.append("KW550 : 'KW' '550';\n"); - grammarBuilder.append("KW551 : 'KW' '551';\n"); - grammarBuilder.append("KW552 : 'KW' '552';\n"); - grammarBuilder.append("KW553 : 'KW' '553';\n"); - grammarBuilder.append("KW554 : 'KW' '554';\n"); - grammarBuilder.append("KW555 : 'KW' '555';\n"); - grammarBuilder.append("KW556 : 'KW' '556';\n"); - grammarBuilder.append("KW557 : 'KW' '557';\n"); - grammarBuilder.append("KW558 : 'KW' '558';\n"); - grammarBuilder.append("KW559 : 'KW' '559';\n"); - grammarBuilder.append("KW560 : 'KW' '560';\n"); - grammarBuilder.append("KW561 : 'KW' '561';\n"); - grammarBuilder.append("KW562 : 'KW' '562';\n"); - grammarBuilder.append("KW563 : 'KW' '563';\n"); - grammarBuilder.append("KW564 : 'KW' '564';\n"); - grammarBuilder.append("KW565 : 'KW' '565';\n"); - grammarBuilder.append("KW566 : 'KW' '566';\n"); - grammarBuilder.append("KW567 : 'KW' '567';\n"); - grammarBuilder.append("KW568 : 'KW' '568';\n"); - grammarBuilder.append("KW569 : 'KW' '569';\n"); - grammarBuilder.append("KW570 : 'KW' '570';\n"); - grammarBuilder.append("KW571 : 'KW' '571';\n"); - grammarBuilder.append("KW572 : 'KW' '572';\n"); - grammarBuilder.append("KW573 : 'KW' '573';\n"); - grammarBuilder.append("KW574 : 'KW' '574';\n"); - grammarBuilder.append("KW575 : 'KW' '575';\n"); - grammarBuilder.append("KW576 : 'KW' '576';\n"); - grammarBuilder.append("KW577 : 'KW' '577';\n"); - grammarBuilder.append("KW578 : 'KW' '578';\n"); - grammarBuilder.append("KW579 : 'KW' '579';\n"); - grammarBuilder.append("KW580 : 'KW' '580';\n"); - grammarBuilder.append("KW581 : 'KW' '581';\n"); - grammarBuilder.append("KW582 : 'KW' '582';\n"); - grammarBuilder.append("KW583 : 'KW' '583';\n"); - grammarBuilder.append("KW584 : 'KW' '584';\n"); - grammarBuilder.append("KW585 : 'KW' '585';\n"); - grammarBuilder.append("KW586 : 'KW' '586';\n"); - grammarBuilder.append("KW587 : 'KW' '587';\n"); - grammarBuilder.append("KW588 : 'KW' '588';\n"); - grammarBuilder.append("KW589 : 'KW' '589';\n"); - grammarBuilder.append("KW590 : 'KW' '590';\n"); - grammarBuilder.append("KW591 : 'KW' '591';\n"); - grammarBuilder.append("KW592 : 'KW' '592';\n"); - grammarBuilder.append("KW593 : 'KW' '593';\n"); - grammarBuilder.append("KW594 : 'KW' '594';\n"); - grammarBuilder.append("KW595 : 'KW' '595';\n"); - grammarBuilder.append("KW596 : 'KW' '596';\n"); - grammarBuilder.append("KW597 : 'KW' '597';\n"); - grammarBuilder.append("KW598 : 'KW' '598';\n"); - grammarBuilder.append("KW599 : 'KW' '599';\n"); - grammarBuilder.append("KW600 : 'KW' '600';\n"); - grammarBuilder.append("KW601 : 'KW' '601';\n"); - grammarBuilder.append("KW602 : 'KW' '602';\n"); - grammarBuilder.append("KW603 : 'KW' '603';\n"); - grammarBuilder.append("KW604 : 'KW' '604';\n"); - grammarBuilder.append("KW605 : 'KW' '605';\n"); - grammarBuilder.append("KW606 : 'KW' '606';\n"); - grammarBuilder.append("KW607 : 'KW' '607';\n"); - grammarBuilder.append("KW608 : 'KW' '608';\n"); - grammarBuilder.append("KW609 : 'KW' '609';\n"); - grammarBuilder.append("KW610 : 'KW' '610';\n"); - grammarBuilder.append("KW611 : 'KW' '611';\n"); - grammarBuilder.append("KW612 : 'KW' '612';\n"); - grammarBuilder.append("KW613 : 'KW' '613';\n"); - grammarBuilder.append("KW614 : 'KW' '614';\n"); - grammarBuilder.append("KW615 : 'KW' '615';\n"); - grammarBuilder.append("KW616 : 'KW' '616';\n"); - grammarBuilder.append("KW617 : 'KW' '617';\n"); - grammarBuilder.append("KW618 : 'KW' '618';\n"); - grammarBuilder.append("KW619 : 'KW' '619';\n"); - grammarBuilder.append("KW620 : 'KW' '620';\n"); - grammarBuilder.append("KW621 : 'KW' '621';\n"); - grammarBuilder.append("KW622 : 'KW' '622';\n"); - grammarBuilder.append("KW623 : 'KW' '623';\n"); - grammarBuilder.append("KW624 : 'KW' '624';\n"); - grammarBuilder.append("KW625 : 'KW' '625';\n"); - grammarBuilder.append("KW626 : 'KW' '626';\n"); - grammarBuilder.append("KW627 : 'KW' '627';\n"); - grammarBuilder.append("KW628 : 'KW' '628';\n"); - grammarBuilder.append("KW629 : 'KW' '629';\n"); - grammarBuilder.append("KW630 : 'KW' '630';\n"); - grammarBuilder.append("KW631 : 'KW' '631';\n"); - grammarBuilder.append("KW632 : 'KW' '632';\n"); - grammarBuilder.append("KW633 : 'KW' '633';\n"); - grammarBuilder.append("KW634 : 'KW' '634';\n"); - grammarBuilder.append("KW635 : 'KW' '635';\n"); - grammarBuilder.append("KW636 : 'KW' '636';\n"); - grammarBuilder.append("KW637 : 'KW' '637';\n"); - grammarBuilder.append("KW638 : 'KW' '638';\n"); - grammarBuilder.append("KW639 : 'KW' '639';\n"); - grammarBuilder.append("KW640 : 'KW' '640';\n"); - grammarBuilder.append("KW641 : 'KW' '641';\n"); - grammarBuilder.append("KW642 : 'KW' '642';\n"); - grammarBuilder.append("KW643 : 'KW' '643';\n"); - grammarBuilder.append("KW644 : 'KW' '644';\n"); - grammarBuilder.append("KW645 : 'KW' '645';\n"); - grammarBuilder.append("KW646 : 'KW' '646';\n"); - grammarBuilder.append("KW647 : 'KW' '647';\n"); - grammarBuilder.append("KW648 : 'KW' '648';\n"); - grammarBuilder.append("KW649 : 'KW' '649';\n"); - grammarBuilder.append("KW650 : 'KW' '650';\n"); - grammarBuilder.append("KW651 : 'KW' '651';\n"); - grammarBuilder.append("KW652 : 'KW' '652';\n"); - grammarBuilder.append("KW653 : 'KW' '653';\n"); - grammarBuilder.append("KW654 : 'KW' '654';\n"); - grammarBuilder.append("KW655 : 'KW' '655';\n"); - grammarBuilder.append("KW656 : 'KW' '656';\n"); - grammarBuilder.append("KW657 : 'KW' '657';\n"); - grammarBuilder.append("KW658 : 'KW' '658';\n"); - grammarBuilder.append("KW659 : 'KW' '659';\n"); - grammarBuilder.append("KW660 : 'KW' '660';\n"); - grammarBuilder.append("KW661 : 'KW' '661';\n"); - grammarBuilder.append("KW662 : 'KW' '662';\n"); - grammarBuilder.append("KW663 : 'KW' '663';\n"); - grammarBuilder.append("KW664 : 'KW' '664';\n"); - grammarBuilder.append("KW665 : 'KW' '665';\n"); - grammarBuilder.append("KW666 : 'KW' '666';\n"); - grammarBuilder.append("KW667 : 'KW' '667';\n"); - grammarBuilder.append("KW668 : 'KW' '668';\n"); - grammarBuilder.append("KW669 : 'KW' '669';\n"); - grammarBuilder.append("KW670 : 'KW' '670';\n"); - grammarBuilder.append("KW671 : 'KW' '671';\n"); - grammarBuilder.append("KW672 : 'KW' '672';\n"); - grammarBuilder.append("KW673 : 'KW' '673';\n"); - grammarBuilder.append("KW674 : 'KW' '674';\n"); - grammarBuilder.append("KW675 : 'KW' '675';\n"); - grammarBuilder.append("KW676 : 'KW' '676';\n"); - grammarBuilder.append("KW677 : 'KW' '677';\n"); - grammarBuilder.append("KW678 : 'KW' '678';\n"); - grammarBuilder.append("KW679 : 'KW' '679';\n"); - grammarBuilder.append("KW680 : 'KW' '680';\n"); - grammarBuilder.append("KW681 : 'KW' '681';\n"); - grammarBuilder.append("KW682 : 'KW' '682';\n"); - grammarBuilder.append("KW683 : 'KW' '683';\n"); - grammarBuilder.append("KW684 : 'KW' '684';\n"); - grammarBuilder.append("KW685 : 'KW' '685';\n"); - grammarBuilder.append("KW686 : 'KW' '686';\n"); - grammarBuilder.append("KW687 : 'KW' '687';\n"); - grammarBuilder.append("KW688 : 'KW' '688';\n"); - grammarBuilder.append("KW689 : 'KW' '689';\n"); - grammarBuilder.append("KW690 : 'KW' '690';\n"); - grammarBuilder.append("KW691 : 'KW' '691';\n"); - grammarBuilder.append("KW692 : 'KW' '692';\n"); - grammarBuilder.append("KW693 : 'KW' '693';\n"); - grammarBuilder.append("KW694 : 'KW' '694';\n"); - grammarBuilder.append("KW695 : 'KW' '695';\n"); - grammarBuilder.append("KW696 : 'KW' '696';\n"); - grammarBuilder.append("KW697 : 'KW' '697';\n"); - grammarBuilder.append("KW698 : 'KW' '698';\n"); - grammarBuilder.append("KW699 : 'KW' '699';\n"); - grammarBuilder.append("KW700 : 'KW' '700';\n"); - grammarBuilder.append("KW701 : 'KW' '701';\n"); - grammarBuilder.append("KW702 : 'KW' '702';\n"); - grammarBuilder.append("KW703 : 'KW' '703';\n"); - grammarBuilder.append("KW704 : 'KW' '704';\n"); - grammarBuilder.append("KW705 : 'KW' '705';\n"); - grammarBuilder.append("KW706 : 'KW' '706';\n"); - grammarBuilder.append("KW707 : 'KW' '707';\n"); - grammarBuilder.append("KW708 : 'KW' '708';\n"); - grammarBuilder.append("KW709 : 'KW' '709';\n"); - grammarBuilder.append("KW710 : 'KW' '710';\n"); - grammarBuilder.append("KW711 : 'KW' '711';\n"); - grammarBuilder.append("KW712 : 'KW' '712';\n"); - grammarBuilder.append("KW713 : 'KW' '713';\n"); - grammarBuilder.append("KW714 : 'KW' '714';\n"); - grammarBuilder.append("KW715 : 'KW' '715';\n"); - grammarBuilder.append("KW716 : 'KW' '716';\n"); - grammarBuilder.append("KW717 : 'KW' '717';\n"); - grammarBuilder.append("KW718 : 'KW' '718';\n"); - grammarBuilder.append("KW719 : 'KW' '719';\n"); - grammarBuilder.append("KW720 : 'KW' '720';\n"); - grammarBuilder.append("KW721 : 'KW' '721';\n"); - grammarBuilder.append("KW722 : 'KW' '722';\n"); - grammarBuilder.append("KW723 : 'KW' '723';\n"); - grammarBuilder.append("KW724 : 'KW' '724';\n"); - grammarBuilder.append("KW725 : 'KW' '725';\n"); - grammarBuilder.append("KW726 : 'KW' '726';\n"); - grammarBuilder.append("KW727 : 'KW' '727';\n"); - grammarBuilder.append("KW728 : 'KW' '728';\n"); - grammarBuilder.append("KW729 : 'KW' '729';\n"); - grammarBuilder.append("KW730 : 'KW' '730';\n"); - grammarBuilder.append("KW731 : 'KW' '731';\n"); - grammarBuilder.append("KW732 : 'KW' '732';\n"); - grammarBuilder.append("KW733 : 'KW' '733';\n"); - grammarBuilder.append("KW734 : 'KW' '734';\n"); - grammarBuilder.append("KW735 : 'KW' '735';\n"); - grammarBuilder.append("KW736 : 'KW' '736';\n"); - grammarBuilder.append("KW737 : 'KW' '737';\n"); - grammarBuilder.append("KW738 : 'KW' '738';\n"); - grammarBuilder.append("KW739 : 'KW' '739';\n"); - grammarBuilder.append("KW740 : 'KW' '740';\n"); - grammarBuilder.append("KW741 : 'KW' '741';\n"); - grammarBuilder.append("KW742 : 'KW' '742';\n"); - grammarBuilder.append("KW743 : 'KW' '743';\n"); - grammarBuilder.append("KW744 : 'KW' '744';\n"); - grammarBuilder.append("KW745 : 'KW' '745';\n"); - grammarBuilder.append("KW746 : 'KW' '746';\n"); - grammarBuilder.append("KW747 : 'KW' '747';\n"); - grammarBuilder.append("KW748 : 'KW' '748';\n"); - grammarBuilder.append("KW749 : 'KW' '749';\n"); - grammarBuilder.append("KW750 : 'KW' '750';\n"); - grammarBuilder.append("KW751 : 'KW' '751';\n"); - grammarBuilder.append("KW752 : 'KW' '752';\n"); - grammarBuilder.append("KW753 : 'KW' '753';\n"); - grammarBuilder.append("KW754 : 'KW' '754';\n"); - grammarBuilder.append("KW755 : 'KW' '755';\n"); - grammarBuilder.append("KW756 : 'KW' '756';\n"); - grammarBuilder.append("KW757 : 'KW' '757';\n"); - grammarBuilder.append("KW758 : 'KW' '758';\n"); - grammarBuilder.append("KW759 : 'KW' '759';\n"); - grammarBuilder.append("KW760 : 'KW' '760';\n"); - grammarBuilder.append("KW761 : 'KW' '761';\n"); - grammarBuilder.append("KW762 : 'KW' '762';\n"); - grammarBuilder.append("KW763 : 'KW' '763';\n"); - grammarBuilder.append("KW764 : 'KW' '764';\n"); - grammarBuilder.append("KW765 : 'KW' '765';\n"); - grammarBuilder.append("KW766 : 'KW' '766';\n"); - grammarBuilder.append("KW767 : 'KW' '767';\n"); - grammarBuilder.append("KW768 : 'KW' '768';\n"); - grammarBuilder.append("KW769 : 'KW' '769';\n"); - grammarBuilder.append("KW770 : 'KW' '770';\n"); - grammarBuilder.append("KW771 : 'KW' '771';\n"); - grammarBuilder.append("KW772 : 'KW' '772';\n"); - grammarBuilder.append("KW773 : 'KW' '773';\n"); - grammarBuilder.append("KW774 : 'KW' '774';\n"); - grammarBuilder.append("KW775 : 'KW' '775';\n"); - grammarBuilder.append("KW776 : 'KW' '776';\n"); - grammarBuilder.append("KW777 : 'KW' '777';\n"); - grammarBuilder.append("KW778 : 'KW' '778';\n"); - grammarBuilder.append("KW779 : 'KW' '779';\n"); - grammarBuilder.append("KW780 : 'KW' '780';\n"); - grammarBuilder.append("KW781 : 'KW' '781';\n"); - grammarBuilder.append("KW782 : 'KW' '782';\n"); - grammarBuilder.append("KW783 : 'KW' '783';\n"); - grammarBuilder.append("KW784 : 'KW' '784';\n"); - grammarBuilder.append("KW785 : 'KW' '785';\n"); - grammarBuilder.append("KW786 : 'KW' '786';\n"); - grammarBuilder.append("KW787 : 'KW' '787';\n"); - grammarBuilder.append("KW788 : 'KW' '788';\n"); - grammarBuilder.append("KW789 : 'KW' '789';\n"); - grammarBuilder.append("KW790 : 'KW' '790';\n"); - grammarBuilder.append("KW791 : 'KW' '791';\n"); - grammarBuilder.append("KW792 : 'KW' '792';\n"); - grammarBuilder.append("KW793 : 'KW' '793';\n"); - grammarBuilder.append("KW794 : 'KW' '794';\n"); - grammarBuilder.append("KW795 : 'KW' '795';\n"); - grammarBuilder.append("KW796 : 'KW' '796';\n"); - grammarBuilder.append("KW797 : 'KW' '797';\n"); - grammarBuilder.append("KW798 : 'KW' '798';\n"); - grammarBuilder.append("KW799 : 'KW' '799';\n"); - grammarBuilder.append("KW800 : 'KW' '800';\n"); - grammarBuilder.append("KW801 : 'KW' '801';\n"); - grammarBuilder.append("KW802 : 'KW' '802';\n"); - grammarBuilder.append("KW803 : 'KW' '803';\n"); - grammarBuilder.append("KW804 : 'KW' '804';\n"); - grammarBuilder.append("KW805 : 'KW' '805';\n"); - grammarBuilder.append("KW806 : 'KW' '806';\n"); - grammarBuilder.append("KW807 : 'KW' '807';\n"); - grammarBuilder.append("KW808 : 'KW' '808';\n"); - grammarBuilder.append("KW809 : 'KW' '809';\n"); - grammarBuilder.append("KW810 : 'KW' '810';\n"); - grammarBuilder.append("KW811 : 'KW' '811';\n"); - grammarBuilder.append("KW812 : 'KW' '812';\n"); - grammarBuilder.append("KW813 : 'KW' '813';\n"); - grammarBuilder.append("KW814 : 'KW' '814';\n"); - grammarBuilder.append("KW815 : 'KW' '815';\n"); - grammarBuilder.append("KW816 : 'KW' '816';\n"); - grammarBuilder.append("KW817 : 'KW' '817';\n"); - grammarBuilder.append("KW818 : 'KW' '818';\n"); - grammarBuilder.append("KW819 : 'KW' '819';\n"); - grammarBuilder.append("KW820 : 'KW' '820';\n"); - grammarBuilder.append("KW821 : 'KW' '821';\n"); - grammarBuilder.append("KW822 : 'KW' '822';\n"); - grammarBuilder.append("KW823 : 'KW' '823';\n"); - grammarBuilder.append("KW824 : 'KW' '824';\n"); - grammarBuilder.append("KW825 : 'KW' '825';\n"); - grammarBuilder.append("KW826 : 'KW' '826';\n"); - grammarBuilder.append("KW827 : 'KW' '827';\n"); - grammarBuilder.append("KW828 : 'KW' '828';\n"); - grammarBuilder.append("KW829 : 'KW' '829';\n"); - grammarBuilder.append("KW830 : 'KW' '830';\n"); - grammarBuilder.append("KW831 : 'KW' '831';\n"); - grammarBuilder.append("KW832 : 'KW' '832';\n"); - grammarBuilder.append("KW833 : 'KW' '833';\n"); - grammarBuilder.append("KW834 : 'KW' '834';\n"); - grammarBuilder.append("KW835 : 'KW' '835';\n"); - grammarBuilder.append("KW836 : 'KW' '836';\n"); - grammarBuilder.append("KW837 : 'KW' '837';\n"); - grammarBuilder.append("KW838 : 'KW' '838';\n"); - grammarBuilder.append("KW839 : 'KW' '839';\n"); - grammarBuilder.append("KW840 : 'KW' '840';\n"); - grammarBuilder.append("KW841 : 'KW' '841';\n"); - grammarBuilder.append("KW842 : 'KW' '842';\n"); - grammarBuilder.append("KW843 : 'KW' '843';\n"); - grammarBuilder.append("KW844 : 'KW' '844';\n"); - grammarBuilder.append("KW845 : 'KW' '845';\n"); - grammarBuilder.append("KW846 : 'KW' '846';\n"); - grammarBuilder.append("KW847 : 'KW' '847';\n"); - grammarBuilder.append("KW848 : 'KW' '848';\n"); - grammarBuilder.append("KW849 : 'KW' '849';\n"); - grammarBuilder.append("KW850 : 'KW' '850';\n"); - grammarBuilder.append("KW851 : 'KW' '851';\n"); - grammarBuilder.append("KW852 : 'KW' '852';\n"); - grammarBuilder.append("KW853 : 'KW' '853';\n"); - grammarBuilder.append("KW854 : 'KW' '854';\n"); - grammarBuilder.append("KW855 : 'KW' '855';\n"); - grammarBuilder.append("KW856 : 'KW' '856';\n"); - grammarBuilder.append("KW857 : 'KW' '857';\n"); - grammarBuilder.append("KW858 : 'KW' '858';\n"); - grammarBuilder.append("KW859 : 'KW' '859';\n"); - grammarBuilder.append("KW860 : 'KW' '860';\n"); - grammarBuilder.append("KW861 : 'KW' '861';\n"); - grammarBuilder.append("KW862 : 'KW' '862';\n"); - grammarBuilder.append("KW863 : 'KW' '863';\n"); - grammarBuilder.append("KW864 : 'KW' '864';\n"); - grammarBuilder.append("KW865 : 'KW' '865';\n"); - grammarBuilder.append("KW866 : 'KW' '866';\n"); - grammarBuilder.append("KW867 : 'KW' '867';\n"); - grammarBuilder.append("KW868 : 'KW' '868';\n"); - grammarBuilder.append("KW869 : 'KW' '869';\n"); - grammarBuilder.append("KW870 : 'KW' '870';\n"); - grammarBuilder.append("KW871 : 'KW' '871';\n"); - grammarBuilder.append("KW872 : 'KW' '872';\n"); - grammarBuilder.append("KW873 : 'KW' '873';\n"); - grammarBuilder.append("KW874 : 'KW' '874';\n"); - grammarBuilder.append("KW875 : 'KW' '875';\n"); - grammarBuilder.append("KW876 : 'KW' '876';\n"); - grammarBuilder.append("KW877 : 'KW' '877';\n"); - grammarBuilder.append("KW878 : 'KW' '878';\n"); - grammarBuilder.append("KW879 : 'KW' '879';\n"); - grammarBuilder.append("KW880 : 'KW' '880';\n"); - grammarBuilder.append("KW881 : 'KW' '881';\n"); - grammarBuilder.append("KW882 : 'KW' '882';\n"); - grammarBuilder.append("KW883 : 'KW' '883';\n"); - grammarBuilder.append("KW884 : 'KW' '884';\n"); - grammarBuilder.append("KW885 : 'KW' '885';\n"); - grammarBuilder.append("KW886 : 'KW' '886';\n"); - grammarBuilder.append("KW887 : 'KW' '887';\n"); - grammarBuilder.append("KW888 : 'KW' '888';\n"); - grammarBuilder.append("KW889 : 'KW' '889';\n"); - grammarBuilder.append("KW890 : 'KW' '890';\n"); - grammarBuilder.append("KW891 : 'KW' '891';\n"); - grammarBuilder.append("KW892 : 'KW' '892';\n"); - grammarBuilder.append("KW893 : 'KW' '893';\n"); - grammarBuilder.append("KW894 : 'KW' '894';\n"); - grammarBuilder.append("KW895 : 'KW' '895';\n"); - grammarBuilder.append("KW896 : 'KW' '896';\n"); - grammarBuilder.append("KW897 : 'KW' '897';\n"); - grammarBuilder.append("KW898 : 'KW' '898';\n"); - grammarBuilder.append("KW899 : 'KW' '899';\n"); - grammarBuilder.append("KW900 : 'KW' '900';\n"); - grammarBuilder.append("KW901 : 'KW' '901';\n"); - grammarBuilder.append("KW902 : 'KW' '902';\n"); - grammarBuilder.append("KW903 : 'KW' '903';\n"); - grammarBuilder.append("KW904 : 'KW' '904';\n"); - grammarBuilder.append("KW905 : 'KW' '905';\n"); - grammarBuilder.append("KW906 : 'KW' '906';\n"); - grammarBuilder.append("KW907 : 'KW' '907';\n"); - grammarBuilder.append("KW908 : 'KW' '908';\n"); - grammarBuilder.append("KW909 : 'KW' '909';\n"); - grammarBuilder.append("KW910 : 'KW' '910';\n"); - grammarBuilder.append("KW911 : 'KW' '911';\n"); - grammarBuilder.append("KW912 : 'KW' '912';\n"); - grammarBuilder.append("KW913 : 'KW' '913';\n"); - grammarBuilder.append("KW914 : 'KW' '914';\n"); - grammarBuilder.append("KW915 : 'KW' '915';\n"); - grammarBuilder.append("KW916 : 'KW' '916';\n"); - grammarBuilder.append("KW917 : 'KW' '917';\n"); - grammarBuilder.append("KW918 : 'KW' '918';\n"); - grammarBuilder.append("KW919 : 'KW' '919';\n"); - grammarBuilder.append("KW920 : 'KW' '920';\n"); - grammarBuilder.append("KW921 : 'KW' '921';\n"); - grammarBuilder.append("KW922 : 'KW' '922';\n"); - grammarBuilder.append("KW923 : 'KW' '923';\n"); - grammarBuilder.append("KW924 : 'KW' '924';\n"); - grammarBuilder.append("KW925 : 'KW' '925';\n"); - grammarBuilder.append("KW926 : 'KW' '926';\n"); - grammarBuilder.append("KW927 : 'KW' '927';\n"); - grammarBuilder.append("KW928 : 'KW' '928';\n"); - grammarBuilder.append("KW929 : 'KW' '929';\n"); - grammarBuilder.append("KW930 : 'KW' '930';\n"); - grammarBuilder.append("KW931 : 'KW' '931';\n"); - grammarBuilder.append("KW932 : 'KW' '932';\n"); - grammarBuilder.append("KW933 : 'KW' '933';\n"); - grammarBuilder.append("KW934 : 'KW' '934';\n"); - grammarBuilder.append("KW935 : 'KW' '935';\n"); - grammarBuilder.append("KW936 : 'KW' '936';\n"); - grammarBuilder.append("KW937 : 'KW' '937';\n"); - grammarBuilder.append("KW938 : 'KW' '938';\n"); - grammarBuilder.append("KW939 : 'KW' '939';\n"); - grammarBuilder.append("KW940 : 'KW' '940';\n"); - grammarBuilder.append("KW941 : 'KW' '941';\n"); - grammarBuilder.append("KW942 : 'KW' '942';\n"); - grammarBuilder.append("KW943 : 'KW' '943';\n"); - grammarBuilder.append("KW944 : 'KW' '944';\n"); - grammarBuilder.append("KW945 : 'KW' '945';\n"); - grammarBuilder.append("KW946 : 'KW' '946';\n"); - grammarBuilder.append("KW947 : 'KW' '947';\n"); - grammarBuilder.append("KW948 : 'KW' '948';\n"); - grammarBuilder.append("KW949 : 'KW' '949';\n"); - grammarBuilder.append("KW950 : 'KW' '950';\n"); - grammarBuilder.append("KW951 : 'KW' '951';\n"); - grammarBuilder.append("KW952 : 'KW' '952';\n"); - grammarBuilder.append("KW953 : 'KW' '953';\n"); - grammarBuilder.append("KW954 : 'KW' '954';\n"); - grammarBuilder.append("KW955 : 'KW' '955';\n"); - grammarBuilder.append("KW956 : 'KW' '956';\n"); - grammarBuilder.append("KW957 : 'KW' '957';\n"); - grammarBuilder.append("KW958 : 'KW' '958';\n"); - grammarBuilder.append("KW959 : 'KW' '959';\n"); - grammarBuilder.append("KW960 : 'KW' '960';\n"); - grammarBuilder.append("KW961 : 'KW' '961';\n"); - grammarBuilder.append("KW962 : 'KW' '962';\n"); - grammarBuilder.append("KW963 : 'KW' '963';\n"); - grammarBuilder.append("KW964 : 'KW' '964';\n"); - grammarBuilder.append("KW965 : 'KW' '965';\n"); - grammarBuilder.append("KW966 : 'KW' '966';\n"); - grammarBuilder.append("KW967 : 'KW' '967';\n"); - grammarBuilder.append("KW968 : 'KW' '968';\n"); - grammarBuilder.append("KW969 : 'KW' '969';\n"); - grammarBuilder.append("KW970 : 'KW' '970';\n"); - grammarBuilder.append("KW971 : 'KW' '971';\n"); - grammarBuilder.append("KW972 : 'KW' '972';\n"); - grammarBuilder.append("KW973 : 'KW' '973';\n"); - grammarBuilder.append("KW974 : 'KW' '974';\n"); - grammarBuilder.append("KW975 : 'KW' '975';\n"); - grammarBuilder.append("KW976 : 'KW' '976';\n"); - grammarBuilder.append("KW977 : 'KW' '977';\n"); - grammarBuilder.append("KW978 : 'KW' '978';\n"); - grammarBuilder.append("KW979 : 'KW' '979';\n"); - grammarBuilder.append("KW980 : 'KW' '980';\n"); - grammarBuilder.append("KW981 : 'KW' '981';\n"); - grammarBuilder.append("KW982 : 'KW' '982';\n"); - grammarBuilder.append("KW983 : 'KW' '983';\n"); - grammarBuilder.append("KW984 : 'KW' '984';\n"); - grammarBuilder.append("KW985 : 'KW' '985';\n"); - grammarBuilder.append("KW986 : 'KW' '986';\n"); - grammarBuilder.append("KW987 : 'KW' '987';\n"); - grammarBuilder.append("KW988 : 'KW' '988';\n"); - grammarBuilder.append("KW989 : 'KW' '989';\n"); - grammarBuilder.append("KW990 : 'KW' '990';\n"); - grammarBuilder.append("KW991 : 'KW' '991';\n"); - grammarBuilder.append("KW992 : 'KW' '992';\n"); - grammarBuilder.append("KW993 : 'KW' '993';\n"); - grammarBuilder.append("KW994 : 'KW' '994';\n"); - grammarBuilder.append("KW995 : 'KW' '995';\n"); - grammarBuilder.append("KW996 : 'KW' '996';\n"); - grammarBuilder.append("KW997 : 'KW' '997';\n"); - grammarBuilder.append("KW998 : 'KW' '998';\n"); - grammarBuilder.append("KW999 : 'KW' '999';\n"); - grammarBuilder.append("KW1000 : 'KW' '1000';\n"); - grammarBuilder.append("KW1001 : 'KW' '1001';\n"); - grammarBuilder.append("KW1002 : 'KW' '1002';\n"); - grammarBuilder.append("KW1003 : 'KW' '1003';\n"); - grammarBuilder.append("KW1004 : 'KW' '1004';\n"); - grammarBuilder.append("KW1005 : 'KW' '1005';\n"); - grammarBuilder.append("KW1006 : 'KW' '1006';\n"); - grammarBuilder.append("KW1007 : 'KW' '1007';\n"); - grammarBuilder.append("KW1008 : 'KW' '1008';\n"); - grammarBuilder.append("KW1009 : 'KW' '1009';\n"); - grammarBuilder.append("KW1010 : 'KW' '1010';\n"); - grammarBuilder.append("KW1011 : 'KW' '1011';\n"); - grammarBuilder.append("KW1012 : 'KW' '1012';\n"); - grammarBuilder.append("KW1013 : 'KW' '1013';\n"); - grammarBuilder.append("KW1014 : 'KW' '1014';\n"); - grammarBuilder.append("KW1015 : 'KW' '1015';\n"); - grammarBuilder.append("KW1016 : 'KW' '1016';\n"); - grammarBuilder.append("KW1017 : 'KW' '1017';\n"); - grammarBuilder.append("KW1018 : 'KW' '1018';\n"); - grammarBuilder.append("KW1019 : 'KW' '1019';\n"); - grammarBuilder.append("KW1020 : 'KW' '1020';\n"); - grammarBuilder.append("KW1021 : 'KW' '1021';\n"); - grammarBuilder.append("KW1022 : 'KW' '1022';\n"); - grammarBuilder.append("KW1023 : 'KW' '1023';\n"); - grammarBuilder.append("KW1024 : 'KW' '1024';\n"); - grammarBuilder.append("KW1025 : 'KW' '1025';\n"); - grammarBuilder.append("KW1026 : 'KW' '1026';\n"); - grammarBuilder.append("KW1027 : 'KW' '1027';\n"); - grammarBuilder.append("KW1028 : 'KW' '1028';\n"); - grammarBuilder.append("KW1029 : 'KW' '1029';\n"); - grammarBuilder.append("KW1030 : 'KW' '1030';\n"); - grammarBuilder.append("KW1031 : 'KW' '1031';\n"); - grammarBuilder.append("KW1032 : 'KW' '1032';\n"); - grammarBuilder.append("KW1033 : 'KW' '1033';\n"); - grammarBuilder.append("KW1034 : 'KW' '1034';\n"); - grammarBuilder.append("KW1035 : 'KW' '1035';\n"); - grammarBuilder.append("KW1036 : 'KW' '1036';\n"); - grammarBuilder.append("KW1037 : 'KW' '1037';\n"); - grammarBuilder.append("KW1038 : 'KW' '1038';\n"); - grammarBuilder.append("KW1039 : 'KW' '1039';\n"); - grammarBuilder.append("KW1040 : 'KW' '1040';\n"); - grammarBuilder.append("KW1041 : 'KW' '1041';\n"); - grammarBuilder.append("KW1042 : 'KW' '1042';\n"); - grammarBuilder.append("KW1043 : 'KW' '1043';\n"); - grammarBuilder.append("KW1044 : 'KW' '1044';\n"); - grammarBuilder.append("KW1045 : 'KW' '1045';\n"); - grammarBuilder.append("KW1046 : 'KW' '1046';\n"); - grammarBuilder.append("KW1047 : 'KW' '1047';\n"); - grammarBuilder.append("KW1048 : 'KW' '1048';\n"); - grammarBuilder.append("KW1049 : 'KW' '1049';\n"); - grammarBuilder.append("KW1050 : 'KW' '1050';\n"); - grammarBuilder.append("KW1051 : 'KW' '1051';\n"); - grammarBuilder.append("KW1052 : 'KW' '1052';\n"); - grammarBuilder.append("KW1053 : 'KW' '1053';\n"); - grammarBuilder.append("KW1054 : 'KW' '1054';\n"); - grammarBuilder.append("KW1055 : 'KW' '1055';\n"); - grammarBuilder.append("KW1056 : 'KW' '1056';\n"); - grammarBuilder.append("KW1057 : 'KW' '1057';\n"); - grammarBuilder.append("KW1058 : 'KW' '1058';\n"); - grammarBuilder.append("KW1059 : 'KW' '1059';\n"); - grammarBuilder.append("KW1060 : 'KW' '1060';\n"); - grammarBuilder.append("KW1061 : 'KW' '1061';\n"); - grammarBuilder.append("KW1062 : 'KW' '1062';\n"); - grammarBuilder.append("KW1063 : 'KW' '1063';\n"); - grammarBuilder.append("KW1064 : 'KW' '1064';\n"); - grammarBuilder.append("KW1065 : 'KW' '1065';\n"); - grammarBuilder.append("KW1066 : 'KW' '1066';\n"); - grammarBuilder.append("KW1067 : 'KW' '1067';\n"); - grammarBuilder.append("KW1068 : 'KW' '1068';\n"); - grammarBuilder.append("KW1069 : 'KW' '1069';\n"); - grammarBuilder.append("KW1070 : 'KW' '1070';\n"); - grammarBuilder.append("KW1071 : 'KW' '1071';\n"); - grammarBuilder.append("KW1072 : 'KW' '1072';\n"); - grammarBuilder.append("KW1073 : 'KW' '1073';\n"); - grammarBuilder.append("KW1074 : 'KW' '1074';\n"); - grammarBuilder.append("KW1075 : 'KW' '1075';\n"); - grammarBuilder.append("KW1076 : 'KW' '1076';\n"); - grammarBuilder.append("KW1077 : 'KW' '1077';\n"); - grammarBuilder.append("KW1078 : 'KW' '1078';\n"); - grammarBuilder.append("KW1079 : 'KW' '1079';\n"); - grammarBuilder.append("KW1080 : 'KW' '1080';\n"); - grammarBuilder.append("KW1081 : 'KW' '1081';\n"); - grammarBuilder.append("KW1082 : 'KW' '1082';\n"); - grammarBuilder.append("KW1083 : 'KW' '1083';\n"); - grammarBuilder.append("KW1084 : 'KW' '1084';\n"); - grammarBuilder.append("KW1085 : 'KW' '1085';\n"); - grammarBuilder.append("KW1086 : 'KW' '1086';\n"); - grammarBuilder.append("KW1087 : 'KW' '1087';\n"); - grammarBuilder.append("KW1088 : 'KW' '1088';\n"); - grammarBuilder.append("KW1089 : 'KW' '1089';\n"); - grammarBuilder.append("KW1090 : 'KW' '1090';\n"); - grammarBuilder.append("KW1091 : 'KW' '1091';\n"); - grammarBuilder.append("KW1092 : 'KW' '1092';\n"); - grammarBuilder.append("KW1093 : 'KW' '1093';\n"); - grammarBuilder.append("KW1094 : 'KW' '1094';\n"); - grammarBuilder.append("KW1095 : 'KW' '1095';\n"); - grammarBuilder.append("KW1096 : 'KW' '1096';\n"); - grammarBuilder.append("KW1097 : 'KW' '1097';\n"); - grammarBuilder.append("KW1098 : 'KW' '1098';\n"); - grammarBuilder.append("KW1099 : 'KW' '1099';\n"); - grammarBuilder.append("KW1100 : 'KW' '1100';\n"); - grammarBuilder.append("KW1101 : 'KW' '1101';\n"); - grammarBuilder.append("KW1102 : 'KW' '1102';\n"); - grammarBuilder.append("KW1103 : 'KW' '1103';\n"); - grammarBuilder.append("KW1104 : 'KW' '1104';\n"); - grammarBuilder.append("KW1105 : 'KW' '1105';\n"); - grammarBuilder.append("KW1106 : 'KW' '1106';\n"); - grammarBuilder.append("KW1107 : 'KW' '1107';\n"); - grammarBuilder.append("KW1108 : 'KW' '1108';\n"); - grammarBuilder.append("KW1109 : 'KW' '1109';\n"); - grammarBuilder.append("KW1110 : 'KW' '1110';\n"); - grammarBuilder.append("KW1111 : 'KW' '1111';\n"); - grammarBuilder.append("KW1112 : 'KW' '1112';\n"); - grammarBuilder.append("KW1113 : 'KW' '1113';\n"); - grammarBuilder.append("KW1114 : 'KW' '1114';\n"); - grammarBuilder.append("KW1115 : 'KW' '1115';\n"); - grammarBuilder.append("KW1116 : 'KW' '1116';\n"); - grammarBuilder.append("KW1117 : 'KW' '1117';\n"); - grammarBuilder.append("KW1118 : 'KW' '1118';\n"); - grammarBuilder.append("KW1119 : 'KW' '1119';\n"); - grammarBuilder.append("KW1120 : 'KW' '1120';\n"); - grammarBuilder.append("KW1121 : 'KW' '1121';\n"); - grammarBuilder.append("KW1122 : 'KW' '1122';\n"); - grammarBuilder.append("KW1123 : 'KW' '1123';\n"); - grammarBuilder.append("KW1124 : 'KW' '1124';\n"); - grammarBuilder.append("KW1125 : 'KW' '1125';\n"); - grammarBuilder.append("KW1126 : 'KW' '1126';\n"); - grammarBuilder.append("KW1127 : 'KW' '1127';\n"); - grammarBuilder.append("KW1128 : 'KW' '1128';\n"); - grammarBuilder.append("KW1129 : 'KW' '1129';\n"); - grammarBuilder.append("KW1130 : 'KW' '1130';\n"); - grammarBuilder.append("KW1131 : 'KW' '1131';\n"); - grammarBuilder.append("KW1132 : 'KW' '1132';\n"); - grammarBuilder.append("KW1133 : 'KW' '1133';\n"); - grammarBuilder.append("KW1134 : 'KW' '1134';\n"); - grammarBuilder.append("KW1135 : 'KW' '1135';\n"); - grammarBuilder.append("KW1136 : 'KW' '1136';\n"); - grammarBuilder.append("KW1137 : 'KW' '1137';\n"); - grammarBuilder.append("KW1138 : 'KW' '1138';\n"); - grammarBuilder.append("KW1139 : 'KW' '1139';\n"); - grammarBuilder.append("KW1140 : 'KW' '1140';\n"); - grammarBuilder.append("KW1141 : 'KW' '1141';\n"); - grammarBuilder.append("KW1142 : 'KW' '1142';\n"); - grammarBuilder.append("KW1143 : 'KW' '1143';\n"); - grammarBuilder.append("KW1144 : 'KW' '1144';\n"); - grammarBuilder.append("KW1145 : 'KW' '1145';\n"); - grammarBuilder.append("KW1146 : 'KW' '1146';\n"); - grammarBuilder.append("KW1147 : 'KW' '1147';\n"); - grammarBuilder.append("KW1148 : 'KW' '1148';\n"); - grammarBuilder.append("KW1149 : 'KW' '1149';\n"); - grammarBuilder.append("KW1150 : 'KW' '1150';\n"); - grammarBuilder.append("KW1151 : 'KW' '1151';\n"); - grammarBuilder.append("KW1152 : 'KW' '1152';\n"); - grammarBuilder.append("KW1153 : 'KW' '1153';\n"); - grammarBuilder.append("KW1154 : 'KW' '1154';\n"); - grammarBuilder.append("KW1155 : 'KW' '1155';\n"); - grammarBuilder.append("KW1156 : 'KW' '1156';\n"); - grammarBuilder.append("KW1157 : 'KW' '1157';\n"); - grammarBuilder.append("KW1158 : 'KW' '1158';\n"); - grammarBuilder.append("KW1159 : 'KW' '1159';\n"); - grammarBuilder.append("KW1160 : 'KW' '1160';\n"); - grammarBuilder.append("KW1161 : 'KW' '1161';\n"); - grammarBuilder.append("KW1162 : 'KW' '1162';\n"); - grammarBuilder.append("KW1163 : 'KW' '1163';\n"); - grammarBuilder.append("KW1164 : 'KW' '1164';\n"); - grammarBuilder.append("KW1165 : 'KW' '1165';\n"); - grammarBuilder.append("KW1166 : 'KW' '1166';\n"); - grammarBuilder.append("KW1167 : 'KW' '1167';\n"); - grammarBuilder.append("KW1168 : 'KW' '1168';\n"); - grammarBuilder.append("KW1169 : 'KW' '1169';\n"); - grammarBuilder.append("KW1170 : 'KW' '1170';\n"); - grammarBuilder.append("KW1171 : 'KW' '1171';\n"); - grammarBuilder.append("KW1172 : 'KW' '1172';\n"); - grammarBuilder.append("KW1173 : 'KW' '1173';\n"); - grammarBuilder.append("KW1174 : 'KW' '1174';\n"); - grammarBuilder.append("KW1175 : 'KW' '1175';\n"); - grammarBuilder.append("KW1176 : 'KW' '1176';\n"); - grammarBuilder.append("KW1177 : 'KW' '1177';\n"); - grammarBuilder.append("KW1178 : 'KW' '1178';\n"); - grammarBuilder.append("KW1179 : 'KW' '1179';\n"); - grammarBuilder.append("KW1180 : 'KW' '1180';\n"); - grammarBuilder.append("KW1181 : 'KW' '1181';\n"); - grammarBuilder.append("KW1182 : 'KW' '1182';\n"); - grammarBuilder.append("KW1183 : 'KW' '1183';\n"); - grammarBuilder.append("KW1184 : 'KW' '1184';\n"); - grammarBuilder.append("KW1185 : 'KW' '1185';\n"); - grammarBuilder.append("KW1186 : 'KW' '1186';\n"); - grammarBuilder.append("KW1187 : 'KW' '1187';\n"); - grammarBuilder.append("KW1188 : 'KW' '1188';\n"); - grammarBuilder.append("KW1189 : 'KW' '1189';\n"); - grammarBuilder.append("KW1190 : 'KW' '1190';\n"); - grammarBuilder.append("KW1191 : 'KW' '1191';\n"); - grammarBuilder.append("KW1192 : 'KW' '1192';\n"); - grammarBuilder.append("KW1193 : 'KW' '1193';\n"); - grammarBuilder.append("KW1194 : 'KW' '1194';\n"); - grammarBuilder.append("KW1195 : 'KW' '1195';\n"); - grammarBuilder.append("KW1196 : 'KW' '1196';\n"); - grammarBuilder.append("KW1197 : 'KW' '1197';\n"); - grammarBuilder.append("KW1198 : 'KW' '1198';\n"); - grammarBuilder.append("KW1199 : 'KW' '1199';\n"); - grammarBuilder.append("KW1200 : 'KW' '1200';\n"); - grammarBuilder.append("KW1201 : 'KW' '1201';\n"); - grammarBuilder.append("KW1202 : 'KW' '1202';\n"); - grammarBuilder.append("KW1203 : 'KW' '1203';\n"); - grammarBuilder.append("KW1204 : 'KW' '1204';\n"); - grammarBuilder.append("KW1205 : 'KW' '1205';\n"); - grammarBuilder.append("KW1206 : 'KW' '1206';\n"); - grammarBuilder.append("KW1207 : 'KW' '1207';\n"); - grammarBuilder.append("KW1208 : 'KW' '1208';\n"); - grammarBuilder.append("KW1209 : 'KW' '1209';\n"); - grammarBuilder.append("KW1210 : 'KW' '1210';\n"); - grammarBuilder.append("KW1211 : 'KW' '1211';\n"); - grammarBuilder.append("KW1212 : 'KW' '1212';\n"); - grammarBuilder.append("KW1213 : 'KW' '1213';\n"); - grammarBuilder.append("KW1214 : 'KW' '1214';\n"); - grammarBuilder.append("KW1215 : 'KW' '1215';\n"); - grammarBuilder.append("KW1216 : 'KW' '1216';\n"); - grammarBuilder.append("KW1217 : 'KW' '1217';\n"); - grammarBuilder.append("KW1218 : 'KW' '1218';\n"); - grammarBuilder.append("KW1219 : 'KW' '1219';\n"); - grammarBuilder.append("KW1220 : 'KW' '1220';\n"); - grammarBuilder.append("KW1221 : 'KW' '1221';\n"); - grammarBuilder.append("KW1222 : 'KW' '1222';\n"); - grammarBuilder.append("KW1223 : 'KW' '1223';\n"); - grammarBuilder.append("KW1224 : 'KW' '1224';\n"); - grammarBuilder.append("KW1225 : 'KW' '1225';\n"); - grammarBuilder.append("KW1226 : 'KW' '1226';\n"); - grammarBuilder.append("KW1227 : 'KW' '1227';\n"); - grammarBuilder.append("KW1228 : 'KW' '1228';\n"); - grammarBuilder.append("KW1229 : 'KW' '1229';\n"); - grammarBuilder.append("KW1230 : 'KW' '1230';\n"); - grammarBuilder.append("KW1231 : 'KW' '1231';\n"); - grammarBuilder.append("KW1232 : 'KW' '1232';\n"); - grammarBuilder.append("KW1233 : 'KW' '1233';\n"); - grammarBuilder.append("KW1234 : 'KW' '1234';\n"); - grammarBuilder.append("KW1235 : 'KW' '1235';\n"); - grammarBuilder.append("KW1236 : 'KW' '1236';\n"); - grammarBuilder.append("KW1237 : 'KW' '1237';\n"); - grammarBuilder.append("KW1238 : 'KW' '1238';\n"); - grammarBuilder.append("KW1239 : 'KW' '1239';\n"); - grammarBuilder.append("KW1240 : 'KW' '1240';\n"); - grammarBuilder.append("KW1241 : 'KW' '1241';\n"); - grammarBuilder.append("KW1242 : 'KW' '1242';\n"); - grammarBuilder.append("KW1243 : 'KW' '1243';\n"); - grammarBuilder.append("KW1244 : 'KW' '1244';\n"); - grammarBuilder.append("KW1245 : 'KW' '1245';\n"); - grammarBuilder.append("KW1246 : 'KW' '1246';\n"); - grammarBuilder.append("KW1247 : 'KW' '1247';\n"); - grammarBuilder.append("KW1248 : 'KW' '1248';\n"); - grammarBuilder.append("KW1249 : 'KW' '1249';\n"); - grammarBuilder.append("KW1250 : 'KW' '1250';\n"); - grammarBuilder.append("KW1251 : 'KW' '1251';\n"); - grammarBuilder.append("KW1252 : 'KW' '1252';\n"); - grammarBuilder.append("KW1253 : 'KW' '1253';\n"); - grammarBuilder.append("KW1254 : 'KW' '1254';\n"); - grammarBuilder.append("KW1255 : 'KW' '1255';\n"); - grammarBuilder.append("KW1256 : 'KW' '1256';\n"); - grammarBuilder.append("KW1257 : 'KW' '1257';\n"); - grammarBuilder.append("KW1258 : 'KW' '1258';\n"); - grammarBuilder.append("KW1259 : 'KW' '1259';\n"); - grammarBuilder.append("KW1260 : 'KW' '1260';\n"); - grammarBuilder.append("KW1261 : 'KW' '1261';\n"); - grammarBuilder.append("KW1262 : 'KW' '1262';\n"); - grammarBuilder.append("KW1263 : 'KW' '1263';\n"); - grammarBuilder.append("KW1264 : 'KW' '1264';\n"); - grammarBuilder.append("KW1265 : 'KW' '1265';\n"); - grammarBuilder.append("KW1266 : 'KW' '1266';\n"); - grammarBuilder.append("KW1267 : 'KW' '1267';\n"); - grammarBuilder.append("KW1268 : 'KW' '1268';\n"); - grammarBuilder.append("KW1269 : 'KW' '1269';\n"); - grammarBuilder.append("KW1270 : 'KW' '1270';\n"); - grammarBuilder.append("KW1271 : 'KW' '1271';\n"); - grammarBuilder.append("KW1272 : 'KW' '1272';\n"); - grammarBuilder.append("KW1273 : 'KW' '1273';\n"); - grammarBuilder.append("KW1274 : 'KW' '1274';\n"); - grammarBuilder.append("KW1275 : 'KW' '1275';\n"); - grammarBuilder.append("KW1276 : 'KW' '1276';\n"); - grammarBuilder.append("KW1277 : 'KW' '1277';\n"); - grammarBuilder.append("KW1278 : 'KW' '1278';\n"); - grammarBuilder.append("KW1279 : 'KW' '1279';\n"); - grammarBuilder.append("KW1280 : 'KW' '1280';\n"); - grammarBuilder.append("KW1281 : 'KW' '1281';\n"); - grammarBuilder.append("KW1282 : 'KW' '1282';\n"); - grammarBuilder.append("KW1283 : 'KW' '1283';\n"); - grammarBuilder.append("KW1284 : 'KW' '1284';\n"); - grammarBuilder.append("KW1285 : 'KW' '1285';\n"); - grammarBuilder.append("KW1286 : 'KW' '1286';\n"); - grammarBuilder.append("KW1287 : 'KW' '1287';\n"); - grammarBuilder.append("KW1288 : 'KW' '1288';\n"); - grammarBuilder.append("KW1289 : 'KW' '1289';\n"); - grammarBuilder.append("KW1290 : 'KW' '1290';\n"); - grammarBuilder.append("KW1291 : 'KW' '1291';\n"); - grammarBuilder.append("KW1292 : 'KW' '1292';\n"); - grammarBuilder.append("KW1293 : 'KW' '1293';\n"); - grammarBuilder.append("KW1294 : 'KW' '1294';\n"); - grammarBuilder.append("KW1295 : 'KW' '1295';\n"); - grammarBuilder.append("KW1296 : 'KW' '1296';\n"); - grammarBuilder.append("KW1297 : 'KW' '1297';\n"); - grammarBuilder.append("KW1298 : 'KW' '1298';\n"); - grammarBuilder.append("KW1299 : 'KW' '1299';\n"); - grammarBuilder.append("KW1300 : 'KW' '1300';\n"); - grammarBuilder.append("KW1301 : 'KW' '1301';\n"); - grammarBuilder.append("KW1302 : 'KW' '1302';\n"); - grammarBuilder.append("KW1303 : 'KW' '1303';\n"); - grammarBuilder.append("KW1304 : 'KW' '1304';\n"); - grammarBuilder.append("KW1305 : 'KW' '1305';\n"); - grammarBuilder.append("KW1306 : 'KW' '1306';\n"); - grammarBuilder.append("KW1307 : 'KW' '1307';\n"); - grammarBuilder.append("KW1308 : 'KW' '1308';\n"); - grammarBuilder.append("KW1309 : 'KW' '1309';\n"); - grammarBuilder.append("KW1310 : 'KW' '1310';\n"); - grammarBuilder.append("KW1311 : 'KW' '1311';\n"); - grammarBuilder.append("KW1312 : 'KW' '1312';\n"); - grammarBuilder.append("KW1313 : 'KW' '1313';\n"); - grammarBuilder.append("KW1314 : 'KW' '1314';\n"); - grammarBuilder.append("KW1315 : 'KW' '1315';\n"); - grammarBuilder.append("KW1316 : 'KW' '1316';\n"); - grammarBuilder.append("KW1317 : 'KW' '1317';\n"); - grammarBuilder.append("KW1318 : 'KW' '1318';\n"); - grammarBuilder.append("KW1319 : 'KW' '1319';\n"); - grammarBuilder.append("KW1320 : 'KW' '1320';\n"); - grammarBuilder.append("KW1321 : 'KW' '1321';\n"); - grammarBuilder.append("KW1322 : 'KW' '1322';\n"); - grammarBuilder.append("KW1323 : 'KW' '1323';\n"); - grammarBuilder.append("KW1324 : 'KW' '1324';\n"); - grammarBuilder.append("KW1325 : 'KW' '1325';\n"); - grammarBuilder.append("KW1326 : 'KW' '1326';\n"); - grammarBuilder.append("KW1327 : 'KW' '1327';\n"); - grammarBuilder.append("KW1328 : 'KW' '1328';\n"); - grammarBuilder.append("KW1329 : 'KW' '1329';\n"); - grammarBuilder.append("KW1330 : 'KW' '1330';\n"); - grammarBuilder.append("KW1331 : 'KW' '1331';\n"); - grammarBuilder.append("KW1332 : 'KW' '1332';\n"); - grammarBuilder.append("KW1333 : 'KW' '1333';\n"); - grammarBuilder.append("KW1334 : 'KW' '1334';\n"); - grammarBuilder.append("KW1335 : 'KW' '1335';\n"); - grammarBuilder.append("KW1336 : 'KW' '1336';\n"); - grammarBuilder.append("KW1337 : 'KW' '1337';\n"); - grammarBuilder.append("KW1338 : 'KW' '1338';\n"); - grammarBuilder.append("KW1339 : 'KW' '1339';\n"); - grammarBuilder.append("KW1340 : 'KW' '1340';\n"); - grammarBuilder.append("KW1341 : 'KW' '1341';\n"); - grammarBuilder.append("KW1342 : 'KW' '1342';\n"); - grammarBuilder.append("KW1343 : 'KW' '1343';\n"); - grammarBuilder.append("KW1344 : 'KW' '1344';\n"); - grammarBuilder.append("KW1345 : 'KW' '1345';\n"); - grammarBuilder.append("KW1346 : 'KW' '1346';\n"); - grammarBuilder.append("KW1347 : 'KW' '1347';\n"); - grammarBuilder.append("KW1348 : 'KW' '1348';\n"); - grammarBuilder.append("KW1349 : 'KW' '1349';\n"); - grammarBuilder.append("KW1350 : 'KW' '1350';\n"); - grammarBuilder.append("KW1351 : 'KW' '1351';\n"); - grammarBuilder.append("KW1352 : 'KW' '1352';\n"); - grammarBuilder.append("KW1353 : 'KW' '1353';\n"); - grammarBuilder.append("KW1354 : 'KW' '1354';\n"); - grammarBuilder.append("KW1355 : 'KW' '1355';\n"); - grammarBuilder.append("KW1356 : 'KW' '1356';\n"); - grammarBuilder.append("KW1357 : 'KW' '1357';\n"); - grammarBuilder.append("KW1358 : 'KW' '1358';\n"); - grammarBuilder.append("KW1359 : 'KW' '1359';\n"); - grammarBuilder.append("KW1360 : 'KW' '1360';\n"); - grammarBuilder.append("KW1361 : 'KW' '1361';\n"); - grammarBuilder.append("KW1362 : 'KW' '1362';\n"); - grammarBuilder.append("KW1363 : 'KW' '1363';\n"); - grammarBuilder.append("KW1364 : 'KW' '1364';\n"); - grammarBuilder.append("KW1365 : 'KW' '1365';\n"); - grammarBuilder.append("KW1366 : 'KW' '1366';\n"); - grammarBuilder.append("KW1367 : 'KW' '1367';\n"); - grammarBuilder.append("KW1368 : 'KW' '1368';\n"); - grammarBuilder.append("KW1369 : 'KW' '1369';\n"); - grammarBuilder.append("KW1370 : 'KW' '1370';\n"); - grammarBuilder.append("KW1371 : 'KW' '1371';\n"); - grammarBuilder.append("KW1372 : 'KW' '1372';\n"); - grammarBuilder.append("KW1373 : 'KW' '1373';\n"); - grammarBuilder.append("KW1374 : 'KW' '1374';\n"); - grammarBuilder.append("KW1375 : 'KW' '1375';\n"); - grammarBuilder.append("KW1376 : 'KW' '1376';\n"); - grammarBuilder.append("KW1377 : 'KW' '1377';\n"); - grammarBuilder.append("KW1378 : 'KW' '1378';\n"); - grammarBuilder.append("KW1379 : 'KW' '1379';\n"); - grammarBuilder.append("KW1380 : 'KW' '1380';\n"); - grammarBuilder.append("KW1381 : 'KW' '1381';\n"); - grammarBuilder.append("KW1382 : 'KW' '1382';\n"); - grammarBuilder.append("KW1383 : 'KW' '1383';\n"); - grammarBuilder.append("KW1384 : 'KW' '1384';\n"); - grammarBuilder.append("KW1385 : 'KW' '1385';\n"); - grammarBuilder.append("KW1386 : 'KW' '1386';\n"); - grammarBuilder.append("KW1387 : 'KW' '1387';\n"); - grammarBuilder.append("KW1388 : 'KW' '1388';\n"); - grammarBuilder.append("KW1389 : 'KW' '1389';\n"); - grammarBuilder.append("KW1390 : 'KW' '1390';\n"); - grammarBuilder.append("KW1391 : 'KW' '1391';\n"); - grammarBuilder.append("KW1392 : 'KW' '1392';\n"); - grammarBuilder.append("KW1393 : 'KW' '1393';\n"); - grammarBuilder.append("KW1394 : 'KW' '1394';\n"); - grammarBuilder.append("KW1395 : 'KW' '1395';\n"); - grammarBuilder.append("KW1396 : 'KW' '1396';\n"); - grammarBuilder.append("KW1397 : 'KW' '1397';\n"); - grammarBuilder.append("KW1398 : 'KW' '1398';\n"); - grammarBuilder.append("KW1399 : 'KW' '1399';\n"); - grammarBuilder.append("KW1400 : 'KW' '1400';\n"); - grammarBuilder.append("KW1401 : 'KW' '1401';\n"); - grammarBuilder.append("KW1402 : 'KW' '1402';\n"); - grammarBuilder.append("KW1403 : 'KW' '1403';\n"); - grammarBuilder.append("KW1404 : 'KW' '1404';\n"); - grammarBuilder.append("KW1405 : 'KW' '1405';\n"); - grammarBuilder.append("KW1406 : 'KW' '1406';\n"); - grammarBuilder.append("KW1407 : 'KW' '1407';\n"); - grammarBuilder.append("KW1408 : 'KW' '1408';\n"); - grammarBuilder.append("KW1409 : 'KW' '1409';\n"); - grammarBuilder.append("KW1410 : 'KW' '1410';\n"); - grammarBuilder.append("KW1411 : 'KW' '1411';\n"); - grammarBuilder.append("KW1412 : 'KW' '1412';\n"); - grammarBuilder.append("KW1413 : 'KW' '1413';\n"); - grammarBuilder.append("KW1414 : 'KW' '1414';\n"); - grammarBuilder.append("KW1415 : 'KW' '1415';\n"); - grammarBuilder.append("KW1416 : 'KW' '1416';\n"); - grammarBuilder.append("KW1417 : 'KW' '1417';\n"); - grammarBuilder.append("KW1418 : 'KW' '1418';\n"); - grammarBuilder.append("KW1419 : 'KW' '1419';\n"); - grammarBuilder.append("KW1420 : 'KW' '1420';\n"); - grammarBuilder.append("KW1421 : 'KW' '1421';\n"); - grammarBuilder.append("KW1422 : 'KW' '1422';\n"); - grammarBuilder.append("KW1423 : 'KW' '1423';\n"); - grammarBuilder.append("KW1424 : 'KW' '1424';\n"); - grammarBuilder.append("KW1425 : 'KW' '1425';\n"); - grammarBuilder.append("KW1426 : 'KW' '1426';\n"); - grammarBuilder.append("KW1427 : 'KW' '1427';\n"); - grammarBuilder.append("KW1428 : 'KW' '1428';\n"); - grammarBuilder.append("KW1429 : 'KW' '1429';\n"); - grammarBuilder.append("KW1430 : 'KW' '1430';\n"); - grammarBuilder.append("KW1431 : 'KW' '1431';\n"); - grammarBuilder.append("KW1432 : 'KW' '1432';\n"); - grammarBuilder.append("KW1433 : 'KW' '1433';\n"); - grammarBuilder.append("KW1434 : 'KW' '1434';\n"); - grammarBuilder.append("KW1435 : 'KW' '1435';\n"); - grammarBuilder.append("KW1436 : 'KW' '1436';\n"); - grammarBuilder.append("KW1437 : 'KW' '1437';\n"); - grammarBuilder.append("KW1438 : 'KW' '1438';\n"); - grammarBuilder.append("KW1439 : 'KW' '1439';\n"); - grammarBuilder.append("KW1440 : 'KW' '1440';\n"); - grammarBuilder.append("KW1441 : 'KW' '1441';\n"); - grammarBuilder.append("KW1442 : 'KW' '1442';\n"); - grammarBuilder.append("KW1443 : 'KW' '1443';\n"); - grammarBuilder.append("KW1444 : 'KW' '1444';\n"); - grammarBuilder.append("KW1445 : 'KW' '1445';\n"); - grammarBuilder.append("KW1446 : 'KW' '1446';\n"); - grammarBuilder.append("KW1447 : 'KW' '1447';\n"); - grammarBuilder.append("KW1448 : 'KW' '1448';\n"); - grammarBuilder.append("KW1449 : 'KW' '1449';\n"); - grammarBuilder.append("KW1450 : 'KW' '1450';\n"); - grammarBuilder.append("KW1451 : 'KW' '1451';\n"); - grammarBuilder.append("KW1452 : 'KW' '1452';\n"); - grammarBuilder.append("KW1453 : 'KW' '1453';\n"); - grammarBuilder.append("KW1454 : 'KW' '1454';\n"); - grammarBuilder.append("KW1455 : 'KW' '1455';\n"); - grammarBuilder.append("KW1456 : 'KW' '1456';\n"); - grammarBuilder.append("KW1457 : 'KW' '1457';\n"); - grammarBuilder.append("KW1458 : 'KW' '1458';\n"); - grammarBuilder.append("KW1459 : 'KW' '1459';\n"); - grammarBuilder.append("KW1460 : 'KW' '1460';\n"); - grammarBuilder.append("KW1461 : 'KW' '1461';\n"); - grammarBuilder.append("KW1462 : 'KW' '1462';\n"); - grammarBuilder.append("KW1463 : 'KW' '1463';\n"); - grammarBuilder.append("KW1464 : 'KW' '1464';\n"); - grammarBuilder.append("KW1465 : 'KW' '1465';\n"); - grammarBuilder.append("KW1466 : 'KW' '1466';\n"); - grammarBuilder.append("KW1467 : 'KW' '1467';\n"); - grammarBuilder.append("KW1468 : 'KW' '1468';\n"); - grammarBuilder.append("KW1469 : 'KW' '1469';\n"); - grammarBuilder.append("KW1470 : 'KW' '1470';\n"); - grammarBuilder.append("KW1471 : 'KW' '1471';\n"); - grammarBuilder.append("KW1472 : 'KW' '1472';\n"); - grammarBuilder.append("KW1473 : 'KW' '1473';\n"); - grammarBuilder.append("KW1474 : 'KW' '1474';\n"); - grammarBuilder.append("KW1475 : 'KW' '1475';\n"); - grammarBuilder.append("KW1476 : 'KW' '1476';\n"); - grammarBuilder.append("KW1477 : 'KW' '1477';\n"); - grammarBuilder.append("KW1478 : 'KW' '1478';\n"); - grammarBuilder.append("KW1479 : 'KW' '1479';\n"); - grammarBuilder.append("KW1480 : 'KW' '1480';\n"); - grammarBuilder.append("KW1481 : 'KW' '1481';\n"); - grammarBuilder.append("KW1482 : 'KW' '1482';\n"); - grammarBuilder.append("KW1483 : 'KW' '1483';\n"); - grammarBuilder.append("KW1484 : 'KW' '1484';\n"); - grammarBuilder.append("KW1485 : 'KW' '1485';\n"); - grammarBuilder.append("KW1486 : 'KW' '1486';\n"); - grammarBuilder.append("KW1487 : 'KW' '1487';\n"); - grammarBuilder.append("KW1488 : 'KW' '1488';\n"); - grammarBuilder.append("KW1489 : 'KW' '1489';\n"); - grammarBuilder.append("KW1490 : 'KW' '1490';\n"); - grammarBuilder.append("KW1491 : 'KW' '1491';\n"); - grammarBuilder.append("KW1492 : 'KW' '1492';\n"); - grammarBuilder.append("KW1493 : 'KW' '1493';\n"); - grammarBuilder.append("KW1494 : 'KW' '1494';\n"); - grammarBuilder.append("KW1495 : 'KW' '1495';\n"); - grammarBuilder.append("KW1496 : 'KW' '1496';\n"); - grammarBuilder.append("KW1497 : 'KW' '1497';\n"); - grammarBuilder.append("KW1498 : 'KW' '1498';\n"); - grammarBuilder.append("KW1499 : 'KW' '1499';\n"); - grammarBuilder.append("KW1500 : 'KW' '1500';\n"); - grammarBuilder.append("KW1501 : 'KW' '1501';\n"); - grammarBuilder.append("KW1502 : 'KW' '1502';\n"); - grammarBuilder.append("KW1503 : 'KW' '1503';\n"); - grammarBuilder.append("KW1504 : 'KW' '1504';\n"); - grammarBuilder.append("KW1505 : 'KW' '1505';\n"); - grammarBuilder.append("KW1506 : 'KW' '1506';\n"); - grammarBuilder.append("KW1507 : 'KW' '1507';\n"); - grammarBuilder.append("KW1508 : 'KW' '1508';\n"); - grammarBuilder.append("KW1509 : 'KW' '1509';\n"); - grammarBuilder.append("KW1510 : 'KW' '1510';\n"); - grammarBuilder.append("KW1511 : 'KW' '1511';\n"); - grammarBuilder.append("KW1512 : 'KW' '1512';\n"); - grammarBuilder.append("KW1513 : 'KW' '1513';\n"); - grammarBuilder.append("KW1514 : 'KW' '1514';\n"); - grammarBuilder.append("KW1515 : 'KW' '1515';\n"); - grammarBuilder.append("KW1516 : 'KW' '1516';\n"); - grammarBuilder.append("KW1517 : 'KW' '1517';\n"); - grammarBuilder.append("KW1518 : 'KW' '1518';\n"); - grammarBuilder.append("KW1519 : 'KW' '1519';\n"); - grammarBuilder.append("KW1520 : 'KW' '1520';\n"); - grammarBuilder.append("KW1521 : 'KW' '1521';\n"); - grammarBuilder.append("KW1522 : 'KW' '1522';\n"); - grammarBuilder.append("KW1523 : 'KW' '1523';\n"); - grammarBuilder.append("KW1524 : 'KW' '1524';\n"); - grammarBuilder.append("KW1525 : 'KW' '1525';\n"); - grammarBuilder.append("KW1526 : 'KW' '1526';\n"); - grammarBuilder.append("KW1527 : 'KW' '1527';\n"); - grammarBuilder.append("KW1528 : 'KW' '1528';\n"); - grammarBuilder.append("KW1529 : 'KW' '1529';\n"); - grammarBuilder.append("KW1530 : 'KW' '1530';\n"); - grammarBuilder.append("KW1531 : 'KW' '1531';\n"); - grammarBuilder.append("KW1532 : 'KW' '1532';\n"); - grammarBuilder.append("KW1533 : 'KW' '1533';\n"); - grammarBuilder.append("KW1534 : 'KW' '1534';\n"); - grammarBuilder.append("KW1535 : 'KW' '1535';\n"); - grammarBuilder.append("KW1536 : 'KW' '1536';\n"); - grammarBuilder.append("KW1537 : 'KW' '1537';\n"); - grammarBuilder.append("KW1538 : 'KW' '1538';\n"); - grammarBuilder.append("KW1539 : 'KW' '1539';\n"); - grammarBuilder.append("KW1540 : 'KW' '1540';\n"); - grammarBuilder.append("KW1541 : 'KW' '1541';\n"); - grammarBuilder.append("KW1542 : 'KW' '1542';\n"); - grammarBuilder.append("KW1543 : 'KW' '1543';\n"); - grammarBuilder.append("KW1544 : 'KW' '1544';\n"); - grammarBuilder.append("KW1545 : 'KW' '1545';\n"); - grammarBuilder.append("KW1546 : 'KW' '1546';\n"); - grammarBuilder.append("KW1547 : 'KW' '1547';\n"); - grammarBuilder.append("KW1548 : 'KW' '1548';\n"); - grammarBuilder.append("KW1549 : 'KW' '1549';\n"); - grammarBuilder.append("KW1550 : 'KW' '1550';\n"); - grammarBuilder.append("KW1551 : 'KW' '1551';\n"); - grammarBuilder.append("KW1552 : 'KW' '1552';\n"); - grammarBuilder.append("KW1553 : 'KW' '1553';\n"); - grammarBuilder.append("KW1554 : 'KW' '1554';\n"); - grammarBuilder.append("KW1555 : 'KW' '1555';\n"); - grammarBuilder.append("KW1556 : 'KW' '1556';\n"); - grammarBuilder.append("KW1557 : 'KW' '1557';\n"); - grammarBuilder.append("KW1558 : 'KW' '1558';\n"); - grammarBuilder.append("KW1559 : 'KW' '1559';\n"); - grammarBuilder.append("KW1560 : 'KW' '1560';\n"); - grammarBuilder.append("KW1561 : 'KW' '1561';\n"); - grammarBuilder.append("KW1562 : 'KW' '1562';\n"); - grammarBuilder.append("KW1563 : 'KW' '1563';\n"); - grammarBuilder.append("KW1564 : 'KW' '1564';\n"); - grammarBuilder.append("KW1565 : 'KW' '1565';\n"); - grammarBuilder.append("KW1566 : 'KW' '1566';\n"); - grammarBuilder.append("KW1567 : 'KW' '1567';\n"); - grammarBuilder.append("KW1568 : 'KW' '1568';\n"); - grammarBuilder.append("KW1569 : 'KW' '1569';\n"); - grammarBuilder.append("KW1570 : 'KW' '1570';\n"); - grammarBuilder.append("KW1571 : 'KW' '1571';\n"); - grammarBuilder.append("KW1572 : 'KW' '1572';\n"); - grammarBuilder.append("KW1573 : 'KW' '1573';\n"); - grammarBuilder.append("KW1574 : 'KW' '1574';\n"); - grammarBuilder.append("KW1575 : 'KW' '1575';\n"); - grammarBuilder.append("KW1576 : 'KW' '1576';\n"); - grammarBuilder.append("KW1577 : 'KW' '1577';\n"); - grammarBuilder.append("KW1578 : 'KW' '1578';\n"); - grammarBuilder.append("KW1579 : 'KW' '1579';\n"); - grammarBuilder.append("KW1580 : 'KW' '1580';\n"); - grammarBuilder.append("KW1581 : 'KW' '1581';\n"); - grammarBuilder.append("KW1582 : 'KW' '1582';\n"); - grammarBuilder.append("KW1583 : 'KW' '1583';\n"); - grammarBuilder.append("KW1584 : 'KW' '1584';\n"); - grammarBuilder.append("KW1585 : 'KW' '1585';\n"); - grammarBuilder.append("KW1586 : 'KW' '1586';\n"); - grammarBuilder.append("KW1587 : 'KW' '1587';\n"); - grammarBuilder.append("KW1588 : 'KW' '1588';\n"); - grammarBuilder.append("KW1589 : 'KW' '1589';\n"); - grammarBuilder.append("KW1590 : 'KW' '1590';\n"); - grammarBuilder.append("KW1591 : 'KW' '1591';\n"); - grammarBuilder.append("KW1592 : 'KW' '1592';\n"); - grammarBuilder.append("KW1593 : 'KW' '1593';\n"); - grammarBuilder.append("KW1594 : 'KW' '1594';\n"); - grammarBuilder.append("KW1595 : 'KW' '1595';\n"); - grammarBuilder.append("KW1596 : 'KW' '1596';\n"); - grammarBuilder.append("KW1597 : 'KW' '1597';\n"); - grammarBuilder.append("KW1598 : 'KW' '1598';\n"); - grammarBuilder.append("KW1599 : 'KW' '1599';\n"); - grammarBuilder.append("KW1600 : 'KW' '1600';\n"); - grammarBuilder.append("KW1601 : 'KW' '1601';\n"); - grammarBuilder.append("KW1602 : 'KW' '1602';\n"); - grammarBuilder.append("KW1603 : 'KW' '1603';\n"); - grammarBuilder.append("KW1604 : 'KW' '1604';\n"); - grammarBuilder.append("KW1605 : 'KW' '1605';\n"); - grammarBuilder.append("KW1606 : 'KW' '1606';\n"); - grammarBuilder.append("KW1607 : 'KW' '1607';\n"); - grammarBuilder.append("KW1608 : 'KW' '1608';\n"); - grammarBuilder.append("KW1609 : 'KW' '1609';\n"); - grammarBuilder.append("KW1610 : 'KW' '1610';\n"); - grammarBuilder.append("KW1611 : 'KW' '1611';\n"); - grammarBuilder.append("KW1612 : 'KW' '1612';\n"); - grammarBuilder.append("KW1613 : 'KW' '1613';\n"); - grammarBuilder.append("KW1614 : 'KW' '1614';\n"); - grammarBuilder.append("KW1615 : 'KW' '1615';\n"); - grammarBuilder.append("KW1616 : 'KW' '1616';\n"); - grammarBuilder.append("KW1617 : 'KW' '1617';\n"); - grammarBuilder.append("KW1618 : 'KW' '1618';\n"); - grammarBuilder.append("KW1619 : 'KW' '1619';\n"); - grammarBuilder.append("KW1620 : 'KW' '1620';\n"); - grammarBuilder.append("KW1621 : 'KW' '1621';\n"); - grammarBuilder.append("KW1622 : 'KW' '1622';\n"); - grammarBuilder.append("KW1623 : 'KW' '1623';\n"); - grammarBuilder.append("KW1624 : 'KW' '1624';\n"); - grammarBuilder.append("KW1625 : 'KW' '1625';\n"); - grammarBuilder.append("KW1626 : 'KW' '1626';\n"); - grammarBuilder.append("KW1627 : 'KW' '1627';\n"); - grammarBuilder.append("KW1628 : 'KW' '1628';\n"); - grammarBuilder.append("KW1629 : 'KW' '1629';\n"); - grammarBuilder.append("KW1630 : 'KW' '1630';\n"); - grammarBuilder.append("KW1631 : 'KW' '1631';\n"); - grammarBuilder.append("KW1632 : 'KW' '1632';\n"); - grammarBuilder.append("KW1633 : 'KW' '1633';\n"); - grammarBuilder.append("KW1634 : 'KW' '1634';\n"); - grammarBuilder.append("KW1635 : 'KW' '1635';\n"); - grammarBuilder.append("KW1636 : 'KW' '1636';\n"); - grammarBuilder.append("KW1637 : 'KW' '1637';\n"); - grammarBuilder.append("KW1638 : 'KW' '1638';\n"); - grammarBuilder.append("KW1639 : 'KW' '1639';\n"); - grammarBuilder.append("KW1640 : 'KW' '1640';\n"); - grammarBuilder.append("KW1641 : 'KW' '1641';\n"); - grammarBuilder.append("KW1642 : 'KW' '1642';\n"); - grammarBuilder.append("KW1643 : 'KW' '1643';\n"); - grammarBuilder.append("KW1644 : 'KW' '1644';\n"); - grammarBuilder.append("KW1645 : 'KW' '1645';\n"); - grammarBuilder.append("KW1646 : 'KW' '1646';\n"); - grammarBuilder.append("KW1647 : 'KW' '1647';\n"); - grammarBuilder.append("KW1648 : 'KW' '1648';\n"); - grammarBuilder.append("KW1649 : 'KW' '1649';\n"); - grammarBuilder.append("KW1650 : 'KW' '1650';\n"); - grammarBuilder.append("KW1651 : 'KW' '1651';\n"); - grammarBuilder.append("KW1652 : 'KW' '1652';\n"); - grammarBuilder.append("KW1653 : 'KW' '1653';\n"); - grammarBuilder.append("KW1654 : 'KW' '1654';\n"); - grammarBuilder.append("KW1655 : 'KW' '1655';\n"); - grammarBuilder.append("KW1656 : 'KW' '1656';\n"); - grammarBuilder.append("KW1657 : 'KW' '1657';\n"); - grammarBuilder.append("KW1658 : 'KW' '1658';\n"); - grammarBuilder.append("KW1659 : 'KW' '1659';\n"); - grammarBuilder.append("KW1660 : 'KW' '1660';\n"); - grammarBuilder.append("KW1661 : 'KW' '1661';\n"); - grammarBuilder.append("KW1662 : 'KW' '1662';\n"); - grammarBuilder.append("KW1663 : 'KW' '1663';\n"); - grammarBuilder.append("KW1664 : 'KW' '1664';\n"); - grammarBuilder.append("KW1665 : 'KW' '1665';\n"); - grammarBuilder.append("KW1666 : 'KW' '1666';\n"); - grammarBuilder.append("KW1667 : 'KW' '1667';\n"); - grammarBuilder.append("KW1668 : 'KW' '1668';\n"); - grammarBuilder.append("KW1669 : 'KW' '1669';\n"); - grammarBuilder.append("KW1670 : 'KW' '1670';\n"); - grammarBuilder.append("KW1671 : 'KW' '1671';\n"); - grammarBuilder.append("KW1672 : 'KW' '1672';\n"); - grammarBuilder.append("KW1673 : 'KW' '1673';\n"); - grammarBuilder.append("KW1674 : 'KW' '1674';\n"); - grammarBuilder.append("KW1675 : 'KW' '1675';\n"); - grammarBuilder.append("KW1676 : 'KW' '1676';\n"); - grammarBuilder.append("KW1677 : 'KW' '1677';\n"); - grammarBuilder.append("KW1678 : 'KW' '1678';\n"); - grammarBuilder.append("KW1679 : 'KW' '1679';\n"); - grammarBuilder.append("KW1680 : 'KW' '1680';\n"); - grammarBuilder.append("KW1681 : 'KW' '1681';\n"); - grammarBuilder.append("KW1682 : 'KW' '1682';\n"); - grammarBuilder.append("KW1683 : 'KW' '1683';\n"); - grammarBuilder.append("KW1684 : 'KW' '1684';\n"); - grammarBuilder.append("KW1685 : 'KW' '1685';\n"); - grammarBuilder.append("KW1686 : 'KW' '1686';\n"); - grammarBuilder.append("KW1687 : 'KW' '1687';\n"); - grammarBuilder.append("KW1688 : 'KW' '1688';\n"); - grammarBuilder.append("KW1689 : 'KW' '1689';\n"); - grammarBuilder.append("KW1690 : 'KW' '1690';\n"); - grammarBuilder.append("KW1691 : 'KW' '1691';\n"); - grammarBuilder.append("KW1692 : 'KW' '1692';\n"); - grammarBuilder.append("KW1693 : 'KW' '1693';\n"); - grammarBuilder.append("KW1694 : 'KW' '1694';\n"); - grammarBuilder.append("KW1695 : 'KW' '1695';\n"); - grammarBuilder.append("KW1696 : 'KW' '1696';\n"); - grammarBuilder.append("KW1697 : 'KW' '1697';\n"); - grammarBuilder.append("KW1698 : 'KW' '1698';\n"); - grammarBuilder.append("KW1699 : 'KW' '1699';\n"); - grammarBuilder.append("KW1700 : 'KW' '1700';\n"); - grammarBuilder.append("KW1701 : 'KW' '1701';\n"); - grammarBuilder.append("KW1702 : 'KW' '1702';\n"); - grammarBuilder.append("KW1703 : 'KW' '1703';\n"); - grammarBuilder.append("KW1704 : 'KW' '1704';\n"); - grammarBuilder.append("KW1705 : 'KW' '1705';\n"); - grammarBuilder.append("KW1706 : 'KW' '1706';\n"); - grammarBuilder.append("KW1707 : 'KW' '1707';\n"); - grammarBuilder.append("KW1708 : 'KW' '1708';\n"); - grammarBuilder.append("KW1709 : 'KW' '1709';\n"); - grammarBuilder.append("KW1710 : 'KW' '1710';\n"); - grammarBuilder.append("KW1711 : 'KW' '1711';\n"); - grammarBuilder.append("KW1712 : 'KW' '1712';\n"); - grammarBuilder.append("KW1713 : 'KW' '1713';\n"); - grammarBuilder.append("KW1714 : 'KW' '1714';\n"); - grammarBuilder.append("KW1715 : 'KW' '1715';\n"); - grammarBuilder.append("KW1716 : 'KW' '1716';\n"); - grammarBuilder.append("KW1717 : 'KW' '1717';\n"); - grammarBuilder.append("KW1718 : 'KW' '1718';\n"); - grammarBuilder.append("KW1719 : 'KW' '1719';\n"); - grammarBuilder.append("KW1720 : 'KW' '1720';\n"); - grammarBuilder.append("KW1721 : 'KW' '1721';\n"); - grammarBuilder.append("KW1722 : 'KW' '1722';\n"); - grammarBuilder.append("KW1723 : 'KW' '1723';\n"); - grammarBuilder.append("KW1724 : 'KW' '1724';\n"); - grammarBuilder.append("KW1725 : 'KW' '1725';\n"); - grammarBuilder.append("KW1726 : 'KW' '1726';\n"); - grammarBuilder.append("KW1727 : 'KW' '1727';\n"); - grammarBuilder.append("KW1728 : 'KW' '1728';\n"); - grammarBuilder.append("KW1729 : 'KW' '1729';\n"); - grammarBuilder.append("KW1730 : 'KW' '1730';\n"); - grammarBuilder.append("KW1731 : 'KW' '1731';\n"); - grammarBuilder.append("KW1732 : 'KW' '1732';\n"); - grammarBuilder.append("KW1733 : 'KW' '1733';\n"); - grammarBuilder.append("KW1734 : 'KW' '1734';\n"); - grammarBuilder.append("KW1735 : 'KW' '1735';\n"); - grammarBuilder.append("KW1736 : 'KW' '1736';\n"); - grammarBuilder.append("KW1737 : 'KW' '1737';\n"); - grammarBuilder.append("KW1738 : 'KW' '1738';\n"); - grammarBuilder.append("KW1739 : 'KW' '1739';\n"); - grammarBuilder.append("KW1740 : 'KW' '1740';\n"); - grammarBuilder.append("KW1741 : 'KW' '1741';\n"); - grammarBuilder.append("KW1742 : 'KW' '1742';\n"); - grammarBuilder.append("KW1743 : 'KW' '1743';\n"); - grammarBuilder.append("KW1744 : 'KW' '1744';\n"); - grammarBuilder.append("KW1745 : 'KW' '1745';\n"); - grammarBuilder.append("KW1746 : 'KW' '1746';\n"); - grammarBuilder.append("KW1747 : 'KW' '1747';\n"); - grammarBuilder.append("KW1748 : 'KW' '1748';\n"); - grammarBuilder.append("KW1749 : 'KW' '1749';\n"); - grammarBuilder.append("KW1750 : 'KW' '1750';\n"); - grammarBuilder.append("KW1751 : 'KW' '1751';\n"); - grammarBuilder.append("KW1752 : 'KW' '1752';\n"); - grammarBuilder.append("KW1753 : 'KW' '1753';\n"); - grammarBuilder.append("KW1754 : 'KW' '1754';\n"); - grammarBuilder.append("KW1755 : 'KW' '1755';\n"); - grammarBuilder.append("KW1756 : 'KW' '1756';\n"); - grammarBuilder.append("KW1757 : 'KW' '1757';\n"); - grammarBuilder.append("KW1758 : 'KW' '1758';\n"); - grammarBuilder.append("KW1759 : 'KW' '1759';\n"); - grammarBuilder.append("KW1760 : 'KW' '1760';\n"); - grammarBuilder.append("KW1761 : 'KW' '1761';\n"); - grammarBuilder.append("KW1762 : 'KW' '1762';\n"); - grammarBuilder.append("KW1763 : 'KW' '1763';\n"); - grammarBuilder.append("KW1764 : 'KW' '1764';\n"); - grammarBuilder.append("KW1765 : 'KW' '1765';\n"); - grammarBuilder.append("KW1766 : 'KW' '1766';\n"); - grammarBuilder.append("KW1767 : 'KW' '1767';\n"); - grammarBuilder.append("KW1768 : 'KW' '1768';\n"); - grammarBuilder.append("KW1769 : 'KW' '1769';\n"); - grammarBuilder.append("KW1770 : 'KW' '1770';\n"); - grammarBuilder.append("KW1771 : 'KW' '1771';\n"); - grammarBuilder.append("KW1772 : 'KW' '1772';\n"); - grammarBuilder.append("KW1773 : 'KW' '1773';\n"); - grammarBuilder.append("KW1774 : 'KW' '1774';\n"); - grammarBuilder.append("KW1775 : 'KW' '1775';\n"); - grammarBuilder.append("KW1776 : 'KW' '1776';\n"); - grammarBuilder.append("KW1777 : 'KW' '1777';\n"); - grammarBuilder.append("KW1778 : 'KW' '1778';\n"); - grammarBuilder.append("KW1779 : 'KW' '1779';\n"); - grammarBuilder.append("KW1780 : 'KW' '1780';\n"); - grammarBuilder.append("KW1781 : 'KW' '1781';\n"); - grammarBuilder.append("KW1782 : 'KW' '1782';\n"); - grammarBuilder.append("KW1783 : 'KW' '1783';\n"); - grammarBuilder.append("KW1784 : 'KW' '1784';\n"); - grammarBuilder.append("KW1785 : 'KW' '1785';\n"); - grammarBuilder.append("KW1786 : 'KW' '1786';\n"); - grammarBuilder.append("KW1787 : 'KW' '1787';\n"); - grammarBuilder.append("KW1788 : 'KW' '1788';\n"); - grammarBuilder.append("KW1789 : 'KW' '1789';\n"); - grammarBuilder.append("KW1790 : 'KW' '1790';\n"); - grammarBuilder.append("KW1791 : 'KW' '1791';\n"); - grammarBuilder.append("KW1792 : 'KW' '1792';\n"); - grammarBuilder.append("KW1793 : 'KW' '1793';\n"); - grammarBuilder.append("KW1794 : 'KW' '1794';\n"); - grammarBuilder.append("KW1795 : 'KW' '1795';\n"); - grammarBuilder.append("KW1796 : 'KW' '1796';\n"); - grammarBuilder.append("KW1797 : 'KW' '1797';\n"); - grammarBuilder.append("KW1798 : 'KW' '1798';\n"); - grammarBuilder.append("KW1799 : 'KW' '1799';\n"); - grammarBuilder.append("KW1800 : 'KW' '1800';\n"); - grammarBuilder.append("KW1801 : 'KW' '1801';\n"); - grammarBuilder.append("KW1802 : 'KW' '1802';\n"); - grammarBuilder.append("KW1803 : 'KW' '1803';\n"); - grammarBuilder.append("KW1804 : 'KW' '1804';\n"); - grammarBuilder.append("KW1805 : 'KW' '1805';\n"); - grammarBuilder.append("KW1806 : 'KW' '1806';\n"); - grammarBuilder.append("KW1807 : 'KW' '1807';\n"); - grammarBuilder.append("KW1808 : 'KW' '1808';\n"); - grammarBuilder.append("KW1809 : 'KW' '1809';\n"); - grammarBuilder.append("KW1810 : 'KW' '1810';\n"); - grammarBuilder.append("KW1811 : 'KW' '1811';\n"); - grammarBuilder.append("KW1812 : 'KW' '1812';\n"); - grammarBuilder.append("KW1813 : 'KW' '1813';\n"); - grammarBuilder.append("KW1814 : 'KW' '1814';\n"); - grammarBuilder.append("KW1815 : 'KW' '1815';\n"); - grammarBuilder.append("KW1816 : 'KW' '1816';\n"); - grammarBuilder.append("KW1817 : 'KW' '1817';\n"); - grammarBuilder.append("KW1818 : 'KW' '1818';\n"); - grammarBuilder.append("KW1819 : 'KW' '1819';\n"); - grammarBuilder.append("KW1820 : 'KW' '1820';\n"); - grammarBuilder.append("KW1821 : 'KW' '1821';\n"); - grammarBuilder.append("KW1822 : 'KW' '1822';\n"); - grammarBuilder.append("KW1823 : 'KW' '1823';\n"); - grammarBuilder.append("KW1824 : 'KW' '1824';\n"); - grammarBuilder.append("KW1825 : 'KW' '1825';\n"); - grammarBuilder.append("KW1826 : 'KW' '1826';\n"); - grammarBuilder.append("KW1827 : 'KW' '1827';\n"); - grammarBuilder.append("KW1828 : 'KW' '1828';\n"); - grammarBuilder.append("KW1829 : 'KW' '1829';\n"); - grammarBuilder.append("KW1830 : 'KW' '1830';\n"); - grammarBuilder.append("KW1831 : 'KW' '1831';\n"); - grammarBuilder.append("KW1832 : 'KW' '1832';\n"); - grammarBuilder.append("KW1833 : 'KW' '1833';\n"); - grammarBuilder.append("KW1834 : 'KW' '1834';\n"); - grammarBuilder.append("KW1835 : 'KW' '1835';\n"); - grammarBuilder.append("KW1836 : 'KW' '1836';\n"); - grammarBuilder.append("KW1837 : 'KW' '1837';\n"); - grammarBuilder.append("KW1838 : 'KW' '1838';\n"); - grammarBuilder.append("KW1839 : 'KW' '1839';\n"); - grammarBuilder.append("KW1840 : 'KW' '1840';\n"); - grammarBuilder.append("KW1841 : 'KW' '1841';\n"); - grammarBuilder.append("KW1842 : 'KW' '1842';\n"); - grammarBuilder.append("KW1843 : 'KW' '1843';\n"); - grammarBuilder.append("KW1844 : 'KW' '1844';\n"); - grammarBuilder.append("KW1845 : 'KW' '1845';\n"); - grammarBuilder.append("KW1846 : 'KW' '1846';\n"); - grammarBuilder.append("KW1847 : 'KW' '1847';\n"); - grammarBuilder.append("KW1848 : 'KW' '1848';\n"); - grammarBuilder.append("KW1849 : 'KW' '1849';\n"); - grammarBuilder.append("KW1850 : 'KW' '1850';\n"); - grammarBuilder.append("KW1851 : 'KW' '1851';\n"); - grammarBuilder.append("KW1852 : 'KW' '1852';\n"); - grammarBuilder.append("KW1853 : 'KW' '1853';\n"); - grammarBuilder.append("KW1854 : 'KW' '1854';\n"); - grammarBuilder.append("KW1855 : 'KW' '1855';\n"); - grammarBuilder.append("KW1856 : 'KW' '1856';\n"); - grammarBuilder.append("KW1857 : 'KW' '1857';\n"); - grammarBuilder.append("KW1858 : 'KW' '1858';\n"); - grammarBuilder.append("KW1859 : 'KW' '1859';\n"); - grammarBuilder.append("KW1860 : 'KW' '1860';\n"); - grammarBuilder.append("KW1861 : 'KW' '1861';\n"); - grammarBuilder.append("KW1862 : 'KW' '1862';\n"); - grammarBuilder.append("KW1863 : 'KW' '1863';\n"); - grammarBuilder.append("KW1864 : 'KW' '1864';\n"); - grammarBuilder.append("KW1865 : 'KW' '1865';\n"); - grammarBuilder.append("KW1866 : 'KW' '1866';\n"); - grammarBuilder.append("KW1867 : 'KW' '1867';\n"); - grammarBuilder.append("KW1868 : 'KW' '1868';\n"); - grammarBuilder.append("KW1869 : 'KW' '1869';\n"); - grammarBuilder.append("KW1870 : 'KW' '1870';\n"); - grammarBuilder.append("KW1871 : 'KW' '1871';\n"); - grammarBuilder.append("KW1872 : 'KW' '1872';\n"); - grammarBuilder.append("KW1873 : 'KW' '1873';\n"); - grammarBuilder.append("KW1874 : 'KW' '1874';\n"); - grammarBuilder.append("KW1875 : 'KW' '1875';\n"); - grammarBuilder.append("KW1876 : 'KW' '1876';\n"); - grammarBuilder.append("KW1877 : 'KW' '1877';\n"); - grammarBuilder.append("KW1878 : 'KW' '1878';\n"); - grammarBuilder.append("KW1879 : 'KW' '1879';\n"); - grammarBuilder.append("KW1880 : 'KW' '1880';\n"); - grammarBuilder.append("KW1881 : 'KW' '1881';\n"); - grammarBuilder.append("KW1882 : 'KW' '1882';\n"); - grammarBuilder.append("KW1883 : 'KW' '1883';\n"); - grammarBuilder.append("KW1884 : 'KW' '1884';\n"); - grammarBuilder.append("KW1885 : 'KW' '1885';\n"); - grammarBuilder.append("KW1886 : 'KW' '1886';\n"); - grammarBuilder.append("KW1887 : 'KW' '1887';\n"); - grammarBuilder.append("KW1888 : 'KW' '1888';\n"); - grammarBuilder.append("KW1889 : 'KW' '1889';\n"); - grammarBuilder.append("KW1890 : 'KW' '1890';\n"); - grammarBuilder.append("KW1891 : 'KW' '1891';\n"); - grammarBuilder.append("KW1892 : 'KW' '1892';\n"); - grammarBuilder.append("KW1893 : 'KW' '1893';\n"); - grammarBuilder.append("KW1894 : 'KW' '1894';\n"); - grammarBuilder.append("KW1895 : 'KW' '1895';\n"); - grammarBuilder.append("KW1896 : 'KW' '1896';\n"); - grammarBuilder.append("KW1897 : 'KW' '1897';\n"); - grammarBuilder.append("KW1898 : 'KW' '1898';\n"); - grammarBuilder.append("KW1899 : 'KW' '1899';\n"); - grammarBuilder.append("KW1900 : 'KW' '1900';\n"); - grammarBuilder.append("KW1901 : 'KW' '1901';\n"); - grammarBuilder.append("KW1902 : 'KW' '1902';\n"); - grammarBuilder.append("KW1903 : 'KW' '1903';\n"); - grammarBuilder.append("KW1904 : 'KW' '1904';\n"); - grammarBuilder.append("KW1905 : 'KW' '1905';\n"); - grammarBuilder.append("KW1906 : 'KW' '1906';\n"); - grammarBuilder.append("KW1907 : 'KW' '1907';\n"); - grammarBuilder.append("KW1908 : 'KW' '1908';\n"); - grammarBuilder.append("KW1909 : 'KW' '1909';\n"); - grammarBuilder.append("KW1910 : 'KW' '1910';\n"); - grammarBuilder.append("KW1911 : 'KW' '1911';\n"); - grammarBuilder.append("KW1912 : 'KW' '1912';\n"); - grammarBuilder.append("KW1913 : 'KW' '1913';\n"); - grammarBuilder.append("KW1914 : 'KW' '1914';\n"); - grammarBuilder.append("KW1915 : 'KW' '1915';\n"); - grammarBuilder.append("KW1916 : 'KW' '1916';\n"); - grammarBuilder.append("KW1917 : 'KW' '1917';\n"); - grammarBuilder.append("KW1918 : 'KW' '1918';\n"); - grammarBuilder.append("KW1919 : 'KW' '1919';\n"); - grammarBuilder.append("KW1920 : 'KW' '1920';\n"); - grammarBuilder.append("KW1921 : 'KW' '1921';\n"); - grammarBuilder.append("KW1922 : 'KW' '1922';\n"); - grammarBuilder.append("KW1923 : 'KW' '1923';\n"); - grammarBuilder.append("KW1924 : 'KW' '1924';\n"); - grammarBuilder.append("KW1925 : 'KW' '1925';\n"); - grammarBuilder.append("KW1926 : 'KW' '1926';\n"); - grammarBuilder.append("KW1927 : 'KW' '1927';\n"); - grammarBuilder.append("KW1928 : 'KW' '1928';\n"); - grammarBuilder.append("KW1929 : 'KW' '1929';\n"); - grammarBuilder.append("KW1930 : 'KW' '1930';\n"); - grammarBuilder.append("KW1931 : 'KW' '1931';\n"); - grammarBuilder.append("KW1932 : 'KW' '1932';\n"); - grammarBuilder.append("KW1933 : 'KW' '1933';\n"); - grammarBuilder.append("KW1934 : 'KW' '1934';\n"); - grammarBuilder.append("KW1935 : 'KW' '1935';\n"); - grammarBuilder.append("KW1936 : 'KW' '1936';\n"); - grammarBuilder.append("KW1937 : 'KW' '1937';\n"); - grammarBuilder.append("KW1938 : 'KW' '1938';\n"); - grammarBuilder.append("KW1939 : 'KW' '1939';\n"); - grammarBuilder.append("KW1940 : 'KW' '1940';\n"); - grammarBuilder.append("KW1941 : 'KW' '1941';\n"); - grammarBuilder.append("KW1942 : 'KW' '1942';\n"); - grammarBuilder.append("KW1943 : 'KW' '1943';\n"); - grammarBuilder.append("KW1944 : 'KW' '1944';\n"); - grammarBuilder.append("KW1945 : 'KW' '1945';\n"); - grammarBuilder.append("KW1946 : 'KW' '1946';\n"); - grammarBuilder.append("KW1947 : 'KW' '1947';\n"); - grammarBuilder.append("KW1948 : 'KW' '1948';\n"); - grammarBuilder.append("KW1949 : 'KW' '1949';\n"); - grammarBuilder.append("KW1950 : 'KW' '1950';\n"); - grammarBuilder.append("KW1951 : 'KW' '1951';\n"); - grammarBuilder.append("KW1952 : 'KW' '1952';\n"); - grammarBuilder.append("KW1953 : 'KW' '1953';\n"); - grammarBuilder.append("KW1954 : 'KW' '1954';\n"); - grammarBuilder.append("KW1955 : 'KW' '1955';\n"); - grammarBuilder.append("KW1956 : 'KW' '1956';\n"); - grammarBuilder.append("KW1957 : 'KW' '1957';\n"); - grammarBuilder.append("KW1958 : 'KW' '1958';\n"); - grammarBuilder.append("KW1959 : 'KW' '1959';\n"); - grammarBuilder.append("KW1960 : 'KW' '1960';\n"); - grammarBuilder.append("KW1961 : 'KW' '1961';\n"); - grammarBuilder.append("KW1962 : 'KW' '1962';\n"); - grammarBuilder.append("KW1963 : 'KW' '1963';\n"); - grammarBuilder.append("KW1964 : 'KW' '1964';\n"); - grammarBuilder.append("KW1965 : 'KW' '1965';\n"); - grammarBuilder.append("KW1966 : 'KW' '1966';\n"); - grammarBuilder.append("KW1967 : 'KW' '1967';\n"); - grammarBuilder.append("KW1968 : 'KW' '1968';\n"); - grammarBuilder.append("KW1969 : 'KW' '1969';\n"); - grammarBuilder.append("KW1970 : 'KW' '1970';\n"); - grammarBuilder.append("KW1971 : 'KW' '1971';\n"); - grammarBuilder.append("KW1972 : 'KW' '1972';\n"); - grammarBuilder.append("KW1973 : 'KW' '1973';\n"); - grammarBuilder.append("KW1974 : 'KW' '1974';\n"); - grammarBuilder.append("KW1975 : 'KW' '1975';\n"); - grammarBuilder.append("KW1976 : 'KW' '1976';\n"); - grammarBuilder.append("KW1977 : 'KW' '1977';\n"); - grammarBuilder.append("KW1978 : 'KW' '1978';\n"); - grammarBuilder.append("KW1979 : 'KW' '1979';\n"); - grammarBuilder.append("KW1980 : 'KW' '1980';\n"); - grammarBuilder.append("KW1981 : 'KW' '1981';\n"); - grammarBuilder.append("KW1982 : 'KW' '1982';\n"); - grammarBuilder.append("KW1983 : 'KW' '1983';\n"); - grammarBuilder.append("KW1984 : 'KW' '1984';\n"); - grammarBuilder.append("KW1985 : 'KW' '1985';\n"); - grammarBuilder.append("KW1986 : 'KW' '1986';\n"); - grammarBuilder.append("KW1987 : 'KW' '1987';\n"); - grammarBuilder.append("KW1988 : 'KW' '1988';\n"); - grammarBuilder.append("KW1989 : 'KW' '1989';\n"); - grammarBuilder.append("KW1990 : 'KW' '1990';\n"); - grammarBuilder.append("KW1991 : 'KW' '1991';\n"); - grammarBuilder.append("KW1992 : 'KW' '1992';\n"); - grammarBuilder.append("KW1993 : 'KW' '1993';\n"); - grammarBuilder.append("KW1994 : 'KW' '1994';\n"); - grammarBuilder.append("KW1995 : 'KW' '1995';\n"); - grammarBuilder.append("KW1996 : 'KW' '1996';\n"); - grammarBuilder.append("KW1997 : 'KW' '1997';\n"); - grammarBuilder.append("KW1998 : 'KW' '1998';\n"); - grammarBuilder.append("KW1999 : 'KW' '1999';\n"); - grammarBuilder.append("KW2000 : 'KW' '2000';\n"); - grammarBuilder.append("KW2001 : 'KW' '2001';\n"); - grammarBuilder.append("KW2002 : 'KW' '2002';\n"); - grammarBuilder.append("KW2003 : 'KW' '2003';\n"); - grammarBuilder.append("KW2004 : 'KW' '2004';\n"); - grammarBuilder.append("KW2005 : 'KW' '2005';\n"); - grammarBuilder.append("KW2006 : 'KW' '2006';\n"); - grammarBuilder.append("KW2007 : 'KW' '2007';\n"); - grammarBuilder.append("KW2008 : 'KW' '2008';\n"); - grammarBuilder.append("KW2009 : 'KW' '2009';\n"); - grammarBuilder.append("KW2010 : 'KW' '2010';\n"); - grammarBuilder.append("KW2011 : 'KW' '2011';\n"); - grammarBuilder.append("KW2012 : 'KW' '2012';\n"); - grammarBuilder.append("KW2013 : 'KW' '2013';\n"); - grammarBuilder.append("KW2014 : 'KW' '2014';\n"); - grammarBuilder.append("KW2015 : 'KW' '2015';\n"); - grammarBuilder.append("KW2016 : 'KW' '2016';\n"); - grammarBuilder.append("KW2017 : 'KW' '2017';\n"); - grammarBuilder.append("KW2018 : 'KW' '2018';\n"); - grammarBuilder.append("KW2019 : 'KW' '2019';\n"); - grammarBuilder.append("KW2020 : 'KW' '2020';\n"); - grammarBuilder.append("KW2021 : 'KW' '2021';\n"); - grammarBuilder.append("KW2022 : 'KW' '2022';\n"); - grammarBuilder.append("KW2023 : 'KW' '2023';\n"); - grammarBuilder.append("KW2024 : 'KW' '2024';\n"); - grammarBuilder.append("KW2025 : 'KW' '2025';\n"); - grammarBuilder.append("KW2026 : 'KW' '2026';\n"); - grammarBuilder.append("KW2027 : 'KW' '2027';\n"); - grammarBuilder.append("KW2028 : 'KW' '2028';\n"); - grammarBuilder.append("KW2029 : 'KW' '2029';\n"); - grammarBuilder.append("KW2030 : 'KW' '2030';\n"); - grammarBuilder.append("KW2031 : 'KW' '2031';\n"); - grammarBuilder.append("KW2032 : 'KW' '2032';\n"); - grammarBuilder.append("KW2033 : 'KW' '2033';\n"); - grammarBuilder.append("KW2034 : 'KW' '2034';\n"); - grammarBuilder.append("KW2035 : 'KW' '2035';\n"); - grammarBuilder.append("KW2036 : 'KW' '2036';\n"); - grammarBuilder.append("KW2037 : 'KW' '2037';\n"); - grammarBuilder.append("KW2038 : 'KW' '2038';\n"); - grammarBuilder.append("KW2039 : 'KW' '2039';\n"); - grammarBuilder.append("KW2040 : 'KW' '2040';\n"); - grammarBuilder.append("KW2041 : 'KW' '2041';\n"); - grammarBuilder.append("KW2042 : 'KW' '2042';\n"); - grammarBuilder.append("KW2043 : 'KW' '2043';\n"); - grammarBuilder.append("KW2044 : 'KW' '2044';\n"); - grammarBuilder.append("KW2045 : 'KW' '2045';\n"); - grammarBuilder.append("KW2046 : 'KW' '2046';\n"); - grammarBuilder.append("KW2047 : 'KW' '2047';\n"); - grammarBuilder.append("KW2048 : 'KW' '2048';\n"); - grammarBuilder.append("KW2049 : 'KW' '2049';\n"); - grammarBuilder.append("KW2050 : 'KW' '2050';\n"); - grammarBuilder.append("KW2051 : 'KW' '2051';\n"); - grammarBuilder.append("KW2052 : 'KW' '2052';\n"); - grammarBuilder.append("KW2053 : 'KW' '2053';\n"); - grammarBuilder.append("KW2054 : 'KW' '2054';\n"); - grammarBuilder.append("KW2055 : 'KW' '2055';\n"); - grammarBuilder.append("KW2056 : 'KW' '2056';\n"); - grammarBuilder.append("KW2057 : 'KW' '2057';\n"); - grammarBuilder.append("KW2058 : 'KW' '2058';\n"); - grammarBuilder.append("KW2059 : 'KW' '2059';\n"); - grammarBuilder.append("KW2060 : 'KW' '2060';\n"); - grammarBuilder.append("KW2061 : 'KW' '2061';\n"); - grammarBuilder.append("KW2062 : 'KW' '2062';\n"); - grammarBuilder.append("KW2063 : 'KW' '2063';\n"); - grammarBuilder.append("KW2064 : 'KW' '2064';\n"); - grammarBuilder.append("KW2065 : 'KW' '2065';\n"); - grammarBuilder.append("KW2066 : 'KW' '2066';\n"); - grammarBuilder.append("KW2067 : 'KW' '2067';\n"); - grammarBuilder.append("KW2068 : 'KW' '2068';\n"); - grammarBuilder.append("KW2069 : 'KW' '2069';\n"); - grammarBuilder.append("KW2070 : 'KW' '2070';\n"); - grammarBuilder.append("KW2071 : 'KW' '2071';\n"); - grammarBuilder.append("KW2072 : 'KW' '2072';\n"); - grammarBuilder.append("KW2073 : 'KW' '2073';\n"); - grammarBuilder.append("KW2074 : 'KW' '2074';\n"); - grammarBuilder.append("KW2075 : 'KW' '2075';\n"); - grammarBuilder.append("KW2076 : 'KW' '2076';\n"); - grammarBuilder.append("KW2077 : 'KW' '2077';\n"); - grammarBuilder.append("KW2078 : 'KW' '2078';\n"); - grammarBuilder.append("KW2079 : 'KW' '2079';\n"); - grammarBuilder.append("KW2080 : 'KW' '2080';\n"); - grammarBuilder.append("KW2081 : 'KW' '2081';\n"); - grammarBuilder.append("KW2082 : 'KW' '2082';\n"); - grammarBuilder.append("KW2083 : 'KW' '2083';\n"); - grammarBuilder.append("KW2084 : 'KW' '2084';\n"); - grammarBuilder.append("KW2085 : 'KW' '2085';\n"); - grammarBuilder.append("KW2086 : 'KW' '2086';\n"); - grammarBuilder.append("KW2087 : 'KW' '2087';\n"); - grammarBuilder.append("KW2088 : 'KW' '2088';\n"); - grammarBuilder.append("KW2089 : 'KW' '2089';\n"); - grammarBuilder.append("KW2090 : 'KW' '2090';\n"); - grammarBuilder.append("KW2091 : 'KW' '2091';\n"); - grammarBuilder.append("KW2092 : 'KW' '2092';\n"); - grammarBuilder.append("KW2093 : 'KW' '2093';\n"); - grammarBuilder.append("KW2094 : 'KW' '2094';\n"); - grammarBuilder.append("KW2095 : 'KW' '2095';\n"); - grammarBuilder.append("KW2096 : 'KW' '2096';\n"); - grammarBuilder.append("KW2097 : 'KW' '2097';\n"); - grammarBuilder.append("KW2098 : 'KW' '2098';\n"); - grammarBuilder.append("KW2099 : 'KW' '2099';\n"); - grammarBuilder.append("KW2100 : 'KW' '2100';\n"); - grammarBuilder.append("KW2101 : 'KW' '2101';\n"); - grammarBuilder.append("KW2102 : 'KW' '2102';\n"); - grammarBuilder.append("KW2103 : 'KW' '2103';\n"); - grammarBuilder.append("KW2104 : 'KW' '2104';\n"); - grammarBuilder.append("KW2105 : 'KW' '2105';\n"); - grammarBuilder.append("KW2106 : 'KW' '2106';\n"); - grammarBuilder.append("KW2107 : 'KW' '2107';\n"); - grammarBuilder.append("KW2108 : 'KW' '2108';\n"); - grammarBuilder.append("KW2109 : 'KW' '2109';\n"); - grammarBuilder.append("KW2110 : 'KW' '2110';\n"); - grammarBuilder.append("KW2111 : 'KW' '2111';\n"); - grammarBuilder.append("KW2112 : 'KW' '2112';\n"); - grammarBuilder.append("KW2113 : 'KW' '2113';\n"); - grammarBuilder.append("KW2114 : 'KW' '2114';\n"); - grammarBuilder.append("KW2115 : 'KW' '2115';\n"); - grammarBuilder.append("KW2116 : 'KW' '2116';\n"); - grammarBuilder.append("KW2117 : 'KW' '2117';\n"); - grammarBuilder.append("KW2118 : 'KW' '2118';\n"); - grammarBuilder.append("KW2119 : 'KW' '2119';\n"); - grammarBuilder.append("KW2120 : 'KW' '2120';\n"); - grammarBuilder.append("KW2121 : 'KW' '2121';\n"); - grammarBuilder.append("KW2122 : 'KW' '2122';\n"); - grammarBuilder.append("KW2123 : 'KW' '2123';\n"); - grammarBuilder.append("KW2124 : 'KW' '2124';\n"); - grammarBuilder.append("KW2125 : 'KW' '2125';\n"); - grammarBuilder.append("KW2126 : 'KW' '2126';\n"); - grammarBuilder.append("KW2127 : 'KW' '2127';\n"); - grammarBuilder.append("KW2128 : 'KW' '2128';\n"); - grammarBuilder.append("KW2129 : 'KW' '2129';\n"); - grammarBuilder.append("KW2130 : 'KW' '2130';\n"); - grammarBuilder.append("KW2131 : 'KW' '2131';\n"); - grammarBuilder.append("KW2132 : 'KW' '2132';\n"); - grammarBuilder.append("KW2133 : 'KW' '2133';\n"); - grammarBuilder.append("KW2134 : 'KW' '2134';\n"); - grammarBuilder.append("KW2135 : 'KW' '2135';\n"); - grammarBuilder.append("KW2136 : 'KW' '2136';\n"); - grammarBuilder.append("KW2137 : 'KW' '2137';\n"); - grammarBuilder.append("KW2138 : 'KW' '2138';\n"); - grammarBuilder.append("KW2139 : 'KW' '2139';\n"); - grammarBuilder.append("KW2140 : 'KW' '2140';\n"); - grammarBuilder.append("KW2141 : 'KW' '2141';\n"); - grammarBuilder.append("KW2142 : 'KW' '2142';\n"); - grammarBuilder.append("KW2143 : 'KW' '2143';\n"); - grammarBuilder.append("KW2144 : 'KW' '2144';\n"); - grammarBuilder.append("KW2145 : 'KW' '2145';\n"); - grammarBuilder.append("KW2146 : 'KW' '2146';\n"); - grammarBuilder.append("KW2147 : 'KW' '2147';\n"); - grammarBuilder.append("KW2148 : 'KW' '2148';\n"); - grammarBuilder.append("KW2149 : 'KW' '2149';\n"); - grammarBuilder.append("KW2150 : 'KW' '2150';\n"); - grammarBuilder.append("KW2151 : 'KW' '2151';\n"); - grammarBuilder.append("KW2152 : 'KW' '2152';\n"); - grammarBuilder.append("KW2153 : 'KW' '2153';\n"); - grammarBuilder.append("KW2154 : 'KW' '2154';\n"); - grammarBuilder.append("KW2155 : 'KW' '2155';\n"); - grammarBuilder.append("KW2156 : 'KW' '2156';\n"); - grammarBuilder.append("KW2157 : 'KW' '2157';\n"); - grammarBuilder.append("KW2158 : 'KW' '2158';\n"); - grammarBuilder.append("KW2159 : 'KW' '2159';\n"); - grammarBuilder.append("KW2160 : 'KW' '2160';\n"); - grammarBuilder.append("KW2161 : 'KW' '2161';\n"); - grammarBuilder.append("KW2162 : 'KW' '2162';\n"); - grammarBuilder.append("KW2163 : 'KW' '2163';\n"); - grammarBuilder.append("KW2164 : 'KW' '2164';\n"); - grammarBuilder.append("KW2165 : 'KW' '2165';\n"); - grammarBuilder.append("KW2166 : 'KW' '2166';\n"); - grammarBuilder.append("KW2167 : 'KW' '2167';\n"); - grammarBuilder.append("KW2168 : 'KW' '2168';\n"); - grammarBuilder.append("KW2169 : 'KW' '2169';\n"); - grammarBuilder.append("KW2170 : 'KW' '2170';\n"); - grammarBuilder.append("KW2171 : 'KW' '2171';\n"); - grammarBuilder.append("KW2172 : 'KW' '2172';\n"); - grammarBuilder.append("KW2173 : 'KW' '2173';\n"); - grammarBuilder.append("KW2174 : 'KW' '2174';\n"); - grammarBuilder.append("KW2175 : 'KW' '2175';\n"); - grammarBuilder.append("KW2176 : 'KW' '2176';\n"); - grammarBuilder.append("KW2177 : 'KW' '2177';\n"); - grammarBuilder.append("KW2178 : 'KW' '2178';\n"); - grammarBuilder.append("KW2179 : 'KW' '2179';\n"); - grammarBuilder.append("KW2180 : 'KW' '2180';\n"); - grammarBuilder.append("KW2181 : 'KW' '2181';\n"); - grammarBuilder.append("KW2182 : 'KW' '2182';\n"); - grammarBuilder.append("KW2183 : 'KW' '2183';\n"); - grammarBuilder.append("KW2184 : 'KW' '2184';\n"); - grammarBuilder.append("KW2185 : 'KW' '2185';\n"); - grammarBuilder.append("KW2186 : 'KW' '2186';\n"); - grammarBuilder.append("KW2187 : 'KW' '2187';\n"); - grammarBuilder.append("KW2188 : 'KW' '2188';\n"); - grammarBuilder.append("KW2189 : 'KW' '2189';\n"); - grammarBuilder.append("KW2190 : 'KW' '2190';\n"); - grammarBuilder.append("KW2191 : 'KW' '2191';\n"); - grammarBuilder.append("KW2192 : 'KW' '2192';\n"); - grammarBuilder.append("KW2193 : 'KW' '2193';\n"); - grammarBuilder.append("KW2194 : 'KW' '2194';\n"); - grammarBuilder.append("KW2195 : 'KW' '2195';\n"); - grammarBuilder.append("KW2196 : 'KW' '2196';\n"); - grammarBuilder.append("KW2197 : 'KW' '2197';\n"); - grammarBuilder.append("KW2198 : 'KW' '2198';\n"); - grammarBuilder.append("KW2199 : 'KW' '2199';\n"); - grammarBuilder.append("KW2200 : 'KW' '2200';\n"); - grammarBuilder.append("KW2201 : 'KW' '2201';\n"); - grammarBuilder.append("KW2202 : 'KW' '2202';\n"); - grammarBuilder.append("KW2203 : 'KW' '2203';\n"); - grammarBuilder.append("KW2204 : 'KW' '2204';\n"); - grammarBuilder.append("KW2205 : 'KW' '2205';\n"); - grammarBuilder.append("KW2206 : 'KW' '2206';\n"); - grammarBuilder.append("KW2207 : 'KW' '2207';\n"); - grammarBuilder.append("KW2208 : 'KW' '2208';\n"); - grammarBuilder.append("KW2209 : 'KW' '2209';\n"); - grammarBuilder.append("KW2210 : 'KW' '2210';\n"); - grammarBuilder.append("KW2211 : 'KW' '2211';\n"); - grammarBuilder.append("KW2212 : 'KW' '2212';\n"); - grammarBuilder.append("KW2213 : 'KW' '2213';\n"); - grammarBuilder.append("KW2214 : 'KW' '2214';\n"); - grammarBuilder.append("KW2215 : 'KW' '2215';\n"); - grammarBuilder.append("KW2216 : 'KW' '2216';\n"); - grammarBuilder.append("KW2217 : 'KW' '2217';\n"); - grammarBuilder.append("KW2218 : 'KW' '2218';\n"); - grammarBuilder.append("KW2219 : 'KW' '2219';\n"); - grammarBuilder.append("KW2220 : 'KW' '2220';\n"); - grammarBuilder.append("KW2221 : 'KW' '2221';\n"); - grammarBuilder.append("KW2222 : 'KW' '2222';\n"); - grammarBuilder.append("KW2223 : 'KW' '2223';\n"); - grammarBuilder.append("KW2224 : 'KW' '2224';\n"); - grammarBuilder.append("KW2225 : 'KW' '2225';\n"); - grammarBuilder.append("KW2226 : 'KW' '2226';\n"); - grammarBuilder.append("KW2227 : 'KW' '2227';\n"); - grammarBuilder.append("KW2228 : 'KW' '2228';\n"); - grammarBuilder.append("KW2229 : 'KW' '2229';\n"); - grammarBuilder.append("KW2230 : 'KW' '2230';\n"); - grammarBuilder.append("KW2231 : 'KW' '2231';\n"); - grammarBuilder.append("KW2232 : 'KW' '2232';\n"); - grammarBuilder.append("KW2233 : 'KW' '2233';\n"); - grammarBuilder.append("KW2234 : 'KW' '2234';\n"); - grammarBuilder.append("KW2235 : 'KW' '2235';\n"); - grammarBuilder.append("KW2236 : 'KW' '2236';\n"); - grammarBuilder.append("KW2237 : 'KW' '2237';\n"); - grammarBuilder.append("KW2238 : 'KW' '2238';\n"); - grammarBuilder.append("KW2239 : 'KW' '2239';\n"); - grammarBuilder.append("KW2240 : 'KW' '2240';\n"); - grammarBuilder.append("KW2241 : 'KW' '2241';\n"); - grammarBuilder.append("KW2242 : 'KW' '2242';\n"); - grammarBuilder.append("KW2243 : 'KW' '2243';\n"); - grammarBuilder.append("KW2244 : 'KW' '2244';\n"); - grammarBuilder.append("KW2245 : 'KW' '2245';\n"); - grammarBuilder.append("KW2246 : 'KW' '2246';\n"); - grammarBuilder.append("KW2247 : 'KW' '2247';\n"); - grammarBuilder.append("KW2248 : 'KW' '2248';\n"); - grammarBuilder.append("KW2249 : 'KW' '2249';\n"); - grammarBuilder.append("KW2250 : 'KW' '2250';\n"); - grammarBuilder.append("KW2251 : 'KW' '2251';\n"); - grammarBuilder.append("KW2252 : 'KW' '2252';\n"); - grammarBuilder.append("KW2253 : 'KW' '2253';\n"); - grammarBuilder.append("KW2254 : 'KW' '2254';\n"); - grammarBuilder.append("KW2255 : 'KW' '2255';\n"); - grammarBuilder.append("KW2256 : 'KW' '2256';\n"); - grammarBuilder.append("KW2257 : 'KW' '2257';\n"); - grammarBuilder.append("KW2258 : 'KW' '2258';\n"); - grammarBuilder.append("KW2259 : 'KW' '2259';\n"); - grammarBuilder.append("KW2260 : 'KW' '2260';\n"); - grammarBuilder.append("KW2261 : 'KW' '2261';\n"); - grammarBuilder.append("KW2262 : 'KW' '2262';\n"); - grammarBuilder.append("KW2263 : 'KW' '2263';\n"); - grammarBuilder.append("KW2264 : 'KW' '2264';\n"); - grammarBuilder.append("KW2265 : 'KW' '2265';\n"); - grammarBuilder.append("KW2266 : 'KW' '2266';\n"); - grammarBuilder.append("KW2267 : 'KW' '2267';\n"); - grammarBuilder.append("KW2268 : 'KW' '2268';\n"); - grammarBuilder.append("KW2269 : 'KW' '2269';\n"); - grammarBuilder.append("KW2270 : 'KW' '2270';\n"); - grammarBuilder.append("KW2271 : 'KW' '2271';\n"); - grammarBuilder.append("KW2272 : 'KW' '2272';\n"); - grammarBuilder.append("KW2273 : 'KW' '2273';\n"); - grammarBuilder.append("KW2274 : 'KW' '2274';\n"); - grammarBuilder.append("KW2275 : 'KW' '2275';\n"); - grammarBuilder.append("KW2276 : 'KW' '2276';\n"); - grammarBuilder.append("KW2277 : 'KW' '2277';\n"); - grammarBuilder.append("KW2278 : 'KW' '2278';\n"); - grammarBuilder.append("KW2279 : 'KW' '2279';\n"); - grammarBuilder.append("KW2280 : 'KW' '2280';\n"); - grammarBuilder.append("KW2281 : 'KW' '2281';\n"); - grammarBuilder.append("KW2282 : 'KW' '2282';\n"); - grammarBuilder.append("KW2283 : 'KW' '2283';\n"); - grammarBuilder.append("KW2284 : 'KW' '2284';\n"); - grammarBuilder.append("KW2285 : 'KW' '2285';\n"); - grammarBuilder.append("KW2286 : 'KW' '2286';\n"); - grammarBuilder.append("KW2287 : 'KW' '2287';\n"); - grammarBuilder.append("KW2288 : 'KW' '2288';\n"); - grammarBuilder.append("KW2289 : 'KW' '2289';\n"); - grammarBuilder.append("KW2290 : 'KW' '2290';\n"); - grammarBuilder.append("KW2291 : 'KW' '2291';\n"); - grammarBuilder.append("KW2292 : 'KW' '2292';\n"); - grammarBuilder.append("KW2293 : 'KW' '2293';\n"); - grammarBuilder.append("KW2294 : 'KW' '2294';\n"); - grammarBuilder.append("KW2295 : 'KW' '2295';\n"); - grammarBuilder.append("KW2296 : 'KW' '2296';\n"); - grammarBuilder.append("KW2297 : 'KW' '2297';\n"); - grammarBuilder.append("KW2298 : 'KW' '2298';\n"); - grammarBuilder.append("KW2299 : 'KW' '2299';\n"); - grammarBuilder.append("KW2300 : 'KW' '2300';\n"); - grammarBuilder.append("KW2301 : 'KW' '2301';\n"); - grammarBuilder.append("KW2302 : 'KW' '2302';\n"); - grammarBuilder.append("KW2303 : 'KW' '2303';\n"); - grammarBuilder.append("KW2304 : 'KW' '2304';\n"); - grammarBuilder.append("KW2305 : 'KW' '2305';\n"); - grammarBuilder.append("KW2306 : 'KW' '2306';\n"); - grammarBuilder.append("KW2307 : 'KW' '2307';\n"); - grammarBuilder.append("KW2308 : 'KW' '2308';\n"); - grammarBuilder.append("KW2309 : 'KW' '2309';\n"); - grammarBuilder.append("KW2310 : 'KW' '2310';\n"); - grammarBuilder.append("KW2311 : 'KW' '2311';\n"); - grammarBuilder.append("KW2312 : 'KW' '2312';\n"); - grammarBuilder.append("KW2313 : 'KW' '2313';\n"); - grammarBuilder.append("KW2314 : 'KW' '2314';\n"); - grammarBuilder.append("KW2315 : 'KW' '2315';\n"); - grammarBuilder.append("KW2316 : 'KW' '2316';\n"); - grammarBuilder.append("KW2317 : 'KW' '2317';\n"); - grammarBuilder.append("KW2318 : 'KW' '2318';\n"); - grammarBuilder.append("KW2319 : 'KW' '2319';\n"); - grammarBuilder.append("KW2320 : 'KW' '2320';\n"); - grammarBuilder.append("KW2321 : 'KW' '2321';\n"); - grammarBuilder.append("KW2322 : 'KW' '2322';\n"); - grammarBuilder.append("KW2323 : 'KW' '2323';\n"); - grammarBuilder.append("KW2324 : 'KW' '2324';\n"); - grammarBuilder.append("KW2325 : 'KW' '2325';\n"); - grammarBuilder.append("KW2326 : 'KW' '2326';\n"); - grammarBuilder.append("KW2327 : 'KW' '2327';\n"); - grammarBuilder.append("KW2328 : 'KW' '2328';\n"); - grammarBuilder.append("KW2329 : 'KW' '2329';\n"); - grammarBuilder.append("KW2330 : 'KW' '2330';\n"); - grammarBuilder.append("KW2331 : 'KW' '2331';\n"); - grammarBuilder.append("KW2332 : 'KW' '2332';\n"); - grammarBuilder.append("KW2333 : 'KW' '2333';\n"); - grammarBuilder.append("KW2334 : 'KW' '2334';\n"); - grammarBuilder.append("KW2335 : 'KW' '2335';\n"); - grammarBuilder.append("KW2336 : 'KW' '2336';\n"); - grammarBuilder.append("KW2337 : 'KW' '2337';\n"); - grammarBuilder.append("KW2338 : 'KW' '2338';\n"); - grammarBuilder.append("KW2339 : 'KW' '2339';\n"); - grammarBuilder.append("KW2340 : 'KW' '2340';\n"); - grammarBuilder.append("KW2341 : 'KW' '2341';\n"); - grammarBuilder.append("KW2342 : 'KW' '2342';\n"); - grammarBuilder.append("KW2343 : 'KW' '2343';\n"); - grammarBuilder.append("KW2344 : 'KW' '2344';\n"); - grammarBuilder.append("KW2345 : 'KW' '2345';\n"); - grammarBuilder.append("KW2346 : 'KW' '2346';\n"); - grammarBuilder.append("KW2347 : 'KW' '2347';\n"); - grammarBuilder.append("KW2348 : 'KW' '2348';\n"); - grammarBuilder.append("KW2349 : 'KW' '2349';\n"); - grammarBuilder.append("KW2350 : 'KW' '2350';\n"); - grammarBuilder.append("KW2351 : 'KW' '2351';\n"); - grammarBuilder.append("KW2352 : 'KW' '2352';\n"); - grammarBuilder.append("KW2353 : 'KW' '2353';\n"); - grammarBuilder.append("KW2354 : 'KW' '2354';\n"); - grammarBuilder.append("KW2355 : 'KW' '2355';\n"); - grammarBuilder.append("KW2356 : 'KW' '2356';\n"); - grammarBuilder.append("KW2357 : 'KW' '2357';\n"); - grammarBuilder.append("KW2358 : 'KW' '2358';\n"); - grammarBuilder.append("KW2359 : 'KW' '2359';\n"); - grammarBuilder.append("KW2360 : 'KW' '2360';\n"); - grammarBuilder.append("KW2361 : 'KW' '2361';\n"); - grammarBuilder.append("KW2362 : 'KW' '2362';\n"); - grammarBuilder.append("KW2363 : 'KW' '2363';\n"); - grammarBuilder.append("KW2364 : 'KW' '2364';\n"); - grammarBuilder.append("KW2365 : 'KW' '2365';\n"); - grammarBuilder.append("KW2366 : 'KW' '2366';\n"); - grammarBuilder.append("KW2367 : 'KW' '2367';\n"); - grammarBuilder.append("KW2368 : 'KW' '2368';\n"); - grammarBuilder.append("KW2369 : 'KW' '2369';\n"); - grammarBuilder.append("KW2370 : 'KW' '2370';\n"); - grammarBuilder.append("KW2371 : 'KW' '2371';\n"); - grammarBuilder.append("KW2372 : 'KW' '2372';\n"); - grammarBuilder.append("KW2373 : 'KW' '2373';\n"); - grammarBuilder.append("KW2374 : 'KW' '2374';\n"); - grammarBuilder.append("KW2375 : 'KW' '2375';\n"); - grammarBuilder.append("KW2376 : 'KW' '2376';\n"); - grammarBuilder.append("KW2377 : 'KW' '2377';\n"); - grammarBuilder.append("KW2378 : 'KW' '2378';\n"); - grammarBuilder.append("KW2379 : 'KW' '2379';\n"); - grammarBuilder.append("KW2380 : 'KW' '2380';\n"); - grammarBuilder.append("KW2381 : 'KW' '2381';\n"); - grammarBuilder.append("KW2382 : 'KW' '2382';\n"); - grammarBuilder.append("KW2383 : 'KW' '2383';\n"); - grammarBuilder.append("KW2384 : 'KW' '2384';\n"); - grammarBuilder.append("KW2385 : 'KW' '2385';\n"); - grammarBuilder.append("KW2386 : 'KW' '2386';\n"); - grammarBuilder.append("KW2387 : 'KW' '2387';\n"); - grammarBuilder.append("KW2388 : 'KW' '2388';\n"); - grammarBuilder.append("KW2389 : 'KW' '2389';\n"); - grammarBuilder.append("KW2390 : 'KW' '2390';\n"); - grammarBuilder.append("KW2391 : 'KW' '2391';\n"); - grammarBuilder.append("KW2392 : 'KW' '2392';\n"); - grammarBuilder.append("KW2393 : 'KW' '2393';\n"); - grammarBuilder.append("KW2394 : 'KW' '2394';\n"); - grammarBuilder.append("KW2395 : 'KW' '2395';\n"); - grammarBuilder.append("KW2396 : 'KW' '2396';\n"); - grammarBuilder.append("KW2397 : 'KW' '2397';\n"); - grammarBuilder.append("KW2398 : 'KW' '2398';\n"); - grammarBuilder.append("KW2399 : 'KW' '2399';\n"); - grammarBuilder.append("KW2400 : 'KW' '2400';\n"); - grammarBuilder.append("KW2401 : 'KW' '2401';\n"); - grammarBuilder.append("KW2402 : 'KW' '2402';\n"); - grammarBuilder.append("KW2403 : 'KW' '2403';\n"); - grammarBuilder.append("KW2404 : 'KW' '2404';\n"); - grammarBuilder.append("KW2405 : 'KW' '2405';\n"); - grammarBuilder.append("KW2406 : 'KW' '2406';\n"); - grammarBuilder.append("KW2407 : 'KW' '2407';\n"); - grammarBuilder.append("KW2408 : 'KW' '2408';\n"); - grammarBuilder.append("KW2409 : 'KW' '2409';\n"); - grammarBuilder.append("KW2410 : 'KW' '2410';\n"); - grammarBuilder.append("KW2411 : 'KW' '2411';\n"); - grammarBuilder.append("KW2412 : 'KW' '2412';\n"); - grammarBuilder.append("KW2413 : 'KW' '2413';\n"); - grammarBuilder.append("KW2414 : 'KW' '2414';\n"); - grammarBuilder.append("KW2415 : 'KW' '2415';\n"); - grammarBuilder.append("KW2416 : 'KW' '2416';\n"); - grammarBuilder.append("KW2417 : 'KW' '2417';\n"); - grammarBuilder.append("KW2418 : 'KW' '2418';\n"); - grammarBuilder.append("KW2419 : 'KW' '2419';\n"); - grammarBuilder.append("KW2420 : 'KW' '2420';\n"); - grammarBuilder.append("KW2421 : 'KW' '2421';\n"); - grammarBuilder.append("KW2422 : 'KW' '2422';\n"); - grammarBuilder.append("KW2423 : 'KW' '2423';\n"); - grammarBuilder.append("KW2424 : 'KW' '2424';\n"); - grammarBuilder.append("KW2425 : 'KW' '2425';\n"); - grammarBuilder.append("KW2426 : 'KW' '2426';\n"); - grammarBuilder.append("KW2427 : 'KW' '2427';\n"); - grammarBuilder.append("KW2428 : 'KW' '2428';\n"); - grammarBuilder.append("KW2429 : 'KW' '2429';\n"); - grammarBuilder.append("KW2430 : 'KW' '2430';\n"); - grammarBuilder.append("KW2431 : 'KW' '2431';\n"); - grammarBuilder.append("KW2432 : 'KW' '2432';\n"); - grammarBuilder.append("KW2433 : 'KW' '2433';\n"); - grammarBuilder.append("KW2434 : 'KW' '2434';\n"); - grammarBuilder.append("KW2435 : 'KW' '2435';\n"); - grammarBuilder.append("KW2436 : 'KW' '2436';\n"); - grammarBuilder.append("KW2437 : 'KW' '2437';\n"); - grammarBuilder.append("KW2438 : 'KW' '2438';\n"); - grammarBuilder.append("KW2439 : 'KW' '2439';\n"); - grammarBuilder.append("KW2440 : 'KW' '2440';\n"); - grammarBuilder.append("KW2441 : 'KW' '2441';\n"); - grammarBuilder.append("KW2442 : 'KW' '2442';\n"); - grammarBuilder.append("KW2443 : 'KW' '2443';\n"); - grammarBuilder.append("KW2444 : 'KW' '2444';\n"); - grammarBuilder.append("KW2445 : 'KW' '2445';\n"); - grammarBuilder.append("KW2446 : 'KW' '2446';\n"); - grammarBuilder.append("KW2447 : 'KW' '2447';\n"); - grammarBuilder.append("KW2448 : 'KW' '2448';\n"); - grammarBuilder.append("KW2449 : 'KW' '2449';\n"); - grammarBuilder.append("KW2450 : 'KW' '2450';\n"); - grammarBuilder.append("KW2451 : 'KW' '2451';\n"); - grammarBuilder.append("KW2452 : 'KW' '2452';\n"); - grammarBuilder.append("KW2453 : 'KW' '2453';\n"); - grammarBuilder.append("KW2454 : 'KW' '2454';\n"); - grammarBuilder.append("KW2455 : 'KW' '2455';\n"); - grammarBuilder.append("KW2456 : 'KW' '2456';\n"); - grammarBuilder.append("KW2457 : 'KW' '2457';\n"); - grammarBuilder.append("KW2458 : 'KW' '2458';\n"); - grammarBuilder.append("KW2459 : 'KW' '2459';\n"); - grammarBuilder.append("KW2460 : 'KW' '2460';\n"); - grammarBuilder.append("KW2461 : 'KW' '2461';\n"); - grammarBuilder.append("KW2462 : 'KW' '2462';\n"); - grammarBuilder.append("KW2463 : 'KW' '2463';\n"); - grammarBuilder.append("KW2464 : 'KW' '2464';\n"); - grammarBuilder.append("KW2465 : 'KW' '2465';\n"); - grammarBuilder.append("KW2466 : 'KW' '2466';\n"); - grammarBuilder.append("KW2467 : 'KW' '2467';\n"); - grammarBuilder.append("KW2468 : 'KW' '2468';\n"); - grammarBuilder.append("KW2469 : 'KW' '2469';\n"); - grammarBuilder.append("KW2470 : 'KW' '2470';\n"); - grammarBuilder.append("KW2471 : 'KW' '2471';\n"); - grammarBuilder.append("KW2472 : 'KW' '2472';\n"); - grammarBuilder.append("KW2473 : 'KW' '2473';\n"); - grammarBuilder.append("KW2474 : 'KW' '2474';\n"); - grammarBuilder.append("KW2475 : 'KW' '2475';\n"); - grammarBuilder.append("KW2476 : 'KW' '2476';\n"); - grammarBuilder.append("KW2477 : 'KW' '2477';\n"); - grammarBuilder.append("KW2478 : 'KW' '2478';\n"); - grammarBuilder.append("KW2479 : 'KW' '2479';\n"); - grammarBuilder.append("KW2480 : 'KW' '2480';\n"); - grammarBuilder.append("KW2481 : 'KW' '2481';\n"); - grammarBuilder.append("KW2482 : 'KW' '2482';\n"); - grammarBuilder.append("KW2483 : 'KW' '2483';\n"); - grammarBuilder.append("KW2484 : 'KW' '2484';\n"); - grammarBuilder.append("KW2485 : 'KW' '2485';\n"); - grammarBuilder.append("KW2486 : 'KW' '2486';\n"); - grammarBuilder.append("KW2487 : 'KW' '2487';\n"); - grammarBuilder.append("KW2488 : 'KW' '2488';\n"); - grammarBuilder.append("KW2489 : 'KW' '2489';\n"); - grammarBuilder.append("KW2490 : 'KW' '2490';\n"); - grammarBuilder.append("KW2491 : 'KW' '2491';\n"); - grammarBuilder.append("KW2492 : 'KW' '2492';\n"); - grammarBuilder.append("KW2493 : 'KW' '2493';\n"); - grammarBuilder.append("KW2494 : 'KW' '2494';\n"); - grammarBuilder.append("KW2495 : 'KW' '2495';\n"); - grammarBuilder.append("KW2496 : 'KW' '2496';\n"); - grammarBuilder.append("KW2497 : 'KW' '2497';\n"); - grammarBuilder.append("KW2498 : 'KW' '2498';\n"); - grammarBuilder.append("KW2499 : 'KW' '2499';\n"); - grammarBuilder.append("KW2500 : 'KW' '2500';\n"); - grammarBuilder.append("KW2501 : 'KW' '2501';\n"); - grammarBuilder.append("KW2502 : 'KW' '2502';\n"); - grammarBuilder.append("KW2503 : 'KW' '2503';\n"); - grammarBuilder.append("KW2504 : 'KW' '2504';\n"); - grammarBuilder.append("KW2505 : 'KW' '2505';\n"); - grammarBuilder.append("KW2506 : 'KW' '2506';\n"); - grammarBuilder.append("KW2507 : 'KW' '2507';\n"); - grammarBuilder.append("KW2508 : 'KW' '2508';\n"); - grammarBuilder.append("KW2509 : 'KW' '2509';\n"); - grammarBuilder.append("KW2510 : 'KW' '2510';\n"); - grammarBuilder.append("KW2511 : 'KW' '2511';\n"); - grammarBuilder.append("KW2512 : 'KW' '2512';\n"); - grammarBuilder.append("KW2513 : 'KW' '2513';\n"); - grammarBuilder.append("KW2514 : 'KW' '2514';\n"); - grammarBuilder.append("KW2515 : 'KW' '2515';\n"); - grammarBuilder.append("KW2516 : 'KW' '2516';\n"); - grammarBuilder.append("KW2517 : 'KW' '2517';\n"); - grammarBuilder.append("KW2518 : 'KW' '2518';\n"); - grammarBuilder.append("KW2519 : 'KW' '2519';\n"); - grammarBuilder.append("KW2520 : 'KW' '2520';\n"); - grammarBuilder.append("KW2521 : 'KW' '2521';\n"); - grammarBuilder.append("KW2522 : 'KW' '2522';\n"); - grammarBuilder.append("KW2523 : 'KW' '2523';\n"); - grammarBuilder.append("KW2524 : 'KW' '2524';\n"); - grammarBuilder.append("KW2525 : 'KW' '2525';\n"); - grammarBuilder.append("KW2526 : 'KW' '2526';\n"); - grammarBuilder.append("KW2527 : 'KW' '2527';\n"); - grammarBuilder.append("KW2528 : 'KW' '2528';\n"); - grammarBuilder.append("KW2529 : 'KW' '2529';\n"); - grammarBuilder.append("KW2530 : 'KW' '2530';\n"); - grammarBuilder.append("KW2531 : 'KW' '2531';\n"); - grammarBuilder.append("KW2532 : 'KW' '2532';\n"); - grammarBuilder.append("KW2533 : 'KW' '2533';\n"); - grammarBuilder.append("KW2534 : 'KW' '2534';\n"); - grammarBuilder.append("KW2535 : 'KW' '2535';\n"); - grammarBuilder.append("KW2536 : 'KW' '2536';\n"); - grammarBuilder.append("KW2537 : 'KW' '2537';\n"); - grammarBuilder.append("KW2538 : 'KW' '2538';\n"); - grammarBuilder.append("KW2539 : 'KW' '2539';\n"); - grammarBuilder.append("KW2540 : 'KW' '2540';\n"); - grammarBuilder.append("KW2541 : 'KW' '2541';\n"); - grammarBuilder.append("KW2542 : 'KW' '2542';\n"); - grammarBuilder.append("KW2543 : 'KW' '2543';\n"); - grammarBuilder.append("KW2544 : 'KW' '2544';\n"); - grammarBuilder.append("KW2545 : 'KW' '2545';\n"); - grammarBuilder.append("KW2546 : 'KW' '2546';\n"); - grammarBuilder.append("KW2547 : 'KW' '2547';\n"); - grammarBuilder.append("KW2548 : 'KW' '2548';\n"); - grammarBuilder.append("KW2549 : 'KW' '2549';\n"); - grammarBuilder.append("KW2550 : 'KW' '2550';\n"); - grammarBuilder.append("KW2551 : 'KW' '2551';\n"); - grammarBuilder.append("KW2552 : 'KW' '2552';\n"); - grammarBuilder.append("KW2553 : 'KW' '2553';\n"); - grammarBuilder.append("KW2554 : 'KW' '2554';\n"); - grammarBuilder.append("KW2555 : 'KW' '2555';\n"); - grammarBuilder.append("KW2556 : 'KW' '2556';\n"); - grammarBuilder.append("KW2557 : 'KW' '2557';\n"); - grammarBuilder.append("KW2558 : 'KW' '2558';\n"); - grammarBuilder.append("KW2559 : 'KW' '2559';\n"); - grammarBuilder.append("KW2560 : 'KW' '2560';\n"); - grammarBuilder.append("KW2561 : 'KW' '2561';\n"); - grammarBuilder.append("KW2562 : 'KW' '2562';\n"); - grammarBuilder.append("KW2563 : 'KW' '2563';\n"); - grammarBuilder.append("KW2564 : 'KW' '2564';\n"); - grammarBuilder.append("KW2565 : 'KW' '2565';\n"); - grammarBuilder.append("KW2566 : 'KW' '2566';\n"); - grammarBuilder.append("KW2567 : 'KW' '2567';\n"); - grammarBuilder.append("KW2568 : 'KW' '2568';\n"); - grammarBuilder.append("KW2569 : 'KW' '2569';\n"); - grammarBuilder.append("KW2570 : 'KW' '2570';\n"); - grammarBuilder.append("KW2571 : 'KW' '2571';\n"); - grammarBuilder.append("KW2572 : 'KW' '2572';\n"); - grammarBuilder.append("KW2573 : 'KW' '2573';\n"); - grammarBuilder.append("KW2574 : 'KW' '2574';\n"); - grammarBuilder.append("KW2575 : 'KW' '2575';\n"); - grammarBuilder.append("KW2576 : 'KW' '2576';\n"); - grammarBuilder.append("KW2577 : 'KW' '2577';\n"); - grammarBuilder.append("KW2578 : 'KW' '2578';\n"); - grammarBuilder.append("KW2579 : 'KW' '2579';\n"); - grammarBuilder.append("KW2580 : 'KW' '2580';\n"); - grammarBuilder.append("KW2581 : 'KW' '2581';\n"); - grammarBuilder.append("KW2582 : 'KW' '2582';\n"); - grammarBuilder.append("KW2583 : 'KW' '2583';\n"); - grammarBuilder.append("KW2584 : 'KW' '2584';\n"); - grammarBuilder.append("KW2585 : 'KW' '2585';\n"); - grammarBuilder.append("KW2586 : 'KW' '2586';\n"); - grammarBuilder.append("KW2587 : 'KW' '2587';\n"); - grammarBuilder.append("KW2588 : 'KW' '2588';\n"); - grammarBuilder.append("KW2589 : 'KW' '2589';\n"); - grammarBuilder.append("KW2590 : 'KW' '2590';\n"); - grammarBuilder.append("KW2591 : 'KW' '2591';\n"); - grammarBuilder.append("KW2592 : 'KW' '2592';\n"); - grammarBuilder.append("KW2593 : 'KW' '2593';\n"); - grammarBuilder.append("KW2594 : 'KW' '2594';\n"); - grammarBuilder.append("KW2595 : 'KW' '2595';\n"); - grammarBuilder.append("KW2596 : 'KW' '2596';\n"); - grammarBuilder.append("KW2597 : 'KW' '2597';\n"); - grammarBuilder.append("KW2598 : 'KW' '2598';\n"); - grammarBuilder.append("KW2599 : 'KW' '2599';\n"); - grammarBuilder.append("KW2600 : 'KW' '2600';\n"); - grammarBuilder.append("KW2601 : 'KW' '2601';\n"); - grammarBuilder.append("KW2602 : 'KW' '2602';\n"); - grammarBuilder.append("KW2603 : 'KW' '2603';\n"); - grammarBuilder.append("KW2604 : 'KW' '2604';\n"); - grammarBuilder.append("KW2605 : 'KW' '2605';\n"); - grammarBuilder.append("KW2606 : 'KW' '2606';\n"); - grammarBuilder.append("KW2607 : 'KW' '2607';\n"); - grammarBuilder.append("KW2608 : 'KW' '2608';\n"); - grammarBuilder.append("KW2609 : 'KW' '2609';\n"); - grammarBuilder.append("KW2610 : 'KW' '2610';\n"); - grammarBuilder.append("KW2611 : 'KW' '2611';\n"); - grammarBuilder.append("KW2612 : 'KW' '2612';\n"); - grammarBuilder.append("KW2613 : 'KW' '2613';\n"); - grammarBuilder.append("KW2614 : 'KW' '2614';\n"); - grammarBuilder.append("KW2615 : 'KW' '2615';\n"); - grammarBuilder.append("KW2616 : 'KW' '2616';\n"); - grammarBuilder.append("KW2617 : 'KW' '2617';\n"); - grammarBuilder.append("KW2618 : 'KW' '2618';\n"); - grammarBuilder.append("KW2619 : 'KW' '2619';\n"); - grammarBuilder.append("KW2620 : 'KW' '2620';\n"); - grammarBuilder.append("KW2621 : 'KW' '2621';\n"); - grammarBuilder.append("KW2622 : 'KW' '2622';\n"); - grammarBuilder.append("KW2623 : 'KW' '2623';\n"); - grammarBuilder.append("KW2624 : 'KW' '2624';\n"); - grammarBuilder.append("KW2625 : 'KW' '2625';\n"); - grammarBuilder.append("KW2626 : 'KW' '2626';\n"); - grammarBuilder.append("KW2627 : 'KW' '2627';\n"); - grammarBuilder.append("KW2628 : 'KW' '2628';\n"); - grammarBuilder.append("KW2629 : 'KW' '2629';\n"); - grammarBuilder.append("KW2630 : 'KW' '2630';\n"); - grammarBuilder.append("KW2631 : 'KW' '2631';\n"); - grammarBuilder.append("KW2632 : 'KW' '2632';\n"); - grammarBuilder.append("KW2633 : 'KW' '2633';\n"); - grammarBuilder.append("KW2634 : 'KW' '2634';\n"); - grammarBuilder.append("KW2635 : 'KW' '2635';\n"); - grammarBuilder.append("KW2636 : 'KW' '2636';\n"); - grammarBuilder.append("KW2637 : 'KW' '2637';\n"); - grammarBuilder.append("KW2638 : 'KW' '2638';\n"); - grammarBuilder.append("KW2639 : 'KW' '2639';\n"); - grammarBuilder.append("KW2640 : 'KW' '2640';\n"); - grammarBuilder.append("KW2641 : 'KW' '2641';\n"); - grammarBuilder.append("KW2642 : 'KW' '2642';\n"); - grammarBuilder.append("KW2643 : 'KW' '2643';\n"); - grammarBuilder.append("KW2644 : 'KW' '2644';\n"); - grammarBuilder.append("KW2645 : 'KW' '2645';\n"); - grammarBuilder.append("KW2646 : 'KW' '2646';\n"); - grammarBuilder.append("KW2647 : 'KW' '2647';\n"); - grammarBuilder.append("KW2648 : 'KW' '2648';\n"); - grammarBuilder.append("KW2649 : 'KW' '2649';\n"); - grammarBuilder.append("KW2650 : 'KW' '2650';\n"); - grammarBuilder.append("KW2651 : 'KW' '2651';\n"); - grammarBuilder.append("KW2652 : 'KW' '2652';\n"); - grammarBuilder.append("KW2653 : 'KW' '2653';\n"); - grammarBuilder.append("KW2654 : 'KW' '2654';\n"); - grammarBuilder.append("KW2655 : 'KW' '2655';\n"); - grammarBuilder.append("KW2656 : 'KW' '2656';\n"); - grammarBuilder.append("KW2657 : 'KW' '2657';\n"); - grammarBuilder.append("KW2658 : 'KW' '2658';\n"); - grammarBuilder.append("KW2659 : 'KW' '2659';\n"); - grammarBuilder.append("KW2660 : 'KW' '2660';\n"); - grammarBuilder.append("KW2661 : 'KW' '2661';\n"); - grammarBuilder.append("KW2662 : 'KW' '2662';\n"); - grammarBuilder.append("KW2663 : 'KW' '2663';\n"); - grammarBuilder.append("KW2664 : 'KW' '2664';\n"); - grammarBuilder.append("KW2665 : 'KW' '2665';\n"); - grammarBuilder.append("KW2666 : 'KW' '2666';\n"); - grammarBuilder.append("KW2667 : 'KW' '2667';\n"); - grammarBuilder.append("KW2668 : 'KW' '2668';\n"); - grammarBuilder.append("KW2669 : 'KW' '2669';\n"); - grammarBuilder.append("KW2670 : 'KW' '2670';\n"); - grammarBuilder.append("KW2671 : 'KW' '2671';\n"); - grammarBuilder.append("KW2672 : 'KW' '2672';\n"); - grammarBuilder.append("KW2673 : 'KW' '2673';\n"); - grammarBuilder.append("KW2674 : 'KW' '2674';\n"); - grammarBuilder.append("KW2675 : 'KW' '2675';\n"); - grammarBuilder.append("KW2676 : 'KW' '2676';\n"); - grammarBuilder.append("KW2677 : 'KW' '2677';\n"); - grammarBuilder.append("KW2678 : 'KW' '2678';\n"); - grammarBuilder.append("KW2679 : 'KW' '2679';\n"); - grammarBuilder.append("KW2680 : 'KW' '2680';\n"); - grammarBuilder.append("KW2681 : 'KW' '2681';\n"); - grammarBuilder.append("KW2682 : 'KW' '2682';\n"); - grammarBuilder.append("KW2683 : 'KW' '2683';\n"); - grammarBuilder.append("KW2684 : 'KW' '2684';\n"); - grammarBuilder.append("KW2685 : 'KW' '2685';\n"); - grammarBuilder.append("KW2686 : 'KW' '2686';\n"); - grammarBuilder.append("KW2687 : 'KW' '2687';\n"); - grammarBuilder.append("KW2688 : 'KW' '2688';\n"); - grammarBuilder.append("KW2689 : 'KW' '2689';\n"); - grammarBuilder.append("KW2690 : 'KW' '2690';\n"); - grammarBuilder.append("KW2691 : 'KW' '2691';\n"); - grammarBuilder.append("KW2692 : 'KW' '2692';\n"); - grammarBuilder.append("KW2693 : 'KW' '2693';\n"); - grammarBuilder.append("KW2694 : 'KW' '2694';\n"); - grammarBuilder.append("KW2695 : 'KW' '2695';\n"); - grammarBuilder.append("KW2696 : 'KW' '2696';\n"); - grammarBuilder.append("KW2697 : 'KW' '2697';\n"); - grammarBuilder.append("KW2698 : 'KW' '2698';\n"); - grammarBuilder.append("KW2699 : 'KW' '2699';\n"); - grammarBuilder.append("KW2700 : 'KW' '2700';\n"); - grammarBuilder.append("KW2701 : 'KW' '2701';\n"); - grammarBuilder.append("KW2702 : 'KW' '2702';\n"); - grammarBuilder.append("KW2703 : 'KW' '2703';\n"); - grammarBuilder.append("KW2704 : 'KW' '2704';\n"); - grammarBuilder.append("KW2705 : 'KW' '2705';\n"); - grammarBuilder.append("KW2706 : 'KW' '2706';\n"); - grammarBuilder.append("KW2707 : 'KW' '2707';\n"); - grammarBuilder.append("KW2708 : 'KW' '2708';\n"); - grammarBuilder.append("KW2709 : 'KW' '2709';\n"); - grammarBuilder.append("KW2710 : 'KW' '2710';\n"); - grammarBuilder.append("KW2711 : 'KW' '2711';\n"); - grammarBuilder.append("KW2712 : 'KW' '2712';\n"); - grammarBuilder.append("KW2713 : 'KW' '2713';\n"); - grammarBuilder.append("KW2714 : 'KW' '2714';\n"); - grammarBuilder.append("KW2715 : 'KW' '2715';\n"); - grammarBuilder.append("KW2716 : 'KW' '2716';\n"); - grammarBuilder.append("KW2717 : 'KW' '2717';\n"); - grammarBuilder.append("KW2718 : 'KW' '2718';\n"); - grammarBuilder.append("KW2719 : 'KW' '2719';\n"); - grammarBuilder.append("KW2720 : 'KW' '2720';\n"); - grammarBuilder.append("KW2721 : 'KW' '2721';\n"); - grammarBuilder.append("KW2722 : 'KW' '2722';\n"); - grammarBuilder.append("KW2723 : 'KW' '2723';\n"); - grammarBuilder.append("KW2724 : 'KW' '2724';\n"); - grammarBuilder.append("KW2725 : 'KW' '2725';\n"); - grammarBuilder.append("KW2726 : 'KW' '2726';\n"); - grammarBuilder.append("KW2727 : 'KW' '2727';\n"); - grammarBuilder.append("KW2728 : 'KW' '2728';\n"); - grammarBuilder.append("KW2729 : 'KW' '2729';\n"); - grammarBuilder.append("KW2730 : 'KW' '2730';\n"); - grammarBuilder.append("KW2731 : 'KW' '2731';\n"); - grammarBuilder.append("KW2732 : 'KW' '2732';\n"); - grammarBuilder.append("KW2733 : 'KW' '2733';\n"); - grammarBuilder.append("KW2734 : 'KW' '2734';\n"); - grammarBuilder.append("KW2735 : 'KW' '2735';\n"); - grammarBuilder.append("KW2736 : 'KW' '2736';\n"); - grammarBuilder.append("KW2737 : 'KW' '2737';\n"); - grammarBuilder.append("KW2738 : 'KW' '2738';\n"); - grammarBuilder.append("KW2739 : 'KW' '2739';\n"); - grammarBuilder.append("KW2740 : 'KW' '2740';\n"); - grammarBuilder.append("KW2741 : 'KW' '2741';\n"); - grammarBuilder.append("KW2742 : 'KW' '2742';\n"); - grammarBuilder.append("KW2743 : 'KW' '2743';\n"); - grammarBuilder.append("KW2744 : 'KW' '2744';\n"); - grammarBuilder.append("KW2745 : 'KW' '2745';\n"); - grammarBuilder.append("KW2746 : 'KW' '2746';\n"); - grammarBuilder.append("KW2747 : 'KW' '2747';\n"); - grammarBuilder.append("KW2748 : 'KW' '2748';\n"); - grammarBuilder.append("KW2749 : 'KW' '2749';\n"); - grammarBuilder.append("KW2750 : 'KW' '2750';\n"); - grammarBuilder.append("KW2751 : 'KW' '2751';\n"); - grammarBuilder.append("KW2752 : 'KW' '2752';\n"); - grammarBuilder.append("KW2753 : 'KW' '2753';\n"); - grammarBuilder.append("KW2754 : 'KW' '2754';\n"); - grammarBuilder.append("KW2755 : 'KW' '2755';\n"); - grammarBuilder.append("KW2756 : 'KW' '2756';\n"); - grammarBuilder.append("KW2757 : 'KW' '2757';\n"); - grammarBuilder.append("KW2758 : 'KW' '2758';\n"); - grammarBuilder.append("KW2759 : 'KW' '2759';\n"); - grammarBuilder.append("KW2760 : 'KW' '2760';\n"); - grammarBuilder.append("KW2761 : 'KW' '2761';\n"); - grammarBuilder.append("KW2762 : 'KW' '2762';\n"); - grammarBuilder.append("KW2763 : 'KW' '2763';\n"); - grammarBuilder.append("KW2764 : 'KW' '2764';\n"); - grammarBuilder.append("KW2765 : 'KW' '2765';\n"); - grammarBuilder.append("KW2766 : 'KW' '2766';\n"); - grammarBuilder.append("KW2767 : 'KW' '2767';\n"); - grammarBuilder.append("KW2768 : 'KW' '2768';\n"); - grammarBuilder.append("KW2769 : 'KW' '2769';\n"); - grammarBuilder.append("KW2770 : 'KW' '2770';\n"); - grammarBuilder.append("KW2771 : 'KW' '2771';\n"); - grammarBuilder.append("KW2772 : 'KW' '2772';\n"); - grammarBuilder.append("KW2773 : 'KW' '2773';\n"); - grammarBuilder.append("KW2774 : 'KW' '2774';\n"); - grammarBuilder.append("KW2775 : 'KW' '2775';\n"); - grammarBuilder.append("KW2776 : 'KW' '2776';\n"); - grammarBuilder.append("KW2777 : 'KW' '2777';\n"); - grammarBuilder.append("KW2778 : 'KW' '2778';\n"); - grammarBuilder.append("KW2779 : 'KW' '2779';\n"); - grammarBuilder.append("KW2780 : 'KW' '2780';\n"); - grammarBuilder.append("KW2781 : 'KW' '2781';\n"); - grammarBuilder.append("KW2782 : 'KW' '2782';\n"); - grammarBuilder.append("KW2783 : 'KW' '2783';\n"); - grammarBuilder.append("KW2784 : 'KW' '2784';\n"); - grammarBuilder.append("KW2785 : 'KW' '2785';\n"); - grammarBuilder.append("KW2786 : 'KW' '2786';\n"); - grammarBuilder.append("KW2787 : 'KW' '2787';\n"); - grammarBuilder.append("KW2788 : 'KW' '2788';\n"); - grammarBuilder.append("KW2789 : 'KW' '2789';\n"); - grammarBuilder.append("KW2790 : 'KW' '2790';\n"); - grammarBuilder.append("KW2791 : 'KW' '2791';\n"); - grammarBuilder.append("KW2792 : 'KW' '2792';\n"); - grammarBuilder.append("KW2793 : 'KW' '2793';\n"); - grammarBuilder.append("KW2794 : 'KW' '2794';\n"); - grammarBuilder.append("KW2795 : 'KW' '2795';\n"); - grammarBuilder.append("KW2796 : 'KW' '2796';\n"); - grammarBuilder.append("KW2797 : 'KW' '2797';\n"); - grammarBuilder.append("KW2798 : 'KW' '2798';\n"); - grammarBuilder.append("KW2799 : 'KW' '2799';\n"); - grammarBuilder.append("KW2800 : 'KW' '2800';\n"); - grammarBuilder.append("KW2801 : 'KW' '2801';\n"); - grammarBuilder.append("KW2802 : 'KW' '2802';\n"); - grammarBuilder.append("KW2803 : 'KW' '2803';\n"); - grammarBuilder.append("KW2804 : 'KW' '2804';\n"); - grammarBuilder.append("KW2805 : 'KW' '2805';\n"); - grammarBuilder.append("KW2806 : 'KW' '2806';\n"); - grammarBuilder.append("KW2807 : 'KW' '2807';\n"); - grammarBuilder.append("KW2808 : 'KW' '2808';\n"); - grammarBuilder.append("KW2809 : 'KW' '2809';\n"); - grammarBuilder.append("KW2810 : 'KW' '2810';\n"); - grammarBuilder.append("KW2811 : 'KW' '2811';\n"); - grammarBuilder.append("KW2812 : 'KW' '2812';\n"); - grammarBuilder.append("KW2813 : 'KW' '2813';\n"); - grammarBuilder.append("KW2814 : 'KW' '2814';\n"); - grammarBuilder.append("KW2815 : 'KW' '2815';\n"); - grammarBuilder.append("KW2816 : 'KW' '2816';\n"); - grammarBuilder.append("KW2817 : 'KW' '2817';\n"); - grammarBuilder.append("KW2818 : 'KW' '2818';\n"); - grammarBuilder.append("KW2819 : 'KW' '2819';\n"); - grammarBuilder.append("KW2820 : 'KW' '2820';\n"); - grammarBuilder.append("KW2821 : 'KW' '2821';\n"); - grammarBuilder.append("KW2822 : 'KW' '2822';\n"); - grammarBuilder.append("KW2823 : 'KW' '2823';\n"); - grammarBuilder.append("KW2824 : 'KW' '2824';\n"); - grammarBuilder.append("KW2825 : 'KW' '2825';\n"); - grammarBuilder.append("KW2826 : 'KW' '2826';\n"); - grammarBuilder.append("KW2827 : 'KW' '2827';\n"); - grammarBuilder.append("KW2828 : 'KW' '2828';\n"); - grammarBuilder.append("KW2829 : 'KW' '2829';\n"); - grammarBuilder.append("KW2830 : 'KW' '2830';\n"); - grammarBuilder.append("KW2831 : 'KW' '2831';\n"); - grammarBuilder.append("KW2832 : 'KW' '2832';\n"); - grammarBuilder.append("KW2833 : 'KW' '2833';\n"); - grammarBuilder.append("KW2834 : 'KW' '2834';\n"); - grammarBuilder.append("KW2835 : 'KW' '2835';\n"); - grammarBuilder.append("KW2836 : 'KW' '2836';\n"); - grammarBuilder.append("KW2837 : 'KW' '2837';\n"); - grammarBuilder.append("KW2838 : 'KW' '2838';\n"); - grammarBuilder.append("KW2839 : 'KW' '2839';\n"); - grammarBuilder.append("KW2840 : 'KW' '2840';\n"); - grammarBuilder.append("KW2841 : 'KW' '2841';\n"); - grammarBuilder.append("KW2842 : 'KW' '2842';\n"); - grammarBuilder.append("KW2843 : 'KW' '2843';\n"); - grammarBuilder.append("KW2844 : 'KW' '2844';\n"); - grammarBuilder.append("KW2845 : 'KW' '2845';\n"); - grammarBuilder.append("KW2846 : 'KW' '2846';\n"); - grammarBuilder.append("KW2847 : 'KW' '2847';\n"); - grammarBuilder.append("KW2848 : 'KW' '2848';\n"); - grammarBuilder.append("KW2849 : 'KW' '2849';\n"); - grammarBuilder.append("KW2850 : 'KW' '2850';\n"); - grammarBuilder.append("KW2851 : 'KW' '2851';\n"); - grammarBuilder.append("KW2852 : 'KW' '2852';\n"); - grammarBuilder.append("KW2853 : 'KW' '2853';\n"); - grammarBuilder.append("KW2854 : 'KW' '2854';\n"); - grammarBuilder.append("KW2855 : 'KW' '2855';\n"); - grammarBuilder.append("KW2856 : 'KW' '2856';\n"); - grammarBuilder.append("KW2857 : 'KW' '2857';\n"); - grammarBuilder.append("KW2858 : 'KW' '2858';\n"); - grammarBuilder.append("KW2859 : 'KW' '2859';\n"); - grammarBuilder.append("KW2860 : 'KW' '2860';\n"); - grammarBuilder.append("KW2861 : 'KW' '2861';\n"); - grammarBuilder.append("KW2862 : 'KW' '2862';\n"); - grammarBuilder.append("KW2863 : 'KW' '2863';\n"); - grammarBuilder.append("KW2864 : 'KW' '2864';\n"); - grammarBuilder.append("KW2865 : 'KW' '2865';\n"); - grammarBuilder.append("KW2866 : 'KW' '2866';\n"); - grammarBuilder.append("KW2867 : 'KW' '2867';\n"); - grammarBuilder.append("KW2868 : 'KW' '2868';\n"); - grammarBuilder.append("KW2869 : 'KW' '2869';\n"); - grammarBuilder.append("KW2870 : 'KW' '2870';\n"); - grammarBuilder.append("KW2871 : 'KW' '2871';\n"); - grammarBuilder.append("KW2872 : 'KW' '2872';\n"); - grammarBuilder.append("KW2873 : 'KW' '2873';\n"); - grammarBuilder.append("KW2874 : 'KW' '2874';\n"); - grammarBuilder.append("KW2875 : 'KW' '2875';\n"); - grammarBuilder.append("KW2876 : 'KW' '2876';\n"); - grammarBuilder.append("KW2877 : 'KW' '2877';\n"); - grammarBuilder.append("KW2878 : 'KW' '2878';\n"); - grammarBuilder.append("KW2879 : 'KW' '2879';\n"); - grammarBuilder.append("KW2880 : 'KW' '2880';\n"); - grammarBuilder.append("KW2881 : 'KW' '2881';\n"); - grammarBuilder.append("KW2882 : 'KW' '2882';\n"); - grammarBuilder.append("KW2883 : 'KW' '2883';\n"); - grammarBuilder.append("KW2884 : 'KW' '2884';\n"); - grammarBuilder.append("KW2885 : 'KW' '2885';\n"); - grammarBuilder.append("KW2886 : 'KW' '2886';\n"); - grammarBuilder.append("KW2887 : 'KW' '2887';\n"); - grammarBuilder.append("KW2888 : 'KW' '2888';\n"); - grammarBuilder.append("KW2889 : 'KW' '2889';\n"); - grammarBuilder.append("KW2890 : 'KW' '2890';\n"); - grammarBuilder.append("KW2891 : 'KW' '2891';\n"); - grammarBuilder.append("KW2892 : 'KW' '2892';\n"); - grammarBuilder.append("KW2893 : 'KW' '2893';\n"); - grammarBuilder.append("KW2894 : 'KW' '2894';\n"); - grammarBuilder.append("KW2895 : 'KW' '2895';\n"); - grammarBuilder.append("KW2896 : 'KW' '2896';\n"); - grammarBuilder.append("KW2897 : 'KW' '2897';\n"); - grammarBuilder.append("KW2898 : 'KW' '2898';\n"); - grammarBuilder.append("KW2899 : 'KW' '2899';\n"); - grammarBuilder.append("KW2900 : 'KW' '2900';\n"); - grammarBuilder.append("KW2901 : 'KW' '2901';\n"); - grammarBuilder.append("KW2902 : 'KW' '2902';\n"); - grammarBuilder.append("KW2903 : 'KW' '2903';\n"); - grammarBuilder.append("KW2904 : 'KW' '2904';\n"); - grammarBuilder.append("KW2905 : 'KW' '2905';\n"); - grammarBuilder.append("KW2906 : 'KW' '2906';\n"); - grammarBuilder.append("KW2907 : 'KW' '2907';\n"); - grammarBuilder.append("KW2908 : 'KW' '2908';\n"); - grammarBuilder.append("KW2909 : 'KW' '2909';\n"); - grammarBuilder.append("KW2910 : 'KW' '2910';\n"); - grammarBuilder.append("KW2911 : 'KW' '2911';\n"); - grammarBuilder.append("KW2912 : 'KW' '2912';\n"); - grammarBuilder.append("KW2913 : 'KW' '2913';\n"); - grammarBuilder.append("KW2914 : 'KW' '2914';\n"); - grammarBuilder.append("KW2915 : 'KW' '2915';\n"); - grammarBuilder.append("KW2916 : 'KW' '2916';\n"); - grammarBuilder.append("KW2917 : 'KW' '2917';\n"); - grammarBuilder.append("KW2918 : 'KW' '2918';\n"); - grammarBuilder.append("KW2919 : 'KW' '2919';\n"); - grammarBuilder.append("KW2920 : 'KW' '2920';\n"); - grammarBuilder.append("KW2921 : 'KW' '2921';\n"); - grammarBuilder.append("KW2922 : 'KW' '2922';\n"); - grammarBuilder.append("KW2923 : 'KW' '2923';\n"); - grammarBuilder.append("KW2924 : 'KW' '2924';\n"); - grammarBuilder.append("KW2925 : 'KW' '2925';\n"); - grammarBuilder.append("KW2926 : 'KW' '2926';\n"); - grammarBuilder.append("KW2927 : 'KW' '2927';\n"); - grammarBuilder.append("KW2928 : 'KW' '2928';\n"); - grammarBuilder.append("KW2929 : 'KW' '2929';\n"); - grammarBuilder.append("KW2930 : 'KW' '2930';\n"); - grammarBuilder.append("KW2931 : 'KW' '2931';\n"); - grammarBuilder.append("KW2932 : 'KW' '2932';\n"); - grammarBuilder.append("KW2933 : 'KW' '2933';\n"); - grammarBuilder.append("KW2934 : 'KW' '2934';\n"); - grammarBuilder.append("KW2935 : 'KW' '2935';\n"); - grammarBuilder.append("KW2936 : 'KW' '2936';\n"); - grammarBuilder.append("KW2937 : 'KW' '2937';\n"); - grammarBuilder.append("KW2938 : 'KW' '2938';\n"); - grammarBuilder.append("KW2939 : 'KW' '2939';\n"); - grammarBuilder.append("KW2940 : 'KW' '2940';\n"); - grammarBuilder.append("KW2941 : 'KW' '2941';\n"); - grammarBuilder.append("KW2942 : 'KW' '2942';\n"); - grammarBuilder.append("KW2943 : 'KW' '2943';\n"); - grammarBuilder.append("KW2944 : 'KW' '2944';\n"); - grammarBuilder.append("KW2945 : 'KW' '2945';\n"); - grammarBuilder.append("KW2946 : 'KW' '2946';\n"); - grammarBuilder.append("KW2947 : 'KW' '2947';\n"); - grammarBuilder.append("KW2948 : 'KW' '2948';\n"); - grammarBuilder.append("KW2949 : 'KW' '2949';\n"); - grammarBuilder.append("KW2950 : 'KW' '2950';\n"); - grammarBuilder.append("KW2951 : 'KW' '2951';\n"); - grammarBuilder.append("KW2952 : 'KW' '2952';\n"); - grammarBuilder.append("KW2953 : 'KW' '2953';\n"); - grammarBuilder.append("KW2954 : 'KW' '2954';\n"); - grammarBuilder.append("KW2955 : 'KW' '2955';\n"); - grammarBuilder.append("KW2956 : 'KW' '2956';\n"); - grammarBuilder.append("KW2957 : 'KW' '2957';\n"); - grammarBuilder.append("KW2958 : 'KW' '2958';\n"); - grammarBuilder.append("KW2959 : 'KW' '2959';\n"); - grammarBuilder.append("KW2960 : 'KW' '2960';\n"); - grammarBuilder.append("KW2961 : 'KW' '2961';\n"); - grammarBuilder.append("KW2962 : 'KW' '2962';\n"); - grammarBuilder.append("KW2963 : 'KW' '2963';\n"); - grammarBuilder.append("KW2964 : 'KW' '2964';\n"); - grammarBuilder.append("KW2965 : 'KW' '2965';\n"); - grammarBuilder.append("KW2966 : 'KW' '2966';\n"); - grammarBuilder.append("KW2967 : 'KW' '2967';\n"); - grammarBuilder.append("KW2968 : 'KW' '2968';\n"); - grammarBuilder.append("KW2969 : 'KW' '2969';\n"); - grammarBuilder.append("KW2970 : 'KW' '2970';\n"); - grammarBuilder.append("KW2971 : 'KW' '2971';\n"); - grammarBuilder.append("KW2972 : 'KW' '2972';\n"); - grammarBuilder.append("KW2973 : 'KW' '2973';\n"); - grammarBuilder.append("KW2974 : 'KW' '2974';\n"); - grammarBuilder.append("KW2975 : 'KW' '2975';\n"); - grammarBuilder.append("KW2976 : 'KW' '2976';\n"); - grammarBuilder.append("KW2977 : 'KW' '2977';\n"); - grammarBuilder.append("KW2978 : 'KW' '2978';\n"); - grammarBuilder.append("KW2979 : 'KW' '2979';\n"); - grammarBuilder.append("KW2980 : 'KW' '2980';\n"); - grammarBuilder.append("KW2981 : 'KW' '2981';\n"); - grammarBuilder.append("KW2982 : 'KW' '2982';\n"); - grammarBuilder.append("KW2983 : 'KW' '2983';\n"); - grammarBuilder.append("KW2984 : 'KW' '2984';\n"); - grammarBuilder.append("KW2985 : 'KW' '2985';\n"); - grammarBuilder.append("KW2986 : 'KW' '2986';\n"); - grammarBuilder.append("KW2987 : 'KW' '2987';\n"); - grammarBuilder.append("KW2988 : 'KW' '2988';\n"); - grammarBuilder.append("KW2989 : 'KW' '2989';\n"); - grammarBuilder.append("KW2990 : 'KW' '2990';\n"); - grammarBuilder.append("KW2991 : 'KW' '2991';\n"); - grammarBuilder.append("KW2992 : 'KW' '2992';\n"); - grammarBuilder.append("KW2993 : 'KW' '2993';\n"); - grammarBuilder.append("KW2994 : 'KW' '2994';\n"); - grammarBuilder.append("KW2995 : 'KW' '2995';\n"); - grammarBuilder.append("KW2996 : 'KW' '2996';\n"); - grammarBuilder.append("KW2997 : 'KW' '2997';\n"); - grammarBuilder.append("KW2998 : 'KW' '2998';\n"); - grammarBuilder.append("KW2999 : 'KW' '2999';\n"); - grammarBuilder.append("KW3000 : 'KW' '3000';\n"); - grammarBuilder.append("KW3001 : 'KW' '3001';\n"); - grammarBuilder.append("KW3002 : 'KW' '3002';\n"); - grammarBuilder.append("KW3003 : 'KW' '3003';\n"); - grammarBuilder.append("KW3004 : 'KW' '3004';\n"); - grammarBuilder.append("KW3005 : 'KW' '3005';\n"); - grammarBuilder.append("KW3006 : 'KW' '3006';\n"); - grammarBuilder.append("KW3007 : 'KW' '3007';\n"); - grammarBuilder.append("KW3008 : 'KW' '3008';\n"); - grammarBuilder.append("KW3009 : 'KW' '3009';\n"); - grammarBuilder.append("KW3010 : 'KW' '3010';\n"); - grammarBuilder.append("KW3011 : 'KW' '3011';\n"); - grammarBuilder.append("KW3012 : 'KW' '3012';\n"); - grammarBuilder.append("KW3013 : 'KW' '3013';\n"); - grammarBuilder.append("KW3014 : 'KW' '3014';\n"); - grammarBuilder.append("KW3015 : 'KW' '3015';\n"); - grammarBuilder.append("KW3016 : 'KW' '3016';\n"); - grammarBuilder.append("KW3017 : 'KW' '3017';\n"); - grammarBuilder.append("KW3018 : 'KW' '3018';\n"); - grammarBuilder.append("KW3019 : 'KW' '3019';\n"); - grammarBuilder.append("KW3020 : 'KW' '3020';\n"); - grammarBuilder.append("KW3021 : 'KW' '3021';\n"); - grammarBuilder.append("KW3022 : 'KW' '3022';\n"); - grammarBuilder.append("KW3023 : 'KW' '3023';\n"); - grammarBuilder.append("KW3024 : 'KW' '3024';\n"); - grammarBuilder.append("KW3025 : 'KW' '3025';\n"); - grammarBuilder.append("KW3026 : 'KW' '3026';\n"); - grammarBuilder.append("KW3027 : 'KW' '3027';\n"); - grammarBuilder.append("KW3028 : 'KW' '3028';\n"); - grammarBuilder.append("KW3029 : 'KW' '3029';\n"); - grammarBuilder.append("KW3030 : 'KW' '3030';\n"); - grammarBuilder.append("KW3031 : 'KW' '3031';\n"); - grammarBuilder.append("KW3032 : 'KW' '3032';\n"); - grammarBuilder.append("KW3033 : 'KW' '3033';\n"); - grammarBuilder.append("KW3034 : 'KW' '3034';\n"); - grammarBuilder.append("KW3035 : 'KW' '3035';\n"); - grammarBuilder.append("KW3036 : 'KW' '3036';\n"); - grammarBuilder.append("KW3037 : 'KW' '3037';\n"); - grammarBuilder.append("KW3038 : 'KW' '3038';\n"); - grammarBuilder.append("KW3039 : 'KW' '3039';\n"); - grammarBuilder.append("KW3040 : 'KW' '3040';\n"); - grammarBuilder.append("KW3041 : 'KW' '3041';\n"); - grammarBuilder.append("KW3042 : 'KW' '3042';\n"); - grammarBuilder.append("KW3043 : 'KW' '3043';\n"); - grammarBuilder.append("KW3044 : 'KW' '3044';\n"); - grammarBuilder.append("KW3045 : 'KW' '3045';\n"); - grammarBuilder.append("KW3046 : 'KW' '3046';\n"); - grammarBuilder.append("KW3047 : 'KW' '3047';\n"); - grammarBuilder.append("KW3048 : 'KW' '3048';\n"); - grammarBuilder.append("KW3049 : 'KW' '3049';\n"); - grammarBuilder.append("KW3050 : 'KW' '3050';\n"); - grammarBuilder.append("KW3051 : 'KW' '3051';\n"); - grammarBuilder.append("KW3052 : 'KW' '3052';\n"); - grammarBuilder.append("KW3053 : 'KW' '3053';\n"); - grammarBuilder.append("KW3054 : 'KW' '3054';\n"); - grammarBuilder.append("KW3055 : 'KW' '3055';\n"); - grammarBuilder.append("KW3056 : 'KW' '3056';\n"); - grammarBuilder.append("KW3057 : 'KW' '3057';\n"); - grammarBuilder.append("KW3058 : 'KW' '3058';\n"); - grammarBuilder.append("KW3059 : 'KW' '3059';\n"); - grammarBuilder.append("KW3060 : 'KW' '3060';\n"); - grammarBuilder.append("KW3061 : 'KW' '3061';\n"); - grammarBuilder.append("KW3062 : 'KW' '3062';\n"); - grammarBuilder.append("KW3063 : 'KW' '3063';\n"); - grammarBuilder.append("KW3064 : 'KW' '3064';\n"); - grammarBuilder.append("KW3065 : 'KW' '3065';\n"); - grammarBuilder.append("KW3066 : 'KW' '3066';\n"); - grammarBuilder.append("KW3067 : 'KW' '3067';\n"); - grammarBuilder.append("KW3068 : 'KW' '3068';\n"); - grammarBuilder.append("KW3069 : 'KW' '3069';\n"); - grammarBuilder.append("KW3070 : 'KW' '3070';\n"); - grammarBuilder.append("KW3071 : 'KW' '3071';\n"); - grammarBuilder.append("KW3072 : 'KW' '3072';\n"); - grammarBuilder.append("KW3073 : 'KW' '3073';\n"); - grammarBuilder.append("KW3074 : 'KW' '3074';\n"); - grammarBuilder.append("KW3075 : 'KW' '3075';\n"); - grammarBuilder.append("KW3076 : 'KW' '3076';\n"); - grammarBuilder.append("KW3077 : 'KW' '3077';\n"); - grammarBuilder.append("KW3078 : 'KW' '3078';\n"); - grammarBuilder.append("KW3079 : 'KW' '3079';\n"); - grammarBuilder.append("KW3080 : 'KW' '3080';\n"); - grammarBuilder.append("KW3081 : 'KW' '3081';\n"); - grammarBuilder.append("KW3082 : 'KW' '3082';\n"); - grammarBuilder.append("KW3083 : 'KW' '3083';\n"); - grammarBuilder.append("KW3084 : 'KW' '3084';\n"); - grammarBuilder.append("KW3085 : 'KW' '3085';\n"); - grammarBuilder.append("KW3086 : 'KW' '3086';\n"); - grammarBuilder.append("KW3087 : 'KW' '3087';\n"); - grammarBuilder.append("KW3088 : 'KW' '3088';\n"); - grammarBuilder.append("KW3089 : 'KW' '3089';\n"); - grammarBuilder.append("KW3090 : 'KW' '3090';\n"); - grammarBuilder.append("KW3091 : 'KW' '3091';\n"); - grammarBuilder.append("KW3092 : 'KW' '3092';\n"); - grammarBuilder.append("KW3093 : 'KW' '3093';\n"); - grammarBuilder.append("KW3094 : 'KW' '3094';\n"); - grammarBuilder.append("KW3095 : 'KW' '3095';\n"); - grammarBuilder.append("KW3096 : 'KW' '3096';\n"); - grammarBuilder.append("KW3097 : 'KW' '3097';\n"); - grammarBuilder.append("KW3098 : 'KW' '3098';\n"); - grammarBuilder.append("KW3099 : 'KW' '3099';\n"); - grammarBuilder.append("KW3100 : 'KW' '3100';\n"); - grammarBuilder.append("KW3101 : 'KW' '3101';\n"); - grammarBuilder.append("KW3102 : 'KW' '3102';\n"); - grammarBuilder.append("KW3103 : 'KW' '3103';\n"); - grammarBuilder.append("KW3104 : 'KW' '3104';\n"); - grammarBuilder.append("KW3105 : 'KW' '3105';\n"); - grammarBuilder.append("KW3106 : 'KW' '3106';\n"); - grammarBuilder.append("KW3107 : 'KW' '3107';\n"); - grammarBuilder.append("KW3108 : 'KW' '3108';\n"); - grammarBuilder.append("KW3109 : 'KW' '3109';\n"); - grammarBuilder.append("KW3110 : 'KW' '3110';\n"); - grammarBuilder.append("KW3111 : 'KW' '3111';\n"); - grammarBuilder.append("KW3112 : 'KW' '3112';\n"); - grammarBuilder.append("KW3113 : 'KW' '3113';\n"); - grammarBuilder.append("KW3114 : 'KW' '3114';\n"); - grammarBuilder.append("KW3115 : 'KW' '3115';\n"); - grammarBuilder.append("KW3116 : 'KW' '3116';\n"); - grammarBuilder.append("KW3117 : 'KW' '3117';\n"); - grammarBuilder.append("KW3118 : 'KW' '3118';\n"); - grammarBuilder.append("KW3119 : 'KW' '3119';\n"); - grammarBuilder.append("KW3120 : 'KW' '3120';\n"); - grammarBuilder.append("KW3121 : 'KW' '3121';\n"); - grammarBuilder.append("KW3122 : 'KW' '3122';\n"); - grammarBuilder.append("KW3123 : 'KW' '3123';\n"); - grammarBuilder.append("KW3124 : 'KW' '3124';\n"); - grammarBuilder.append("KW3125 : 'KW' '3125';\n"); - grammarBuilder.append("KW3126 : 'KW' '3126';\n"); - grammarBuilder.append("KW3127 : 'KW' '3127';\n"); - grammarBuilder.append("KW3128 : 'KW' '3128';\n"); - grammarBuilder.append("KW3129 : 'KW' '3129';\n"); - grammarBuilder.append("KW3130 : 'KW' '3130';\n"); - grammarBuilder.append("KW3131 : 'KW' '3131';\n"); - grammarBuilder.append("KW3132 : 'KW' '3132';\n"); - grammarBuilder.append("KW3133 : 'KW' '3133';\n"); - grammarBuilder.append("KW3134 : 'KW' '3134';\n"); - grammarBuilder.append("KW3135 : 'KW' '3135';\n"); - grammarBuilder.append("KW3136 : 'KW' '3136';\n"); - grammarBuilder.append("KW3137 : 'KW' '3137';\n"); - grammarBuilder.append("KW3138 : 'KW' '3138';\n"); - grammarBuilder.append("KW3139 : 'KW' '3139';\n"); - grammarBuilder.append("KW3140 : 'KW' '3140';\n"); - grammarBuilder.append("KW3141 : 'KW' '3141';\n"); - grammarBuilder.append("KW3142 : 'KW' '3142';\n"); - grammarBuilder.append("KW3143 : 'KW' '3143';\n"); - grammarBuilder.append("KW3144 : 'KW' '3144';\n"); - grammarBuilder.append("KW3145 : 'KW' '3145';\n"); - grammarBuilder.append("KW3146 : 'KW' '3146';\n"); - grammarBuilder.append("KW3147 : 'KW' '3147';\n"); - grammarBuilder.append("KW3148 : 'KW' '3148';\n"); - grammarBuilder.append("KW3149 : 'KW' '3149';\n"); - grammarBuilder.append("KW3150 : 'KW' '3150';\n"); - grammarBuilder.append("KW3151 : 'KW' '3151';\n"); - grammarBuilder.append("KW3152 : 'KW' '3152';\n"); - grammarBuilder.append("KW3153 : 'KW' '3153';\n"); - grammarBuilder.append("KW3154 : 'KW' '3154';\n"); - grammarBuilder.append("KW3155 : 'KW' '3155';\n"); - grammarBuilder.append("KW3156 : 'KW' '3156';\n"); - grammarBuilder.append("KW3157 : 'KW' '3157';\n"); - grammarBuilder.append("KW3158 : 'KW' '3158';\n"); - grammarBuilder.append("KW3159 : 'KW' '3159';\n"); - grammarBuilder.append("KW3160 : 'KW' '3160';\n"); - grammarBuilder.append("KW3161 : 'KW' '3161';\n"); - grammarBuilder.append("KW3162 : 'KW' '3162';\n"); - grammarBuilder.append("KW3163 : 'KW' '3163';\n"); - grammarBuilder.append("KW3164 : 'KW' '3164';\n"); - grammarBuilder.append("KW3165 : 'KW' '3165';\n"); - grammarBuilder.append("KW3166 : 'KW' '3166';\n"); - grammarBuilder.append("KW3167 : 'KW' '3167';\n"); - grammarBuilder.append("KW3168 : 'KW' '3168';\n"); - grammarBuilder.append("KW3169 : 'KW' '3169';\n"); - grammarBuilder.append("KW3170 : 'KW' '3170';\n"); - grammarBuilder.append("KW3171 : 'KW' '3171';\n"); - grammarBuilder.append("KW3172 : 'KW' '3172';\n"); - grammarBuilder.append("KW3173 : 'KW' '3173';\n"); - grammarBuilder.append("KW3174 : 'KW' '3174';\n"); - grammarBuilder.append("KW3175 : 'KW' '3175';\n"); - grammarBuilder.append("KW3176 : 'KW' '3176';\n"); - grammarBuilder.append("KW3177 : 'KW' '3177';\n"); - grammarBuilder.append("KW3178 : 'KW' '3178';\n"); - grammarBuilder.append("KW3179 : 'KW' '3179';\n"); - grammarBuilder.append("KW3180 : 'KW' '3180';\n"); - grammarBuilder.append("KW3181 : 'KW' '3181';\n"); - grammarBuilder.append("KW3182 : 'KW' '3182';\n"); - grammarBuilder.append("KW3183 : 'KW' '3183';\n"); - grammarBuilder.append("KW3184 : 'KW' '3184';\n"); - grammarBuilder.append("KW3185 : 'KW' '3185';\n"); - grammarBuilder.append("KW3186 : 'KW' '3186';\n"); - grammarBuilder.append("KW3187 : 'KW' '3187';\n"); - grammarBuilder.append("KW3188 : 'KW' '3188';\n"); - grammarBuilder.append("KW3189 : 'KW' '3189';\n"); - grammarBuilder.append("KW3190 : 'KW' '3190';\n"); - grammarBuilder.append("KW3191 : 'KW' '3191';\n"); - grammarBuilder.append("KW3192 : 'KW' '3192';\n"); - grammarBuilder.append("KW3193 : 'KW' '3193';\n"); - grammarBuilder.append("KW3194 : 'KW' '3194';\n"); - grammarBuilder.append("KW3195 : 'KW' '3195';\n"); - grammarBuilder.append("KW3196 : 'KW' '3196';\n"); - grammarBuilder.append("KW3197 : 'KW' '3197';\n"); - grammarBuilder.append("KW3198 : 'KW' '3198';\n"); - grammarBuilder.append("KW3199 : 'KW' '3199';\n"); - grammarBuilder.append("KW3200 : 'KW' '3200';\n"); - grammarBuilder.append("KW3201 : 'KW' '3201';\n"); - grammarBuilder.append("KW3202 : 'KW' '3202';\n"); - grammarBuilder.append("KW3203 : 'KW' '3203';\n"); - grammarBuilder.append("KW3204 : 'KW' '3204';\n"); - grammarBuilder.append("KW3205 : 'KW' '3205';\n"); - grammarBuilder.append("KW3206 : 'KW' '3206';\n"); - grammarBuilder.append("KW3207 : 'KW' '3207';\n"); - grammarBuilder.append("KW3208 : 'KW' '3208';\n"); - grammarBuilder.append("KW3209 : 'KW' '3209';\n"); - grammarBuilder.append("KW3210 : 'KW' '3210';\n"); - grammarBuilder.append("KW3211 : 'KW' '3211';\n"); - grammarBuilder.append("KW3212 : 'KW' '3212';\n"); - grammarBuilder.append("KW3213 : 'KW' '3213';\n"); - grammarBuilder.append("KW3214 : 'KW' '3214';\n"); - grammarBuilder.append("KW3215 : 'KW' '3215';\n"); - grammarBuilder.append("KW3216 : 'KW' '3216';\n"); - grammarBuilder.append("KW3217 : 'KW' '3217';\n"); - grammarBuilder.append("KW3218 : 'KW' '3218';\n"); - grammarBuilder.append("KW3219 : 'KW' '3219';\n"); - grammarBuilder.append("KW3220 : 'KW' '3220';\n"); - grammarBuilder.append("KW3221 : 'KW' '3221';\n"); - grammarBuilder.append("KW3222 : 'KW' '3222';\n"); - grammarBuilder.append("KW3223 : 'KW' '3223';\n"); - grammarBuilder.append("KW3224 : 'KW' '3224';\n"); - grammarBuilder.append("KW3225 : 'KW' '3225';\n"); - grammarBuilder.append("KW3226 : 'KW' '3226';\n"); - grammarBuilder.append("KW3227 : 'KW' '3227';\n"); - grammarBuilder.append("KW3228 : 'KW' '3228';\n"); - grammarBuilder.append("KW3229 : 'KW' '3229';\n"); - grammarBuilder.append("KW3230 : 'KW' '3230';\n"); - grammarBuilder.append("KW3231 : 'KW' '3231';\n"); - grammarBuilder.append("KW3232 : 'KW' '3232';\n"); - grammarBuilder.append("KW3233 : 'KW' '3233';\n"); - grammarBuilder.append("KW3234 : 'KW' '3234';\n"); - grammarBuilder.append("KW3235 : 'KW' '3235';\n"); - grammarBuilder.append("KW3236 : 'KW' '3236';\n"); - grammarBuilder.append("KW3237 : 'KW' '3237';\n"); - grammarBuilder.append("KW3238 : 'KW' '3238';\n"); - grammarBuilder.append("KW3239 : 'KW' '3239';\n"); - grammarBuilder.append("KW3240 : 'KW' '3240';\n"); - grammarBuilder.append("KW3241 : 'KW' '3241';\n"); - grammarBuilder.append("KW3242 : 'KW' '3242';\n"); - grammarBuilder.append("KW3243 : 'KW' '3243';\n"); - grammarBuilder.append("KW3244 : 'KW' '3244';\n"); - grammarBuilder.append("KW3245 : 'KW' '3245';\n"); - grammarBuilder.append("KW3246 : 'KW' '3246';\n"); - grammarBuilder.append("KW3247 : 'KW' '3247';\n"); - grammarBuilder.append("KW3248 : 'KW' '3248';\n"); - grammarBuilder.append("KW3249 : 'KW' '3249';\n"); - grammarBuilder.append("KW3250 : 'KW' '3250';\n"); - grammarBuilder.append("KW3251 : 'KW' '3251';\n"); - grammarBuilder.append("KW3252 : 'KW' '3252';\n"); - grammarBuilder.append("KW3253 : 'KW' '3253';\n"); - grammarBuilder.append("KW3254 : 'KW' '3254';\n"); - grammarBuilder.append("KW3255 : 'KW' '3255';\n"); - grammarBuilder.append("KW3256 : 'KW' '3256';\n"); - grammarBuilder.append("KW3257 : 'KW' '3257';\n"); - grammarBuilder.append("KW3258 : 'KW' '3258';\n"); - grammarBuilder.append("KW3259 : 'KW' '3259';\n"); - grammarBuilder.append("KW3260 : 'KW' '3260';\n"); - grammarBuilder.append("KW3261 : 'KW' '3261';\n"); - grammarBuilder.append("KW3262 : 'KW' '3262';\n"); - grammarBuilder.append("KW3263 : 'KW' '3263';\n"); - grammarBuilder.append("KW3264 : 'KW' '3264';\n"); - grammarBuilder.append("KW3265 : 'KW' '3265';\n"); - grammarBuilder.append("KW3266 : 'KW' '3266';\n"); - grammarBuilder.append("KW3267 : 'KW' '3267';\n"); - grammarBuilder.append("KW3268 : 'KW' '3268';\n"); - grammarBuilder.append("KW3269 : 'KW' '3269';\n"); - grammarBuilder.append("KW3270 : 'KW' '3270';\n"); - grammarBuilder.append("KW3271 : 'KW' '3271';\n"); - grammarBuilder.append("KW3272 : 'KW' '3272';\n"); - grammarBuilder.append("KW3273 : 'KW' '3273';\n"); - grammarBuilder.append("KW3274 : 'KW' '3274';\n"); - grammarBuilder.append("KW3275 : 'KW' '3275';\n"); - grammarBuilder.append("KW3276 : 'KW' '3276';\n"); - grammarBuilder.append("KW3277 : 'KW' '3277';\n"); - grammarBuilder.append("KW3278 : 'KW' '3278';\n"); - grammarBuilder.append("KW3279 : 'KW' '3279';\n"); - grammarBuilder.append("KW3280 : 'KW' '3280';\n"); - grammarBuilder.append("KW3281 : 'KW' '3281';\n"); - grammarBuilder.append("KW3282 : 'KW' '3282';\n"); - grammarBuilder.append("KW3283 : 'KW' '3283';\n"); - grammarBuilder.append("KW3284 : 'KW' '3284';\n"); - grammarBuilder.append("KW3285 : 'KW' '3285';\n"); - grammarBuilder.append("KW3286 : 'KW' '3286';\n"); - grammarBuilder.append("KW3287 : 'KW' '3287';\n"); - grammarBuilder.append("KW3288 : 'KW' '3288';\n"); - grammarBuilder.append("KW3289 : 'KW' '3289';\n"); - grammarBuilder.append("KW3290 : 'KW' '3290';\n"); - grammarBuilder.append("KW3291 : 'KW' '3291';\n"); - grammarBuilder.append("KW3292 : 'KW' '3292';\n"); - grammarBuilder.append("KW3293 : 'KW' '3293';\n"); - grammarBuilder.append("KW3294 : 'KW' '3294';\n"); - grammarBuilder.append("KW3295 : 'KW' '3295';\n"); - grammarBuilder.append("KW3296 : 'KW' '3296';\n"); - grammarBuilder.append("KW3297 : 'KW' '3297';\n"); - grammarBuilder.append("KW3298 : 'KW' '3298';\n"); - grammarBuilder.append("KW3299 : 'KW' '3299';\n"); - grammarBuilder.append("KW3300 : 'KW' '3300';\n"); - grammarBuilder.append("KW3301 : 'KW' '3301';\n"); - grammarBuilder.append("KW3302 : 'KW' '3302';\n"); - grammarBuilder.append("KW3303 : 'KW' '3303';\n"); - grammarBuilder.append("KW3304 : 'KW' '3304';\n"); - grammarBuilder.append("KW3305 : 'KW' '3305';\n"); - grammarBuilder.append("KW3306 : 'KW' '3306';\n"); - grammarBuilder.append("KW3307 : 'KW' '3307';\n"); - grammarBuilder.append("KW3308 : 'KW' '3308';\n"); - grammarBuilder.append("KW3309 : 'KW' '3309';\n"); - grammarBuilder.append("KW3310 : 'KW' '3310';\n"); - grammarBuilder.append("KW3311 : 'KW' '3311';\n"); - grammarBuilder.append("KW3312 : 'KW' '3312';\n"); - grammarBuilder.append("KW3313 : 'KW' '3313';\n"); - grammarBuilder.append("KW3314 : 'KW' '3314';\n"); - grammarBuilder.append("KW3315 : 'KW' '3315';\n"); - grammarBuilder.append("KW3316 : 'KW' '3316';\n"); - grammarBuilder.append("KW3317 : 'KW' '3317';\n"); - grammarBuilder.append("KW3318 : 'KW' '3318';\n"); - grammarBuilder.append("KW3319 : 'KW' '3319';\n"); - grammarBuilder.append("KW3320 : 'KW' '3320';\n"); - grammarBuilder.append("KW3321 : 'KW' '3321';\n"); - grammarBuilder.append("KW3322 : 'KW' '3322';\n"); - grammarBuilder.append("KW3323 : 'KW' '3323';\n"); - grammarBuilder.append("KW3324 : 'KW' '3324';\n"); - grammarBuilder.append("KW3325 : 'KW' '3325';\n"); - grammarBuilder.append("KW3326 : 'KW' '3326';\n"); - grammarBuilder.append("KW3327 : 'KW' '3327';\n"); - grammarBuilder.append("KW3328 : 'KW' '3328';\n"); - grammarBuilder.append("KW3329 : 'KW' '3329';\n"); - grammarBuilder.append("KW3330 : 'KW' '3330';\n"); - grammarBuilder.append("KW3331 : 'KW' '3331';\n"); - grammarBuilder.append("KW3332 : 'KW' '3332';\n"); - grammarBuilder.append("KW3333 : 'KW' '3333';\n"); - grammarBuilder.append("KW3334 : 'KW' '3334';\n"); - grammarBuilder.append("KW3335 : 'KW' '3335';\n"); - grammarBuilder.append("KW3336 : 'KW' '3336';\n"); - grammarBuilder.append("KW3337 : 'KW' '3337';\n"); - grammarBuilder.append("KW3338 : 'KW' '3338';\n"); - grammarBuilder.append("KW3339 : 'KW' '3339';\n"); - grammarBuilder.append("KW3340 : 'KW' '3340';\n"); - grammarBuilder.append("KW3341 : 'KW' '3341';\n"); - grammarBuilder.append("KW3342 : 'KW' '3342';\n"); - grammarBuilder.append("KW3343 : 'KW' '3343';\n"); - grammarBuilder.append("KW3344 : 'KW' '3344';\n"); - grammarBuilder.append("KW3345 : 'KW' '3345';\n"); - grammarBuilder.append("KW3346 : 'KW' '3346';\n"); - grammarBuilder.append("KW3347 : 'KW' '3347';\n"); - grammarBuilder.append("KW3348 : 'KW' '3348';\n"); - grammarBuilder.append("KW3349 : 'KW' '3349';\n"); - grammarBuilder.append("KW3350 : 'KW' '3350';\n"); - grammarBuilder.append("KW3351 : 'KW' '3351';\n"); - grammarBuilder.append("KW3352 : 'KW' '3352';\n"); - grammarBuilder.append("KW3353 : 'KW' '3353';\n"); - grammarBuilder.append("KW3354 : 'KW' '3354';\n"); - grammarBuilder.append("KW3355 : 'KW' '3355';\n"); - grammarBuilder.append("KW3356 : 'KW' '3356';\n"); - grammarBuilder.append("KW3357 : 'KW' '3357';\n"); - grammarBuilder.append("KW3358 : 'KW' '3358';\n"); - grammarBuilder.append("KW3359 : 'KW' '3359';\n"); - grammarBuilder.append("KW3360 : 'KW' '3360';\n"); - grammarBuilder.append("KW3361 : 'KW' '3361';\n"); - grammarBuilder.append("KW3362 : 'KW' '3362';\n"); - grammarBuilder.append("KW3363 : 'KW' '3363';\n"); - grammarBuilder.append("KW3364 : 'KW' '3364';\n"); - grammarBuilder.append("KW3365 : 'KW' '3365';\n"); - grammarBuilder.append("KW3366 : 'KW' '3366';\n"); - grammarBuilder.append("KW3367 : 'KW' '3367';\n"); - grammarBuilder.append("KW3368 : 'KW' '3368';\n"); - grammarBuilder.append("KW3369 : 'KW' '3369';\n"); - grammarBuilder.append("KW3370 : 'KW' '3370';\n"); - grammarBuilder.append("KW3371 : 'KW' '3371';\n"); - grammarBuilder.append("KW3372 : 'KW' '3372';\n"); - grammarBuilder.append("KW3373 : 'KW' '3373';\n"); - grammarBuilder.append("KW3374 : 'KW' '3374';\n"); - grammarBuilder.append("KW3375 : 'KW' '3375';\n"); - grammarBuilder.append("KW3376 : 'KW' '3376';\n"); - grammarBuilder.append("KW3377 : 'KW' '3377';\n"); - grammarBuilder.append("KW3378 : 'KW' '3378';\n"); - grammarBuilder.append("KW3379 : 'KW' '3379';\n"); - grammarBuilder.append("KW3380 : 'KW' '3380';\n"); - grammarBuilder.append("KW3381 : 'KW' '3381';\n"); - grammarBuilder.append("KW3382 : 'KW' '3382';\n"); - grammarBuilder.append("KW3383 : 'KW' '3383';\n"); - grammarBuilder.append("KW3384 : 'KW' '3384';\n"); - grammarBuilder.append("KW3385 : 'KW' '3385';\n"); - grammarBuilder.append("KW3386 : 'KW' '3386';\n"); - grammarBuilder.append("KW3387 : 'KW' '3387';\n"); - grammarBuilder.append("KW3388 : 'KW' '3388';\n"); - grammarBuilder.append("KW3389 : 'KW' '3389';\n"); - grammarBuilder.append("KW3390 : 'KW' '3390';\n"); - grammarBuilder.append("KW3391 : 'KW' '3391';\n"); - grammarBuilder.append("KW3392 : 'KW' '3392';\n"); - grammarBuilder.append("KW3393 : 'KW' '3393';\n"); - grammarBuilder.append("KW3394 : 'KW' '3394';\n"); - grammarBuilder.append("KW3395 : 'KW' '3395';\n"); - grammarBuilder.append("KW3396 : 'KW' '3396';\n"); - grammarBuilder.append("KW3397 : 'KW' '3397';\n"); - grammarBuilder.append("KW3398 : 'KW' '3398';\n"); - grammarBuilder.append("KW3399 : 'KW' '3399';\n"); - grammarBuilder.append("KW3400 : 'KW' '3400';\n"); - grammarBuilder.append("KW3401 : 'KW' '3401';\n"); - grammarBuilder.append("KW3402 : 'KW' '3402';\n"); - grammarBuilder.append("KW3403 : 'KW' '3403';\n"); - grammarBuilder.append("KW3404 : 'KW' '3404';\n"); - grammarBuilder.append("KW3405 : 'KW' '3405';\n"); - grammarBuilder.append("KW3406 : 'KW' '3406';\n"); - grammarBuilder.append("KW3407 : 'KW' '3407';\n"); - grammarBuilder.append("KW3408 : 'KW' '3408';\n"); - grammarBuilder.append("KW3409 : 'KW' '3409';\n"); - grammarBuilder.append("KW3410 : 'KW' '3410';\n"); - grammarBuilder.append("KW3411 : 'KW' '3411';\n"); - grammarBuilder.append("KW3412 : 'KW' '3412';\n"); - grammarBuilder.append("KW3413 : 'KW' '3413';\n"); - grammarBuilder.append("KW3414 : 'KW' '3414';\n"); - grammarBuilder.append("KW3415 : 'KW' '3415';\n"); - grammarBuilder.append("KW3416 : 'KW' '3416';\n"); - grammarBuilder.append("KW3417 : 'KW' '3417';\n"); - grammarBuilder.append("KW3418 : 'KW' '3418';\n"); - grammarBuilder.append("KW3419 : 'KW' '3419';\n"); - grammarBuilder.append("KW3420 : 'KW' '3420';\n"); - grammarBuilder.append("KW3421 : 'KW' '3421';\n"); - grammarBuilder.append("KW3422 : 'KW' '3422';\n"); - grammarBuilder.append("KW3423 : 'KW' '3423';\n"); - grammarBuilder.append("KW3424 : 'KW' '3424';\n"); - grammarBuilder.append("KW3425 : 'KW' '3425';\n"); - grammarBuilder.append("KW3426 : 'KW' '3426';\n"); - grammarBuilder.append("KW3427 : 'KW' '3427';\n"); - grammarBuilder.append("KW3428 : 'KW' '3428';\n"); - grammarBuilder.append("KW3429 : 'KW' '3429';\n"); - grammarBuilder.append("KW3430 : 'KW' '3430';\n"); - grammarBuilder.append("KW3431 : 'KW' '3431';\n"); - grammarBuilder.append("KW3432 : 'KW' '3432';\n"); - grammarBuilder.append("KW3433 : 'KW' '3433';\n"); - grammarBuilder.append("KW3434 : 'KW' '3434';\n"); - grammarBuilder.append("KW3435 : 'KW' '3435';\n"); - grammarBuilder.append("KW3436 : 'KW' '3436';\n"); - grammarBuilder.append("KW3437 : 'KW' '3437';\n"); - grammarBuilder.append("KW3438 : 'KW' '3438';\n"); - grammarBuilder.append("KW3439 : 'KW' '3439';\n"); - grammarBuilder.append("KW3440 : 'KW' '3440';\n"); - grammarBuilder.append("KW3441 : 'KW' '3441';\n"); - grammarBuilder.append("KW3442 : 'KW' '3442';\n"); - grammarBuilder.append("KW3443 : 'KW' '3443';\n"); - grammarBuilder.append("KW3444 : 'KW' '3444';\n"); - grammarBuilder.append("KW3445 : 'KW' '3445';\n"); - grammarBuilder.append("KW3446 : 'KW' '3446';\n"); - grammarBuilder.append("KW3447 : 'KW' '3447';\n"); - grammarBuilder.append("KW3448 : 'KW' '3448';\n"); - grammarBuilder.append("KW3449 : 'KW' '3449';\n"); - grammarBuilder.append("KW3450 : 'KW' '3450';\n"); - grammarBuilder.append("KW3451 : 'KW' '3451';\n"); - grammarBuilder.append("KW3452 : 'KW' '3452';\n"); - grammarBuilder.append("KW3453 : 'KW' '3453';\n"); - grammarBuilder.append("KW3454 : 'KW' '3454';\n"); - grammarBuilder.append("KW3455 : 'KW' '3455';\n"); - grammarBuilder.append("KW3456 : 'KW' '3456';\n"); - grammarBuilder.append("KW3457 : 'KW' '3457';\n"); - grammarBuilder.append("KW3458 : 'KW' '3458';\n"); - grammarBuilder.append("KW3459 : 'KW' '3459';\n"); - grammarBuilder.append("KW3460 : 'KW' '3460';\n"); - grammarBuilder.append("KW3461 : 'KW' '3461';\n"); - grammarBuilder.append("KW3462 : 'KW' '3462';\n"); - grammarBuilder.append("KW3463 : 'KW' '3463';\n"); - grammarBuilder.append("KW3464 : 'KW' '3464';\n"); - grammarBuilder.append("KW3465 : 'KW' '3465';\n"); - grammarBuilder.append("KW3466 : 'KW' '3466';\n"); - grammarBuilder.append("KW3467 : 'KW' '3467';\n"); - grammarBuilder.append("KW3468 : 'KW' '3468';\n"); - grammarBuilder.append("KW3469 : 'KW' '3469';\n"); - grammarBuilder.append("KW3470 : 'KW' '3470';\n"); - grammarBuilder.append("KW3471 : 'KW' '3471';\n"); - grammarBuilder.append("KW3472 : 'KW' '3472';\n"); - grammarBuilder.append("KW3473 : 'KW' '3473';\n"); - grammarBuilder.append("KW3474 : 'KW' '3474';\n"); - grammarBuilder.append("KW3475 : 'KW' '3475';\n"); - grammarBuilder.append("KW3476 : 'KW' '3476';\n"); - grammarBuilder.append("KW3477 : 'KW' '3477';\n"); - grammarBuilder.append("KW3478 : 'KW' '3478';\n"); - grammarBuilder.append("KW3479 : 'KW' '3479';\n"); - grammarBuilder.append("KW3480 : 'KW' '3480';\n"); - grammarBuilder.append("KW3481 : 'KW' '3481';\n"); - grammarBuilder.append("KW3482 : 'KW' '3482';\n"); - grammarBuilder.append("KW3483 : 'KW' '3483';\n"); - grammarBuilder.append("KW3484 : 'KW' '3484';\n"); - grammarBuilder.append("KW3485 : 'KW' '3485';\n"); - grammarBuilder.append("KW3486 : 'KW' '3486';\n"); - grammarBuilder.append("KW3487 : 'KW' '3487';\n"); - grammarBuilder.append("KW3488 : 'KW' '3488';\n"); - grammarBuilder.append("KW3489 : 'KW' '3489';\n"); - grammarBuilder.append("KW3490 : 'KW' '3490';\n"); - grammarBuilder.append("KW3491 : 'KW' '3491';\n"); - grammarBuilder.append("KW3492 : 'KW' '3492';\n"); - grammarBuilder.append("KW3493 : 'KW' '3493';\n"); - grammarBuilder.append("KW3494 : 'KW' '3494';\n"); - grammarBuilder.append("KW3495 : 'KW' '3495';\n"); - grammarBuilder.append("KW3496 : 'KW' '3496';\n"); - grammarBuilder.append("KW3497 : 'KW' '3497';\n"); - grammarBuilder.append("KW3498 : 'KW' '3498';\n"); - grammarBuilder.append("KW3499 : 'KW' '3499';\n"); - grammarBuilder.append("KW3500 : 'KW' '3500';\n"); - grammarBuilder.append("KW3501 : 'KW' '3501';\n"); - grammarBuilder.append("KW3502 : 'KW' '3502';\n"); - grammarBuilder.append("KW3503 : 'KW' '3503';\n"); - grammarBuilder.append("KW3504 : 'KW' '3504';\n"); - grammarBuilder.append("KW3505 : 'KW' '3505';\n"); - grammarBuilder.append("KW3506 : 'KW' '3506';\n"); - grammarBuilder.append("KW3507 : 'KW' '3507';\n"); - grammarBuilder.append("KW3508 : 'KW' '3508';\n"); - grammarBuilder.append("KW3509 : 'KW' '3509';\n"); - grammarBuilder.append("KW3510 : 'KW' '3510';\n"); - grammarBuilder.append("KW3511 : 'KW' '3511';\n"); - grammarBuilder.append("KW3512 : 'KW' '3512';\n"); - grammarBuilder.append("KW3513 : 'KW' '3513';\n"); - grammarBuilder.append("KW3514 : 'KW' '3514';\n"); - grammarBuilder.append("KW3515 : 'KW' '3515';\n"); - grammarBuilder.append("KW3516 : 'KW' '3516';\n"); - grammarBuilder.append("KW3517 : 'KW' '3517';\n"); - grammarBuilder.append("KW3518 : 'KW' '3518';\n"); - grammarBuilder.append("KW3519 : 'KW' '3519';\n"); - grammarBuilder.append("KW3520 : 'KW' '3520';\n"); - grammarBuilder.append("KW3521 : 'KW' '3521';\n"); - grammarBuilder.append("KW3522 : 'KW' '3522';\n"); - grammarBuilder.append("KW3523 : 'KW' '3523';\n"); - grammarBuilder.append("KW3524 : 'KW' '3524';\n"); - grammarBuilder.append("KW3525 : 'KW' '3525';\n"); - grammarBuilder.append("KW3526 : 'KW' '3526';\n"); - grammarBuilder.append("KW3527 : 'KW' '3527';\n"); - grammarBuilder.append("KW3528 : 'KW' '3528';\n"); - grammarBuilder.append("KW3529 : 'KW' '3529';\n"); - grammarBuilder.append("KW3530 : 'KW' '3530';\n"); - grammarBuilder.append("KW3531 : 'KW' '3531';\n"); - grammarBuilder.append("KW3532 : 'KW' '3532';\n"); - grammarBuilder.append("KW3533 : 'KW' '3533';\n"); - grammarBuilder.append("KW3534 : 'KW' '3534';\n"); - grammarBuilder.append("KW3535 : 'KW' '3535';\n"); - grammarBuilder.append("KW3536 : 'KW' '3536';\n"); - grammarBuilder.append("KW3537 : 'KW' '3537';\n"); - grammarBuilder.append("KW3538 : 'KW' '3538';\n"); - grammarBuilder.append("KW3539 : 'KW' '3539';\n"); - grammarBuilder.append("KW3540 : 'KW' '3540';\n"); - grammarBuilder.append("KW3541 : 'KW' '3541';\n"); - grammarBuilder.append("KW3542 : 'KW' '3542';\n"); - grammarBuilder.append("KW3543 : 'KW' '3543';\n"); - grammarBuilder.append("KW3544 : 'KW' '3544';\n"); - grammarBuilder.append("KW3545 : 'KW' '3545';\n"); - grammarBuilder.append("KW3546 : 'KW' '3546';\n"); - grammarBuilder.append("KW3547 : 'KW' '3547';\n"); - grammarBuilder.append("KW3548 : 'KW' '3548';\n"); - grammarBuilder.append("KW3549 : 'KW' '3549';\n"); - grammarBuilder.append("KW3550 : 'KW' '3550';\n"); - grammarBuilder.append("KW3551 : 'KW' '3551';\n"); - grammarBuilder.append("KW3552 : 'KW' '3552';\n"); - grammarBuilder.append("KW3553 : 'KW' '3553';\n"); - grammarBuilder.append("KW3554 : 'KW' '3554';\n"); - grammarBuilder.append("KW3555 : 'KW' '3555';\n"); - grammarBuilder.append("KW3556 : 'KW' '3556';\n"); - grammarBuilder.append("KW3557 : 'KW' '3557';\n"); - grammarBuilder.append("KW3558 : 'KW' '3558';\n"); - grammarBuilder.append("KW3559 : 'KW' '3559';\n"); - grammarBuilder.append("KW3560 : 'KW' '3560';\n"); - grammarBuilder.append("KW3561 : 'KW' '3561';\n"); - grammarBuilder.append("KW3562 : 'KW' '3562';\n"); - grammarBuilder.append("KW3563 : 'KW' '3563';\n"); - grammarBuilder.append("KW3564 : 'KW' '3564';\n"); - grammarBuilder.append("KW3565 : 'KW' '3565';\n"); - grammarBuilder.append("KW3566 : 'KW' '3566';\n"); - grammarBuilder.append("KW3567 : 'KW' '3567';\n"); - grammarBuilder.append("KW3568 : 'KW' '3568';\n"); - grammarBuilder.append("KW3569 : 'KW' '3569';\n"); - grammarBuilder.append("KW3570 : 'KW' '3570';\n"); - grammarBuilder.append("KW3571 : 'KW' '3571';\n"); - grammarBuilder.append("KW3572 : 'KW' '3572';\n"); - grammarBuilder.append("KW3573 : 'KW' '3573';\n"); - grammarBuilder.append("KW3574 : 'KW' '3574';\n"); - grammarBuilder.append("KW3575 : 'KW' '3575';\n"); - grammarBuilder.append("KW3576 : 'KW' '3576';\n"); - grammarBuilder.append("KW3577 : 'KW' '3577';\n"); - grammarBuilder.append("KW3578 : 'KW' '3578';\n"); - grammarBuilder.append("KW3579 : 'KW' '3579';\n"); - grammarBuilder.append("KW3580 : 'KW' '3580';\n"); - grammarBuilder.append("KW3581 : 'KW' '3581';\n"); - grammarBuilder.append("KW3582 : 'KW' '3582';\n"); - grammarBuilder.append("KW3583 : 'KW' '3583';\n"); - grammarBuilder.append("KW3584 : 'KW' '3584';\n"); - grammarBuilder.append("KW3585 : 'KW' '3585';\n"); - grammarBuilder.append("KW3586 : 'KW' '3586';\n"); - grammarBuilder.append("KW3587 : 'KW' '3587';\n"); - grammarBuilder.append("KW3588 : 'KW' '3588';\n"); - grammarBuilder.append("KW3589 : 'KW' '3589';\n"); - grammarBuilder.append("KW3590 : 'KW' '3590';\n"); - grammarBuilder.append("KW3591 : 'KW' '3591';\n"); - grammarBuilder.append("KW3592 : 'KW' '3592';\n"); - grammarBuilder.append("KW3593 : 'KW' '3593';\n"); - grammarBuilder.append("KW3594 : 'KW' '3594';\n"); - grammarBuilder.append("KW3595 : 'KW' '3595';\n"); - grammarBuilder.append("KW3596 : 'KW' '3596';\n"); - grammarBuilder.append("KW3597 : 'KW' '3597';\n"); - grammarBuilder.append("KW3598 : 'KW' '3598';\n"); - grammarBuilder.append("KW3599 : 'KW' '3599';\n"); - grammarBuilder.append("KW3600 : 'KW' '3600';\n"); - grammarBuilder.append("KW3601 : 'KW' '3601';\n"); - grammarBuilder.append("KW3602 : 'KW' '3602';\n"); - grammarBuilder.append("KW3603 : 'KW' '3603';\n"); - grammarBuilder.append("KW3604 : 'KW' '3604';\n"); - grammarBuilder.append("KW3605 : 'KW' '3605';\n"); - grammarBuilder.append("KW3606 : 'KW' '3606';\n"); - grammarBuilder.append("KW3607 : 'KW' '3607';\n"); - grammarBuilder.append("KW3608 : 'KW' '3608';\n"); - grammarBuilder.append("KW3609 : 'KW' '3609';\n"); - grammarBuilder.append("KW3610 : 'KW' '3610';\n"); - grammarBuilder.append("KW3611 : 'KW' '3611';\n"); - grammarBuilder.append("KW3612 : 'KW' '3612';\n"); - grammarBuilder.append("KW3613 : 'KW' '3613';\n"); - grammarBuilder.append("KW3614 : 'KW' '3614';\n"); - grammarBuilder.append("KW3615 : 'KW' '3615';\n"); - grammarBuilder.append("KW3616 : 'KW' '3616';\n"); - grammarBuilder.append("KW3617 : 'KW' '3617';\n"); - grammarBuilder.append("KW3618 : 'KW' '3618';\n"); - grammarBuilder.append("KW3619 : 'KW' '3619';\n"); - grammarBuilder.append("KW3620 : 'KW' '3620';\n"); - grammarBuilder.append("KW3621 : 'KW' '3621';\n"); - grammarBuilder.append("KW3622 : 'KW' '3622';\n"); - grammarBuilder.append("KW3623 : 'KW' '3623';\n"); - grammarBuilder.append("KW3624 : 'KW' '3624';\n"); - grammarBuilder.append("KW3625 : 'KW' '3625';\n"); - grammarBuilder.append("KW3626 : 'KW' '3626';\n"); - grammarBuilder.append("KW3627 : 'KW' '3627';\n"); - grammarBuilder.append("KW3628 : 'KW' '3628';\n"); - grammarBuilder.append("KW3629 : 'KW' '3629';\n"); - grammarBuilder.append("KW3630 : 'KW' '3630';\n"); - grammarBuilder.append("KW3631 : 'KW' '3631';\n"); - grammarBuilder.append("KW3632 : 'KW' '3632';\n"); - grammarBuilder.append("KW3633 : 'KW' '3633';\n"); - grammarBuilder.append("KW3634 : 'KW' '3634';\n"); - grammarBuilder.append("KW3635 : 'KW' '3635';\n"); - grammarBuilder.append("KW3636 : 'KW' '3636';\n"); - grammarBuilder.append("KW3637 : 'KW' '3637';\n"); - grammarBuilder.append("KW3638 : 'KW' '3638';\n"); - grammarBuilder.append("KW3639 : 'KW' '3639';\n"); - grammarBuilder.append("KW3640 : 'KW' '3640';\n"); - grammarBuilder.append("KW3641 : 'KW' '3641';\n"); - grammarBuilder.append("KW3642 : 'KW' '3642';\n"); - grammarBuilder.append("KW3643 : 'KW' '3643';\n"); - grammarBuilder.append("KW3644 : 'KW' '3644';\n"); - grammarBuilder.append("KW3645 : 'KW' '3645';\n"); - grammarBuilder.append("KW3646 : 'KW' '3646';\n"); - grammarBuilder.append("KW3647 : 'KW' '3647';\n"); - grammarBuilder.append("KW3648 : 'KW' '3648';\n"); - grammarBuilder.append("KW3649 : 'KW' '3649';\n"); - grammarBuilder.append("KW3650 : 'KW' '3650';\n"); - grammarBuilder.append("KW3651 : 'KW' '3651';\n"); - grammarBuilder.append("KW3652 : 'KW' '3652';\n"); - grammarBuilder.append("KW3653 : 'KW' '3653';\n"); - grammarBuilder.append("KW3654 : 'KW' '3654';\n"); - grammarBuilder.append("KW3655 : 'KW' '3655';\n"); - grammarBuilder.append("KW3656 : 'KW' '3656';\n"); - grammarBuilder.append("KW3657 : 'KW' '3657';\n"); - grammarBuilder.append("KW3658 : 'KW' '3658';\n"); - grammarBuilder.append("KW3659 : 'KW' '3659';\n"); - grammarBuilder.append("KW3660 : 'KW' '3660';\n"); - grammarBuilder.append("KW3661 : 'KW' '3661';\n"); - grammarBuilder.append("KW3662 : 'KW' '3662';\n"); - grammarBuilder.append("KW3663 : 'KW' '3663';\n"); - grammarBuilder.append("KW3664 : 'KW' '3664';\n"); - grammarBuilder.append("KW3665 : 'KW' '3665';\n"); - grammarBuilder.append("KW3666 : 'KW' '3666';\n"); - grammarBuilder.append("KW3667 : 'KW' '3667';\n"); - grammarBuilder.append("KW3668 : 'KW' '3668';\n"); - grammarBuilder.append("KW3669 : 'KW' '3669';\n"); - grammarBuilder.append("KW3670 : 'KW' '3670';\n"); - grammarBuilder.append("KW3671 : 'KW' '3671';\n"); - grammarBuilder.append("KW3672 : 'KW' '3672';\n"); - grammarBuilder.append("KW3673 : 'KW' '3673';\n"); - grammarBuilder.append("KW3674 : 'KW' '3674';\n"); - grammarBuilder.append("KW3675 : 'KW' '3675';\n"); - grammarBuilder.append("KW3676 : 'KW' '3676';\n"); - grammarBuilder.append("KW3677 : 'KW' '3677';\n"); - grammarBuilder.append("KW3678 : 'KW' '3678';\n"); - grammarBuilder.append("KW3679 : 'KW' '3679';\n"); - grammarBuilder.append("KW3680 : 'KW' '3680';\n"); - grammarBuilder.append("KW3681 : 'KW' '3681';\n"); - grammarBuilder.append("KW3682 : 'KW' '3682';\n"); - grammarBuilder.append("KW3683 : 'KW' '3683';\n"); - grammarBuilder.append("KW3684 : 'KW' '3684';\n"); - grammarBuilder.append("KW3685 : 'KW' '3685';\n"); - grammarBuilder.append("KW3686 : 'KW' '3686';\n"); - grammarBuilder.append("KW3687 : 'KW' '3687';\n"); - grammarBuilder.append("KW3688 : 'KW' '3688';\n"); - grammarBuilder.append("KW3689 : 'KW' '3689';\n"); - grammarBuilder.append("KW3690 : 'KW' '3690';\n"); - grammarBuilder.append("KW3691 : 'KW' '3691';\n"); - grammarBuilder.append("KW3692 : 'KW' '3692';\n"); - grammarBuilder.append("KW3693 : 'KW' '3693';\n"); - grammarBuilder.append("KW3694 : 'KW' '3694';\n"); - grammarBuilder.append("KW3695 : 'KW' '3695';\n"); - grammarBuilder.append("KW3696 : 'KW' '3696';\n"); - grammarBuilder.append("KW3697 : 'KW' '3697';\n"); - grammarBuilder.append("KW3698 : 'KW' '3698';\n"); - grammarBuilder.append("KW3699 : 'KW' '3699';\n"); - grammarBuilder.append("KW3700 : 'KW' '3700';\n"); - grammarBuilder.append("KW3701 : 'KW' '3701';\n"); - grammarBuilder.append("KW3702 : 'KW' '3702';\n"); - grammarBuilder.append("KW3703 : 'KW' '3703';\n"); - grammarBuilder.append("KW3704 : 'KW' '3704';\n"); - grammarBuilder.append("KW3705 : 'KW' '3705';\n"); - grammarBuilder.append("KW3706 : 'KW' '3706';\n"); - grammarBuilder.append("KW3707 : 'KW' '3707';\n"); - grammarBuilder.append("KW3708 : 'KW' '3708';\n"); - grammarBuilder.append("KW3709 : 'KW' '3709';\n"); - grammarBuilder.append("KW3710 : 'KW' '3710';\n"); - grammarBuilder.append("KW3711 : 'KW' '3711';\n"); - grammarBuilder.append("KW3712 : 'KW' '3712';\n"); - grammarBuilder.append("KW3713 : 'KW' '3713';\n"); - grammarBuilder.append("KW3714 : 'KW' '3714';\n"); - grammarBuilder.append("KW3715 : 'KW' '3715';\n"); - grammarBuilder.append("KW3716 : 'KW' '3716';\n"); - grammarBuilder.append("KW3717 : 'KW' '3717';\n"); - grammarBuilder.append("KW3718 : 'KW' '3718';\n"); - grammarBuilder.append("KW3719 : 'KW' '3719';\n"); - grammarBuilder.append("KW3720 : 'KW' '3720';\n"); - grammarBuilder.append("KW3721 : 'KW' '3721';\n"); - grammarBuilder.append("KW3722 : 'KW' '3722';\n"); - grammarBuilder.append("KW3723 : 'KW' '3723';\n"); - grammarBuilder.append("KW3724 : 'KW' '3724';\n"); - grammarBuilder.append("KW3725 : 'KW' '3725';\n"); - grammarBuilder.append("KW3726 : 'KW' '3726';\n"); - grammarBuilder.append("KW3727 : 'KW' '3727';\n"); - grammarBuilder.append("KW3728 : 'KW' '3728';\n"); - grammarBuilder.append("KW3729 : 'KW' '3729';\n"); - grammarBuilder.append("KW3730 : 'KW' '3730';\n"); - grammarBuilder.append("KW3731 : 'KW' '3731';\n"); - grammarBuilder.append("KW3732 : 'KW' '3732';\n"); - grammarBuilder.append("KW3733 : 'KW' '3733';\n"); - grammarBuilder.append("KW3734 : 'KW' '3734';\n"); - grammarBuilder.append("KW3735 : 'KW' '3735';\n"); - grammarBuilder.append("KW3736 : 'KW' '3736';\n"); - grammarBuilder.append("KW3737 : 'KW' '3737';\n"); - grammarBuilder.append("KW3738 : 'KW' '3738';\n"); - grammarBuilder.append("KW3739 : 'KW' '3739';\n"); - grammarBuilder.append("KW3740 : 'KW' '3740';\n"); - grammarBuilder.append("KW3741 : 'KW' '3741';\n"); - grammarBuilder.append("KW3742 : 'KW' '3742';\n"); - grammarBuilder.append("KW3743 : 'KW' '3743';\n"); - grammarBuilder.append("KW3744 : 'KW' '3744';\n"); - grammarBuilder.append("KW3745 : 'KW' '3745';\n"); - grammarBuilder.append("KW3746 : 'KW' '3746';\n"); - grammarBuilder.append("KW3747 : 'KW' '3747';\n"); - grammarBuilder.append("KW3748 : 'KW' '3748';\n"); - grammarBuilder.append("KW3749 : 'KW' '3749';\n"); - grammarBuilder.append("KW3750 : 'KW' '3750';\n"); - grammarBuilder.append("KW3751 : 'KW' '3751';\n"); - grammarBuilder.append("KW3752 : 'KW' '3752';\n"); - grammarBuilder.append("KW3753 : 'KW' '3753';\n"); - grammarBuilder.append("KW3754 : 'KW' '3754';\n"); - grammarBuilder.append("KW3755 : 'KW' '3755';\n"); - grammarBuilder.append("KW3756 : 'KW' '3756';\n"); - grammarBuilder.append("KW3757 : 'KW' '3757';\n"); - grammarBuilder.append("KW3758 : 'KW' '3758';\n"); - grammarBuilder.append("KW3759 : 'KW' '3759';\n"); - grammarBuilder.append("KW3760 : 'KW' '3760';\n"); - grammarBuilder.append("KW3761 : 'KW' '3761';\n"); - grammarBuilder.append("KW3762 : 'KW' '3762';\n"); - grammarBuilder.append("KW3763 : 'KW' '3763';\n"); - grammarBuilder.append("KW3764 : 'KW' '3764';\n"); - grammarBuilder.append("KW3765 : 'KW' '3765';\n"); - grammarBuilder.append("KW3766 : 'KW' '3766';\n"); - grammarBuilder.append("KW3767 : 'KW' '3767';\n"); - grammarBuilder.append("KW3768 : 'KW' '3768';\n"); - grammarBuilder.append("KW3769 : 'KW' '3769';\n"); - grammarBuilder.append("KW3770 : 'KW' '3770';\n"); - grammarBuilder.append("KW3771 : 'KW' '3771';\n"); - grammarBuilder.append("KW3772 : 'KW' '3772';\n"); - grammarBuilder.append("KW3773 : 'KW' '3773';\n"); - grammarBuilder.append("KW3774 : 'KW' '3774';\n"); - grammarBuilder.append("KW3775 : 'KW' '3775';\n"); - grammarBuilder.append("KW3776 : 'KW' '3776';\n"); - grammarBuilder.append("KW3777 : 'KW' '3777';\n"); - grammarBuilder.append("KW3778 : 'KW' '3778';\n"); - grammarBuilder.append("KW3779 : 'KW' '3779';\n"); - grammarBuilder.append("KW3780 : 'KW' '3780';\n"); - grammarBuilder.append("KW3781 : 'KW' '3781';\n"); - grammarBuilder.append("KW3782 : 'KW' '3782';\n"); - grammarBuilder.append("KW3783 : 'KW' '3783';\n"); - grammarBuilder.append("KW3784 : 'KW' '3784';\n"); - grammarBuilder.append("KW3785 : 'KW' '3785';\n"); - grammarBuilder.append("KW3786 : 'KW' '3786';\n"); - grammarBuilder.append("KW3787 : 'KW' '3787';\n"); - grammarBuilder.append("KW3788 : 'KW' '3788';\n"); - grammarBuilder.append("KW3789 : 'KW' '3789';\n"); - grammarBuilder.append("KW3790 : 'KW' '3790';\n"); - grammarBuilder.append("KW3791 : 'KW' '3791';\n"); - grammarBuilder.append("KW3792 : 'KW' '3792';\n"); - grammarBuilder.append("KW3793 : 'KW' '3793';\n"); - grammarBuilder.append("KW3794 : 'KW' '3794';\n"); - grammarBuilder.append("KW3795 : 'KW' '3795';\n"); - grammarBuilder.append("KW3796 : 'KW' '3796';\n"); - grammarBuilder.append("KW3797 : 'KW' '3797';\n"); - grammarBuilder.append("KW3798 : 'KW' '3798';\n"); - grammarBuilder.append("KW3799 : 'KW' '3799';\n"); - grammarBuilder.append("KW3800 : 'KW' '3800';\n"); - grammarBuilder.append("KW3801 : 'KW' '3801';\n"); - grammarBuilder.append("KW3802 : 'KW' '3802';\n"); - grammarBuilder.append("KW3803 : 'KW' '3803';\n"); - grammarBuilder.append("KW3804 : 'KW' '3804';\n"); - grammarBuilder.append("KW3805 : 'KW' '3805';\n"); - grammarBuilder.append("KW3806 : 'KW' '3806';\n"); - grammarBuilder.append("KW3807 : 'KW' '3807';\n"); - grammarBuilder.append("KW3808 : 'KW' '3808';\n"); - grammarBuilder.append("KW3809 : 'KW' '3809';\n"); - grammarBuilder.append("KW3810 : 'KW' '3810';\n"); - grammarBuilder.append("KW3811 : 'KW' '3811';\n"); - grammarBuilder.append("KW3812 : 'KW' '3812';\n"); - grammarBuilder.append("KW3813 : 'KW' '3813';\n"); - grammarBuilder.append("KW3814 : 'KW' '3814';\n"); - grammarBuilder.append("KW3815 : 'KW' '3815';\n"); - grammarBuilder.append("KW3816 : 'KW' '3816';\n"); - grammarBuilder.append("KW3817 : 'KW' '3817';\n"); - grammarBuilder.append("KW3818 : 'KW' '3818';\n"); - grammarBuilder.append("KW3819 : 'KW' '3819';\n"); - grammarBuilder.append("KW3820 : 'KW' '3820';\n"); - grammarBuilder.append("KW3821 : 'KW' '3821';\n"); - grammarBuilder.append("KW3822 : 'KW' '3822';\n"); - grammarBuilder.append("KW3823 : 'KW' '3823';\n"); - grammarBuilder.append("KW3824 : 'KW' '3824';\n"); - grammarBuilder.append("KW3825 : 'KW' '3825';\n"); - grammarBuilder.append("KW3826 : 'KW' '3826';\n"); - grammarBuilder.append("KW3827 : 'KW' '3827';\n"); - grammarBuilder.append("KW3828 : 'KW' '3828';\n"); - grammarBuilder.append("KW3829 : 'KW' '3829';\n"); - grammarBuilder.append("KW3830 : 'KW' '3830';\n"); - grammarBuilder.append("KW3831 : 'KW' '3831';\n"); - grammarBuilder.append("KW3832 : 'KW' '3832';\n"); - grammarBuilder.append("KW3833 : 'KW' '3833';\n"); - grammarBuilder.append("KW3834 : 'KW' '3834';\n"); - grammarBuilder.append("KW3835 : 'KW' '3835';\n"); - grammarBuilder.append("KW3836 : 'KW' '3836';\n"); - grammarBuilder.append("KW3837 : 'KW' '3837';\n"); - grammarBuilder.append("KW3838 : 'KW' '3838';\n"); - grammarBuilder.append("KW3839 : 'KW' '3839';\n"); - grammarBuilder.append("KW3840 : 'KW' '3840';\n"); - grammarBuilder.append("KW3841 : 'KW' '3841';\n"); - grammarBuilder.append("KW3842 : 'KW' '3842';\n"); - grammarBuilder.append("KW3843 : 'KW' '3843';\n"); - grammarBuilder.append("KW3844 : 'KW' '3844';\n"); - grammarBuilder.append("KW3845 : 'KW' '3845';\n"); - grammarBuilder.append("KW3846 : 'KW' '3846';\n"); - grammarBuilder.append("KW3847 : 'KW' '3847';\n"); - grammarBuilder.append("KW3848 : 'KW' '3848';\n"); - grammarBuilder.append("KW3849 : 'KW' '3849';\n"); - grammarBuilder.append("KW3850 : 'KW' '3850';\n"); - grammarBuilder.append("KW3851 : 'KW' '3851';\n"); - grammarBuilder.append("KW3852 : 'KW' '3852';\n"); - grammarBuilder.append("KW3853 : 'KW' '3853';\n"); - grammarBuilder.append("KW3854 : 'KW' '3854';\n"); - grammarBuilder.append("KW3855 : 'KW' '3855';\n"); - grammarBuilder.append("KW3856 : 'KW' '3856';\n"); - grammarBuilder.append("KW3857 : 'KW' '3857';\n"); - grammarBuilder.append("KW3858 : 'KW' '3858';\n"); - grammarBuilder.append("KW3859 : 'KW' '3859';\n"); - grammarBuilder.append("KW3860 : 'KW' '3860';\n"); - grammarBuilder.append("KW3861 : 'KW' '3861';\n"); - grammarBuilder.append("KW3862 : 'KW' '3862';\n"); - grammarBuilder.append("KW3863 : 'KW' '3863';\n"); - grammarBuilder.append("KW3864 : 'KW' '3864';\n"); - grammarBuilder.append("KW3865 : 'KW' '3865';\n"); - grammarBuilder.append("KW3866 : 'KW' '3866';\n"); - grammarBuilder.append("KW3867 : 'KW' '3867';\n"); - grammarBuilder.append("KW3868 : 'KW' '3868';\n"); - grammarBuilder.append("KW3869 : 'KW' '3869';\n"); - grammarBuilder.append("KW3870 : 'KW' '3870';\n"); - grammarBuilder.append("KW3871 : 'KW' '3871';\n"); - grammarBuilder.append("KW3872 : 'KW' '3872';\n"); - grammarBuilder.append("KW3873 : 'KW' '3873';\n"); - grammarBuilder.append("KW3874 : 'KW' '3874';\n"); - grammarBuilder.append("KW3875 : 'KW' '3875';\n"); - grammarBuilder.append("KW3876 : 'KW' '3876';\n"); - grammarBuilder.append("KW3877 : 'KW' '3877';\n"); - grammarBuilder.append("KW3878 : 'KW' '3878';\n"); - grammarBuilder.append("KW3879 : 'KW' '3879';\n"); - grammarBuilder.append("KW3880 : 'KW' '3880';\n"); - grammarBuilder.append("KW3881 : 'KW' '3881';\n"); - grammarBuilder.append("KW3882 : 'KW' '3882';\n"); - grammarBuilder.append("KW3883 : 'KW' '3883';\n"); - grammarBuilder.append("KW3884 : 'KW' '3884';\n"); - grammarBuilder.append("KW3885 : 'KW' '3885';\n"); - grammarBuilder.append("KW3886 : 'KW' '3886';\n"); - grammarBuilder.append("KW3887 : 'KW' '3887';\n"); - grammarBuilder.append("KW3888 : 'KW' '3888';\n"); - grammarBuilder.append("KW3889 : 'KW' '3889';\n"); - grammarBuilder.append("KW3890 : 'KW' '3890';\n"); - grammarBuilder.append("KW3891 : 'KW' '3891';\n"); - grammarBuilder.append("KW3892 : 'KW' '3892';\n"); - grammarBuilder.append("KW3893 : 'KW' '3893';\n"); - grammarBuilder.append("KW3894 : 'KW' '3894';\n"); - grammarBuilder.append("KW3895 : 'KW' '3895';\n"); - grammarBuilder.append("KW3896 : 'KW' '3896';\n"); - grammarBuilder.append("KW3897 : 'KW' '3897';\n"); - grammarBuilder.append("KW3898 : 'KW' '3898';\n"); - grammarBuilder.append("KW3899 : 'KW' '3899';\n"); - grammarBuilder.append("KW3900 : 'KW' '3900';\n"); - grammarBuilder.append("KW3901 : 'KW' '3901';\n"); - grammarBuilder.append("KW3902 : 'KW' '3902';\n"); - grammarBuilder.append("KW3903 : 'KW' '3903';\n"); - grammarBuilder.append("KW3904 : 'KW' '3904';\n"); - grammarBuilder.append("KW3905 : 'KW' '3905';\n"); - grammarBuilder.append("KW3906 : 'KW' '3906';\n"); - grammarBuilder.append("KW3907 : 'KW' '3907';\n"); - grammarBuilder.append("KW3908 : 'KW' '3908';\n"); - grammarBuilder.append("KW3909 : 'KW' '3909';\n"); - grammarBuilder.append("KW3910 : 'KW' '3910';\n"); - grammarBuilder.append("KW3911 : 'KW' '3911';\n"); - grammarBuilder.append("KW3912 : 'KW' '3912';\n"); - grammarBuilder.append("KW3913 : 'KW' '3913';\n"); - grammarBuilder.append("KW3914 : 'KW' '3914';\n"); - grammarBuilder.append("KW3915 : 'KW' '3915';\n"); - grammarBuilder.append("KW3916 : 'KW' '3916';\n"); - grammarBuilder.append("KW3917 : 'KW' '3917';\n"); - grammarBuilder.append("KW3918 : 'KW' '3918';\n"); - grammarBuilder.append("KW3919 : 'KW' '3919';\n"); - grammarBuilder.append("KW3920 : 'KW' '3920';\n"); - grammarBuilder.append("KW3921 : 'KW' '3921';\n"); - grammarBuilder.append("KW3922 : 'KW' '3922';\n"); - grammarBuilder.append("KW3923 : 'KW' '3923';\n"); - grammarBuilder.append("KW3924 : 'KW' '3924';\n"); - grammarBuilder.append("KW3925 : 'KW' '3925';\n"); - grammarBuilder.append("KW3926 : 'KW' '3926';\n"); - grammarBuilder.append("KW3927 : 'KW' '3927';\n"); - grammarBuilder.append("KW3928 : 'KW' '3928';\n"); - grammarBuilder.append("KW3929 : 'KW' '3929';\n"); - grammarBuilder.append("KW3930 : 'KW' '3930';\n"); - grammarBuilder.append("KW3931 : 'KW' '3931';\n"); - grammarBuilder.append("KW3932 : 'KW' '3932';\n"); - grammarBuilder.append("KW3933 : 'KW' '3933';\n"); - grammarBuilder.append("KW3934 : 'KW' '3934';\n"); - grammarBuilder.append("KW3935 : 'KW' '3935';\n"); - grammarBuilder.append("KW3936 : 'KW' '3936';\n"); - grammarBuilder.append("KW3937 : 'KW' '3937';\n"); - grammarBuilder.append("KW3938 : 'KW' '3938';\n"); - grammarBuilder.append("KW3939 : 'KW' '3939';\n"); - grammarBuilder.append("KW3940 : 'KW' '3940';\n"); - grammarBuilder.append("KW3941 : 'KW' '3941';\n"); - grammarBuilder.append("KW3942 : 'KW' '3942';\n"); - grammarBuilder.append("KW3943 : 'KW' '3943';\n"); - grammarBuilder.append("KW3944 : 'KW' '3944';\n"); - grammarBuilder.append("KW3945 : 'KW' '3945';\n"); - grammarBuilder.append("KW3946 : 'KW' '3946';\n"); - grammarBuilder.append("KW3947 : 'KW' '3947';\n"); - grammarBuilder.append("KW3948 : 'KW' '3948';\n"); - grammarBuilder.append("KW3949 : 'KW' '3949';\n"); - grammarBuilder.append("KW3950 : 'KW' '3950';\n"); - grammarBuilder.append("KW3951 : 'KW' '3951';\n"); - grammarBuilder.append("KW3952 : 'KW' '3952';\n"); - grammarBuilder.append("KW3953 : 'KW' '3953';\n"); - grammarBuilder.append("KW3954 : 'KW' '3954';\n"); - grammarBuilder.append("KW3955 : 'KW' '3955';\n"); - grammarBuilder.append("KW3956 : 'KW' '3956';\n"); - grammarBuilder.append("KW3957 : 'KW' '3957';\n"); - grammarBuilder.append("KW3958 : 'KW' '3958';\n"); - grammarBuilder.append("KW3959 : 'KW' '3959';\n"); - grammarBuilder.append("KW3960 : 'KW' '3960';\n"); - grammarBuilder.append("KW3961 : 'KW' '3961';\n"); - grammarBuilder.append("KW3962 : 'KW' '3962';\n"); - grammarBuilder.append("KW3963 : 'KW' '3963';\n"); - grammarBuilder.append("KW3964 : 'KW' '3964';\n"); - grammarBuilder.append("KW3965 : 'KW' '3965';\n"); - grammarBuilder.append("KW3966 : 'KW' '3966';\n"); - grammarBuilder.append("KW3967 : 'KW' '3967';\n"); - grammarBuilder.append("KW3968 : 'KW' '3968';\n"); - grammarBuilder.append("KW3969 : 'KW' '3969';\n"); - grammarBuilder.append("KW3970 : 'KW' '3970';\n"); - grammarBuilder.append("KW3971 : 'KW' '3971';\n"); - grammarBuilder.append("KW3972 : 'KW' '3972';\n"); - grammarBuilder.append("KW3973 : 'KW' '3973';\n"); - grammarBuilder.append("KW3974 : 'KW' '3974';\n"); - grammarBuilder.append("KW3975 : 'KW' '3975';\n"); - grammarBuilder.append("KW3976 : 'KW' '3976';\n"); - grammarBuilder.append("KW3977 : 'KW' '3977';\n"); - grammarBuilder.append("KW3978 : 'KW' '3978';\n"); - grammarBuilder.append("KW3979 : 'KW' '3979';\n"); - grammarBuilder.append("KW3980 : 'KW' '3980';\n"); - grammarBuilder.append("KW3981 : 'KW' '3981';\n"); - grammarBuilder.append("KW3982 : 'KW' '3982';\n"); - grammarBuilder.append("KW3983 : 'KW' '3983';\n"); - grammarBuilder.append("KW3984 : 'KW' '3984';\n"); - grammarBuilder.append("KW3985 : 'KW' '3985';\n"); - grammarBuilder.append("KW3986 : 'KW' '3986';\n"); - grammarBuilder.append("KW3987 : 'KW' '3987';\n"); - grammarBuilder.append("KW3988 : 'KW' '3988';\n"); - grammarBuilder.append("KW3989 : 'KW' '3989';\n"); - grammarBuilder.append("KW3990 : 'KW' '3990';\n"); - grammarBuilder.append("KW3991 : 'KW' '3991';\n"); - grammarBuilder.append("KW3992 : 'KW' '3992';\n"); - grammarBuilder.append("KW3993 : 'KW' '3993';\n"); - grammarBuilder.append("KW3994 : 'KW' '3994';\n"); - grammarBuilder.append("KW3995 : 'KW' '3995';\n"); - grammarBuilder.append("KW3996 : 'KW' '3996';\n"); - grammarBuilder.append("KW3997 : 'KW' '3997';\n"); - grammarBuilder.append("KW3998 : 'KW' '3998';\n"); - grammarBuilder.append("KW3999 : 'KW' '3999';"); - String grammar = grammarBuilder.toString(); - String input ="KW400"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='KW400',<402>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(124); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : .*? ('a' | 'ab') {console.log(this.text);} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : . {console.log(this.text);};"); - String grammar = grammarBuilder.toString(); - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "a\n" + - "b\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:1='b',<3>,1:1]\n" + - "[@2,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); - String grammar = grammarBuilder.toString(); - String input ="\"hi\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:3='\"hi\"',<1>,1:0]\n" + - "[@1,4:8='\"mom\"',<1>,1:4]\n" + - "[@2,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); - String grammar = grammarBuilder.toString(); - String input ="\"\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParentheses() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("START_BLOCK: '-.-.-';\n"); - grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); - grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); - grammarBuilder.append("fragment L_A: '.-';\n"); - grammarBuilder.append("fragment L_K: '-.-';\n"); - grammarBuilder.append("SEPARATOR: '!';"); - String grammar = grammarBuilder.toString(); - String input ="-.-.-!"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='-.-.-',<1>,1:0]\n" + - "[@1,5:5='!',<3>,1:5]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPositionAdjustingLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2231); - grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("PositionAdjustingLexer.prototype.resetAcceptPosition = function(index, line, column) {\n"); - grammarBuilder.append(" this._input.seek(index);\n"); - grammarBuilder.append(" this.line = line;\n"); - grammarBuilder.append(" this.column = column;\n"); - grammarBuilder.append(" this._interp.consume(this._input);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("PositionAdjustingLexer.prototype.nextToken = function() {\n"); - grammarBuilder.append(" if (!(\"resetAcceptPosition\" in this._interp)) {\n"); - grammarBuilder.append(" var lexer = this;\n"); - grammarBuilder.append(" this._interp.resetAcceptPosition = function(index, line, column) { lexer.resetAcceptPosition(index, line, column); };\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return antlr4.Lexer.prototype.nextToken.call(this);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("PositionAdjustingLexer.prototype.emit = function() {\n"); - grammarBuilder.append(" switch(this._type) {\n"); - grammarBuilder.append(" case PositionAdjustingLexer.TOKENS:\n"); - grammarBuilder.append(" this.handleAcceptPositionForKeyword(\"tokens\");\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append(" case PositionAdjustingLexer.LABEL:\n"); - grammarBuilder.append(" this.handleAcceptPositionForIdentifier();\n"); - grammarBuilder.append(" break;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return antlr4.Lexer.prototype.emit.call(this);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("PositionAdjustingLexer.prototype.handleAcceptPositionForIdentifier = function() {\n"); - grammarBuilder.append(" var tokenText = this.text;\n"); - grammarBuilder.append(" var identifierLength = 0;\n"); - grammarBuilder.append(" while (identifierLength < tokenText.length &&\n"); - grammarBuilder.append(" PositionAdjustingLexer.isIdentifierChar(tokenText[identifierLength])\n"); - grammarBuilder.append(" ) {\n"); - grammarBuilder.append(" identifierLength += 1;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" if (this._input.index > this._tokenStartCharIndex + identifierLength) {\n"); - grammarBuilder.append(" var offset = identifierLength - 1;\n"); - grammarBuilder.append(" this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset,\n"); - grammarBuilder.append(" this._tokenStartLine, this._tokenStartColumn + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("PositionAdjustingLexer.prototype.handleAcceptPositionForKeyword = function(keyword) {\n"); - grammarBuilder.append(" if (this._input.index > this._tokenStartCharIndex + keyword.length) {\n"); - grammarBuilder.append(" var offset = keyword.length - 1;\n"); - grammarBuilder.append(" this._interp.resetAcceptPosition(this._tokenStartCharIndex + offset,\n"); - grammarBuilder.append(" this._tokenStartLine, this._tokenStartColumn + offset);\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" return false;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("PositionAdjustingLexer.isIdentifierChar = function(c) {\n"); - grammarBuilder.append(" return c.match(/^[0-9a-zA-Z_]+$/);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ASSIGN : '=' ;\n"); - grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); - grammarBuilder.append("LCURLY: '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// 'tokens' followed by '{'\n"); - grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); - grammarBuilder.append("LABEL\n"); - grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("IDENTIFIER\n"); - grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("IGNORED\n"); - grammarBuilder.append(" : [ \\t\\r\\n]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("NEWLINE\n"); - grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS\n"); - grammarBuilder.append(" : [ \\t]+ -> skip\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input = - "tokens\n" + - "tokens {\n" + - "notLabel\n" + - "label1 =\n" + - "label2 +=\n" + - "notLabel\n"; - String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); - assertEquals( - "[@0,0:5='tokens',<6>,1:0]\n" + - "[@1,7:12='tokens',<4>,2:0]\n" + - "[@2,14:14='{',<3>,2:7]\n" + - "[@3,16:23='notLabel',<6>,3:0]\n" + - "[@4,25:30='label1',<5>,4:0]\n" + - "[@5,32:32='=',<1>,4:7]\n" + - "[@6,34:39='label2',<5>,5:0]\n" + - "[@7,41:42='+=',<2>,5:7]\n" + - "[@8,44:51='notLabel',<6>,6:0]\n" + - "[@9,53:52='',<-1>,7:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testQuoteTranslation() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); - String grammar = grammarBuilder.toString(); - String input ="\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\"',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : '-' I ;\n"); - grammarBuilder.append("I : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34 -21 3"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='34',<2>,1:0]\n" + - "[@1,3:5='-21',<1>,1:3]\n" + - "[@2,7:7='3',<2>,1:7]\n" + - "[@3,8:7='',<-1>,1:8]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSlashes() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("Backslash : '\\\\';\n"); - grammarBuilder.append("Slash : '/';\n"); - grammarBuilder.append("Vee : '\\\\/';\n"); - grammarBuilder.append("Wedge : '/\\\\';\n"); - grammarBuilder.append("WS : [ \\t] -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="\\ / \\/ /\\"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\\',<1>,1:0]\n" + - "[@1,2:2='/',<2>,1:2]\n" + - "[@2,4:5='\\/',<3>,1:4]\n" + - "[@3,7:8='/\\',<4>,1:7]\n" + - "[@4,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testZeroLengthToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("BeginString\n"); - grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("mode StringMode;\n"); - grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); - grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); - grammarBuilder.append("mode EndStringMode; \n"); - grammarBuilder.append(" EndString : '\\'' -> popMode;"); - String grammar = grammarBuilder.toString(); - String input ="'xxx'"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4=''xxx'',<1>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestListeners.java index d161bc2cc..3fd5ca287 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestListeners.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestListeners.java @@ -1,389 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestListeners extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(632); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafListener = function() {\n"); - grammarBuilder.append(" this.visitTerminal = function(node) {\n"); - grammarBuilder.append(" console.log(node.symbol.text);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); - grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1\n" + - "2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(842); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafListener = function() {\n"); - grammarBuilder.append(" this.exitE = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===3) {\n"); - grammarBuilder.append(" str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.INT().symbol.text;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" console.log(str);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); - grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1\n" + - "2\n" + - "3\n" + - "2 3 2\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(832); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafListener = function() {\n"); - grammarBuilder.append(" this.exitCall = function(ctx) {\n"); - grammarBuilder.append(" var str = ctx.e().start.text + ' ' + ctx.eList();\n"); - grammarBuilder.append(" console.log(str);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" this.exitInt = function(ctx) {\n"); - grammarBuilder.append(" var str = ctx.INT().symbol.text;\n"); - grammarBuilder.append(" console.log(str);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); - grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1\n" + - "2\n" + - "3\n" + - "1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(867); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafListener = function() {\n"); - grammarBuilder.append(" this.exitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" console.log(str);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); - grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(867); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafListener = function() {\n"); - grammarBuilder.append(" this.exitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" console.log(str);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); - grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(854); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafListener = function() {\n"); - grammarBuilder.append(" this.exitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT());\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.ID().symbol.toString();\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" console.log(str);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); - grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a 1 2)\n" + - "1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(854); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TListener = require('./TListener').TListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafListener = function() {\n"); - grammarBuilder.append(" this.exitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT());\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.ID().symbol.toString();\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" console.log(str);\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafListener.prototype = Object.create(TListener.prototype);\n"); - grammarBuilder.append("this.LeafListener.prototype.constructor = this.LeafListener;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var walker = new antlr4.tree.ParseTreeWalker();\n"); - grammarBuilder.append("walker.walk(new this.LeafListener(), $ctx.r);\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParseTrees.java index 2dd5b992d..c2d2cec82 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParseTrees.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParseTrees.java @@ -1,278 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParseTrees extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2AltLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(143); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xyyxyxz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a x y y x y x z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2Alts() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(136); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAltNum() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(663); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("MyRuleNode = function(parent, invokingState) {\n"); - grammarBuilder.append(" antlr4.ParserRuleContext.call(this, parent, invokingState);\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" this.altNum = 0;\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MyRuleNode.prototype = Object.create(antlr4.ParserRuleContext.prototype);\n"); - grammarBuilder.append("MyRuleNode.prototype.constructor = MyRuleNode;\n"); - grammarBuilder.append("MyRuleNode.prototype.getAltNumber = function() { return this.altNum; }\n"); - grammarBuilder.append("MyRuleNode.prototype.setAltNumber = function(altNumber) { this.altNum = altNumber; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("a : 'f'\n"); - grammarBuilder.append(" | 'g'\n"); - grammarBuilder.append(" | 'x' b 'z'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'e' {} | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xyz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a:3 x (b:2 y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExtraToken() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(149); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - String input ="xzy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a x z y)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(151); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - String input ="z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a z)\n", found); - - assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleRef() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(145); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b 'x'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'y' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="yx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a (b y) x)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSync() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(152); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'* '!'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xzyy!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a x z y y !)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToken2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(134); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("(a x y)\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenAndRuleContextString() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(205); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("this.buildParseTrees = true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($r.ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' { \n"); - grammarBuilder.append("console.log(antlr4.Utils.arrayToString(this.getRuleInvocationStack()));\n"); - grammarBuilder.append("} ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "[a, s]\n" + - "(a x)\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserErrors.java index 527ebff59..9a0f8e7d6 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserErrors.java @@ -1,624 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserErrors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpToken() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x='b' {console.log(\"conjured=\" + $x);} 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpTokenFromSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x=('b'|'c') {console.log(\"conjured=\" + $x);} 'd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testContextListGetters() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(211); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members{\n"); - grammarBuilder.append(" function foo() {\n"); - grammarBuilder.append(" var s = new SContext();\n"); - grammarBuilder.append(" var a = s.a();\n"); - grammarBuilder.append(" var b = s.b();\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : (a | b)+;\n"); - grammarBuilder.append("a : 'a' {process.stdout.write(\"a\");};\n"); - grammarBuilder.append("b : 'b' {process.stdout.write(\"b\");};"); - String grammar = grammarBuilder.toString(); - String input ="abab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals("abab\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - String input ="xxxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidATNStateRemoval() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input ="x:x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidEmptyInput() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID+;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, true); - assertEquals("", found); - - assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1ErrorInfo() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(301); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); - grammarBuilder.append("animal : (DOG | CAT );\n"); - grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); - grammarBuilder.append("AND : 'and';\n"); - grammarBuilder.append("DOG : 'dog';\n"); - grammarBuilder.append("CAT : 'cat';\n"); - grammarBuilder.append("HARDWARE: 'hardware';\n"); - grammarBuilder.append("SOFTWARE: 'software';\n"); - grammarBuilder.append("WS : ' ' -> skip ;\n"); - grammarBuilder.append("acClass\n"); - grammarBuilder.append("@init\n"); - grammarBuilder.append("{console.log(this.getExpectedTokens().toString(this.literalNames));}\n"); - grammarBuilder.append(" : ;"); - String grammar = grammarBuilder.toString(); - String input ="dog and software"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals("{'hardware', 'software'}\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'\n"); - grammarBuilder.append(" | 'a' 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="ae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(55); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c'\n"); - grammarBuilder.append(" | 'a' 'b' 'd'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="abe"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLLStar() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="aaae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c';"); - String grammar = grammarBuilder.toString(); - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c';"); - String grammar = grammarBuilder.toString(); - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAltAvoidance() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e '!' ;\n"); - grammarBuilder.append("e : 'a' 'b'\n"); - grammarBuilder.append(" | 'a'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a."; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(34); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertionConsumption() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {console.log(\"\" + $myset.stop);} ; "); - String grammar = grammarBuilder.toString(); - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("[@0,0:0='a',<3>,1:0]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('b' | 'c')\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'a'\n"); - grammarBuilder.append(";"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(25); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* ;"); - String grammar = grammarBuilder.toString(); - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(32); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})*;"); - String grammar = grammarBuilder.toString(); - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforePredict() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - String input ="caaab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionConsumption() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {console.log(\"\" + $myset.stop);} ; "); - String grammar = grammarBuilder.toString(); - String input ="aabd"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("[@2,2:2='b',<1>,1:2]\n", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(37); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{})* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionExpectingSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenInsertion() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - - assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); - grammarBuilder.append("expr: ID '=' STR ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="( ~FORCE_ERROR~ "; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "stat", input, false); - assertEquals("", found); - - assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserExec.java index 13efc4653..a9110f42a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestParserExec.java @@ -1,695 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserExec extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAPlus() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID+ {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAPlus() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(89); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)+ {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(89); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(89); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorB() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(136); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID {\n"); - grammarBuilder.append("console.log(\"alt 1\");\n"); - grammarBuilder.append("} | INT {\n"); - grammarBuilder.append("console.log(\"alt 2\");\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBPlus() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(112); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})+ {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(112); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(112); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(105); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID INT {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abc34\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFInClosure() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : stat EOF;\n"); - grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(193); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(193); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(194); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(193); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(110); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(110); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("console.log($text);\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(171); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : a* EOF;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : label=subrule {console.log($label.text);} #One\n"); - grammarBuilder.append(" | label='y' {console.log($label.text);} #Two\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("subrule : 'x';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals( - "x\n" + - "y\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabels() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); - grammarBuilder.append("b : id_=ID val+=INT*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelForClosureContext() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(482); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("ifStatement\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("if ( !(v instanceof Array) ) {throw \"value is not an array\";}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : 'if' expression\n"); - grammarBuilder.append(" ( ( 'then'\n"); - grammarBuilder.append(" executableStatement*\n"); - grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); - grammarBuilder.append(" elseStatement?\n"); - grammarBuilder.append(" 'end' 'if'\n"); - grammarBuilder.append(" ) | executableStatement )\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("elseIfStatement\n"); - grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expression : 'a' ;\n"); - grammarBuilder.append("executableStatement : 'a' ;\n"); - grammarBuilder.append("elseStatement : 'a' ;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "expression", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelsOnSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b b* ';' ;\n"); - grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleEOFHandling() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(42); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "prog", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_4() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="if if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "stat", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserProperty() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(171); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("this.Property = function() {\n"); - grammarBuilder.append(" return true;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("a : {$parser.Property()}? ID {console.log(\"valid\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("valid\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedIfIfElse() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(175); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : stmt EOF ;\n"); - grammarBuilder.append("stmt : ifStmt | ID;\n"); - grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { this._input.LA(1)!=TParser.ELSE }?);\n"); - grammarBuilder.append("ELSE : 'else';\n"); - grammarBuilder.append("ID : [a-zA-Z]+;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="if x if x a else b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredictionIssue334() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(269); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_ @init{\n"); - grammarBuilder.append("this._errHandler = new antlr4.error.BailErrorStrategy();\n"); - grammarBuilder.append("} \n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.toStringTree(null, this));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); - grammarBuilder.append("item : A B?;\n"); - grammarBuilder.append("SEMICOLON: ';';\n"); - grammarBuilder.append("A : 'a'|'A';\n"); - grammarBuilder.append("B : 'b'|'B';\n"); - grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "file_", input, false); - assertEquals("(file_ (item a) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(113); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {console.log($text);} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(113); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {console.log($text);} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestPerformance.java index e1868df56..d212c1ccb 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestPerformance.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestPerformance.java @@ -1,212 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestPerformance extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", - "ExprListener", "ExprVisitor", - "program", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalLexer.java index 3dfb3dadf..7989e2792 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalLexer.java @@ -1,204 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalLexer extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisableRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("E1 : 'enum' { false }? ;\n"); - grammarBuilder.append("E2 : 'enum' { true }? ; // winner not E1 or ID\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<3>,1:5]\n" + - "[@2,8:7='',<-1>,1:8]\n" + - "s0-' '->:s5=>4\n" + - "s0-'a'->:s6=>3\n" + - "s0-'e'->:s1=>3\n" + - ":s1=>3-'n'->:s2=>3\n" + - ":s2=>3-'u'->:s3=>3\n" + - ":s6=>3-'b'->:s6=>3\n" + - ":s6=>3-'c'->:s6=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnumNotID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(97); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { this.text===\"enum\" }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<1>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s3=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDnotEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { false }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s2=>3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDvsEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : 'enum' { false }? ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s5=>3\n" + - "s0-'a'->:s4=>2\n" + - "s0-'e'->:s1=>2\n" + - ":s1=>2-'n'->:s2=>2\n" + - ":s2=>2-'u'->:s3=>2\n" + - ":s4=>2-'b'->:s4=>2\n" + - ":s4=>2-'c'->:s4=>2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndent() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(143); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { this._tokenStartColumn===0 }?\n"); - grammarBuilder.append(" { console.log(\"INDENT\"); } ;\n"); - grammarBuilder.append("NL : '\\n';\n"); - grammarBuilder.append("WS : [ \\t]+ ;"); - String grammar = grammarBuilder.toString(); - String input = - "abc\n" + - " def \n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "INDENT\n" + - "[@0,0:2='abc',<1>,1:0]\n" + - "[@1,3:3='\\n',<3>,1:3]\n" + - "[@2,4:5=' ',<2>,2:0]\n" + - "[@3,6:8='def',<1>,2:2]\n" + - "[@4,9:10=' ',<4>,2:5]\n" + - "[@5,11:11='\\n',<3>,2:7]\n" + - "[@6,12:11='',<-1>,3:0]\n" + - "s0-'\n" + - "'->:s2=>3\n" + - "s0-'a'->:s1=>1\n" + - "s0-'d'->:s1=>1\n" + - ":s1=>1-'b'->:s1=>1\n" + - ":s1=>1-'c'->:s1=>1\n" + - ":s1=>1-'e'->:s1=>1\n" + - ":s1=>1-'f'->:s1=>1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerInputPositionSensitivePredicates() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(220); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WORD1 : ID1+ { console.log(this.text); } ;\n"); - grammarBuilder.append("WORD2 : ID2+ { console.log(this.text); } ;\n"); - grammarBuilder.append("fragment ID1 : { this.column < 2 }? [a-zA-Z];\n"); - grammarBuilder.append("fragment ID2 : { this.column >= 2 }? [a-zA-Z];\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - String input = - "a cde\n" + - "abcde\n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "a\n" + - "cde\n" + - "ab\n" + - "cde\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:4='cde',<2>,1:2]\n" + - "[@2,6:7='ab',<1>,2:0]\n" + - "[@3,8:10='cde',<2>,2:2]\n" + - "[@4,12:11='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedKeywords() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { this.text===\"enum\" }? { console.log(\"enum!\"); } ;\n"); - grammarBuilder.append("ID : [a-z]+ { console.log(\"ID \" + this.text); } ;\n"); - grammarBuilder.append("WS : [ \\n] -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="enum enu a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "enum!\n" + - "ID enu\n" + - "ID a\n" + - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='enu',<2>,1:5]\n" + - "[@2,9:9='a',<2>,1:9]\n" + - "[@3,10:9='',<-1>,1:10]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalParser.java index 0cf0eb3a0..65a4e8b1b 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSemPredEvalParser.java @@ -1,685 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalParser extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAlts() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(308); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;} a ';' a; // do 2x: once in ATN, next in DFA\n"); - grammarBuilder.append("a : ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" | {false}? ID {console.log(\"alt 3\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - - assertEquals( - "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + - "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(360); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;} a ';' a ';' a;\n"); - grammarBuilder.append("a : INT {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | ID {console.log(\"alt 2\");} // must pick this one for ID since pred is false\n"); - grammarBuilder.append(" | ID {console.log(\"alt 3\");}\n"); - grammarBuilder.append(" | {false}? ID {console.log(\"alt 4\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="34; x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, true); - assertEquals( - "alt 1\n" + - "alt 2\n" + - "alt 2\n", found); - - assertEquals( - "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + - "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionHidesPreds() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(236); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {this.i = 0;}\n"); - grammarBuilder.append("s : a+ ;\n"); - grammarBuilder.append("a : {this.i = 1;} ID {this.i === 1}? {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {this.i = 2;} ID {this.i === 2}? {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionsHidePredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(299); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.pred = function(v) {\n"); - grammarBuilder.append(" console.log(\"eval=\" + v.toString());\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {} {this.pred(true)}? {console.log(\"parse\");} '!' ;\n"); - grammarBuilder.append("t : e {} {this.pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAtomWithClosureInTranslatedLRRule() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : e[0] EOF;\n"); - grammarBuilder.append("e[int _p]\n"); - grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); - grammarBuilder.append(" ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a+b+a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "start", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDepedentPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(324); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.pred = function(v) {\n"); - grammarBuilder.append(" console.log(\"eval=\" + v.toString());\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : a[99] ;\n"); - grammarBuilder.append("a[int i] : e {this.pred($i===99)}? {console.log(\"parse\");} '!' ;\n"); - grammarBuilder.append("b[int i] : e {this.pred($i===99)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(272); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); - grammarBuilder.append("b[int i] : a[i] ;\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i===1}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {$i===2}? ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisabledAlternative() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); - grammarBuilder.append("content: anything | {false}? .;\n"); - grammarBuilder.append("anything: ANY_CHAR;\n"); - grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); - String grammar = grammarBuilder.toString(); - String input ="hello"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "cppCompilationUnit", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(183); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b ';' | b '.' ;\n"); - grammarBuilder.append("b : a ;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : {false}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoTruePredsThrowsNoViableAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(171); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {false}? ID INT {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {false}? ID INT {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOrder() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(297); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); - grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); - grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); - grammarBuilder.append("a : ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(210); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {console.log($ctx.toStringTree(null, this));}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - String input = - "s\n" + - "\n" + - "\n" + - "x\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); - - assertEquals( - "line 5:0 mismatched input '' expecting '\n" + - "'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(210); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {console.log($ctx.toStringTree(null, this));}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{this._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - String input = - "s\n" + - "\n" + - "\n" + - "x\n" + - "\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "file_", input, true); - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(209); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {this.enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {console.log(\"ID \"+$ID.text);}\n"); - grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {console.log(\"enum\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "primary", input, false); - assertEquals("ID abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(209); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {this.enumKeyword = true;}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {console.log(\"ID \"+$ID.text);}\n"); - grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {console.log(\"enum\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="enum"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "primary", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(211); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {this.i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i===1}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {$i===2}? ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {this.i = 0;}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i===1}? ID \n"); - grammarBuilder.append(" | {$i===2}? ID \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(293); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.pred = function(v) {\n"); - grammarBuilder.append(" console.log(\"eval=\" + v.toString());\n"); - grammarBuilder.append(" return v;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {this.pred(true)}? {console.log(\"parse\");} '!' ;\n"); - grammarBuilder.append("t : e {this.pred(false)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRewindBeforePredEval() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(217); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {this._input.LT(1).text===\"x\"}? ID INT {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {this._input.LT(1).text===\"y\"}? ID INT {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(256); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); - grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" | INT {console.log(\"alt 3\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x y 3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 3\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(167); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a;\n"); - grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="3 4 x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n", found); - - assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeft() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append(" s : a+ ;\n"); - grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeftWithVaryingPredicate() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(281); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {this.i = 0;}\n"); - grammarBuilder.append("s : ({this.i += 1;\n"); - grammarBuilder.append("process.stdout.write(\"i=\");\n"); - grammarBuilder.append("console.log(this.i);} a)+ ;\n"); - grammarBuilder.append("a : {this.i % 2 === 0}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {this.i % 2 != 0}? ID {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "i=1\n" + - "alt 2\n" + - "i=2\n" + - "alt 1\n" + - "i=3\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testUnpredicatedPathsInAlt() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(183); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | b {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("a : {false}? ID INT\n"); - grammarBuilder.append(" | ID INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testValidateInDFA() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(332); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ';' a;\n"); - grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); - grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); - grammarBuilder.append("// throws an exception if the validating predicate fails\n"); - grammarBuilder.append("a : {false}? ID {console.log(\"alt 1\");}\n"); - grammarBuilder.append(" | {true}? INT {console.log(\"alt 2\");}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="x ; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 no viable alternative at input 'x'\n" + - "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSets.java index bb642dd54..986e39565 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestSets.java @@ -1,408 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSets extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetLiteral() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (A {console.log($A.text);})+ ;\n"); - grammarBuilder.append("A : [AaBb] ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="A a B b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals( - "A\n" + - "a\n" + - "B\n" + - "b\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testComplementSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("parse : ~NEW_LINE;\n"); - grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); - String grammar = grammarBuilder.toString(); - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "parse", input, false); - assertEquals("", found); - - assertEquals( - "line 1:0 token recognition error at: 'a'\n" + - "line 1:1 missing {} at ''\n", this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerOptionalSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')? 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerPlusSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerStarSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : ('a'|'b')* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotChar() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log($A.text);} ;\n"); - grammarBuilder.append("A : ~'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log($A.text);} ;\n"); - grammarBuilder.append("A : ~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithLabel() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log($A.text);} ;\n"); - grammarBuilder.append("A : h=~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithRuleRef3() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(125); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log($A.text);} ;\n"); - grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("B : ~('a'|'c') ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalLexerSingleElement() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(71); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'? 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {console.log(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSingleElement() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(71); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b' ;"); - String grammar = grammarBuilder.toString(); - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~('x'|'y') 'z' {console.log($t.text);} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotToken() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {console.log(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("zz\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotTokenWithLabel() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~'x' 'z' {console.log($t.text);} ;"); - String grammar = grammarBuilder.toString(); - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=('x'|'y') {console.log($t.text);} ;"); - String grammar = grammarBuilder.toString(); - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusLexerSingleElement() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(71); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'+ 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {console.log(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleAsSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(76); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {console.log(this._input.getText());} : 'a' | 'b' |'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("b\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSeqDoesNotBecomeSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(113); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("fragment A : '1' | '2';\n"); - grammarBuilder.append("fragment B : '3' '4';\n"); - grammarBuilder.append("C : A | B;"); - String grammar = grammarBuilder.toString(); - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("34\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(71); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(71); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {console.log(this._input.getText());} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - String input ="c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("c\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarSet() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {console.log(this._input.getText());} ;"); - String grammar = grammarBuilder.toString(); - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "a", input, false); - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestVisitors.java index 44f7411e4..077e318c6 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestVisitors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/node/TestVisitors.java @@ -1,388 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.javascript.node; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestVisitors extends BaseTest { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(603); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TVisitor = require('./TVisitor').TVisitor;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafVisitor = function() {\n"); - grammarBuilder.append(" this.visitTerminal = function(node) {\n"); - grammarBuilder.append(" return node.symbol.text;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafVisitor.prototype = Object.create(TVisitor.prototype);\n"); - grammarBuilder.append("this.LeafVisitor.prototype.constructor = this.LeafVisitor;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var visitor = new this.LeafVisitor();\n"); - grammarBuilder.append("console.log($ctx.r.accept(visitor));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a 1 2)\n" + - "[ '1', '2' ]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(843); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TVisitor = require('./TVisitor').TVisitor;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafVisitor = function() {\n"); - grammarBuilder.append(" this.visitE = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===3) {\n"); - grammarBuilder.append(" str = ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.INT().symbol.text;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return this.visitChildren(ctx) + str;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafVisitor.prototype = Object.create(TVisitor.prototype);\n"); - grammarBuilder.append("this.LeafVisitor.prototype.constructor = this.LeafVisitor;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var visitor = new this.LeafVisitor();\n"); - grammarBuilder.append("console.log($ctx.r.accept(visitor));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1,,2,,32 3 21 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(854); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TVisitor = require('./TVisitor').TVisitor;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafVisitor = function() {\n"); - grammarBuilder.append(" this.visitCall = function(ctx) {\n"); - grammarBuilder.append(" var str = ctx.e().start.text + ' ' + ctx.eList();\n"); - grammarBuilder.append(" return this.visitChildren(ctx) + str;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" this.visitInt = function(ctx) {\n"); - grammarBuilder.append(" var str = ctx.INT().symbol.text;\n"); - grammarBuilder.append(" return this.visitChildren(ctx) + str;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafVisitor.prototype = Object.create(TVisitor.prototype);\n"); - grammarBuilder.append("this.LeafVisitor.prototype.constructor = this.LeafVisitor;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var visitor = new this.LeafVisitor();\n"); - grammarBuilder.append("console.log($ctx.r.accept(visitor));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1,,2,,3,1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(868); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TVisitor = require('./TVisitor').TVisitor;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafVisitor = function() {\n"); - grammarBuilder.append(" this.visitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return this.visitChildren(ctx) + str;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafVisitor.prototype = Object.create(TVisitor.prototype);\n"); - grammarBuilder.append("this.LeafVisitor.prototype.constructor = this.LeafVisitor;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var visitor = new this.LeafVisitor();\n"); - grammarBuilder.append("console.log($ctx.r.accept(visitor));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a (b 1) (b 2))\n" + - ",1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(868); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TVisitor = require('./TVisitor').TVisitor;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafVisitor = function() {\n"); - grammarBuilder.append(" this.visitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text;\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.b(0).start.text;\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return this.visitChildren(ctx) + str;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafVisitor.prototype = Object.create(TVisitor.prototype);\n"); - grammarBuilder.append("this.LeafVisitor.prototype.constructor = this.LeafVisitor;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var visitor = new this.LeafVisitor();\n"); - grammarBuilder.append("console.log($ctx.r.accept(visitor));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(855); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TVisitor = require('./TVisitor').TVisitor;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafVisitor = function() {\n"); - grammarBuilder.append(" this.visitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT());\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.ID().symbol.toString();\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return this.visitChildren(ctx) + str;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafVisitor.prototype = Object.create(TVisitor.prototype);\n"); - grammarBuilder.append("this.LeafVisitor.prototype.constructor = this.LeafVisitor;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var visitor = new this.LeafVisitor();\n"); - grammarBuilder.append("console.log($ctx.r.accept(visitor));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a 1 2)\n" + - ",1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - StringBuilder grammarBuilder = new StringBuilder(855); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("var TVisitor = require('./TVisitor').TVisitor;\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("this.LeafVisitor = function() {\n"); - grammarBuilder.append(" this.visitA = function(ctx) {\n"); - grammarBuilder.append(" var str;\n"); - grammarBuilder.append(" if(ctx.getChildCount()===2) {\n"); - grammarBuilder.append(" str = ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + antlr4.Utils.arrayToString(ctx.INT());\n"); - grammarBuilder.append(" } else {\n"); - grammarBuilder.append(" str = ctx.ID().symbol.toString();\n"); - grammarBuilder.append(" }\n"); - grammarBuilder.append(" return this.visitChildren(ctx) + str;\n"); - grammarBuilder.append(" };\n"); - grammarBuilder.append(" return this;\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("this.LeafVisitor.prototype = Object.create(TVisitor.prototype);\n"); - grammarBuilder.append("this.LeafVisitor.prototype.constructor = this.LeafVisitor;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("console.log($ctx.r.toStringTree(null, this));\n"); - grammarBuilder.append("var visitor = new this.LeafVisitor();\n"); - grammarBuilder.append("console.log($ctx.r.accept(visitor));\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", - "TListener", "TVisitor", - "s", input, false); - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseNodeTest()); } + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Node"); + } } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/BaseTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/BaseSafariTest.java similarity index 93% rename from runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/BaseTest.java rename to runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/BaseSafariTest.java index 4e043c86b..22f8da78b 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/BaseTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/BaseSafariTest.java @@ -29,11 +29,12 @@ */ package org.antlr.v4.test.runtime.javascript.safari; +import org.antlr.v4.test.runtime.javascript.browser.BaseBrowserTest; import org.junit.AfterClass; import org.junit.BeforeClass; /* see https://code.google.com/p/selenium/wiki/SafariDriver for instructions */ -public abstract class BaseTest extends org.antlr.v4.test.runtime.javascript.browser.BaseBrowserTest { +public class BaseSafariTest extends BaseBrowserTest { @BeforeClass public static void initWebDriver() { diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeLexers.java new file mode 100644 index 000000000..95c075d64 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeLexers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeParsers.java new file mode 100644 index 000000000..6e315c791 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestCompositeParsers.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestFullContextParsing.java new file mode 100644 index 000000000..4b198c575 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestFullContextParsing.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLeftRecursion.java new file mode 100644 index 000000000..74b851e84 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLeftRecursion.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerErrors.java new file mode 100644 index 000000000..e9e40fdd1 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerExec.java new file mode 100644 index 000000000..baf5ce9a9 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestLexerExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestListeners.java new file mode 100644 index 000000000..1f8e36d19 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestListeners.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor, new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParseTrees.java new file mode 100644 index 000000000..8f56e39ca --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParseTrees.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserErrors.java new file mode 100644 index 000000000..05def3ddc --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserErrors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserExec.java new file mode 100644 index 000000000..d249bec3c --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestParserExec.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestPerformance.java new file mode 100644 index 000000000..180830c46 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestPerformance.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalLexer.java new file mode 100644 index 000000000..e92ffc244 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalLexer.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalParser.java new file mode 100644 index 000000000..e196c9cc9 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSemPredEvalParser.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSets.java new file mode 100644 index 000000000..83a9f3ab0 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestSets.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestVisitors.java new file mode 100644 index 000000000..2b42470d6 --- /dev/null +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/javascript/safari/TestVisitors.java @@ -0,0 +1,19 @@ +package org.antlr.v4.test.runtime.javascript.safari; + +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BaseSafariTest()); + } + + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Safari"); + } +} diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python/BasePythonTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python/BasePythonTest.java index f221f3008..9a2e55f14 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python/BasePythonTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python/BasePythonTest.java @@ -56,9 +56,11 @@ import org.antlr.v4.runtime.atn.LexerATNSimulator; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntegerList; import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.misc.Utils; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.semantics.SemanticPipeline; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.SingleTest; import org.antlr.v4.tool.ANTLRMessage; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.DefaultToolListener; @@ -66,7 +68,6 @@ import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.GrammarSemanticsMessage; import org.antlr.v4.tool.LexerGrammar; import org.antlr.v4.tool.Rule; -import org.junit.Before; import org.junit.rules.TestRule; import org.junit.rules.TestWatcher; import org.junit.runner.Description; @@ -100,7 +101,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public abstract class BasePythonTest { +public abstract class BasePythonTest implements SingleTest { // -J-Dorg.antlr.v4.test.BaseTest.level=FINE // private static final Logger LOGGER = Logger.getLogger(BaseTest.class.getName()); public static final String newline = System.getProperty("line.separator"); @@ -109,10 +110,13 @@ public abstract class BasePythonTest { public String tmpdir = null; /** If error during parser execution, store stderr here; can't return - * stdout and stderr. This doesn't trap errors from running antlr. - */ + * stdout and stderr. This doesn't trap errors from running antlr. + */ protected String stderrDuringParse; + /** Errors found while running antlr */ + protected StringBuilder antlrToolErrors; + @org.junit.Rule public final TestRule testWatcher = new TestWatcher() { @@ -129,18 +133,46 @@ public abstract class BasePythonTest { return "antlr-" + getLanguage().toLowerCase(); } - @Before - public void setUp() throws Exception { - // new output dir for each test - String propName = getPropertyPrefix() + "-test-dir"; - String prop = System.getProperty(propName); - if(prop!=null && prop.length()>0) - tmpdir = prop; - else - tmpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); - } + @Override + public void testSetUp() throws Exception { + // new output dir for each test + String propName = getPropertyPrefix() + "-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + tmpdir = prop; + else + tmpdir = new File(System.getProperty("java.io.tmpdir"), getClass().getSimpleName()+"-"+System.currentTimeMillis()).getAbsolutePath(); + antlrToolErrors = new StringBuilder(); + } - protected org.antlr.v4.Tool newTool(String[] args) { + @Override + public void testTearDown() throws Exception { + } + + @Override + public String getTmpDir() { + return tmpdir; + } + + @Override + public String getStdout() { + return null; + } + + @Override + public String getParseErrors() { + return stderrDuringParse; + } + + @Override + public String getANTLRToolErrors() { + if ( antlrToolErrors.length()==0 ) { + return null; + } + return antlrToolErrors.toString(); + } + + protected org.antlr.v4.Tool newTool(String[] args) { Tool tool = new Tool(args); return tool; } @@ -227,8 +259,8 @@ public abstract class BasePythonTest { } public List getTokenTypes(LexerGrammar lg, - ATN atn, - CharStream input) + ATN atn, + CharStream input) { LexerATNSimulator interp = new LexerATNSimulator(atn,new DFA[] { new DFA(atn.modeToStartState.get(Lexer.DEFAULT_MODE)) },null); List tokenTypes = new ArrayList(); @@ -324,7 +356,6 @@ public abstract class BasePythonTest { /** Return true if all is ok, no errors */ protected ErrorQueue antlr(String fileName, String grammarFileName, String grammarStr, boolean defaultListener, String... extraOptions) { - System.out.println("dir "+tmpdir); mkdir(tmpdir); writeFile(tmpdir, fileName, grammarStr); final List options = new ArrayList(); @@ -347,20 +378,21 @@ public abstract class BasePythonTest { antlr.processGrammarsOnCommandLine(); if ( !defaultListener && !equeue.errors.isEmpty() ) { - System.err.println("antlr reports errors from "+options); for (int i = 0; i < equeue.errors.size(); i++) { ANTLRMessage msg = equeue.errors.get(i); - System.err.println(msg); + antlrToolErrors.append(msg.toString()); + } + try { + antlrToolErrors.append(new String(Utils.readFile(tmpdir+"/"+grammarFileName))); + } + catch (IOException ioe) { + antlrToolErrors.append(ioe.toString()); } - System.out.println("!!!\ngrammar:"); - System.out.println(grammarStr); - System.out.println("###"); } if ( !defaultListener && !equeue.warnings.isEmpty() ) { - System.err.println("antlr reports warnings from "+options); for (int i = 0; i < equeue.warnings.size(); i++) { ANTLRMessage msg = equeue.warnings.get(i); - System.err.println(msg); + // antlrToolErrors.append(msg); warnings are hushed } } @@ -368,36 +400,34 @@ public abstract class BasePythonTest { } protected String execLexer(String grammarFileName, - String grammarStr, - String lexerName, - String input) + String grammarStr, + String lexerName, + String input) { return execLexer(grammarFileName, grammarStr, lexerName, input, false); } - protected String execLexer(String grammarFileName, - String grammarStr, - String lexerName, - String input, - boolean showDFA) + @Override + public String execLexer(String grammarFileName, + String grammarStr, + String lexerName, + String input, + boolean showDFA) { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, - grammarStr, - null, - lexerName,"-no-listener"); + grammarStr, + null, + lexerName,"-no-listener"); assertTrue(success); writeFile(tmpdir, "input", input); writeLexerTestFile(lexerName, showDFA); String output = execModule("Test.py"); - if ( stderrDuringParse!=null && stderrDuringParse.length()>0 ) { - System.err.println(stderrDuringParse); - } return output; } public ParseTree execStartRule(String startRuleName, Parser parser) throws IllegalAccessException, InvocationTargetException, - NoSuchMethodException + NoSuchMethodException { Method startRule = null; Object[] args = null; @@ -414,64 +444,64 @@ public abstract class BasePythonTest { return result; } - protected String execParser(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String listenerName, - String visitorName, - String startRuleName, - String input, - boolean debug) { - return execParser(grammarFileName, grammarStr, parserName, lexerName, - listenerName, visitorName, startRuleName, input, debug, false); + public String execParser(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean showDiagnosticErrors) { + return execParser_(grammarFileName, grammarStr, parserName, lexerName, + listenerName, visitorName, startRuleName, input, showDiagnosticErrors, false); } - protected String execParser(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String listenerName, - String visitorName, - String startRuleName, - String input, - boolean debug, - boolean trace) + public String execParser_(String grammarFileName, + String grammarStr, + String parserName, + String lexerName, + String listenerName, + String visitorName, + String startRuleName, + String input, + boolean debug, + boolean trace) { boolean success = rawGenerateAndBuildRecognizer(grammarFileName, - grammarStr, - parserName, - lexerName, - "-visitor"); + grammarStr, + parserName, + lexerName, + "-visitor"); assertTrue(success); writeFile(tmpdir, "input", input); rawBuildRecognizerTestFile(parserName, - lexerName, - listenerName, - visitorName, - startRuleName, - debug, - trace); + lexerName, + listenerName, + visitorName, + startRuleName, + debug, + trace); return execRecognizer(); } /** Return true if all is well */ protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - String... extraOptions) + String grammarStr, + String parserName, + String lexerName, + String... extraOptions) { return rawGenerateAndBuildRecognizer(grammarFileName, grammarStr, parserName, lexerName, false, extraOptions); } /** Return true if all is well */ protected boolean rawGenerateAndBuildRecognizer(String grammarFileName, - String grammarStr, - String parserName, - String lexerName, - boolean defaultListener, - String... extraOptions) + String grammarStr, + String parserName, + String lexerName, + boolean defaultListener, + String... extraOptions) { ErrorQueue equeue = antlr(grammarFileName, grammarFileName, grammarStr, defaultListener, extraOptions); @@ -497,24 +527,24 @@ public abstract class BasePythonTest { } protected void rawBuildRecognizerTestFile(String parserName, - String lexerName, - String listenerName, - String visitorName, - String parserStartRuleName, - boolean debug, - boolean trace) + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, + boolean debug, + boolean trace) { - this.stderrDuringParse = null; + this.stderrDuringParse = null; if ( parserName==null ) { writeLexerTestFile(lexerName, false); } else { writeParserTestFile(parserName, - lexerName, - listenerName, - visitorName, - parserStartRuleName, - debug, trace); + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, trace); } } @@ -540,9 +570,11 @@ public abstract class BasePythonTest { stdoutVacuum.join(); stderrVacuum.join(); String output = stdoutVacuum.toString(); + if ( output.length()==0 ) { + output = null; + } if ( stderrVacuum.toString().length()>0 ) { this.stderrDuringParse = stderrVacuum.toString(); - System.err.println("exec stderrVacuum: "+ stderrVacuum); } return output; } @@ -564,9 +596,9 @@ public abstract class BasePythonTest { protected String locatePython() { String propName = getPropertyPrefix() + "-python"; - String prop = System.getProperty(propName); - if(prop==null || prop.length()==0) - prop = locateTool(getPythonExecutable()); + String prop = System.getProperty(propName); + if(prop==null || prop.length()==0) + prop = locateTool(getPythonExecutable()); File file = new File(prop); if(!file.exists()) throw new RuntimeException("Missing system property:" + propName); @@ -594,9 +626,9 @@ public abstract class BasePythonTest { } public void testErrors(String[] pairs, boolean printTree) { - for (int i = 0; i < pairs.length; i+=2) { - String input = pairs[i]; - String expect = pairs[i+1]; + for (int i = 0; i < pairs.length; i+=2) { + String input = pairs[i]; + String expect = pairs[i+1]; String[] lines = input.split("\n"); String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); @@ -610,9 +642,9 @@ public abstract class BasePythonTest { msg = msg.replace("\r","\\r"); msg = msg.replace("\t","\\t"); - assertEquals("error in: "+msg,expect,actual); - } - } + assertEquals("error in: "+msg,expect,actual); + } + } public String getFilenameFromFirstLineOfGrammar(String line) { String fileName = "A" + Tool.GRAMMAR_EXTENSION; @@ -754,7 +786,7 @@ public abstract class BasePythonTest { } protected void checkGrammarSemanticsError(ErrorQueue equeue, - GrammarSemanticsMessage expectedMessage) + GrammarSemanticsMessage expectedMessage) throws Exception { ANTLRMessage foundMsg = null; @@ -766,7 +798,7 @@ public abstract class BasePythonTest { } assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", - foundMsg instanceof GrammarSemanticsMessage); + foundMsg instanceof GrammarSemanticsMessage); assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); if ( equeue.size()!=1 ) { System.err.println(equeue); @@ -774,7 +806,7 @@ public abstract class BasePythonTest { } protected void checkGrammarSemanticsWarning(ErrorQueue equeue, - GrammarSemanticsMessage expectedMessage) + GrammarSemanticsMessage expectedMessage) throws Exception { ANTLRMessage foundMsg = null; @@ -786,7 +818,7 @@ public abstract class BasePythonTest { } assertNotNull("no error; "+expectedMessage.getErrorType()+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", - foundMsg instanceof GrammarSemanticsMessage); + foundMsg instanceof GrammarSemanticsMessage); assertEquals(Arrays.toString(expectedMessage.getArgs()), Arrays.toString(foundMsg.getArgs())); if ( equeue.size()!=1 ) { System.err.println(equeue); @@ -794,7 +826,7 @@ public abstract class BasePythonTest { } protected void checkError(ErrorQueue equeue, - ANTLRMessage expectedMessage) + ANTLRMessage expectedMessage) throws Exception { //System.out.println("errors="+equeue); @@ -815,12 +847,12 @@ public abstract class BasePythonTest { assertArrayEquals(expectedMessage.getArgs(), foundMsg.getArgs()); } - public static class FilteringTokenStream extends CommonTokenStream { - public FilteringTokenStream(TokenSource src) { super(src); } - Set hide = new HashSet(); - @Override - protected boolean sync(int i) { - if (!super.sync(i)) { + public static class FilteringTokenStream extends CommonTokenStream { + public FilteringTokenStream(TokenSource src) { super(src); } + Set hide = new HashSet(); + @Override + protected boolean sync(int i) { + if (!super.sync(i)) { return false; } @@ -830,11 +862,11 @@ public abstract class BasePythonTest { } return true; - } - public void setTokenTypeChannel(int ttype, int channel) { - hide.add(ttype); - } - } + } + public void setTokenTypeChannel(int ttype, int channel) { + hide.add(ttype); + } + } public static void writeFile(String dir, String fileName, String content) { try { @@ -857,76 +889,77 @@ public abstract class BasePythonTest { } protected abstract void writeParserTestFile(String parserName, - String lexerName, - String listenerName, - String visitorName, - String parserStartRuleName, - boolean debug, - boolean setTrace); + String lexerName, + String listenerName, + String visitorName, + String parserStartRuleName, + boolean debug, + boolean setTrace); protected abstract void writeLexerTestFile(String lexerName, boolean showDFA); public void writeRecognizer(String parserName, String lexerName, - String listenerName, String visitorName, - String parserStartRuleName, boolean debug, boolean trace) { + String listenerName, String visitorName, + String parserStartRuleName, boolean debug, boolean trace) { if ( parserName==null ) { writeLexerTestFile(lexerName, debug); } else { writeParserTestFile(parserName, - lexerName, - listenerName, - visitorName, - parserStartRuleName, - debug, - trace); + lexerName, + listenerName, + visitorName, + parserStartRuleName, + debug, + trace); } } - protected void eraseFiles(final String filesEndingWith) { - File tmpdirF = new File(tmpdir); - String[] files = tmpdirF.list(); - for(int i = 0; files!=null && i < files.length; i++) { - if ( files[i].endsWith(filesEndingWith) ) { - new File(tmpdir+"/"+files[i]).delete(); - } - } - } + protected void eraseFiles(final String filesEndingWith) { + File tmpdirF = new File(tmpdir); + String[] files = tmpdirF.list(); + for(int i = 0; files!=null && i < files.length; i++) { + if ( files[i].endsWith(filesEndingWith) ) { + new File(tmpdir+"/"+files[i]).delete(); + } + } + } - protected void eraseFiles(File dir) { - String[] files = dir.list(); - for(int i = 0; files!=null && i < files.length; i++) { - new File(dir,files[i]).delete(); - } - } + protected void eraseFiles(File dir) { + String[] files = dir.list(); + for(int i = 0; files!=null && i < files.length; i++) { + new File(dir,files[i]).delete(); + } + } - protected void eraseTempDir() { - boolean doErase = true; - String propName = getPropertyPrefix() + "-erase-test-dir"; - String prop = System.getProperty(propName); - if(prop!=null && prop.length()>0) - doErase = Boolean.getBoolean(prop); - if(doErase) { - File tmpdirF = new File(tmpdir); - if ( tmpdirF.exists() ) { - eraseFiles(tmpdirF); - tmpdirF.delete(); - } - } - } + @Override + public void eraseTempDir() { + boolean doErase = true; + String propName = getPropertyPrefix() + "-erase-test-dir"; + String prop = System.getProperty(propName); + if(prop!=null && prop.length()>0) + doErase = Boolean.getBoolean(prop); + if(doErase) { + File tmpdirF = new File(tmpdir); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } + } - protected void eraseTempPyCache() { - File tmpdirF = new File(tmpdir+"/__pycache__"); - if ( tmpdirF.exists() ) { - eraseFiles(tmpdirF); - tmpdirF.delete(); - } - } + protected void eraseTempPyCache() { + File tmpdirF = new File(tmpdir+"/__pycache__"); + if ( tmpdirF.exists() ) { + eraseFiles(tmpdirF); + tmpdirF.delete(); + } + } - public String getFirstLineOfException() { + public String getFirstLineOfException() { if ( this.stderrDuringParse ==null ) { return null; } @@ -935,33 +968,33 @@ public abstract class BasePythonTest { return lines[0].substring(prefix.length(),lines[0].length()); } - /** - * When looking at a result set that consists of a Map/HashTable - * we cannot rely on the output order, as the hashing algorithm or other aspects - * of the implementation may be different on differnt JDKs or platforms. Hence - * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a - * bit of a hack, but guarantees that we get the same order on all systems. We assume that - * the keys are strings. - * - * @param m The Map that contains keys we wish to return in sorted order - * @return A string that represents all the keys in sorted order. - */ - public String sortMapToString(Map m) { - // Pass in crap, and get nothing back - // - if (m == null) { - return null; - } + /** + * When looking at a result set that consists of a Map/HashTable + * we cannot rely on the output order, as the hashing algorithm or other aspects + * of the implementation may be different on differnt JDKs or platforms. Hence + * we take the Map, convert the keys to a List, sort them and Stringify the Map, which is a + * bit of a hack, but guarantees that we get the same order on all systems. We assume that + * the keys are strings. + * + * @param m The Map that contains keys we wish to return in sorted order + * @return A string that represents all the keys in sorted order. + */ + public String sortMapToString(Map m) { + // Pass in crap, and get nothing back + // + if (m == null) { + return null; + } - System.out.println("Map toString looks like: " + m.toString()); + System.out.println("Map toString looks like: " + m.toString()); - // Sort the keys in the Map - // - TreeMap nset = new TreeMap(m); + // Sort the keys in the Map + // + TreeMap nset = new TreeMap(m); - System.out.println("Tree map looks like: " + nset.toString()); - return nset.toString(); - } + System.out.println("Tree map looks like: " + nset.toString()); + return nset.toString(); + } public List realElements(List elements) { return elements.subList(Token.MIN_USER_TOKEN_TYPE, elements.size()); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/BasePython2Test.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/BasePython2Test.java index d461d8040..9a5c73be2 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/BasePython2Test.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/BasePython2Test.java @@ -3,7 +3,7 @@ package org.antlr.v4.test.runtime.python2; import org.antlr.v4.test.runtime.python.BasePythonTest; import org.stringtemplate.v4.ST; -public abstract class BasePython2Test extends BasePythonTest { +public class BasePython2Test extends BasePythonTest { @Override protected String getLanguage() { diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeLexers.java index 16c363472..8d5aaa079 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeLexers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeLexers.java @@ -1,71 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeLexers extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {print(\"S.A\")};\n" + - "C : 'c' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="abc"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "S.A\n" + - "[@0,0:0='a',<3>,1:0]\n" + - "[@1,1:1='b',<1>,1:1]\n" + - "[@2,2:2='c',<4>,1:2]\n" + - "[@3,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {print(\"S.A\")} ;\n" + - "B : 'b' {print(\"S.B\")} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(79); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("A : 'a' B {print(\"M.A\")} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "M.A\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Python2"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeParsers.java index 5225d1738..f4f771181 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestCompositeParsers.java @@ -1,488 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.antlr.v4.test.runtime.java.ErrorQueue; -import org.antlr.v4.tool.Grammar; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeParsers extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBringInLiteralsFromDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : '=' 'a' {print(\"S.a\",end='')};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="=a"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCombinedImportsCombined() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : 'x' INT {print(\"S.x\")};\n" + - "INT : '0'..'9'+ ;\n" + - "WS : (' '|'\\n') -> skip ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(31); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : x INT;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - new Grammar(tmpdir+"/M.g4", grammar, equeue); - assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); - - - String input ="x 34 9"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.x\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatesSeeSameTokenType() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : A {print(\"S.x\")};"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { C, B, A } // reverse order\n" + - "y : A {print(\"T.y\")};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(598); - grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); - grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); - grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); - grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); - grammarBuilder.append("// mapping in each parser:\n"); - grammarBuilder.append("// public static final int C=6;\n"); - grammarBuilder.append("// public static final int EOF=-1;\n"); - grammarBuilder.append("// public static final int B=5;\n"); - grammarBuilder.append("// public static final int WS=7;\n"); - grammarBuilder.append("// public static final int A=4;\n"); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); - grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); - grammarBuilder.append("A : 'a' ; \n"); - grammarBuilder.append("C : 'c' ; \n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); - String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; - String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; - String expectedTypeToTokenList = "[B, A, C, WS]"; - assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); - assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); - assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); - assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); - - - String input ="aa"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals( - "S.x\n" + - "T.y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorAccessesDelegateMembers() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "@parser::members {\n" + - "def foo(self):\n" + - " print('foo')\n" + - "}\n" + - "a : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar M; // uses no rules from the import\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : 'b' {self.foo()} ; // gS is import pointer\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("foo\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {print(\"S.a\")};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a[int x] returns [int y] : B {print(\"S.a\",end='')} {$y=1000;} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : label=a[3] {print($label.y)} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a1000\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {print(\"S.a\",end='')} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(128); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a {print($a.text,end='')} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.ab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {print(\"S.a\")};\n" + - "b : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "a : B {print(\"T.a\")};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {print(\"S.a\",end='')};\n" + - "b : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("b : 'b'|'c';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegates() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {print(\"S.a\")};\n" + - "b : 'b' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { A }\n" + - "b : 'b' {print(\"T.b\")};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(81); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S, T;\n"); - grammarBuilder.append("b : 'b'|'c' {print(\"M.b\")}|B|A;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals( - "M.b\n" + - "S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "type_ : 'int' ;\n" + - "decl : type_ ID ';'\n" + - " | type_ ID init ';' {print(\"JavaDecl: \" + $text,end='')};\n" + - "init : '=' INT;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("prog : decl ;\n"); - grammarBuilder.append("type_ : 'int' | 'float' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="float x = 3;"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); - - assertEquals("JavaDecl: floatx=3;\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportLexerWithOnlyFragmentRules() throws Exception { - mkdir(tmpdir); - - String slave_Unicode = - "lexer grammar Unicode;\n" + - "\n" + - "fragment\n" + - "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + - " | '\\u2000'..'\\u200A'\n" + - " | '\\u202F' | '\\u205F' | '\\u3000'\n" + - " ;\n"; - writeFile(tmpdir, "Unicode.g4", slave_Unicode); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar Test;\n"); - grammarBuilder.append("import Unicode;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program : 'test' 'test';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="test test"; - String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedGrammarWithEmptyOptions() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "options {}\n" + - "a : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedRuleWithAction() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a @after {x = 0} : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordVSIDOrder() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "ID : 'a'..'z'+;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("a : A {print(\"M.a: \" + str($A))};\n"); - grammarBuilder.append("A : 'abc' {print(\"M.A\")};\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals( - "M.A\n" + - "M.a: [@0,0:2='abc',<1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestFullContextParsing.java index dbf9c3ebf..189c7481a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestFullContextParsing.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestFullContextParsing.java @@ -1,507 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestFullContextParsing extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigYieldsCtxSensitiveDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(100); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : ID | ID {} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 0:\n" + - "s0-ID->:s1^=>1\n", found); - - assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbiguityNoLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(206); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(" : expr expr {print(\"alt 1\")}\n"); - grammarBuilder.append(" | expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: '@'\n"); - grammarBuilder.append(" | ID '@'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a@"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); - - assertEquals("alt 1\n", found); - - assertEquals( - "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + - "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + - "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFATwoDiffInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc @ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 2:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + - "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(161); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(161); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="@ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(286); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("(expr a + (expr b))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(286); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("(expr a + (expr b * (expr c)))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + - "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + - "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s1=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo else bar }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + - "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLoopsSimulateTailRecursion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(299); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(" : expr_or_assign*;\n"); - grammarBuilder.append("expr_or_assign\n"); - grammarBuilder.append(" : expr '++' {print(\"fail.\")}\n"); - grammarBuilder.append(" | expr {print(\"pass: \"+$expr.text)}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); - grammarBuilder.append("expr_primary\n"); - grammarBuilder.append(" : '(' ID ')'\n"); - grammarBuilder.append(" | ID '(' ID ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a(i)<-x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); - - assertEquals("pass: a(i)<-x\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + - "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSLLSeesEOFInLLGrammar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(148); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : a;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 0:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + - "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLeftRecursion.java index de2349438..dbb22bc04 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLeftRecursion.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLeftRecursion.java @@ -1,3405 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLeftRecursion extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="1\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a = 5\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="b = 6\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*2\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(*a)[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="**a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[3]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator b) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator ( (declarator a) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[]()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[][]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a (a x) y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a (a (a x) y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 1) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) - (e 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.this"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) . this) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e - (e a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a|b&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f(x)==T.c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_11() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f().g(x,1)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_12() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new T[((n-1) * x) + 1]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a|b)&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a > b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) > (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a >> b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) >> (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a^b^c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new A().b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)t.f()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(170); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(170); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(170); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrecedenceFilterConsidersContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog \n"); - grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); - grammarBuilder.append(": statement* EOF {};\n"); - grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); - grammarBuilder.append("letterA: 'a';"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (literal - 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1 + -1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(329); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(329); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a+b)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(329); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b+c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("((a=b)+c)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("9\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPred() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a {True}? ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPredFailOption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(159); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID {False}?\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a x) y z))\n", found); - - assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a x))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a x) y))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1,3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1, 3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Python2"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerErrors.java index 72f996964..2246276e9 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerErrors.java @@ -1,259 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerErrors extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatFailsBackToDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(39); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:3='ab',<1>,1:2]\n" + - "[@2,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;\n"); - grammarBuilder.append("C : 'abcd' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababcx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:4='abc',<2>,1:2]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { } }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='{ { } }',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testErrorInMiddle() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStart() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,1:0='',<-1>,1:1]\n", found); - - assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStartAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,2:1='',<-1>,1:2]\n", found); - - assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInTokenAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - - assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerExecDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar L;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - String input ="x : x"; - String found = execLexer("L.g4", grammar, "LLexer", input, false); - assertEquals( - "[@0,0:0='x',<3>,1:0]\n" + - "[@1,2:2=':',<1>,1:2]\n" + - "[@2,4:4='x',<3>,1:4]\n" + - "[@3,5:4='',<-1>,1:5]\n", found); - - assertEquals( - "line 1:1 token recognition error at: ' '\n" + - "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo\"]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerExec.java index 786dcbee2..8636c432b 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestLexerExec.java @@ -1,4997 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerExec extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionPlacement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(228); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ({print(\"stuff fail: \" + self.text)} 'a'\n"); - grammarBuilder.append("| {print(\"stuff0: \" + self.text)}\n"); - grammarBuilder.append(" 'a' {print(\"stuff1: \" + self.text)}\n"); - grammarBuilder.append(" 'b' {print(\"stuff2: \" + self.text)})\n"); - grammarBuilder.append(" {print(self.text)} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "stuff0: \n" + - "stuff1: a\n" + - "stuff2: ab\n" + - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(72); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetInSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(79); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : (~[ab \\n]|'a') {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="a x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:2='x',<1>,1:2]\n" + - "[@2,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetNot() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="xaf"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:2='xaf',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(73); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(115); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); - grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {print(\"ID\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34 a2 abc \n" + - " "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "ID\n" + - "ID\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,7:8='a2',<2>,2:4]\n" + - "[@3,10:12='abc',<2>,2:7]\n" + - "[@4,18:17='',<-1>,3:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithEscapedChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(81); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DASHBRACK : [\\-\\]]+ {print(\"DASHBRACK\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="- ] "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "DASHBRACK\n" + - "DASHBRACK\n" + - "[@0,0:0='-',<1>,1:0]\n" + - "[@1,2:2=']',<1>,1:2]\n" + - "[@2,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEndRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-]+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="00\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='00',<1>,1:0]\n" + - "[@1,3:2='',<-1>,2:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEscapeChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(67); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"a-z]+ {print(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:2='b\"a',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(68); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"\\\\ab]+ {print(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"\\a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:3='b\"\\a',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithReversedRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(65); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [z-a9]+ {print(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="9"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:0='9',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFByItself() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DONE : EOF ;\n"); - grammarBuilder.append("A : 'a';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:-1='',<1>,1:0]\n" + - "[@1,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input ="a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(87); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ('a' | 'ab') {print(self.text)} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testHexVsID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); - grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); - grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="x 0 1 a.b a.l"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='x',<5>,1:0]\n" + - "[@1,1:1=' ',<6>,1:1]\n" + - "[@2,2:2='0',<2>,1:2]\n" + - "[@3,3:3=' ',<6>,1:3]\n" + - "[@4,4:4='1',<2>,1:4]\n" + - "[@5,5:5=' ',<6>,1:5]\n" + - "[@6,6:6='a',<5>,1:6]\n" + - "[@7,7:7='.',<4>,1:7]\n" + - "[@8,8:8='b',<5>,1:8]\n" + - "[@9,9:9=' ',<6>,1:9]\n" + - "[@10,10:10='a',<5>,1:10]\n" + - "[@11,11:11='.',<4>,1:11]\n" + - "[@12,12:12='l',<5>,1:12]\n" + - "[@13,13:12='',<-1>,1:13]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("KEND : 'end' ; // has priority\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="end eend ending a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:2='end',<1>,1:0]\n" + - "[@1,3:3=' ',<3>,1:3]\n" + - "[@2,4:7='eend',<2>,1:4]\n" + - "[@3,8:8=' ',<3>,1:8]\n" + - "[@4,9:14='ending',<2>,1:9]\n" + - "[@5,15:15=' ',<3>,1:15]\n" + - "[@6,16:16='a',<2>,1:16]\n" + - "[@7,17:16='',<-1>,1:17]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLargeLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85821); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); - grammarBuilder.append("KW0 : 'KW' '0';\n"); - grammarBuilder.append("KW1 : 'KW' '1';\n"); - grammarBuilder.append("KW2 : 'KW' '2';\n"); - grammarBuilder.append("KW3 : 'KW' '3';\n"); - grammarBuilder.append("KW4 : 'KW' '4';\n"); - grammarBuilder.append("KW5 : 'KW' '5';\n"); - grammarBuilder.append("KW6 : 'KW' '6';\n"); - grammarBuilder.append("KW7 : 'KW' '7';\n"); - grammarBuilder.append("KW8 : 'KW' '8';\n"); - grammarBuilder.append("KW9 : 'KW' '9';\n"); - grammarBuilder.append("KW10 : 'KW' '10';\n"); - grammarBuilder.append("KW11 : 'KW' '11';\n"); - grammarBuilder.append("KW12 : 'KW' '12';\n"); - grammarBuilder.append("KW13 : 'KW' '13';\n"); - grammarBuilder.append("KW14 : 'KW' '14';\n"); - grammarBuilder.append("KW15 : 'KW' '15';\n"); - grammarBuilder.append("KW16 : 'KW' '16';\n"); - grammarBuilder.append("KW17 : 'KW' '17';\n"); - grammarBuilder.append("KW18 : 'KW' '18';\n"); - grammarBuilder.append("KW19 : 'KW' '19';\n"); - grammarBuilder.append("KW20 : 'KW' '20';\n"); - grammarBuilder.append("KW21 : 'KW' '21';\n"); - grammarBuilder.append("KW22 : 'KW' '22';\n"); - grammarBuilder.append("KW23 : 'KW' '23';\n"); - grammarBuilder.append("KW24 : 'KW' '24';\n"); - grammarBuilder.append("KW25 : 'KW' '25';\n"); - grammarBuilder.append("KW26 : 'KW' '26';\n"); - grammarBuilder.append("KW27 : 'KW' '27';\n"); - grammarBuilder.append("KW28 : 'KW' '28';\n"); - grammarBuilder.append("KW29 : 'KW' '29';\n"); - grammarBuilder.append("KW30 : 'KW' '30';\n"); - grammarBuilder.append("KW31 : 'KW' '31';\n"); - grammarBuilder.append("KW32 : 'KW' '32';\n"); - grammarBuilder.append("KW33 : 'KW' '33';\n"); - grammarBuilder.append("KW34 : 'KW' '34';\n"); - grammarBuilder.append("KW35 : 'KW' '35';\n"); - grammarBuilder.append("KW36 : 'KW' '36';\n"); - grammarBuilder.append("KW37 : 'KW' '37';\n"); - grammarBuilder.append("KW38 : 'KW' '38';\n"); - grammarBuilder.append("KW39 : 'KW' '39';\n"); - grammarBuilder.append("KW40 : 'KW' '40';\n"); - grammarBuilder.append("KW41 : 'KW' '41';\n"); - grammarBuilder.append("KW42 : 'KW' '42';\n"); - grammarBuilder.append("KW43 : 'KW' '43';\n"); - grammarBuilder.append("KW44 : 'KW' '44';\n"); - grammarBuilder.append("KW45 : 'KW' '45';\n"); - grammarBuilder.append("KW46 : 'KW' '46';\n"); - grammarBuilder.append("KW47 : 'KW' '47';\n"); - grammarBuilder.append("KW48 : 'KW' '48';\n"); - grammarBuilder.append("KW49 : 'KW' '49';\n"); - grammarBuilder.append("KW50 : 'KW' '50';\n"); - grammarBuilder.append("KW51 : 'KW' '51';\n"); - grammarBuilder.append("KW52 : 'KW' '52';\n"); - grammarBuilder.append("KW53 : 'KW' '53';\n"); - grammarBuilder.append("KW54 : 'KW' '54';\n"); - grammarBuilder.append("KW55 : 'KW' '55';\n"); - grammarBuilder.append("KW56 : 'KW' '56';\n"); - grammarBuilder.append("KW57 : 'KW' '57';\n"); - grammarBuilder.append("KW58 : 'KW' '58';\n"); - grammarBuilder.append("KW59 : 'KW' '59';\n"); - grammarBuilder.append("KW60 : 'KW' '60';\n"); - grammarBuilder.append("KW61 : 'KW' '61';\n"); - grammarBuilder.append("KW62 : 'KW' '62';\n"); - grammarBuilder.append("KW63 : 'KW' '63';\n"); - grammarBuilder.append("KW64 : 'KW' '64';\n"); - grammarBuilder.append("KW65 : 'KW' '65';\n"); - grammarBuilder.append("KW66 : 'KW' '66';\n"); - grammarBuilder.append("KW67 : 'KW' '67';\n"); - grammarBuilder.append("KW68 : 'KW' '68';\n"); - grammarBuilder.append("KW69 : 'KW' '69';\n"); - grammarBuilder.append("KW70 : 'KW' '70';\n"); - grammarBuilder.append("KW71 : 'KW' '71';\n"); - grammarBuilder.append("KW72 : 'KW' '72';\n"); - grammarBuilder.append("KW73 : 'KW' '73';\n"); - grammarBuilder.append("KW74 : 'KW' '74';\n"); - grammarBuilder.append("KW75 : 'KW' '75';\n"); - grammarBuilder.append("KW76 : 'KW' '76';\n"); - grammarBuilder.append("KW77 : 'KW' '77';\n"); - grammarBuilder.append("KW78 : 'KW' '78';\n"); - grammarBuilder.append("KW79 : 'KW' '79';\n"); - grammarBuilder.append("KW80 : 'KW' '80';\n"); - grammarBuilder.append("KW81 : 'KW' '81';\n"); - grammarBuilder.append("KW82 : 'KW' '82';\n"); - grammarBuilder.append("KW83 : 'KW' '83';\n"); - grammarBuilder.append("KW84 : 'KW' '84';\n"); - grammarBuilder.append("KW85 : 'KW' '85';\n"); - grammarBuilder.append("KW86 : 'KW' '86';\n"); - grammarBuilder.append("KW87 : 'KW' '87';\n"); - grammarBuilder.append("KW88 : 'KW' '88';\n"); - grammarBuilder.append("KW89 : 'KW' '89';\n"); - grammarBuilder.append("KW90 : 'KW' '90';\n"); - grammarBuilder.append("KW91 : 'KW' '91';\n"); - grammarBuilder.append("KW92 : 'KW' '92';\n"); - grammarBuilder.append("KW93 : 'KW' '93';\n"); - grammarBuilder.append("KW94 : 'KW' '94';\n"); - grammarBuilder.append("KW95 : 'KW' '95';\n"); - grammarBuilder.append("KW96 : 'KW' '96';\n"); - grammarBuilder.append("KW97 : 'KW' '97';\n"); - grammarBuilder.append("KW98 : 'KW' '98';\n"); - grammarBuilder.append("KW99 : 'KW' '99';\n"); - grammarBuilder.append("KW100 : 'KW' '100';\n"); - grammarBuilder.append("KW101 : 'KW' '101';\n"); - grammarBuilder.append("KW102 : 'KW' '102';\n"); - grammarBuilder.append("KW103 : 'KW' '103';\n"); - grammarBuilder.append("KW104 : 'KW' '104';\n"); - grammarBuilder.append("KW105 : 'KW' '105';\n"); - grammarBuilder.append("KW106 : 'KW' '106';\n"); - grammarBuilder.append("KW107 : 'KW' '107';\n"); - grammarBuilder.append("KW108 : 'KW' '108';\n"); - grammarBuilder.append("KW109 : 'KW' '109';\n"); - grammarBuilder.append("KW110 : 'KW' '110';\n"); - grammarBuilder.append("KW111 : 'KW' '111';\n"); - grammarBuilder.append("KW112 : 'KW' '112';\n"); - grammarBuilder.append("KW113 : 'KW' '113';\n"); - grammarBuilder.append("KW114 : 'KW' '114';\n"); - grammarBuilder.append("KW115 : 'KW' '115';\n"); - grammarBuilder.append("KW116 : 'KW' '116';\n"); - grammarBuilder.append("KW117 : 'KW' '117';\n"); - grammarBuilder.append("KW118 : 'KW' '118';\n"); - grammarBuilder.append("KW119 : 'KW' '119';\n"); - grammarBuilder.append("KW120 : 'KW' '120';\n"); - grammarBuilder.append("KW121 : 'KW' '121';\n"); - grammarBuilder.append("KW122 : 'KW' '122';\n"); - grammarBuilder.append("KW123 : 'KW' '123';\n"); - grammarBuilder.append("KW124 : 'KW' '124';\n"); - grammarBuilder.append("KW125 : 'KW' '125';\n"); - grammarBuilder.append("KW126 : 'KW' '126';\n"); - grammarBuilder.append("KW127 : 'KW' '127';\n"); - grammarBuilder.append("KW128 : 'KW' '128';\n"); - grammarBuilder.append("KW129 : 'KW' '129';\n"); - grammarBuilder.append("KW130 : 'KW' '130';\n"); - grammarBuilder.append("KW131 : 'KW' '131';\n"); - grammarBuilder.append("KW132 : 'KW' '132';\n"); - grammarBuilder.append("KW133 : 'KW' '133';\n"); - grammarBuilder.append("KW134 : 'KW' '134';\n"); - grammarBuilder.append("KW135 : 'KW' '135';\n"); - grammarBuilder.append("KW136 : 'KW' '136';\n"); - grammarBuilder.append("KW137 : 'KW' '137';\n"); - grammarBuilder.append("KW138 : 'KW' '138';\n"); - grammarBuilder.append("KW139 : 'KW' '139';\n"); - grammarBuilder.append("KW140 : 'KW' '140';\n"); - grammarBuilder.append("KW141 : 'KW' '141';\n"); - grammarBuilder.append("KW142 : 'KW' '142';\n"); - grammarBuilder.append("KW143 : 'KW' '143';\n"); - grammarBuilder.append("KW144 : 'KW' '144';\n"); - grammarBuilder.append("KW145 : 'KW' '145';\n"); - grammarBuilder.append("KW146 : 'KW' '146';\n"); - grammarBuilder.append("KW147 : 'KW' '147';\n"); - grammarBuilder.append("KW148 : 'KW' '148';\n"); - grammarBuilder.append("KW149 : 'KW' '149';\n"); - grammarBuilder.append("KW150 : 'KW' '150';\n"); - grammarBuilder.append("KW151 : 'KW' '151';\n"); - grammarBuilder.append("KW152 : 'KW' '152';\n"); - grammarBuilder.append("KW153 : 'KW' '153';\n"); - grammarBuilder.append("KW154 : 'KW' '154';\n"); - grammarBuilder.append("KW155 : 'KW' '155';\n"); - grammarBuilder.append("KW156 : 'KW' '156';\n"); - grammarBuilder.append("KW157 : 'KW' '157';\n"); - grammarBuilder.append("KW158 : 'KW' '158';\n"); - grammarBuilder.append("KW159 : 'KW' '159';\n"); - grammarBuilder.append("KW160 : 'KW' '160';\n"); - grammarBuilder.append("KW161 : 'KW' '161';\n"); - grammarBuilder.append("KW162 : 'KW' '162';\n"); - grammarBuilder.append("KW163 : 'KW' '163';\n"); - grammarBuilder.append("KW164 : 'KW' '164';\n"); - grammarBuilder.append("KW165 : 'KW' '165';\n"); - grammarBuilder.append("KW166 : 'KW' '166';\n"); - grammarBuilder.append("KW167 : 'KW' '167';\n"); - grammarBuilder.append("KW168 : 'KW' '168';\n"); - grammarBuilder.append("KW169 : 'KW' '169';\n"); - grammarBuilder.append("KW170 : 'KW' '170';\n"); - grammarBuilder.append("KW171 : 'KW' '171';\n"); - grammarBuilder.append("KW172 : 'KW' '172';\n"); - grammarBuilder.append("KW173 : 'KW' '173';\n"); - grammarBuilder.append("KW174 : 'KW' '174';\n"); - grammarBuilder.append("KW175 : 'KW' '175';\n"); - grammarBuilder.append("KW176 : 'KW' '176';\n"); - grammarBuilder.append("KW177 : 'KW' '177';\n"); - grammarBuilder.append("KW178 : 'KW' '178';\n"); - grammarBuilder.append("KW179 : 'KW' '179';\n"); - grammarBuilder.append("KW180 : 'KW' '180';\n"); - grammarBuilder.append("KW181 : 'KW' '181';\n"); - grammarBuilder.append("KW182 : 'KW' '182';\n"); - grammarBuilder.append("KW183 : 'KW' '183';\n"); - grammarBuilder.append("KW184 : 'KW' '184';\n"); - grammarBuilder.append("KW185 : 'KW' '185';\n"); - grammarBuilder.append("KW186 : 'KW' '186';\n"); - grammarBuilder.append("KW187 : 'KW' '187';\n"); - grammarBuilder.append("KW188 : 'KW' '188';\n"); - grammarBuilder.append("KW189 : 'KW' '189';\n"); - grammarBuilder.append("KW190 : 'KW' '190';\n"); - grammarBuilder.append("KW191 : 'KW' '191';\n"); - grammarBuilder.append("KW192 : 'KW' '192';\n"); - grammarBuilder.append("KW193 : 'KW' '193';\n"); - grammarBuilder.append("KW194 : 'KW' '194';\n"); - grammarBuilder.append("KW195 : 'KW' '195';\n"); - grammarBuilder.append("KW196 : 'KW' '196';\n"); - grammarBuilder.append("KW197 : 'KW' '197';\n"); - grammarBuilder.append("KW198 : 'KW' '198';\n"); - grammarBuilder.append("KW199 : 'KW' '199';\n"); - grammarBuilder.append("KW200 : 'KW' '200';\n"); - grammarBuilder.append("KW201 : 'KW' '201';\n"); - grammarBuilder.append("KW202 : 'KW' '202';\n"); - grammarBuilder.append("KW203 : 'KW' '203';\n"); - grammarBuilder.append("KW204 : 'KW' '204';\n"); - grammarBuilder.append("KW205 : 'KW' '205';\n"); - grammarBuilder.append("KW206 : 'KW' '206';\n"); - grammarBuilder.append("KW207 : 'KW' '207';\n"); - grammarBuilder.append("KW208 : 'KW' '208';\n"); - grammarBuilder.append("KW209 : 'KW' '209';\n"); - grammarBuilder.append("KW210 : 'KW' '210';\n"); - grammarBuilder.append("KW211 : 'KW' '211';\n"); - grammarBuilder.append("KW212 : 'KW' '212';\n"); - grammarBuilder.append("KW213 : 'KW' '213';\n"); - grammarBuilder.append("KW214 : 'KW' '214';\n"); - grammarBuilder.append("KW215 : 'KW' '215';\n"); - grammarBuilder.append("KW216 : 'KW' '216';\n"); - grammarBuilder.append("KW217 : 'KW' '217';\n"); - grammarBuilder.append("KW218 : 'KW' '218';\n"); - grammarBuilder.append("KW219 : 'KW' '219';\n"); - grammarBuilder.append("KW220 : 'KW' '220';\n"); - grammarBuilder.append("KW221 : 'KW' '221';\n"); - grammarBuilder.append("KW222 : 'KW' '222';\n"); - grammarBuilder.append("KW223 : 'KW' '223';\n"); - grammarBuilder.append("KW224 : 'KW' '224';\n"); - grammarBuilder.append("KW225 : 'KW' '225';\n"); - grammarBuilder.append("KW226 : 'KW' '226';\n"); - grammarBuilder.append("KW227 : 'KW' '227';\n"); - grammarBuilder.append("KW228 : 'KW' '228';\n"); - grammarBuilder.append("KW229 : 'KW' '229';\n"); - grammarBuilder.append("KW230 : 'KW' '230';\n"); - grammarBuilder.append("KW231 : 'KW' '231';\n"); - grammarBuilder.append("KW232 : 'KW' '232';\n"); - grammarBuilder.append("KW233 : 'KW' '233';\n"); - grammarBuilder.append("KW234 : 'KW' '234';\n"); - grammarBuilder.append("KW235 : 'KW' '235';\n"); - grammarBuilder.append("KW236 : 'KW' '236';\n"); - grammarBuilder.append("KW237 : 'KW' '237';\n"); - grammarBuilder.append("KW238 : 'KW' '238';\n"); - grammarBuilder.append("KW239 : 'KW' '239';\n"); - grammarBuilder.append("KW240 : 'KW' '240';\n"); - grammarBuilder.append("KW241 : 'KW' '241';\n"); - grammarBuilder.append("KW242 : 'KW' '242';\n"); - grammarBuilder.append("KW243 : 'KW' '243';\n"); - grammarBuilder.append("KW244 : 'KW' '244';\n"); - grammarBuilder.append("KW245 : 'KW' '245';\n"); - grammarBuilder.append("KW246 : 'KW' '246';\n"); - grammarBuilder.append("KW247 : 'KW' '247';\n"); - grammarBuilder.append("KW248 : 'KW' '248';\n"); - grammarBuilder.append("KW249 : 'KW' '249';\n"); - grammarBuilder.append("KW250 : 'KW' '250';\n"); - grammarBuilder.append("KW251 : 'KW' '251';\n"); - grammarBuilder.append("KW252 : 'KW' '252';\n"); - grammarBuilder.append("KW253 : 'KW' '253';\n"); - grammarBuilder.append("KW254 : 'KW' '254';\n"); - grammarBuilder.append("KW255 : 'KW' '255';\n"); - grammarBuilder.append("KW256 : 'KW' '256';\n"); - grammarBuilder.append("KW257 : 'KW' '257';\n"); - grammarBuilder.append("KW258 : 'KW' '258';\n"); - grammarBuilder.append("KW259 : 'KW' '259';\n"); - grammarBuilder.append("KW260 : 'KW' '260';\n"); - grammarBuilder.append("KW261 : 'KW' '261';\n"); - grammarBuilder.append("KW262 : 'KW' '262';\n"); - grammarBuilder.append("KW263 : 'KW' '263';\n"); - grammarBuilder.append("KW264 : 'KW' '264';\n"); - grammarBuilder.append("KW265 : 'KW' '265';\n"); - grammarBuilder.append("KW266 : 'KW' '266';\n"); - grammarBuilder.append("KW267 : 'KW' '267';\n"); - grammarBuilder.append("KW268 : 'KW' '268';\n"); - grammarBuilder.append("KW269 : 'KW' '269';\n"); - grammarBuilder.append("KW270 : 'KW' '270';\n"); - grammarBuilder.append("KW271 : 'KW' '271';\n"); - grammarBuilder.append("KW272 : 'KW' '272';\n"); - grammarBuilder.append("KW273 : 'KW' '273';\n"); - grammarBuilder.append("KW274 : 'KW' '274';\n"); - grammarBuilder.append("KW275 : 'KW' '275';\n"); - grammarBuilder.append("KW276 : 'KW' '276';\n"); - grammarBuilder.append("KW277 : 'KW' '277';\n"); - grammarBuilder.append("KW278 : 'KW' '278';\n"); - grammarBuilder.append("KW279 : 'KW' '279';\n"); - grammarBuilder.append("KW280 : 'KW' '280';\n"); - grammarBuilder.append("KW281 : 'KW' '281';\n"); - grammarBuilder.append("KW282 : 'KW' '282';\n"); - grammarBuilder.append("KW283 : 'KW' '283';\n"); - grammarBuilder.append("KW284 : 'KW' '284';\n"); - grammarBuilder.append("KW285 : 'KW' '285';\n"); - grammarBuilder.append("KW286 : 'KW' '286';\n"); - grammarBuilder.append("KW287 : 'KW' '287';\n"); - grammarBuilder.append("KW288 : 'KW' '288';\n"); - grammarBuilder.append("KW289 : 'KW' '289';\n"); - grammarBuilder.append("KW290 : 'KW' '290';\n"); - grammarBuilder.append("KW291 : 'KW' '291';\n"); - grammarBuilder.append("KW292 : 'KW' '292';\n"); - grammarBuilder.append("KW293 : 'KW' '293';\n"); - grammarBuilder.append("KW294 : 'KW' '294';\n"); - grammarBuilder.append("KW295 : 'KW' '295';\n"); - grammarBuilder.append("KW296 : 'KW' '296';\n"); - grammarBuilder.append("KW297 : 'KW' '297';\n"); - grammarBuilder.append("KW298 : 'KW' '298';\n"); - grammarBuilder.append("KW299 : 'KW' '299';\n"); - grammarBuilder.append("KW300 : 'KW' '300';\n"); - grammarBuilder.append("KW301 : 'KW' '301';\n"); - grammarBuilder.append("KW302 : 'KW' '302';\n"); - grammarBuilder.append("KW303 : 'KW' '303';\n"); - grammarBuilder.append("KW304 : 'KW' '304';\n"); - grammarBuilder.append("KW305 : 'KW' '305';\n"); - grammarBuilder.append("KW306 : 'KW' '306';\n"); - grammarBuilder.append("KW307 : 'KW' '307';\n"); - grammarBuilder.append("KW308 : 'KW' '308';\n"); - grammarBuilder.append("KW309 : 'KW' '309';\n"); - grammarBuilder.append("KW310 : 'KW' '310';\n"); - grammarBuilder.append("KW311 : 'KW' '311';\n"); - grammarBuilder.append("KW312 : 'KW' '312';\n"); - grammarBuilder.append("KW313 : 'KW' '313';\n"); - grammarBuilder.append("KW314 : 'KW' '314';\n"); - grammarBuilder.append("KW315 : 'KW' '315';\n"); - grammarBuilder.append("KW316 : 'KW' '316';\n"); - grammarBuilder.append("KW317 : 'KW' '317';\n"); - grammarBuilder.append("KW318 : 'KW' '318';\n"); - grammarBuilder.append("KW319 : 'KW' '319';\n"); - grammarBuilder.append("KW320 : 'KW' '320';\n"); - grammarBuilder.append("KW321 : 'KW' '321';\n"); - grammarBuilder.append("KW322 : 'KW' '322';\n"); - grammarBuilder.append("KW323 : 'KW' '323';\n"); - grammarBuilder.append("KW324 : 'KW' '324';\n"); - grammarBuilder.append("KW325 : 'KW' '325';\n"); - grammarBuilder.append("KW326 : 'KW' '326';\n"); - grammarBuilder.append("KW327 : 'KW' '327';\n"); - grammarBuilder.append("KW328 : 'KW' '328';\n"); - grammarBuilder.append("KW329 : 'KW' '329';\n"); - grammarBuilder.append("KW330 : 'KW' '330';\n"); - grammarBuilder.append("KW331 : 'KW' '331';\n"); - grammarBuilder.append("KW332 : 'KW' '332';\n"); - grammarBuilder.append("KW333 : 'KW' '333';\n"); - grammarBuilder.append("KW334 : 'KW' '334';\n"); - grammarBuilder.append("KW335 : 'KW' '335';\n"); - grammarBuilder.append("KW336 : 'KW' '336';\n"); - grammarBuilder.append("KW337 : 'KW' '337';\n"); - grammarBuilder.append("KW338 : 'KW' '338';\n"); - grammarBuilder.append("KW339 : 'KW' '339';\n"); - grammarBuilder.append("KW340 : 'KW' '340';\n"); - grammarBuilder.append("KW341 : 'KW' '341';\n"); - grammarBuilder.append("KW342 : 'KW' '342';\n"); - grammarBuilder.append("KW343 : 'KW' '343';\n"); - grammarBuilder.append("KW344 : 'KW' '344';\n"); - grammarBuilder.append("KW345 : 'KW' '345';\n"); - grammarBuilder.append("KW346 : 'KW' '346';\n"); - grammarBuilder.append("KW347 : 'KW' '347';\n"); - grammarBuilder.append("KW348 : 'KW' '348';\n"); - grammarBuilder.append("KW349 : 'KW' '349';\n"); - grammarBuilder.append("KW350 : 'KW' '350';\n"); - grammarBuilder.append("KW351 : 'KW' '351';\n"); - grammarBuilder.append("KW352 : 'KW' '352';\n"); - grammarBuilder.append("KW353 : 'KW' '353';\n"); - grammarBuilder.append("KW354 : 'KW' '354';\n"); - grammarBuilder.append("KW355 : 'KW' '355';\n"); - grammarBuilder.append("KW356 : 'KW' '356';\n"); - grammarBuilder.append("KW357 : 'KW' '357';\n"); - grammarBuilder.append("KW358 : 'KW' '358';\n"); - grammarBuilder.append("KW359 : 'KW' '359';\n"); - grammarBuilder.append("KW360 : 'KW' '360';\n"); - grammarBuilder.append("KW361 : 'KW' '361';\n"); - grammarBuilder.append("KW362 : 'KW' '362';\n"); - grammarBuilder.append("KW363 : 'KW' '363';\n"); - grammarBuilder.append("KW364 : 'KW' '364';\n"); - grammarBuilder.append("KW365 : 'KW' '365';\n"); - grammarBuilder.append("KW366 : 'KW' '366';\n"); - grammarBuilder.append("KW367 : 'KW' '367';\n"); - grammarBuilder.append("KW368 : 'KW' '368';\n"); - grammarBuilder.append("KW369 : 'KW' '369';\n"); - grammarBuilder.append("KW370 : 'KW' '370';\n"); - grammarBuilder.append("KW371 : 'KW' '371';\n"); - grammarBuilder.append("KW372 : 'KW' '372';\n"); - grammarBuilder.append("KW373 : 'KW' '373';\n"); - grammarBuilder.append("KW374 : 'KW' '374';\n"); - grammarBuilder.append("KW375 : 'KW' '375';\n"); - grammarBuilder.append("KW376 : 'KW' '376';\n"); - grammarBuilder.append("KW377 : 'KW' '377';\n"); - grammarBuilder.append("KW378 : 'KW' '378';\n"); - grammarBuilder.append("KW379 : 'KW' '379';\n"); - grammarBuilder.append("KW380 : 'KW' '380';\n"); - grammarBuilder.append("KW381 : 'KW' '381';\n"); - grammarBuilder.append("KW382 : 'KW' '382';\n"); - grammarBuilder.append("KW383 : 'KW' '383';\n"); - grammarBuilder.append("KW384 : 'KW' '384';\n"); - grammarBuilder.append("KW385 : 'KW' '385';\n"); - grammarBuilder.append("KW386 : 'KW' '386';\n"); - grammarBuilder.append("KW387 : 'KW' '387';\n"); - grammarBuilder.append("KW388 : 'KW' '388';\n"); - grammarBuilder.append("KW389 : 'KW' '389';\n"); - grammarBuilder.append("KW390 : 'KW' '390';\n"); - grammarBuilder.append("KW391 : 'KW' '391';\n"); - grammarBuilder.append("KW392 : 'KW' '392';\n"); - grammarBuilder.append("KW393 : 'KW' '393';\n"); - grammarBuilder.append("KW394 : 'KW' '394';\n"); - grammarBuilder.append("KW395 : 'KW' '395';\n"); - grammarBuilder.append("KW396 : 'KW' '396';\n"); - grammarBuilder.append("KW397 : 'KW' '397';\n"); - grammarBuilder.append("KW398 : 'KW' '398';\n"); - grammarBuilder.append("KW399 : 'KW' '399';\n"); - grammarBuilder.append("KW400 : 'KW' '400';\n"); - grammarBuilder.append("KW401 : 'KW' '401';\n"); - grammarBuilder.append("KW402 : 'KW' '402';\n"); - grammarBuilder.append("KW403 : 'KW' '403';\n"); - grammarBuilder.append("KW404 : 'KW' '404';\n"); - grammarBuilder.append("KW405 : 'KW' '405';\n"); - grammarBuilder.append("KW406 : 'KW' '406';\n"); - grammarBuilder.append("KW407 : 'KW' '407';\n"); - grammarBuilder.append("KW408 : 'KW' '408';\n"); - grammarBuilder.append("KW409 : 'KW' '409';\n"); - grammarBuilder.append("KW410 : 'KW' '410';\n"); - grammarBuilder.append("KW411 : 'KW' '411';\n"); - grammarBuilder.append("KW412 : 'KW' '412';\n"); - grammarBuilder.append("KW413 : 'KW' '413';\n"); - grammarBuilder.append("KW414 : 'KW' '414';\n"); - grammarBuilder.append("KW415 : 'KW' '415';\n"); - grammarBuilder.append("KW416 : 'KW' '416';\n"); - grammarBuilder.append("KW417 : 'KW' '417';\n"); - grammarBuilder.append("KW418 : 'KW' '418';\n"); - grammarBuilder.append("KW419 : 'KW' '419';\n"); - grammarBuilder.append("KW420 : 'KW' '420';\n"); - grammarBuilder.append("KW421 : 'KW' '421';\n"); - grammarBuilder.append("KW422 : 'KW' '422';\n"); - grammarBuilder.append("KW423 : 'KW' '423';\n"); - grammarBuilder.append("KW424 : 'KW' '424';\n"); - grammarBuilder.append("KW425 : 'KW' '425';\n"); - grammarBuilder.append("KW426 : 'KW' '426';\n"); - grammarBuilder.append("KW427 : 'KW' '427';\n"); - grammarBuilder.append("KW428 : 'KW' '428';\n"); - grammarBuilder.append("KW429 : 'KW' '429';\n"); - grammarBuilder.append("KW430 : 'KW' '430';\n"); - grammarBuilder.append("KW431 : 'KW' '431';\n"); - grammarBuilder.append("KW432 : 'KW' '432';\n"); - grammarBuilder.append("KW433 : 'KW' '433';\n"); - grammarBuilder.append("KW434 : 'KW' '434';\n"); - grammarBuilder.append("KW435 : 'KW' '435';\n"); - grammarBuilder.append("KW436 : 'KW' '436';\n"); - grammarBuilder.append("KW437 : 'KW' '437';\n"); - grammarBuilder.append("KW438 : 'KW' '438';\n"); - grammarBuilder.append("KW439 : 'KW' '439';\n"); - grammarBuilder.append("KW440 : 'KW' '440';\n"); - grammarBuilder.append("KW441 : 'KW' '441';\n"); - grammarBuilder.append("KW442 : 'KW' '442';\n"); - grammarBuilder.append("KW443 : 'KW' '443';\n"); - grammarBuilder.append("KW444 : 'KW' '444';\n"); - grammarBuilder.append("KW445 : 'KW' '445';\n"); - grammarBuilder.append("KW446 : 'KW' '446';\n"); - grammarBuilder.append("KW447 : 'KW' '447';\n"); - grammarBuilder.append("KW448 : 'KW' '448';\n"); - grammarBuilder.append("KW449 : 'KW' '449';\n"); - grammarBuilder.append("KW450 : 'KW' '450';\n"); - grammarBuilder.append("KW451 : 'KW' '451';\n"); - grammarBuilder.append("KW452 : 'KW' '452';\n"); - grammarBuilder.append("KW453 : 'KW' '453';\n"); - grammarBuilder.append("KW454 : 'KW' '454';\n"); - grammarBuilder.append("KW455 : 'KW' '455';\n"); - grammarBuilder.append("KW456 : 'KW' '456';\n"); - grammarBuilder.append("KW457 : 'KW' '457';\n"); - grammarBuilder.append("KW458 : 'KW' '458';\n"); - grammarBuilder.append("KW459 : 'KW' '459';\n"); - grammarBuilder.append("KW460 : 'KW' '460';\n"); - grammarBuilder.append("KW461 : 'KW' '461';\n"); - grammarBuilder.append("KW462 : 'KW' '462';\n"); - grammarBuilder.append("KW463 : 'KW' '463';\n"); - grammarBuilder.append("KW464 : 'KW' '464';\n"); - grammarBuilder.append("KW465 : 'KW' '465';\n"); - grammarBuilder.append("KW466 : 'KW' '466';\n"); - grammarBuilder.append("KW467 : 'KW' '467';\n"); - grammarBuilder.append("KW468 : 'KW' '468';\n"); - grammarBuilder.append("KW469 : 'KW' '469';\n"); - grammarBuilder.append("KW470 : 'KW' '470';\n"); - grammarBuilder.append("KW471 : 'KW' '471';\n"); - grammarBuilder.append("KW472 : 'KW' '472';\n"); - grammarBuilder.append("KW473 : 'KW' '473';\n"); - grammarBuilder.append("KW474 : 'KW' '474';\n"); - grammarBuilder.append("KW475 : 'KW' '475';\n"); - grammarBuilder.append("KW476 : 'KW' '476';\n"); - grammarBuilder.append("KW477 : 'KW' '477';\n"); - grammarBuilder.append("KW478 : 'KW' '478';\n"); - grammarBuilder.append("KW479 : 'KW' '479';\n"); - grammarBuilder.append("KW480 : 'KW' '480';\n"); - grammarBuilder.append("KW481 : 'KW' '481';\n"); - grammarBuilder.append("KW482 : 'KW' '482';\n"); - grammarBuilder.append("KW483 : 'KW' '483';\n"); - grammarBuilder.append("KW484 : 'KW' '484';\n"); - grammarBuilder.append("KW485 : 'KW' '485';\n"); - grammarBuilder.append("KW486 : 'KW' '486';\n"); - grammarBuilder.append("KW487 : 'KW' '487';\n"); - grammarBuilder.append("KW488 : 'KW' '488';\n"); - grammarBuilder.append("KW489 : 'KW' '489';\n"); - grammarBuilder.append("KW490 : 'KW' '490';\n"); - grammarBuilder.append("KW491 : 'KW' '491';\n"); - grammarBuilder.append("KW492 : 'KW' '492';\n"); - grammarBuilder.append("KW493 : 'KW' '493';\n"); - grammarBuilder.append("KW494 : 'KW' '494';\n"); - grammarBuilder.append("KW495 : 'KW' '495';\n"); - grammarBuilder.append("KW496 : 'KW' '496';\n"); - grammarBuilder.append("KW497 : 'KW' '497';\n"); - grammarBuilder.append("KW498 : 'KW' '498';\n"); - grammarBuilder.append("KW499 : 'KW' '499';\n"); - grammarBuilder.append("KW500 : 'KW' '500';\n"); - grammarBuilder.append("KW501 : 'KW' '501';\n"); - grammarBuilder.append("KW502 : 'KW' '502';\n"); - grammarBuilder.append("KW503 : 'KW' '503';\n"); - grammarBuilder.append("KW504 : 'KW' '504';\n"); - grammarBuilder.append("KW505 : 'KW' '505';\n"); - grammarBuilder.append("KW506 : 'KW' '506';\n"); - grammarBuilder.append("KW507 : 'KW' '507';\n"); - grammarBuilder.append("KW508 : 'KW' '508';\n"); - grammarBuilder.append("KW509 : 'KW' '509';\n"); - grammarBuilder.append("KW510 : 'KW' '510';\n"); - grammarBuilder.append("KW511 : 'KW' '511';\n"); - grammarBuilder.append("KW512 : 'KW' '512';\n"); - grammarBuilder.append("KW513 : 'KW' '513';\n"); - grammarBuilder.append("KW514 : 'KW' '514';\n"); - grammarBuilder.append("KW515 : 'KW' '515';\n"); - grammarBuilder.append("KW516 : 'KW' '516';\n"); - grammarBuilder.append("KW517 : 'KW' '517';\n"); - grammarBuilder.append("KW518 : 'KW' '518';\n"); - grammarBuilder.append("KW519 : 'KW' '519';\n"); - grammarBuilder.append("KW520 : 'KW' '520';\n"); - grammarBuilder.append("KW521 : 'KW' '521';\n"); - grammarBuilder.append("KW522 : 'KW' '522';\n"); - grammarBuilder.append("KW523 : 'KW' '523';\n"); - grammarBuilder.append("KW524 : 'KW' '524';\n"); - grammarBuilder.append("KW525 : 'KW' '525';\n"); - grammarBuilder.append("KW526 : 'KW' '526';\n"); - grammarBuilder.append("KW527 : 'KW' '527';\n"); - grammarBuilder.append("KW528 : 'KW' '528';\n"); - grammarBuilder.append("KW529 : 'KW' '529';\n"); - grammarBuilder.append("KW530 : 'KW' '530';\n"); - grammarBuilder.append("KW531 : 'KW' '531';\n"); - grammarBuilder.append("KW532 : 'KW' '532';\n"); - grammarBuilder.append("KW533 : 'KW' '533';\n"); - grammarBuilder.append("KW534 : 'KW' '534';\n"); - grammarBuilder.append("KW535 : 'KW' '535';\n"); - grammarBuilder.append("KW536 : 'KW' '536';\n"); - grammarBuilder.append("KW537 : 'KW' '537';\n"); - grammarBuilder.append("KW538 : 'KW' '538';\n"); - grammarBuilder.append("KW539 : 'KW' '539';\n"); - grammarBuilder.append("KW540 : 'KW' '540';\n"); - grammarBuilder.append("KW541 : 'KW' '541';\n"); - grammarBuilder.append("KW542 : 'KW' '542';\n"); - grammarBuilder.append("KW543 : 'KW' '543';\n"); - grammarBuilder.append("KW544 : 'KW' '544';\n"); - grammarBuilder.append("KW545 : 'KW' '545';\n"); - grammarBuilder.append("KW546 : 'KW' '546';\n"); - grammarBuilder.append("KW547 : 'KW' '547';\n"); - grammarBuilder.append("KW548 : 'KW' '548';\n"); - grammarBuilder.append("KW549 : 'KW' '549';\n"); - grammarBuilder.append("KW550 : 'KW' '550';\n"); - grammarBuilder.append("KW551 : 'KW' '551';\n"); - grammarBuilder.append("KW552 : 'KW' '552';\n"); - grammarBuilder.append("KW553 : 'KW' '553';\n"); - grammarBuilder.append("KW554 : 'KW' '554';\n"); - grammarBuilder.append("KW555 : 'KW' '555';\n"); - grammarBuilder.append("KW556 : 'KW' '556';\n"); - grammarBuilder.append("KW557 : 'KW' '557';\n"); - grammarBuilder.append("KW558 : 'KW' '558';\n"); - grammarBuilder.append("KW559 : 'KW' '559';\n"); - grammarBuilder.append("KW560 : 'KW' '560';\n"); - grammarBuilder.append("KW561 : 'KW' '561';\n"); - grammarBuilder.append("KW562 : 'KW' '562';\n"); - grammarBuilder.append("KW563 : 'KW' '563';\n"); - grammarBuilder.append("KW564 : 'KW' '564';\n"); - grammarBuilder.append("KW565 : 'KW' '565';\n"); - grammarBuilder.append("KW566 : 'KW' '566';\n"); - grammarBuilder.append("KW567 : 'KW' '567';\n"); - grammarBuilder.append("KW568 : 'KW' '568';\n"); - grammarBuilder.append("KW569 : 'KW' '569';\n"); - grammarBuilder.append("KW570 : 'KW' '570';\n"); - grammarBuilder.append("KW571 : 'KW' '571';\n"); - grammarBuilder.append("KW572 : 'KW' '572';\n"); - grammarBuilder.append("KW573 : 'KW' '573';\n"); - grammarBuilder.append("KW574 : 'KW' '574';\n"); - grammarBuilder.append("KW575 : 'KW' '575';\n"); - grammarBuilder.append("KW576 : 'KW' '576';\n"); - grammarBuilder.append("KW577 : 'KW' '577';\n"); - grammarBuilder.append("KW578 : 'KW' '578';\n"); - grammarBuilder.append("KW579 : 'KW' '579';\n"); - grammarBuilder.append("KW580 : 'KW' '580';\n"); - grammarBuilder.append("KW581 : 'KW' '581';\n"); - grammarBuilder.append("KW582 : 'KW' '582';\n"); - grammarBuilder.append("KW583 : 'KW' '583';\n"); - grammarBuilder.append("KW584 : 'KW' '584';\n"); - grammarBuilder.append("KW585 : 'KW' '585';\n"); - grammarBuilder.append("KW586 : 'KW' '586';\n"); - grammarBuilder.append("KW587 : 'KW' '587';\n"); - grammarBuilder.append("KW588 : 'KW' '588';\n"); - grammarBuilder.append("KW589 : 'KW' '589';\n"); - grammarBuilder.append("KW590 : 'KW' '590';\n"); - grammarBuilder.append("KW591 : 'KW' '591';\n"); - grammarBuilder.append("KW592 : 'KW' '592';\n"); - grammarBuilder.append("KW593 : 'KW' '593';\n"); - grammarBuilder.append("KW594 : 'KW' '594';\n"); - grammarBuilder.append("KW595 : 'KW' '595';\n"); - grammarBuilder.append("KW596 : 'KW' '596';\n"); - grammarBuilder.append("KW597 : 'KW' '597';\n"); - grammarBuilder.append("KW598 : 'KW' '598';\n"); - grammarBuilder.append("KW599 : 'KW' '599';\n"); - grammarBuilder.append("KW600 : 'KW' '600';\n"); - grammarBuilder.append("KW601 : 'KW' '601';\n"); - grammarBuilder.append("KW602 : 'KW' '602';\n"); - grammarBuilder.append("KW603 : 'KW' '603';\n"); - grammarBuilder.append("KW604 : 'KW' '604';\n"); - grammarBuilder.append("KW605 : 'KW' '605';\n"); - grammarBuilder.append("KW606 : 'KW' '606';\n"); - grammarBuilder.append("KW607 : 'KW' '607';\n"); - grammarBuilder.append("KW608 : 'KW' '608';\n"); - grammarBuilder.append("KW609 : 'KW' '609';\n"); - grammarBuilder.append("KW610 : 'KW' '610';\n"); - grammarBuilder.append("KW611 : 'KW' '611';\n"); - grammarBuilder.append("KW612 : 'KW' '612';\n"); - grammarBuilder.append("KW613 : 'KW' '613';\n"); - grammarBuilder.append("KW614 : 'KW' '614';\n"); - grammarBuilder.append("KW615 : 'KW' '615';\n"); - grammarBuilder.append("KW616 : 'KW' '616';\n"); - grammarBuilder.append("KW617 : 'KW' '617';\n"); - grammarBuilder.append("KW618 : 'KW' '618';\n"); - grammarBuilder.append("KW619 : 'KW' '619';\n"); - grammarBuilder.append("KW620 : 'KW' '620';\n"); - grammarBuilder.append("KW621 : 'KW' '621';\n"); - grammarBuilder.append("KW622 : 'KW' '622';\n"); - grammarBuilder.append("KW623 : 'KW' '623';\n"); - grammarBuilder.append("KW624 : 'KW' '624';\n"); - grammarBuilder.append("KW625 : 'KW' '625';\n"); - grammarBuilder.append("KW626 : 'KW' '626';\n"); - grammarBuilder.append("KW627 : 'KW' '627';\n"); - grammarBuilder.append("KW628 : 'KW' '628';\n"); - grammarBuilder.append("KW629 : 'KW' '629';\n"); - grammarBuilder.append("KW630 : 'KW' '630';\n"); - grammarBuilder.append("KW631 : 'KW' '631';\n"); - grammarBuilder.append("KW632 : 'KW' '632';\n"); - grammarBuilder.append("KW633 : 'KW' '633';\n"); - grammarBuilder.append("KW634 : 'KW' '634';\n"); - grammarBuilder.append("KW635 : 'KW' '635';\n"); - grammarBuilder.append("KW636 : 'KW' '636';\n"); - grammarBuilder.append("KW637 : 'KW' '637';\n"); - grammarBuilder.append("KW638 : 'KW' '638';\n"); - grammarBuilder.append("KW639 : 'KW' '639';\n"); - grammarBuilder.append("KW640 : 'KW' '640';\n"); - grammarBuilder.append("KW641 : 'KW' '641';\n"); - grammarBuilder.append("KW642 : 'KW' '642';\n"); - grammarBuilder.append("KW643 : 'KW' '643';\n"); - grammarBuilder.append("KW644 : 'KW' '644';\n"); - grammarBuilder.append("KW645 : 'KW' '645';\n"); - grammarBuilder.append("KW646 : 'KW' '646';\n"); - grammarBuilder.append("KW647 : 'KW' '647';\n"); - grammarBuilder.append("KW648 : 'KW' '648';\n"); - grammarBuilder.append("KW649 : 'KW' '649';\n"); - grammarBuilder.append("KW650 : 'KW' '650';\n"); - grammarBuilder.append("KW651 : 'KW' '651';\n"); - grammarBuilder.append("KW652 : 'KW' '652';\n"); - grammarBuilder.append("KW653 : 'KW' '653';\n"); - grammarBuilder.append("KW654 : 'KW' '654';\n"); - grammarBuilder.append("KW655 : 'KW' '655';\n"); - grammarBuilder.append("KW656 : 'KW' '656';\n"); - grammarBuilder.append("KW657 : 'KW' '657';\n"); - grammarBuilder.append("KW658 : 'KW' '658';\n"); - grammarBuilder.append("KW659 : 'KW' '659';\n"); - grammarBuilder.append("KW660 : 'KW' '660';\n"); - grammarBuilder.append("KW661 : 'KW' '661';\n"); - grammarBuilder.append("KW662 : 'KW' '662';\n"); - grammarBuilder.append("KW663 : 'KW' '663';\n"); - grammarBuilder.append("KW664 : 'KW' '664';\n"); - grammarBuilder.append("KW665 : 'KW' '665';\n"); - grammarBuilder.append("KW666 : 'KW' '666';\n"); - grammarBuilder.append("KW667 : 'KW' '667';\n"); - grammarBuilder.append("KW668 : 'KW' '668';\n"); - grammarBuilder.append("KW669 : 'KW' '669';\n"); - grammarBuilder.append("KW670 : 'KW' '670';\n"); - grammarBuilder.append("KW671 : 'KW' '671';\n"); - grammarBuilder.append("KW672 : 'KW' '672';\n"); - grammarBuilder.append("KW673 : 'KW' '673';\n"); - grammarBuilder.append("KW674 : 'KW' '674';\n"); - grammarBuilder.append("KW675 : 'KW' '675';\n"); - grammarBuilder.append("KW676 : 'KW' '676';\n"); - grammarBuilder.append("KW677 : 'KW' '677';\n"); - grammarBuilder.append("KW678 : 'KW' '678';\n"); - grammarBuilder.append("KW679 : 'KW' '679';\n"); - grammarBuilder.append("KW680 : 'KW' '680';\n"); - grammarBuilder.append("KW681 : 'KW' '681';\n"); - grammarBuilder.append("KW682 : 'KW' '682';\n"); - grammarBuilder.append("KW683 : 'KW' '683';\n"); - grammarBuilder.append("KW684 : 'KW' '684';\n"); - grammarBuilder.append("KW685 : 'KW' '685';\n"); - grammarBuilder.append("KW686 : 'KW' '686';\n"); - grammarBuilder.append("KW687 : 'KW' '687';\n"); - grammarBuilder.append("KW688 : 'KW' '688';\n"); - grammarBuilder.append("KW689 : 'KW' '689';\n"); - grammarBuilder.append("KW690 : 'KW' '690';\n"); - grammarBuilder.append("KW691 : 'KW' '691';\n"); - grammarBuilder.append("KW692 : 'KW' '692';\n"); - grammarBuilder.append("KW693 : 'KW' '693';\n"); - grammarBuilder.append("KW694 : 'KW' '694';\n"); - grammarBuilder.append("KW695 : 'KW' '695';\n"); - grammarBuilder.append("KW696 : 'KW' '696';\n"); - grammarBuilder.append("KW697 : 'KW' '697';\n"); - grammarBuilder.append("KW698 : 'KW' '698';\n"); - grammarBuilder.append("KW699 : 'KW' '699';\n"); - grammarBuilder.append("KW700 : 'KW' '700';\n"); - grammarBuilder.append("KW701 : 'KW' '701';\n"); - grammarBuilder.append("KW702 : 'KW' '702';\n"); - grammarBuilder.append("KW703 : 'KW' '703';\n"); - grammarBuilder.append("KW704 : 'KW' '704';\n"); - grammarBuilder.append("KW705 : 'KW' '705';\n"); - grammarBuilder.append("KW706 : 'KW' '706';\n"); - grammarBuilder.append("KW707 : 'KW' '707';\n"); - grammarBuilder.append("KW708 : 'KW' '708';\n"); - grammarBuilder.append("KW709 : 'KW' '709';\n"); - grammarBuilder.append("KW710 : 'KW' '710';\n"); - grammarBuilder.append("KW711 : 'KW' '711';\n"); - grammarBuilder.append("KW712 : 'KW' '712';\n"); - grammarBuilder.append("KW713 : 'KW' '713';\n"); - grammarBuilder.append("KW714 : 'KW' '714';\n"); - grammarBuilder.append("KW715 : 'KW' '715';\n"); - grammarBuilder.append("KW716 : 'KW' '716';\n"); - grammarBuilder.append("KW717 : 'KW' '717';\n"); - grammarBuilder.append("KW718 : 'KW' '718';\n"); - grammarBuilder.append("KW719 : 'KW' '719';\n"); - grammarBuilder.append("KW720 : 'KW' '720';\n"); - grammarBuilder.append("KW721 : 'KW' '721';\n"); - grammarBuilder.append("KW722 : 'KW' '722';\n"); - grammarBuilder.append("KW723 : 'KW' '723';\n"); - grammarBuilder.append("KW724 : 'KW' '724';\n"); - grammarBuilder.append("KW725 : 'KW' '725';\n"); - grammarBuilder.append("KW726 : 'KW' '726';\n"); - grammarBuilder.append("KW727 : 'KW' '727';\n"); - grammarBuilder.append("KW728 : 'KW' '728';\n"); - grammarBuilder.append("KW729 : 'KW' '729';\n"); - grammarBuilder.append("KW730 : 'KW' '730';\n"); - grammarBuilder.append("KW731 : 'KW' '731';\n"); - grammarBuilder.append("KW732 : 'KW' '732';\n"); - grammarBuilder.append("KW733 : 'KW' '733';\n"); - grammarBuilder.append("KW734 : 'KW' '734';\n"); - grammarBuilder.append("KW735 : 'KW' '735';\n"); - grammarBuilder.append("KW736 : 'KW' '736';\n"); - grammarBuilder.append("KW737 : 'KW' '737';\n"); - grammarBuilder.append("KW738 : 'KW' '738';\n"); - grammarBuilder.append("KW739 : 'KW' '739';\n"); - grammarBuilder.append("KW740 : 'KW' '740';\n"); - grammarBuilder.append("KW741 : 'KW' '741';\n"); - grammarBuilder.append("KW742 : 'KW' '742';\n"); - grammarBuilder.append("KW743 : 'KW' '743';\n"); - grammarBuilder.append("KW744 : 'KW' '744';\n"); - grammarBuilder.append("KW745 : 'KW' '745';\n"); - grammarBuilder.append("KW746 : 'KW' '746';\n"); - grammarBuilder.append("KW747 : 'KW' '747';\n"); - grammarBuilder.append("KW748 : 'KW' '748';\n"); - grammarBuilder.append("KW749 : 'KW' '749';\n"); - grammarBuilder.append("KW750 : 'KW' '750';\n"); - grammarBuilder.append("KW751 : 'KW' '751';\n"); - grammarBuilder.append("KW752 : 'KW' '752';\n"); - grammarBuilder.append("KW753 : 'KW' '753';\n"); - grammarBuilder.append("KW754 : 'KW' '754';\n"); - grammarBuilder.append("KW755 : 'KW' '755';\n"); - grammarBuilder.append("KW756 : 'KW' '756';\n"); - grammarBuilder.append("KW757 : 'KW' '757';\n"); - grammarBuilder.append("KW758 : 'KW' '758';\n"); - grammarBuilder.append("KW759 : 'KW' '759';\n"); - grammarBuilder.append("KW760 : 'KW' '760';\n"); - grammarBuilder.append("KW761 : 'KW' '761';\n"); - grammarBuilder.append("KW762 : 'KW' '762';\n"); - grammarBuilder.append("KW763 : 'KW' '763';\n"); - grammarBuilder.append("KW764 : 'KW' '764';\n"); - grammarBuilder.append("KW765 : 'KW' '765';\n"); - grammarBuilder.append("KW766 : 'KW' '766';\n"); - grammarBuilder.append("KW767 : 'KW' '767';\n"); - grammarBuilder.append("KW768 : 'KW' '768';\n"); - grammarBuilder.append("KW769 : 'KW' '769';\n"); - grammarBuilder.append("KW770 : 'KW' '770';\n"); - grammarBuilder.append("KW771 : 'KW' '771';\n"); - grammarBuilder.append("KW772 : 'KW' '772';\n"); - grammarBuilder.append("KW773 : 'KW' '773';\n"); - grammarBuilder.append("KW774 : 'KW' '774';\n"); - grammarBuilder.append("KW775 : 'KW' '775';\n"); - grammarBuilder.append("KW776 : 'KW' '776';\n"); - grammarBuilder.append("KW777 : 'KW' '777';\n"); - grammarBuilder.append("KW778 : 'KW' '778';\n"); - grammarBuilder.append("KW779 : 'KW' '779';\n"); - grammarBuilder.append("KW780 : 'KW' '780';\n"); - grammarBuilder.append("KW781 : 'KW' '781';\n"); - grammarBuilder.append("KW782 : 'KW' '782';\n"); - grammarBuilder.append("KW783 : 'KW' '783';\n"); - grammarBuilder.append("KW784 : 'KW' '784';\n"); - grammarBuilder.append("KW785 : 'KW' '785';\n"); - grammarBuilder.append("KW786 : 'KW' '786';\n"); - grammarBuilder.append("KW787 : 'KW' '787';\n"); - grammarBuilder.append("KW788 : 'KW' '788';\n"); - grammarBuilder.append("KW789 : 'KW' '789';\n"); - grammarBuilder.append("KW790 : 'KW' '790';\n"); - grammarBuilder.append("KW791 : 'KW' '791';\n"); - grammarBuilder.append("KW792 : 'KW' '792';\n"); - grammarBuilder.append("KW793 : 'KW' '793';\n"); - grammarBuilder.append("KW794 : 'KW' '794';\n"); - grammarBuilder.append("KW795 : 'KW' '795';\n"); - grammarBuilder.append("KW796 : 'KW' '796';\n"); - grammarBuilder.append("KW797 : 'KW' '797';\n"); - grammarBuilder.append("KW798 : 'KW' '798';\n"); - grammarBuilder.append("KW799 : 'KW' '799';\n"); - grammarBuilder.append("KW800 : 'KW' '800';\n"); - grammarBuilder.append("KW801 : 'KW' '801';\n"); - grammarBuilder.append("KW802 : 'KW' '802';\n"); - grammarBuilder.append("KW803 : 'KW' '803';\n"); - grammarBuilder.append("KW804 : 'KW' '804';\n"); - grammarBuilder.append("KW805 : 'KW' '805';\n"); - grammarBuilder.append("KW806 : 'KW' '806';\n"); - grammarBuilder.append("KW807 : 'KW' '807';\n"); - grammarBuilder.append("KW808 : 'KW' '808';\n"); - grammarBuilder.append("KW809 : 'KW' '809';\n"); - grammarBuilder.append("KW810 : 'KW' '810';\n"); - grammarBuilder.append("KW811 : 'KW' '811';\n"); - grammarBuilder.append("KW812 : 'KW' '812';\n"); - grammarBuilder.append("KW813 : 'KW' '813';\n"); - grammarBuilder.append("KW814 : 'KW' '814';\n"); - grammarBuilder.append("KW815 : 'KW' '815';\n"); - grammarBuilder.append("KW816 : 'KW' '816';\n"); - grammarBuilder.append("KW817 : 'KW' '817';\n"); - grammarBuilder.append("KW818 : 'KW' '818';\n"); - grammarBuilder.append("KW819 : 'KW' '819';\n"); - grammarBuilder.append("KW820 : 'KW' '820';\n"); - grammarBuilder.append("KW821 : 'KW' '821';\n"); - grammarBuilder.append("KW822 : 'KW' '822';\n"); - grammarBuilder.append("KW823 : 'KW' '823';\n"); - grammarBuilder.append("KW824 : 'KW' '824';\n"); - grammarBuilder.append("KW825 : 'KW' '825';\n"); - grammarBuilder.append("KW826 : 'KW' '826';\n"); - grammarBuilder.append("KW827 : 'KW' '827';\n"); - grammarBuilder.append("KW828 : 'KW' '828';\n"); - grammarBuilder.append("KW829 : 'KW' '829';\n"); - grammarBuilder.append("KW830 : 'KW' '830';\n"); - grammarBuilder.append("KW831 : 'KW' '831';\n"); - grammarBuilder.append("KW832 : 'KW' '832';\n"); - grammarBuilder.append("KW833 : 'KW' '833';\n"); - grammarBuilder.append("KW834 : 'KW' '834';\n"); - grammarBuilder.append("KW835 : 'KW' '835';\n"); - grammarBuilder.append("KW836 : 'KW' '836';\n"); - grammarBuilder.append("KW837 : 'KW' '837';\n"); - grammarBuilder.append("KW838 : 'KW' '838';\n"); - grammarBuilder.append("KW839 : 'KW' '839';\n"); - grammarBuilder.append("KW840 : 'KW' '840';\n"); - grammarBuilder.append("KW841 : 'KW' '841';\n"); - grammarBuilder.append("KW842 : 'KW' '842';\n"); - grammarBuilder.append("KW843 : 'KW' '843';\n"); - grammarBuilder.append("KW844 : 'KW' '844';\n"); - grammarBuilder.append("KW845 : 'KW' '845';\n"); - grammarBuilder.append("KW846 : 'KW' '846';\n"); - grammarBuilder.append("KW847 : 'KW' '847';\n"); - grammarBuilder.append("KW848 : 'KW' '848';\n"); - grammarBuilder.append("KW849 : 'KW' '849';\n"); - grammarBuilder.append("KW850 : 'KW' '850';\n"); - grammarBuilder.append("KW851 : 'KW' '851';\n"); - grammarBuilder.append("KW852 : 'KW' '852';\n"); - grammarBuilder.append("KW853 : 'KW' '853';\n"); - grammarBuilder.append("KW854 : 'KW' '854';\n"); - grammarBuilder.append("KW855 : 'KW' '855';\n"); - grammarBuilder.append("KW856 : 'KW' '856';\n"); - grammarBuilder.append("KW857 : 'KW' '857';\n"); - grammarBuilder.append("KW858 : 'KW' '858';\n"); - grammarBuilder.append("KW859 : 'KW' '859';\n"); - grammarBuilder.append("KW860 : 'KW' '860';\n"); - grammarBuilder.append("KW861 : 'KW' '861';\n"); - grammarBuilder.append("KW862 : 'KW' '862';\n"); - grammarBuilder.append("KW863 : 'KW' '863';\n"); - grammarBuilder.append("KW864 : 'KW' '864';\n"); - grammarBuilder.append("KW865 : 'KW' '865';\n"); - grammarBuilder.append("KW866 : 'KW' '866';\n"); - grammarBuilder.append("KW867 : 'KW' '867';\n"); - grammarBuilder.append("KW868 : 'KW' '868';\n"); - grammarBuilder.append("KW869 : 'KW' '869';\n"); - grammarBuilder.append("KW870 : 'KW' '870';\n"); - grammarBuilder.append("KW871 : 'KW' '871';\n"); - grammarBuilder.append("KW872 : 'KW' '872';\n"); - grammarBuilder.append("KW873 : 'KW' '873';\n"); - grammarBuilder.append("KW874 : 'KW' '874';\n"); - grammarBuilder.append("KW875 : 'KW' '875';\n"); - grammarBuilder.append("KW876 : 'KW' '876';\n"); - grammarBuilder.append("KW877 : 'KW' '877';\n"); - grammarBuilder.append("KW878 : 'KW' '878';\n"); - grammarBuilder.append("KW879 : 'KW' '879';\n"); - grammarBuilder.append("KW880 : 'KW' '880';\n"); - grammarBuilder.append("KW881 : 'KW' '881';\n"); - grammarBuilder.append("KW882 : 'KW' '882';\n"); - grammarBuilder.append("KW883 : 'KW' '883';\n"); - grammarBuilder.append("KW884 : 'KW' '884';\n"); - grammarBuilder.append("KW885 : 'KW' '885';\n"); - grammarBuilder.append("KW886 : 'KW' '886';\n"); - grammarBuilder.append("KW887 : 'KW' '887';\n"); - grammarBuilder.append("KW888 : 'KW' '888';\n"); - grammarBuilder.append("KW889 : 'KW' '889';\n"); - grammarBuilder.append("KW890 : 'KW' '890';\n"); - grammarBuilder.append("KW891 : 'KW' '891';\n"); - grammarBuilder.append("KW892 : 'KW' '892';\n"); - grammarBuilder.append("KW893 : 'KW' '893';\n"); - grammarBuilder.append("KW894 : 'KW' '894';\n"); - grammarBuilder.append("KW895 : 'KW' '895';\n"); - grammarBuilder.append("KW896 : 'KW' '896';\n"); - grammarBuilder.append("KW897 : 'KW' '897';\n"); - grammarBuilder.append("KW898 : 'KW' '898';\n"); - grammarBuilder.append("KW899 : 'KW' '899';\n"); - grammarBuilder.append("KW900 : 'KW' '900';\n"); - grammarBuilder.append("KW901 : 'KW' '901';\n"); - grammarBuilder.append("KW902 : 'KW' '902';\n"); - grammarBuilder.append("KW903 : 'KW' '903';\n"); - grammarBuilder.append("KW904 : 'KW' '904';\n"); - grammarBuilder.append("KW905 : 'KW' '905';\n"); - grammarBuilder.append("KW906 : 'KW' '906';\n"); - grammarBuilder.append("KW907 : 'KW' '907';\n"); - grammarBuilder.append("KW908 : 'KW' '908';\n"); - grammarBuilder.append("KW909 : 'KW' '909';\n"); - grammarBuilder.append("KW910 : 'KW' '910';\n"); - grammarBuilder.append("KW911 : 'KW' '911';\n"); - grammarBuilder.append("KW912 : 'KW' '912';\n"); - grammarBuilder.append("KW913 : 'KW' '913';\n"); - grammarBuilder.append("KW914 : 'KW' '914';\n"); - grammarBuilder.append("KW915 : 'KW' '915';\n"); - grammarBuilder.append("KW916 : 'KW' '916';\n"); - grammarBuilder.append("KW917 : 'KW' '917';\n"); - grammarBuilder.append("KW918 : 'KW' '918';\n"); - grammarBuilder.append("KW919 : 'KW' '919';\n"); - grammarBuilder.append("KW920 : 'KW' '920';\n"); - grammarBuilder.append("KW921 : 'KW' '921';\n"); - grammarBuilder.append("KW922 : 'KW' '922';\n"); - grammarBuilder.append("KW923 : 'KW' '923';\n"); - grammarBuilder.append("KW924 : 'KW' '924';\n"); - grammarBuilder.append("KW925 : 'KW' '925';\n"); - grammarBuilder.append("KW926 : 'KW' '926';\n"); - grammarBuilder.append("KW927 : 'KW' '927';\n"); - grammarBuilder.append("KW928 : 'KW' '928';\n"); - grammarBuilder.append("KW929 : 'KW' '929';\n"); - grammarBuilder.append("KW930 : 'KW' '930';\n"); - grammarBuilder.append("KW931 : 'KW' '931';\n"); - grammarBuilder.append("KW932 : 'KW' '932';\n"); - grammarBuilder.append("KW933 : 'KW' '933';\n"); - grammarBuilder.append("KW934 : 'KW' '934';\n"); - grammarBuilder.append("KW935 : 'KW' '935';\n"); - grammarBuilder.append("KW936 : 'KW' '936';\n"); - grammarBuilder.append("KW937 : 'KW' '937';\n"); - grammarBuilder.append("KW938 : 'KW' '938';\n"); - grammarBuilder.append("KW939 : 'KW' '939';\n"); - grammarBuilder.append("KW940 : 'KW' '940';\n"); - grammarBuilder.append("KW941 : 'KW' '941';\n"); - grammarBuilder.append("KW942 : 'KW' '942';\n"); - grammarBuilder.append("KW943 : 'KW' '943';\n"); - grammarBuilder.append("KW944 : 'KW' '944';\n"); - grammarBuilder.append("KW945 : 'KW' '945';\n"); - grammarBuilder.append("KW946 : 'KW' '946';\n"); - grammarBuilder.append("KW947 : 'KW' '947';\n"); - grammarBuilder.append("KW948 : 'KW' '948';\n"); - grammarBuilder.append("KW949 : 'KW' '949';\n"); - grammarBuilder.append("KW950 : 'KW' '950';\n"); - grammarBuilder.append("KW951 : 'KW' '951';\n"); - grammarBuilder.append("KW952 : 'KW' '952';\n"); - grammarBuilder.append("KW953 : 'KW' '953';\n"); - grammarBuilder.append("KW954 : 'KW' '954';\n"); - grammarBuilder.append("KW955 : 'KW' '955';\n"); - grammarBuilder.append("KW956 : 'KW' '956';\n"); - grammarBuilder.append("KW957 : 'KW' '957';\n"); - grammarBuilder.append("KW958 : 'KW' '958';\n"); - grammarBuilder.append("KW959 : 'KW' '959';\n"); - grammarBuilder.append("KW960 : 'KW' '960';\n"); - grammarBuilder.append("KW961 : 'KW' '961';\n"); - grammarBuilder.append("KW962 : 'KW' '962';\n"); - grammarBuilder.append("KW963 : 'KW' '963';\n"); - grammarBuilder.append("KW964 : 'KW' '964';\n"); - grammarBuilder.append("KW965 : 'KW' '965';\n"); - grammarBuilder.append("KW966 : 'KW' '966';\n"); - grammarBuilder.append("KW967 : 'KW' '967';\n"); - grammarBuilder.append("KW968 : 'KW' '968';\n"); - grammarBuilder.append("KW969 : 'KW' '969';\n"); - grammarBuilder.append("KW970 : 'KW' '970';\n"); - grammarBuilder.append("KW971 : 'KW' '971';\n"); - grammarBuilder.append("KW972 : 'KW' '972';\n"); - grammarBuilder.append("KW973 : 'KW' '973';\n"); - grammarBuilder.append("KW974 : 'KW' '974';\n"); - grammarBuilder.append("KW975 : 'KW' '975';\n"); - grammarBuilder.append("KW976 : 'KW' '976';\n"); - grammarBuilder.append("KW977 : 'KW' '977';\n"); - grammarBuilder.append("KW978 : 'KW' '978';\n"); - grammarBuilder.append("KW979 : 'KW' '979';\n"); - grammarBuilder.append("KW980 : 'KW' '980';\n"); - grammarBuilder.append("KW981 : 'KW' '981';\n"); - grammarBuilder.append("KW982 : 'KW' '982';\n"); - grammarBuilder.append("KW983 : 'KW' '983';\n"); - grammarBuilder.append("KW984 : 'KW' '984';\n"); - grammarBuilder.append("KW985 : 'KW' '985';\n"); - grammarBuilder.append("KW986 : 'KW' '986';\n"); - grammarBuilder.append("KW987 : 'KW' '987';\n"); - grammarBuilder.append("KW988 : 'KW' '988';\n"); - grammarBuilder.append("KW989 : 'KW' '989';\n"); - grammarBuilder.append("KW990 : 'KW' '990';\n"); - grammarBuilder.append("KW991 : 'KW' '991';\n"); - grammarBuilder.append("KW992 : 'KW' '992';\n"); - grammarBuilder.append("KW993 : 'KW' '993';\n"); - grammarBuilder.append("KW994 : 'KW' '994';\n"); - grammarBuilder.append("KW995 : 'KW' '995';\n"); - grammarBuilder.append("KW996 : 'KW' '996';\n"); - grammarBuilder.append("KW997 : 'KW' '997';\n"); - grammarBuilder.append("KW998 : 'KW' '998';\n"); - grammarBuilder.append("KW999 : 'KW' '999';\n"); - grammarBuilder.append("KW1000 : 'KW' '1000';\n"); - grammarBuilder.append("KW1001 : 'KW' '1001';\n"); - grammarBuilder.append("KW1002 : 'KW' '1002';\n"); - grammarBuilder.append("KW1003 : 'KW' '1003';\n"); - grammarBuilder.append("KW1004 : 'KW' '1004';\n"); - grammarBuilder.append("KW1005 : 'KW' '1005';\n"); - grammarBuilder.append("KW1006 : 'KW' '1006';\n"); - grammarBuilder.append("KW1007 : 'KW' '1007';\n"); - grammarBuilder.append("KW1008 : 'KW' '1008';\n"); - grammarBuilder.append("KW1009 : 'KW' '1009';\n"); - grammarBuilder.append("KW1010 : 'KW' '1010';\n"); - grammarBuilder.append("KW1011 : 'KW' '1011';\n"); - grammarBuilder.append("KW1012 : 'KW' '1012';\n"); - grammarBuilder.append("KW1013 : 'KW' '1013';\n"); - grammarBuilder.append("KW1014 : 'KW' '1014';\n"); - grammarBuilder.append("KW1015 : 'KW' '1015';\n"); - grammarBuilder.append("KW1016 : 'KW' '1016';\n"); - grammarBuilder.append("KW1017 : 'KW' '1017';\n"); - grammarBuilder.append("KW1018 : 'KW' '1018';\n"); - grammarBuilder.append("KW1019 : 'KW' '1019';\n"); - grammarBuilder.append("KW1020 : 'KW' '1020';\n"); - grammarBuilder.append("KW1021 : 'KW' '1021';\n"); - grammarBuilder.append("KW1022 : 'KW' '1022';\n"); - grammarBuilder.append("KW1023 : 'KW' '1023';\n"); - grammarBuilder.append("KW1024 : 'KW' '1024';\n"); - grammarBuilder.append("KW1025 : 'KW' '1025';\n"); - grammarBuilder.append("KW1026 : 'KW' '1026';\n"); - grammarBuilder.append("KW1027 : 'KW' '1027';\n"); - grammarBuilder.append("KW1028 : 'KW' '1028';\n"); - grammarBuilder.append("KW1029 : 'KW' '1029';\n"); - grammarBuilder.append("KW1030 : 'KW' '1030';\n"); - grammarBuilder.append("KW1031 : 'KW' '1031';\n"); - grammarBuilder.append("KW1032 : 'KW' '1032';\n"); - grammarBuilder.append("KW1033 : 'KW' '1033';\n"); - grammarBuilder.append("KW1034 : 'KW' '1034';\n"); - grammarBuilder.append("KW1035 : 'KW' '1035';\n"); - grammarBuilder.append("KW1036 : 'KW' '1036';\n"); - grammarBuilder.append("KW1037 : 'KW' '1037';\n"); - grammarBuilder.append("KW1038 : 'KW' '1038';\n"); - grammarBuilder.append("KW1039 : 'KW' '1039';\n"); - grammarBuilder.append("KW1040 : 'KW' '1040';\n"); - grammarBuilder.append("KW1041 : 'KW' '1041';\n"); - grammarBuilder.append("KW1042 : 'KW' '1042';\n"); - grammarBuilder.append("KW1043 : 'KW' '1043';\n"); - grammarBuilder.append("KW1044 : 'KW' '1044';\n"); - grammarBuilder.append("KW1045 : 'KW' '1045';\n"); - grammarBuilder.append("KW1046 : 'KW' '1046';\n"); - grammarBuilder.append("KW1047 : 'KW' '1047';\n"); - grammarBuilder.append("KW1048 : 'KW' '1048';\n"); - grammarBuilder.append("KW1049 : 'KW' '1049';\n"); - grammarBuilder.append("KW1050 : 'KW' '1050';\n"); - grammarBuilder.append("KW1051 : 'KW' '1051';\n"); - grammarBuilder.append("KW1052 : 'KW' '1052';\n"); - grammarBuilder.append("KW1053 : 'KW' '1053';\n"); - grammarBuilder.append("KW1054 : 'KW' '1054';\n"); - grammarBuilder.append("KW1055 : 'KW' '1055';\n"); - grammarBuilder.append("KW1056 : 'KW' '1056';\n"); - grammarBuilder.append("KW1057 : 'KW' '1057';\n"); - grammarBuilder.append("KW1058 : 'KW' '1058';\n"); - grammarBuilder.append("KW1059 : 'KW' '1059';\n"); - grammarBuilder.append("KW1060 : 'KW' '1060';\n"); - grammarBuilder.append("KW1061 : 'KW' '1061';\n"); - grammarBuilder.append("KW1062 : 'KW' '1062';\n"); - grammarBuilder.append("KW1063 : 'KW' '1063';\n"); - grammarBuilder.append("KW1064 : 'KW' '1064';\n"); - grammarBuilder.append("KW1065 : 'KW' '1065';\n"); - grammarBuilder.append("KW1066 : 'KW' '1066';\n"); - grammarBuilder.append("KW1067 : 'KW' '1067';\n"); - grammarBuilder.append("KW1068 : 'KW' '1068';\n"); - grammarBuilder.append("KW1069 : 'KW' '1069';\n"); - grammarBuilder.append("KW1070 : 'KW' '1070';\n"); - grammarBuilder.append("KW1071 : 'KW' '1071';\n"); - grammarBuilder.append("KW1072 : 'KW' '1072';\n"); - grammarBuilder.append("KW1073 : 'KW' '1073';\n"); - grammarBuilder.append("KW1074 : 'KW' '1074';\n"); - grammarBuilder.append("KW1075 : 'KW' '1075';\n"); - grammarBuilder.append("KW1076 : 'KW' '1076';\n"); - grammarBuilder.append("KW1077 : 'KW' '1077';\n"); - grammarBuilder.append("KW1078 : 'KW' '1078';\n"); - grammarBuilder.append("KW1079 : 'KW' '1079';\n"); - grammarBuilder.append("KW1080 : 'KW' '1080';\n"); - grammarBuilder.append("KW1081 : 'KW' '1081';\n"); - grammarBuilder.append("KW1082 : 'KW' '1082';\n"); - grammarBuilder.append("KW1083 : 'KW' '1083';\n"); - grammarBuilder.append("KW1084 : 'KW' '1084';\n"); - grammarBuilder.append("KW1085 : 'KW' '1085';\n"); - grammarBuilder.append("KW1086 : 'KW' '1086';\n"); - grammarBuilder.append("KW1087 : 'KW' '1087';\n"); - grammarBuilder.append("KW1088 : 'KW' '1088';\n"); - grammarBuilder.append("KW1089 : 'KW' '1089';\n"); - grammarBuilder.append("KW1090 : 'KW' '1090';\n"); - grammarBuilder.append("KW1091 : 'KW' '1091';\n"); - grammarBuilder.append("KW1092 : 'KW' '1092';\n"); - grammarBuilder.append("KW1093 : 'KW' '1093';\n"); - grammarBuilder.append("KW1094 : 'KW' '1094';\n"); - grammarBuilder.append("KW1095 : 'KW' '1095';\n"); - grammarBuilder.append("KW1096 : 'KW' '1096';\n"); - grammarBuilder.append("KW1097 : 'KW' '1097';\n"); - grammarBuilder.append("KW1098 : 'KW' '1098';\n"); - grammarBuilder.append("KW1099 : 'KW' '1099';\n"); - grammarBuilder.append("KW1100 : 'KW' '1100';\n"); - grammarBuilder.append("KW1101 : 'KW' '1101';\n"); - grammarBuilder.append("KW1102 : 'KW' '1102';\n"); - grammarBuilder.append("KW1103 : 'KW' '1103';\n"); - grammarBuilder.append("KW1104 : 'KW' '1104';\n"); - grammarBuilder.append("KW1105 : 'KW' '1105';\n"); - grammarBuilder.append("KW1106 : 'KW' '1106';\n"); - grammarBuilder.append("KW1107 : 'KW' '1107';\n"); - grammarBuilder.append("KW1108 : 'KW' '1108';\n"); - grammarBuilder.append("KW1109 : 'KW' '1109';\n"); - grammarBuilder.append("KW1110 : 'KW' '1110';\n"); - grammarBuilder.append("KW1111 : 'KW' '1111';\n"); - grammarBuilder.append("KW1112 : 'KW' '1112';\n"); - grammarBuilder.append("KW1113 : 'KW' '1113';\n"); - grammarBuilder.append("KW1114 : 'KW' '1114';\n"); - grammarBuilder.append("KW1115 : 'KW' '1115';\n"); - grammarBuilder.append("KW1116 : 'KW' '1116';\n"); - grammarBuilder.append("KW1117 : 'KW' '1117';\n"); - grammarBuilder.append("KW1118 : 'KW' '1118';\n"); - grammarBuilder.append("KW1119 : 'KW' '1119';\n"); - grammarBuilder.append("KW1120 : 'KW' '1120';\n"); - grammarBuilder.append("KW1121 : 'KW' '1121';\n"); - grammarBuilder.append("KW1122 : 'KW' '1122';\n"); - grammarBuilder.append("KW1123 : 'KW' '1123';\n"); - grammarBuilder.append("KW1124 : 'KW' '1124';\n"); - grammarBuilder.append("KW1125 : 'KW' '1125';\n"); - grammarBuilder.append("KW1126 : 'KW' '1126';\n"); - grammarBuilder.append("KW1127 : 'KW' '1127';\n"); - grammarBuilder.append("KW1128 : 'KW' '1128';\n"); - grammarBuilder.append("KW1129 : 'KW' '1129';\n"); - grammarBuilder.append("KW1130 : 'KW' '1130';\n"); - grammarBuilder.append("KW1131 : 'KW' '1131';\n"); - grammarBuilder.append("KW1132 : 'KW' '1132';\n"); - grammarBuilder.append("KW1133 : 'KW' '1133';\n"); - grammarBuilder.append("KW1134 : 'KW' '1134';\n"); - grammarBuilder.append("KW1135 : 'KW' '1135';\n"); - grammarBuilder.append("KW1136 : 'KW' '1136';\n"); - grammarBuilder.append("KW1137 : 'KW' '1137';\n"); - grammarBuilder.append("KW1138 : 'KW' '1138';\n"); - grammarBuilder.append("KW1139 : 'KW' '1139';\n"); - grammarBuilder.append("KW1140 : 'KW' '1140';\n"); - grammarBuilder.append("KW1141 : 'KW' '1141';\n"); - grammarBuilder.append("KW1142 : 'KW' '1142';\n"); - grammarBuilder.append("KW1143 : 'KW' '1143';\n"); - grammarBuilder.append("KW1144 : 'KW' '1144';\n"); - grammarBuilder.append("KW1145 : 'KW' '1145';\n"); - grammarBuilder.append("KW1146 : 'KW' '1146';\n"); - grammarBuilder.append("KW1147 : 'KW' '1147';\n"); - grammarBuilder.append("KW1148 : 'KW' '1148';\n"); - grammarBuilder.append("KW1149 : 'KW' '1149';\n"); - grammarBuilder.append("KW1150 : 'KW' '1150';\n"); - grammarBuilder.append("KW1151 : 'KW' '1151';\n"); - grammarBuilder.append("KW1152 : 'KW' '1152';\n"); - grammarBuilder.append("KW1153 : 'KW' '1153';\n"); - grammarBuilder.append("KW1154 : 'KW' '1154';\n"); - grammarBuilder.append("KW1155 : 'KW' '1155';\n"); - grammarBuilder.append("KW1156 : 'KW' '1156';\n"); - grammarBuilder.append("KW1157 : 'KW' '1157';\n"); - grammarBuilder.append("KW1158 : 'KW' '1158';\n"); - grammarBuilder.append("KW1159 : 'KW' '1159';\n"); - grammarBuilder.append("KW1160 : 'KW' '1160';\n"); - grammarBuilder.append("KW1161 : 'KW' '1161';\n"); - grammarBuilder.append("KW1162 : 'KW' '1162';\n"); - grammarBuilder.append("KW1163 : 'KW' '1163';\n"); - grammarBuilder.append("KW1164 : 'KW' '1164';\n"); - grammarBuilder.append("KW1165 : 'KW' '1165';\n"); - grammarBuilder.append("KW1166 : 'KW' '1166';\n"); - grammarBuilder.append("KW1167 : 'KW' '1167';\n"); - grammarBuilder.append("KW1168 : 'KW' '1168';\n"); - grammarBuilder.append("KW1169 : 'KW' '1169';\n"); - grammarBuilder.append("KW1170 : 'KW' '1170';\n"); - grammarBuilder.append("KW1171 : 'KW' '1171';\n"); - grammarBuilder.append("KW1172 : 'KW' '1172';\n"); - grammarBuilder.append("KW1173 : 'KW' '1173';\n"); - grammarBuilder.append("KW1174 : 'KW' '1174';\n"); - grammarBuilder.append("KW1175 : 'KW' '1175';\n"); - grammarBuilder.append("KW1176 : 'KW' '1176';\n"); - grammarBuilder.append("KW1177 : 'KW' '1177';\n"); - grammarBuilder.append("KW1178 : 'KW' '1178';\n"); - grammarBuilder.append("KW1179 : 'KW' '1179';\n"); - grammarBuilder.append("KW1180 : 'KW' '1180';\n"); - grammarBuilder.append("KW1181 : 'KW' '1181';\n"); - grammarBuilder.append("KW1182 : 'KW' '1182';\n"); - grammarBuilder.append("KW1183 : 'KW' '1183';\n"); - grammarBuilder.append("KW1184 : 'KW' '1184';\n"); - grammarBuilder.append("KW1185 : 'KW' '1185';\n"); - grammarBuilder.append("KW1186 : 'KW' '1186';\n"); - grammarBuilder.append("KW1187 : 'KW' '1187';\n"); - grammarBuilder.append("KW1188 : 'KW' '1188';\n"); - grammarBuilder.append("KW1189 : 'KW' '1189';\n"); - grammarBuilder.append("KW1190 : 'KW' '1190';\n"); - grammarBuilder.append("KW1191 : 'KW' '1191';\n"); - grammarBuilder.append("KW1192 : 'KW' '1192';\n"); - grammarBuilder.append("KW1193 : 'KW' '1193';\n"); - grammarBuilder.append("KW1194 : 'KW' '1194';\n"); - grammarBuilder.append("KW1195 : 'KW' '1195';\n"); - grammarBuilder.append("KW1196 : 'KW' '1196';\n"); - grammarBuilder.append("KW1197 : 'KW' '1197';\n"); - grammarBuilder.append("KW1198 : 'KW' '1198';\n"); - grammarBuilder.append("KW1199 : 'KW' '1199';\n"); - grammarBuilder.append("KW1200 : 'KW' '1200';\n"); - grammarBuilder.append("KW1201 : 'KW' '1201';\n"); - grammarBuilder.append("KW1202 : 'KW' '1202';\n"); - grammarBuilder.append("KW1203 : 'KW' '1203';\n"); - grammarBuilder.append("KW1204 : 'KW' '1204';\n"); - grammarBuilder.append("KW1205 : 'KW' '1205';\n"); - grammarBuilder.append("KW1206 : 'KW' '1206';\n"); - grammarBuilder.append("KW1207 : 'KW' '1207';\n"); - grammarBuilder.append("KW1208 : 'KW' '1208';\n"); - grammarBuilder.append("KW1209 : 'KW' '1209';\n"); - grammarBuilder.append("KW1210 : 'KW' '1210';\n"); - grammarBuilder.append("KW1211 : 'KW' '1211';\n"); - grammarBuilder.append("KW1212 : 'KW' '1212';\n"); - grammarBuilder.append("KW1213 : 'KW' '1213';\n"); - grammarBuilder.append("KW1214 : 'KW' '1214';\n"); - grammarBuilder.append("KW1215 : 'KW' '1215';\n"); - grammarBuilder.append("KW1216 : 'KW' '1216';\n"); - grammarBuilder.append("KW1217 : 'KW' '1217';\n"); - grammarBuilder.append("KW1218 : 'KW' '1218';\n"); - grammarBuilder.append("KW1219 : 'KW' '1219';\n"); - grammarBuilder.append("KW1220 : 'KW' '1220';\n"); - grammarBuilder.append("KW1221 : 'KW' '1221';\n"); - grammarBuilder.append("KW1222 : 'KW' '1222';\n"); - grammarBuilder.append("KW1223 : 'KW' '1223';\n"); - grammarBuilder.append("KW1224 : 'KW' '1224';\n"); - grammarBuilder.append("KW1225 : 'KW' '1225';\n"); - grammarBuilder.append("KW1226 : 'KW' '1226';\n"); - grammarBuilder.append("KW1227 : 'KW' '1227';\n"); - grammarBuilder.append("KW1228 : 'KW' '1228';\n"); - grammarBuilder.append("KW1229 : 'KW' '1229';\n"); - grammarBuilder.append("KW1230 : 'KW' '1230';\n"); - grammarBuilder.append("KW1231 : 'KW' '1231';\n"); - grammarBuilder.append("KW1232 : 'KW' '1232';\n"); - grammarBuilder.append("KW1233 : 'KW' '1233';\n"); - grammarBuilder.append("KW1234 : 'KW' '1234';\n"); - grammarBuilder.append("KW1235 : 'KW' '1235';\n"); - grammarBuilder.append("KW1236 : 'KW' '1236';\n"); - grammarBuilder.append("KW1237 : 'KW' '1237';\n"); - grammarBuilder.append("KW1238 : 'KW' '1238';\n"); - grammarBuilder.append("KW1239 : 'KW' '1239';\n"); - grammarBuilder.append("KW1240 : 'KW' '1240';\n"); - grammarBuilder.append("KW1241 : 'KW' '1241';\n"); - grammarBuilder.append("KW1242 : 'KW' '1242';\n"); - grammarBuilder.append("KW1243 : 'KW' '1243';\n"); - grammarBuilder.append("KW1244 : 'KW' '1244';\n"); - grammarBuilder.append("KW1245 : 'KW' '1245';\n"); - grammarBuilder.append("KW1246 : 'KW' '1246';\n"); - grammarBuilder.append("KW1247 : 'KW' '1247';\n"); - grammarBuilder.append("KW1248 : 'KW' '1248';\n"); - grammarBuilder.append("KW1249 : 'KW' '1249';\n"); - grammarBuilder.append("KW1250 : 'KW' '1250';\n"); - grammarBuilder.append("KW1251 : 'KW' '1251';\n"); - grammarBuilder.append("KW1252 : 'KW' '1252';\n"); - grammarBuilder.append("KW1253 : 'KW' '1253';\n"); - grammarBuilder.append("KW1254 : 'KW' '1254';\n"); - grammarBuilder.append("KW1255 : 'KW' '1255';\n"); - grammarBuilder.append("KW1256 : 'KW' '1256';\n"); - grammarBuilder.append("KW1257 : 'KW' '1257';\n"); - grammarBuilder.append("KW1258 : 'KW' '1258';\n"); - grammarBuilder.append("KW1259 : 'KW' '1259';\n"); - grammarBuilder.append("KW1260 : 'KW' '1260';\n"); - grammarBuilder.append("KW1261 : 'KW' '1261';\n"); - grammarBuilder.append("KW1262 : 'KW' '1262';\n"); - grammarBuilder.append("KW1263 : 'KW' '1263';\n"); - grammarBuilder.append("KW1264 : 'KW' '1264';\n"); - grammarBuilder.append("KW1265 : 'KW' '1265';\n"); - grammarBuilder.append("KW1266 : 'KW' '1266';\n"); - grammarBuilder.append("KW1267 : 'KW' '1267';\n"); - grammarBuilder.append("KW1268 : 'KW' '1268';\n"); - grammarBuilder.append("KW1269 : 'KW' '1269';\n"); - grammarBuilder.append("KW1270 : 'KW' '1270';\n"); - grammarBuilder.append("KW1271 : 'KW' '1271';\n"); - grammarBuilder.append("KW1272 : 'KW' '1272';\n"); - grammarBuilder.append("KW1273 : 'KW' '1273';\n"); - grammarBuilder.append("KW1274 : 'KW' '1274';\n"); - grammarBuilder.append("KW1275 : 'KW' '1275';\n"); - grammarBuilder.append("KW1276 : 'KW' '1276';\n"); - grammarBuilder.append("KW1277 : 'KW' '1277';\n"); - grammarBuilder.append("KW1278 : 'KW' '1278';\n"); - grammarBuilder.append("KW1279 : 'KW' '1279';\n"); - grammarBuilder.append("KW1280 : 'KW' '1280';\n"); - grammarBuilder.append("KW1281 : 'KW' '1281';\n"); - grammarBuilder.append("KW1282 : 'KW' '1282';\n"); - grammarBuilder.append("KW1283 : 'KW' '1283';\n"); - grammarBuilder.append("KW1284 : 'KW' '1284';\n"); - grammarBuilder.append("KW1285 : 'KW' '1285';\n"); - grammarBuilder.append("KW1286 : 'KW' '1286';\n"); - grammarBuilder.append("KW1287 : 'KW' '1287';\n"); - grammarBuilder.append("KW1288 : 'KW' '1288';\n"); - grammarBuilder.append("KW1289 : 'KW' '1289';\n"); - grammarBuilder.append("KW1290 : 'KW' '1290';\n"); - grammarBuilder.append("KW1291 : 'KW' '1291';\n"); - grammarBuilder.append("KW1292 : 'KW' '1292';\n"); - grammarBuilder.append("KW1293 : 'KW' '1293';\n"); - grammarBuilder.append("KW1294 : 'KW' '1294';\n"); - grammarBuilder.append("KW1295 : 'KW' '1295';\n"); - grammarBuilder.append("KW1296 : 'KW' '1296';\n"); - grammarBuilder.append("KW1297 : 'KW' '1297';\n"); - grammarBuilder.append("KW1298 : 'KW' '1298';\n"); - grammarBuilder.append("KW1299 : 'KW' '1299';\n"); - grammarBuilder.append("KW1300 : 'KW' '1300';\n"); - grammarBuilder.append("KW1301 : 'KW' '1301';\n"); - grammarBuilder.append("KW1302 : 'KW' '1302';\n"); - grammarBuilder.append("KW1303 : 'KW' '1303';\n"); - grammarBuilder.append("KW1304 : 'KW' '1304';\n"); - grammarBuilder.append("KW1305 : 'KW' '1305';\n"); - grammarBuilder.append("KW1306 : 'KW' '1306';\n"); - grammarBuilder.append("KW1307 : 'KW' '1307';\n"); - grammarBuilder.append("KW1308 : 'KW' '1308';\n"); - grammarBuilder.append("KW1309 : 'KW' '1309';\n"); - grammarBuilder.append("KW1310 : 'KW' '1310';\n"); - grammarBuilder.append("KW1311 : 'KW' '1311';\n"); - grammarBuilder.append("KW1312 : 'KW' '1312';\n"); - grammarBuilder.append("KW1313 : 'KW' '1313';\n"); - grammarBuilder.append("KW1314 : 'KW' '1314';\n"); - grammarBuilder.append("KW1315 : 'KW' '1315';\n"); - grammarBuilder.append("KW1316 : 'KW' '1316';\n"); - grammarBuilder.append("KW1317 : 'KW' '1317';\n"); - grammarBuilder.append("KW1318 : 'KW' '1318';\n"); - grammarBuilder.append("KW1319 : 'KW' '1319';\n"); - grammarBuilder.append("KW1320 : 'KW' '1320';\n"); - grammarBuilder.append("KW1321 : 'KW' '1321';\n"); - grammarBuilder.append("KW1322 : 'KW' '1322';\n"); - grammarBuilder.append("KW1323 : 'KW' '1323';\n"); - grammarBuilder.append("KW1324 : 'KW' '1324';\n"); - grammarBuilder.append("KW1325 : 'KW' '1325';\n"); - grammarBuilder.append("KW1326 : 'KW' '1326';\n"); - grammarBuilder.append("KW1327 : 'KW' '1327';\n"); - grammarBuilder.append("KW1328 : 'KW' '1328';\n"); - grammarBuilder.append("KW1329 : 'KW' '1329';\n"); - grammarBuilder.append("KW1330 : 'KW' '1330';\n"); - grammarBuilder.append("KW1331 : 'KW' '1331';\n"); - grammarBuilder.append("KW1332 : 'KW' '1332';\n"); - grammarBuilder.append("KW1333 : 'KW' '1333';\n"); - grammarBuilder.append("KW1334 : 'KW' '1334';\n"); - grammarBuilder.append("KW1335 : 'KW' '1335';\n"); - grammarBuilder.append("KW1336 : 'KW' '1336';\n"); - grammarBuilder.append("KW1337 : 'KW' '1337';\n"); - grammarBuilder.append("KW1338 : 'KW' '1338';\n"); - grammarBuilder.append("KW1339 : 'KW' '1339';\n"); - grammarBuilder.append("KW1340 : 'KW' '1340';\n"); - grammarBuilder.append("KW1341 : 'KW' '1341';\n"); - grammarBuilder.append("KW1342 : 'KW' '1342';\n"); - grammarBuilder.append("KW1343 : 'KW' '1343';\n"); - grammarBuilder.append("KW1344 : 'KW' '1344';\n"); - grammarBuilder.append("KW1345 : 'KW' '1345';\n"); - grammarBuilder.append("KW1346 : 'KW' '1346';\n"); - grammarBuilder.append("KW1347 : 'KW' '1347';\n"); - grammarBuilder.append("KW1348 : 'KW' '1348';\n"); - grammarBuilder.append("KW1349 : 'KW' '1349';\n"); - grammarBuilder.append("KW1350 : 'KW' '1350';\n"); - grammarBuilder.append("KW1351 : 'KW' '1351';\n"); - grammarBuilder.append("KW1352 : 'KW' '1352';\n"); - grammarBuilder.append("KW1353 : 'KW' '1353';\n"); - grammarBuilder.append("KW1354 : 'KW' '1354';\n"); - grammarBuilder.append("KW1355 : 'KW' '1355';\n"); - grammarBuilder.append("KW1356 : 'KW' '1356';\n"); - grammarBuilder.append("KW1357 : 'KW' '1357';\n"); - grammarBuilder.append("KW1358 : 'KW' '1358';\n"); - grammarBuilder.append("KW1359 : 'KW' '1359';\n"); - grammarBuilder.append("KW1360 : 'KW' '1360';\n"); - grammarBuilder.append("KW1361 : 'KW' '1361';\n"); - grammarBuilder.append("KW1362 : 'KW' '1362';\n"); - grammarBuilder.append("KW1363 : 'KW' '1363';\n"); - grammarBuilder.append("KW1364 : 'KW' '1364';\n"); - grammarBuilder.append("KW1365 : 'KW' '1365';\n"); - grammarBuilder.append("KW1366 : 'KW' '1366';\n"); - grammarBuilder.append("KW1367 : 'KW' '1367';\n"); - grammarBuilder.append("KW1368 : 'KW' '1368';\n"); - grammarBuilder.append("KW1369 : 'KW' '1369';\n"); - grammarBuilder.append("KW1370 : 'KW' '1370';\n"); - grammarBuilder.append("KW1371 : 'KW' '1371';\n"); - grammarBuilder.append("KW1372 : 'KW' '1372';\n"); - grammarBuilder.append("KW1373 : 'KW' '1373';\n"); - grammarBuilder.append("KW1374 : 'KW' '1374';\n"); - grammarBuilder.append("KW1375 : 'KW' '1375';\n"); - grammarBuilder.append("KW1376 : 'KW' '1376';\n"); - grammarBuilder.append("KW1377 : 'KW' '1377';\n"); - grammarBuilder.append("KW1378 : 'KW' '1378';\n"); - grammarBuilder.append("KW1379 : 'KW' '1379';\n"); - grammarBuilder.append("KW1380 : 'KW' '1380';\n"); - grammarBuilder.append("KW1381 : 'KW' '1381';\n"); - grammarBuilder.append("KW1382 : 'KW' '1382';\n"); - grammarBuilder.append("KW1383 : 'KW' '1383';\n"); - grammarBuilder.append("KW1384 : 'KW' '1384';\n"); - grammarBuilder.append("KW1385 : 'KW' '1385';\n"); - grammarBuilder.append("KW1386 : 'KW' '1386';\n"); - grammarBuilder.append("KW1387 : 'KW' '1387';\n"); - grammarBuilder.append("KW1388 : 'KW' '1388';\n"); - grammarBuilder.append("KW1389 : 'KW' '1389';\n"); - grammarBuilder.append("KW1390 : 'KW' '1390';\n"); - grammarBuilder.append("KW1391 : 'KW' '1391';\n"); - grammarBuilder.append("KW1392 : 'KW' '1392';\n"); - grammarBuilder.append("KW1393 : 'KW' '1393';\n"); - grammarBuilder.append("KW1394 : 'KW' '1394';\n"); - grammarBuilder.append("KW1395 : 'KW' '1395';\n"); - grammarBuilder.append("KW1396 : 'KW' '1396';\n"); - grammarBuilder.append("KW1397 : 'KW' '1397';\n"); - grammarBuilder.append("KW1398 : 'KW' '1398';\n"); - grammarBuilder.append("KW1399 : 'KW' '1399';\n"); - grammarBuilder.append("KW1400 : 'KW' '1400';\n"); - grammarBuilder.append("KW1401 : 'KW' '1401';\n"); - grammarBuilder.append("KW1402 : 'KW' '1402';\n"); - grammarBuilder.append("KW1403 : 'KW' '1403';\n"); - grammarBuilder.append("KW1404 : 'KW' '1404';\n"); - grammarBuilder.append("KW1405 : 'KW' '1405';\n"); - grammarBuilder.append("KW1406 : 'KW' '1406';\n"); - grammarBuilder.append("KW1407 : 'KW' '1407';\n"); - grammarBuilder.append("KW1408 : 'KW' '1408';\n"); - grammarBuilder.append("KW1409 : 'KW' '1409';\n"); - grammarBuilder.append("KW1410 : 'KW' '1410';\n"); - grammarBuilder.append("KW1411 : 'KW' '1411';\n"); - grammarBuilder.append("KW1412 : 'KW' '1412';\n"); - grammarBuilder.append("KW1413 : 'KW' '1413';\n"); - grammarBuilder.append("KW1414 : 'KW' '1414';\n"); - grammarBuilder.append("KW1415 : 'KW' '1415';\n"); - grammarBuilder.append("KW1416 : 'KW' '1416';\n"); - grammarBuilder.append("KW1417 : 'KW' '1417';\n"); - grammarBuilder.append("KW1418 : 'KW' '1418';\n"); - grammarBuilder.append("KW1419 : 'KW' '1419';\n"); - grammarBuilder.append("KW1420 : 'KW' '1420';\n"); - grammarBuilder.append("KW1421 : 'KW' '1421';\n"); - grammarBuilder.append("KW1422 : 'KW' '1422';\n"); - grammarBuilder.append("KW1423 : 'KW' '1423';\n"); - grammarBuilder.append("KW1424 : 'KW' '1424';\n"); - grammarBuilder.append("KW1425 : 'KW' '1425';\n"); - grammarBuilder.append("KW1426 : 'KW' '1426';\n"); - grammarBuilder.append("KW1427 : 'KW' '1427';\n"); - grammarBuilder.append("KW1428 : 'KW' '1428';\n"); - grammarBuilder.append("KW1429 : 'KW' '1429';\n"); - grammarBuilder.append("KW1430 : 'KW' '1430';\n"); - grammarBuilder.append("KW1431 : 'KW' '1431';\n"); - grammarBuilder.append("KW1432 : 'KW' '1432';\n"); - grammarBuilder.append("KW1433 : 'KW' '1433';\n"); - grammarBuilder.append("KW1434 : 'KW' '1434';\n"); - grammarBuilder.append("KW1435 : 'KW' '1435';\n"); - grammarBuilder.append("KW1436 : 'KW' '1436';\n"); - grammarBuilder.append("KW1437 : 'KW' '1437';\n"); - grammarBuilder.append("KW1438 : 'KW' '1438';\n"); - grammarBuilder.append("KW1439 : 'KW' '1439';\n"); - grammarBuilder.append("KW1440 : 'KW' '1440';\n"); - grammarBuilder.append("KW1441 : 'KW' '1441';\n"); - grammarBuilder.append("KW1442 : 'KW' '1442';\n"); - grammarBuilder.append("KW1443 : 'KW' '1443';\n"); - grammarBuilder.append("KW1444 : 'KW' '1444';\n"); - grammarBuilder.append("KW1445 : 'KW' '1445';\n"); - grammarBuilder.append("KW1446 : 'KW' '1446';\n"); - grammarBuilder.append("KW1447 : 'KW' '1447';\n"); - grammarBuilder.append("KW1448 : 'KW' '1448';\n"); - grammarBuilder.append("KW1449 : 'KW' '1449';\n"); - grammarBuilder.append("KW1450 : 'KW' '1450';\n"); - grammarBuilder.append("KW1451 : 'KW' '1451';\n"); - grammarBuilder.append("KW1452 : 'KW' '1452';\n"); - grammarBuilder.append("KW1453 : 'KW' '1453';\n"); - grammarBuilder.append("KW1454 : 'KW' '1454';\n"); - grammarBuilder.append("KW1455 : 'KW' '1455';\n"); - grammarBuilder.append("KW1456 : 'KW' '1456';\n"); - grammarBuilder.append("KW1457 : 'KW' '1457';\n"); - grammarBuilder.append("KW1458 : 'KW' '1458';\n"); - grammarBuilder.append("KW1459 : 'KW' '1459';\n"); - grammarBuilder.append("KW1460 : 'KW' '1460';\n"); - grammarBuilder.append("KW1461 : 'KW' '1461';\n"); - grammarBuilder.append("KW1462 : 'KW' '1462';\n"); - grammarBuilder.append("KW1463 : 'KW' '1463';\n"); - grammarBuilder.append("KW1464 : 'KW' '1464';\n"); - grammarBuilder.append("KW1465 : 'KW' '1465';\n"); - grammarBuilder.append("KW1466 : 'KW' '1466';\n"); - grammarBuilder.append("KW1467 : 'KW' '1467';\n"); - grammarBuilder.append("KW1468 : 'KW' '1468';\n"); - grammarBuilder.append("KW1469 : 'KW' '1469';\n"); - grammarBuilder.append("KW1470 : 'KW' '1470';\n"); - grammarBuilder.append("KW1471 : 'KW' '1471';\n"); - grammarBuilder.append("KW1472 : 'KW' '1472';\n"); - grammarBuilder.append("KW1473 : 'KW' '1473';\n"); - grammarBuilder.append("KW1474 : 'KW' '1474';\n"); - grammarBuilder.append("KW1475 : 'KW' '1475';\n"); - grammarBuilder.append("KW1476 : 'KW' '1476';\n"); - grammarBuilder.append("KW1477 : 'KW' '1477';\n"); - grammarBuilder.append("KW1478 : 'KW' '1478';\n"); - grammarBuilder.append("KW1479 : 'KW' '1479';\n"); - grammarBuilder.append("KW1480 : 'KW' '1480';\n"); - grammarBuilder.append("KW1481 : 'KW' '1481';\n"); - grammarBuilder.append("KW1482 : 'KW' '1482';\n"); - grammarBuilder.append("KW1483 : 'KW' '1483';\n"); - grammarBuilder.append("KW1484 : 'KW' '1484';\n"); - grammarBuilder.append("KW1485 : 'KW' '1485';\n"); - grammarBuilder.append("KW1486 : 'KW' '1486';\n"); - grammarBuilder.append("KW1487 : 'KW' '1487';\n"); - grammarBuilder.append("KW1488 : 'KW' '1488';\n"); - grammarBuilder.append("KW1489 : 'KW' '1489';\n"); - grammarBuilder.append("KW1490 : 'KW' '1490';\n"); - grammarBuilder.append("KW1491 : 'KW' '1491';\n"); - grammarBuilder.append("KW1492 : 'KW' '1492';\n"); - grammarBuilder.append("KW1493 : 'KW' '1493';\n"); - grammarBuilder.append("KW1494 : 'KW' '1494';\n"); - grammarBuilder.append("KW1495 : 'KW' '1495';\n"); - grammarBuilder.append("KW1496 : 'KW' '1496';\n"); - grammarBuilder.append("KW1497 : 'KW' '1497';\n"); - grammarBuilder.append("KW1498 : 'KW' '1498';\n"); - grammarBuilder.append("KW1499 : 'KW' '1499';\n"); - grammarBuilder.append("KW1500 : 'KW' '1500';\n"); - grammarBuilder.append("KW1501 : 'KW' '1501';\n"); - grammarBuilder.append("KW1502 : 'KW' '1502';\n"); - grammarBuilder.append("KW1503 : 'KW' '1503';\n"); - grammarBuilder.append("KW1504 : 'KW' '1504';\n"); - grammarBuilder.append("KW1505 : 'KW' '1505';\n"); - grammarBuilder.append("KW1506 : 'KW' '1506';\n"); - grammarBuilder.append("KW1507 : 'KW' '1507';\n"); - grammarBuilder.append("KW1508 : 'KW' '1508';\n"); - grammarBuilder.append("KW1509 : 'KW' '1509';\n"); - grammarBuilder.append("KW1510 : 'KW' '1510';\n"); - grammarBuilder.append("KW1511 : 'KW' '1511';\n"); - grammarBuilder.append("KW1512 : 'KW' '1512';\n"); - grammarBuilder.append("KW1513 : 'KW' '1513';\n"); - grammarBuilder.append("KW1514 : 'KW' '1514';\n"); - grammarBuilder.append("KW1515 : 'KW' '1515';\n"); - grammarBuilder.append("KW1516 : 'KW' '1516';\n"); - grammarBuilder.append("KW1517 : 'KW' '1517';\n"); - grammarBuilder.append("KW1518 : 'KW' '1518';\n"); - grammarBuilder.append("KW1519 : 'KW' '1519';\n"); - grammarBuilder.append("KW1520 : 'KW' '1520';\n"); - grammarBuilder.append("KW1521 : 'KW' '1521';\n"); - grammarBuilder.append("KW1522 : 'KW' '1522';\n"); - grammarBuilder.append("KW1523 : 'KW' '1523';\n"); - grammarBuilder.append("KW1524 : 'KW' '1524';\n"); - grammarBuilder.append("KW1525 : 'KW' '1525';\n"); - grammarBuilder.append("KW1526 : 'KW' '1526';\n"); - grammarBuilder.append("KW1527 : 'KW' '1527';\n"); - grammarBuilder.append("KW1528 : 'KW' '1528';\n"); - grammarBuilder.append("KW1529 : 'KW' '1529';\n"); - grammarBuilder.append("KW1530 : 'KW' '1530';\n"); - grammarBuilder.append("KW1531 : 'KW' '1531';\n"); - grammarBuilder.append("KW1532 : 'KW' '1532';\n"); - grammarBuilder.append("KW1533 : 'KW' '1533';\n"); - grammarBuilder.append("KW1534 : 'KW' '1534';\n"); - grammarBuilder.append("KW1535 : 'KW' '1535';\n"); - grammarBuilder.append("KW1536 : 'KW' '1536';\n"); - grammarBuilder.append("KW1537 : 'KW' '1537';\n"); - grammarBuilder.append("KW1538 : 'KW' '1538';\n"); - grammarBuilder.append("KW1539 : 'KW' '1539';\n"); - grammarBuilder.append("KW1540 : 'KW' '1540';\n"); - grammarBuilder.append("KW1541 : 'KW' '1541';\n"); - grammarBuilder.append("KW1542 : 'KW' '1542';\n"); - grammarBuilder.append("KW1543 : 'KW' '1543';\n"); - grammarBuilder.append("KW1544 : 'KW' '1544';\n"); - grammarBuilder.append("KW1545 : 'KW' '1545';\n"); - grammarBuilder.append("KW1546 : 'KW' '1546';\n"); - grammarBuilder.append("KW1547 : 'KW' '1547';\n"); - grammarBuilder.append("KW1548 : 'KW' '1548';\n"); - grammarBuilder.append("KW1549 : 'KW' '1549';\n"); - grammarBuilder.append("KW1550 : 'KW' '1550';\n"); - grammarBuilder.append("KW1551 : 'KW' '1551';\n"); - grammarBuilder.append("KW1552 : 'KW' '1552';\n"); - grammarBuilder.append("KW1553 : 'KW' '1553';\n"); - grammarBuilder.append("KW1554 : 'KW' '1554';\n"); - grammarBuilder.append("KW1555 : 'KW' '1555';\n"); - grammarBuilder.append("KW1556 : 'KW' '1556';\n"); - grammarBuilder.append("KW1557 : 'KW' '1557';\n"); - grammarBuilder.append("KW1558 : 'KW' '1558';\n"); - grammarBuilder.append("KW1559 : 'KW' '1559';\n"); - grammarBuilder.append("KW1560 : 'KW' '1560';\n"); - grammarBuilder.append("KW1561 : 'KW' '1561';\n"); - grammarBuilder.append("KW1562 : 'KW' '1562';\n"); - grammarBuilder.append("KW1563 : 'KW' '1563';\n"); - grammarBuilder.append("KW1564 : 'KW' '1564';\n"); - grammarBuilder.append("KW1565 : 'KW' '1565';\n"); - grammarBuilder.append("KW1566 : 'KW' '1566';\n"); - grammarBuilder.append("KW1567 : 'KW' '1567';\n"); - grammarBuilder.append("KW1568 : 'KW' '1568';\n"); - grammarBuilder.append("KW1569 : 'KW' '1569';\n"); - grammarBuilder.append("KW1570 : 'KW' '1570';\n"); - grammarBuilder.append("KW1571 : 'KW' '1571';\n"); - grammarBuilder.append("KW1572 : 'KW' '1572';\n"); - grammarBuilder.append("KW1573 : 'KW' '1573';\n"); - grammarBuilder.append("KW1574 : 'KW' '1574';\n"); - grammarBuilder.append("KW1575 : 'KW' '1575';\n"); - grammarBuilder.append("KW1576 : 'KW' '1576';\n"); - grammarBuilder.append("KW1577 : 'KW' '1577';\n"); - grammarBuilder.append("KW1578 : 'KW' '1578';\n"); - grammarBuilder.append("KW1579 : 'KW' '1579';\n"); - grammarBuilder.append("KW1580 : 'KW' '1580';\n"); - grammarBuilder.append("KW1581 : 'KW' '1581';\n"); - grammarBuilder.append("KW1582 : 'KW' '1582';\n"); - grammarBuilder.append("KW1583 : 'KW' '1583';\n"); - grammarBuilder.append("KW1584 : 'KW' '1584';\n"); - grammarBuilder.append("KW1585 : 'KW' '1585';\n"); - grammarBuilder.append("KW1586 : 'KW' '1586';\n"); - grammarBuilder.append("KW1587 : 'KW' '1587';\n"); - grammarBuilder.append("KW1588 : 'KW' '1588';\n"); - grammarBuilder.append("KW1589 : 'KW' '1589';\n"); - grammarBuilder.append("KW1590 : 'KW' '1590';\n"); - grammarBuilder.append("KW1591 : 'KW' '1591';\n"); - grammarBuilder.append("KW1592 : 'KW' '1592';\n"); - grammarBuilder.append("KW1593 : 'KW' '1593';\n"); - grammarBuilder.append("KW1594 : 'KW' '1594';\n"); - grammarBuilder.append("KW1595 : 'KW' '1595';\n"); - grammarBuilder.append("KW1596 : 'KW' '1596';\n"); - grammarBuilder.append("KW1597 : 'KW' '1597';\n"); - grammarBuilder.append("KW1598 : 'KW' '1598';\n"); - grammarBuilder.append("KW1599 : 'KW' '1599';\n"); - grammarBuilder.append("KW1600 : 'KW' '1600';\n"); - grammarBuilder.append("KW1601 : 'KW' '1601';\n"); - grammarBuilder.append("KW1602 : 'KW' '1602';\n"); - grammarBuilder.append("KW1603 : 'KW' '1603';\n"); - grammarBuilder.append("KW1604 : 'KW' '1604';\n"); - grammarBuilder.append("KW1605 : 'KW' '1605';\n"); - grammarBuilder.append("KW1606 : 'KW' '1606';\n"); - grammarBuilder.append("KW1607 : 'KW' '1607';\n"); - grammarBuilder.append("KW1608 : 'KW' '1608';\n"); - grammarBuilder.append("KW1609 : 'KW' '1609';\n"); - grammarBuilder.append("KW1610 : 'KW' '1610';\n"); - grammarBuilder.append("KW1611 : 'KW' '1611';\n"); - grammarBuilder.append("KW1612 : 'KW' '1612';\n"); - grammarBuilder.append("KW1613 : 'KW' '1613';\n"); - grammarBuilder.append("KW1614 : 'KW' '1614';\n"); - grammarBuilder.append("KW1615 : 'KW' '1615';\n"); - grammarBuilder.append("KW1616 : 'KW' '1616';\n"); - grammarBuilder.append("KW1617 : 'KW' '1617';\n"); - grammarBuilder.append("KW1618 : 'KW' '1618';\n"); - grammarBuilder.append("KW1619 : 'KW' '1619';\n"); - grammarBuilder.append("KW1620 : 'KW' '1620';\n"); - grammarBuilder.append("KW1621 : 'KW' '1621';\n"); - grammarBuilder.append("KW1622 : 'KW' '1622';\n"); - grammarBuilder.append("KW1623 : 'KW' '1623';\n"); - grammarBuilder.append("KW1624 : 'KW' '1624';\n"); - grammarBuilder.append("KW1625 : 'KW' '1625';\n"); - grammarBuilder.append("KW1626 : 'KW' '1626';\n"); - grammarBuilder.append("KW1627 : 'KW' '1627';\n"); - grammarBuilder.append("KW1628 : 'KW' '1628';\n"); - grammarBuilder.append("KW1629 : 'KW' '1629';\n"); - grammarBuilder.append("KW1630 : 'KW' '1630';\n"); - grammarBuilder.append("KW1631 : 'KW' '1631';\n"); - grammarBuilder.append("KW1632 : 'KW' '1632';\n"); - grammarBuilder.append("KW1633 : 'KW' '1633';\n"); - grammarBuilder.append("KW1634 : 'KW' '1634';\n"); - grammarBuilder.append("KW1635 : 'KW' '1635';\n"); - grammarBuilder.append("KW1636 : 'KW' '1636';\n"); - grammarBuilder.append("KW1637 : 'KW' '1637';\n"); - grammarBuilder.append("KW1638 : 'KW' '1638';\n"); - grammarBuilder.append("KW1639 : 'KW' '1639';\n"); - grammarBuilder.append("KW1640 : 'KW' '1640';\n"); - grammarBuilder.append("KW1641 : 'KW' '1641';\n"); - grammarBuilder.append("KW1642 : 'KW' '1642';\n"); - grammarBuilder.append("KW1643 : 'KW' '1643';\n"); - grammarBuilder.append("KW1644 : 'KW' '1644';\n"); - grammarBuilder.append("KW1645 : 'KW' '1645';\n"); - grammarBuilder.append("KW1646 : 'KW' '1646';\n"); - grammarBuilder.append("KW1647 : 'KW' '1647';\n"); - grammarBuilder.append("KW1648 : 'KW' '1648';\n"); - grammarBuilder.append("KW1649 : 'KW' '1649';\n"); - grammarBuilder.append("KW1650 : 'KW' '1650';\n"); - grammarBuilder.append("KW1651 : 'KW' '1651';\n"); - grammarBuilder.append("KW1652 : 'KW' '1652';\n"); - grammarBuilder.append("KW1653 : 'KW' '1653';\n"); - grammarBuilder.append("KW1654 : 'KW' '1654';\n"); - grammarBuilder.append("KW1655 : 'KW' '1655';\n"); - grammarBuilder.append("KW1656 : 'KW' '1656';\n"); - grammarBuilder.append("KW1657 : 'KW' '1657';\n"); - grammarBuilder.append("KW1658 : 'KW' '1658';\n"); - grammarBuilder.append("KW1659 : 'KW' '1659';\n"); - grammarBuilder.append("KW1660 : 'KW' '1660';\n"); - grammarBuilder.append("KW1661 : 'KW' '1661';\n"); - grammarBuilder.append("KW1662 : 'KW' '1662';\n"); - grammarBuilder.append("KW1663 : 'KW' '1663';\n"); - grammarBuilder.append("KW1664 : 'KW' '1664';\n"); - grammarBuilder.append("KW1665 : 'KW' '1665';\n"); - grammarBuilder.append("KW1666 : 'KW' '1666';\n"); - grammarBuilder.append("KW1667 : 'KW' '1667';\n"); - grammarBuilder.append("KW1668 : 'KW' '1668';\n"); - grammarBuilder.append("KW1669 : 'KW' '1669';\n"); - grammarBuilder.append("KW1670 : 'KW' '1670';\n"); - grammarBuilder.append("KW1671 : 'KW' '1671';\n"); - grammarBuilder.append("KW1672 : 'KW' '1672';\n"); - grammarBuilder.append("KW1673 : 'KW' '1673';\n"); - grammarBuilder.append("KW1674 : 'KW' '1674';\n"); - grammarBuilder.append("KW1675 : 'KW' '1675';\n"); - grammarBuilder.append("KW1676 : 'KW' '1676';\n"); - grammarBuilder.append("KW1677 : 'KW' '1677';\n"); - grammarBuilder.append("KW1678 : 'KW' '1678';\n"); - grammarBuilder.append("KW1679 : 'KW' '1679';\n"); - grammarBuilder.append("KW1680 : 'KW' '1680';\n"); - grammarBuilder.append("KW1681 : 'KW' '1681';\n"); - grammarBuilder.append("KW1682 : 'KW' '1682';\n"); - grammarBuilder.append("KW1683 : 'KW' '1683';\n"); - grammarBuilder.append("KW1684 : 'KW' '1684';\n"); - grammarBuilder.append("KW1685 : 'KW' '1685';\n"); - grammarBuilder.append("KW1686 : 'KW' '1686';\n"); - grammarBuilder.append("KW1687 : 'KW' '1687';\n"); - grammarBuilder.append("KW1688 : 'KW' '1688';\n"); - grammarBuilder.append("KW1689 : 'KW' '1689';\n"); - grammarBuilder.append("KW1690 : 'KW' '1690';\n"); - grammarBuilder.append("KW1691 : 'KW' '1691';\n"); - grammarBuilder.append("KW1692 : 'KW' '1692';\n"); - grammarBuilder.append("KW1693 : 'KW' '1693';\n"); - grammarBuilder.append("KW1694 : 'KW' '1694';\n"); - grammarBuilder.append("KW1695 : 'KW' '1695';\n"); - grammarBuilder.append("KW1696 : 'KW' '1696';\n"); - grammarBuilder.append("KW1697 : 'KW' '1697';\n"); - grammarBuilder.append("KW1698 : 'KW' '1698';\n"); - grammarBuilder.append("KW1699 : 'KW' '1699';\n"); - grammarBuilder.append("KW1700 : 'KW' '1700';\n"); - grammarBuilder.append("KW1701 : 'KW' '1701';\n"); - grammarBuilder.append("KW1702 : 'KW' '1702';\n"); - grammarBuilder.append("KW1703 : 'KW' '1703';\n"); - grammarBuilder.append("KW1704 : 'KW' '1704';\n"); - grammarBuilder.append("KW1705 : 'KW' '1705';\n"); - grammarBuilder.append("KW1706 : 'KW' '1706';\n"); - grammarBuilder.append("KW1707 : 'KW' '1707';\n"); - grammarBuilder.append("KW1708 : 'KW' '1708';\n"); - grammarBuilder.append("KW1709 : 'KW' '1709';\n"); - grammarBuilder.append("KW1710 : 'KW' '1710';\n"); - grammarBuilder.append("KW1711 : 'KW' '1711';\n"); - grammarBuilder.append("KW1712 : 'KW' '1712';\n"); - grammarBuilder.append("KW1713 : 'KW' '1713';\n"); - grammarBuilder.append("KW1714 : 'KW' '1714';\n"); - grammarBuilder.append("KW1715 : 'KW' '1715';\n"); - grammarBuilder.append("KW1716 : 'KW' '1716';\n"); - grammarBuilder.append("KW1717 : 'KW' '1717';\n"); - grammarBuilder.append("KW1718 : 'KW' '1718';\n"); - grammarBuilder.append("KW1719 : 'KW' '1719';\n"); - grammarBuilder.append("KW1720 : 'KW' '1720';\n"); - grammarBuilder.append("KW1721 : 'KW' '1721';\n"); - grammarBuilder.append("KW1722 : 'KW' '1722';\n"); - grammarBuilder.append("KW1723 : 'KW' '1723';\n"); - grammarBuilder.append("KW1724 : 'KW' '1724';\n"); - grammarBuilder.append("KW1725 : 'KW' '1725';\n"); - grammarBuilder.append("KW1726 : 'KW' '1726';\n"); - grammarBuilder.append("KW1727 : 'KW' '1727';\n"); - grammarBuilder.append("KW1728 : 'KW' '1728';\n"); - grammarBuilder.append("KW1729 : 'KW' '1729';\n"); - grammarBuilder.append("KW1730 : 'KW' '1730';\n"); - grammarBuilder.append("KW1731 : 'KW' '1731';\n"); - grammarBuilder.append("KW1732 : 'KW' '1732';\n"); - grammarBuilder.append("KW1733 : 'KW' '1733';\n"); - grammarBuilder.append("KW1734 : 'KW' '1734';\n"); - grammarBuilder.append("KW1735 : 'KW' '1735';\n"); - grammarBuilder.append("KW1736 : 'KW' '1736';\n"); - grammarBuilder.append("KW1737 : 'KW' '1737';\n"); - grammarBuilder.append("KW1738 : 'KW' '1738';\n"); - grammarBuilder.append("KW1739 : 'KW' '1739';\n"); - grammarBuilder.append("KW1740 : 'KW' '1740';\n"); - grammarBuilder.append("KW1741 : 'KW' '1741';\n"); - grammarBuilder.append("KW1742 : 'KW' '1742';\n"); - grammarBuilder.append("KW1743 : 'KW' '1743';\n"); - grammarBuilder.append("KW1744 : 'KW' '1744';\n"); - grammarBuilder.append("KW1745 : 'KW' '1745';\n"); - grammarBuilder.append("KW1746 : 'KW' '1746';\n"); - grammarBuilder.append("KW1747 : 'KW' '1747';\n"); - grammarBuilder.append("KW1748 : 'KW' '1748';\n"); - grammarBuilder.append("KW1749 : 'KW' '1749';\n"); - grammarBuilder.append("KW1750 : 'KW' '1750';\n"); - grammarBuilder.append("KW1751 : 'KW' '1751';\n"); - grammarBuilder.append("KW1752 : 'KW' '1752';\n"); - grammarBuilder.append("KW1753 : 'KW' '1753';\n"); - grammarBuilder.append("KW1754 : 'KW' '1754';\n"); - grammarBuilder.append("KW1755 : 'KW' '1755';\n"); - grammarBuilder.append("KW1756 : 'KW' '1756';\n"); - grammarBuilder.append("KW1757 : 'KW' '1757';\n"); - grammarBuilder.append("KW1758 : 'KW' '1758';\n"); - grammarBuilder.append("KW1759 : 'KW' '1759';\n"); - grammarBuilder.append("KW1760 : 'KW' '1760';\n"); - grammarBuilder.append("KW1761 : 'KW' '1761';\n"); - grammarBuilder.append("KW1762 : 'KW' '1762';\n"); - grammarBuilder.append("KW1763 : 'KW' '1763';\n"); - grammarBuilder.append("KW1764 : 'KW' '1764';\n"); - grammarBuilder.append("KW1765 : 'KW' '1765';\n"); - grammarBuilder.append("KW1766 : 'KW' '1766';\n"); - grammarBuilder.append("KW1767 : 'KW' '1767';\n"); - grammarBuilder.append("KW1768 : 'KW' '1768';\n"); - grammarBuilder.append("KW1769 : 'KW' '1769';\n"); - grammarBuilder.append("KW1770 : 'KW' '1770';\n"); - grammarBuilder.append("KW1771 : 'KW' '1771';\n"); - grammarBuilder.append("KW1772 : 'KW' '1772';\n"); - grammarBuilder.append("KW1773 : 'KW' '1773';\n"); - grammarBuilder.append("KW1774 : 'KW' '1774';\n"); - grammarBuilder.append("KW1775 : 'KW' '1775';\n"); - grammarBuilder.append("KW1776 : 'KW' '1776';\n"); - grammarBuilder.append("KW1777 : 'KW' '1777';\n"); - grammarBuilder.append("KW1778 : 'KW' '1778';\n"); - grammarBuilder.append("KW1779 : 'KW' '1779';\n"); - grammarBuilder.append("KW1780 : 'KW' '1780';\n"); - grammarBuilder.append("KW1781 : 'KW' '1781';\n"); - grammarBuilder.append("KW1782 : 'KW' '1782';\n"); - grammarBuilder.append("KW1783 : 'KW' '1783';\n"); - grammarBuilder.append("KW1784 : 'KW' '1784';\n"); - grammarBuilder.append("KW1785 : 'KW' '1785';\n"); - grammarBuilder.append("KW1786 : 'KW' '1786';\n"); - grammarBuilder.append("KW1787 : 'KW' '1787';\n"); - grammarBuilder.append("KW1788 : 'KW' '1788';\n"); - grammarBuilder.append("KW1789 : 'KW' '1789';\n"); - grammarBuilder.append("KW1790 : 'KW' '1790';\n"); - grammarBuilder.append("KW1791 : 'KW' '1791';\n"); - grammarBuilder.append("KW1792 : 'KW' '1792';\n"); - grammarBuilder.append("KW1793 : 'KW' '1793';\n"); - grammarBuilder.append("KW1794 : 'KW' '1794';\n"); - grammarBuilder.append("KW1795 : 'KW' '1795';\n"); - grammarBuilder.append("KW1796 : 'KW' '1796';\n"); - grammarBuilder.append("KW1797 : 'KW' '1797';\n"); - grammarBuilder.append("KW1798 : 'KW' '1798';\n"); - grammarBuilder.append("KW1799 : 'KW' '1799';\n"); - grammarBuilder.append("KW1800 : 'KW' '1800';\n"); - grammarBuilder.append("KW1801 : 'KW' '1801';\n"); - grammarBuilder.append("KW1802 : 'KW' '1802';\n"); - grammarBuilder.append("KW1803 : 'KW' '1803';\n"); - grammarBuilder.append("KW1804 : 'KW' '1804';\n"); - grammarBuilder.append("KW1805 : 'KW' '1805';\n"); - grammarBuilder.append("KW1806 : 'KW' '1806';\n"); - grammarBuilder.append("KW1807 : 'KW' '1807';\n"); - grammarBuilder.append("KW1808 : 'KW' '1808';\n"); - grammarBuilder.append("KW1809 : 'KW' '1809';\n"); - grammarBuilder.append("KW1810 : 'KW' '1810';\n"); - grammarBuilder.append("KW1811 : 'KW' '1811';\n"); - grammarBuilder.append("KW1812 : 'KW' '1812';\n"); - grammarBuilder.append("KW1813 : 'KW' '1813';\n"); - grammarBuilder.append("KW1814 : 'KW' '1814';\n"); - grammarBuilder.append("KW1815 : 'KW' '1815';\n"); - grammarBuilder.append("KW1816 : 'KW' '1816';\n"); - grammarBuilder.append("KW1817 : 'KW' '1817';\n"); - grammarBuilder.append("KW1818 : 'KW' '1818';\n"); - grammarBuilder.append("KW1819 : 'KW' '1819';\n"); - grammarBuilder.append("KW1820 : 'KW' '1820';\n"); - grammarBuilder.append("KW1821 : 'KW' '1821';\n"); - grammarBuilder.append("KW1822 : 'KW' '1822';\n"); - grammarBuilder.append("KW1823 : 'KW' '1823';\n"); - grammarBuilder.append("KW1824 : 'KW' '1824';\n"); - grammarBuilder.append("KW1825 : 'KW' '1825';\n"); - grammarBuilder.append("KW1826 : 'KW' '1826';\n"); - grammarBuilder.append("KW1827 : 'KW' '1827';\n"); - grammarBuilder.append("KW1828 : 'KW' '1828';\n"); - grammarBuilder.append("KW1829 : 'KW' '1829';\n"); - grammarBuilder.append("KW1830 : 'KW' '1830';\n"); - grammarBuilder.append("KW1831 : 'KW' '1831';\n"); - grammarBuilder.append("KW1832 : 'KW' '1832';\n"); - grammarBuilder.append("KW1833 : 'KW' '1833';\n"); - grammarBuilder.append("KW1834 : 'KW' '1834';\n"); - grammarBuilder.append("KW1835 : 'KW' '1835';\n"); - grammarBuilder.append("KW1836 : 'KW' '1836';\n"); - grammarBuilder.append("KW1837 : 'KW' '1837';\n"); - grammarBuilder.append("KW1838 : 'KW' '1838';\n"); - grammarBuilder.append("KW1839 : 'KW' '1839';\n"); - grammarBuilder.append("KW1840 : 'KW' '1840';\n"); - grammarBuilder.append("KW1841 : 'KW' '1841';\n"); - grammarBuilder.append("KW1842 : 'KW' '1842';\n"); - grammarBuilder.append("KW1843 : 'KW' '1843';\n"); - grammarBuilder.append("KW1844 : 'KW' '1844';\n"); - grammarBuilder.append("KW1845 : 'KW' '1845';\n"); - grammarBuilder.append("KW1846 : 'KW' '1846';\n"); - grammarBuilder.append("KW1847 : 'KW' '1847';\n"); - grammarBuilder.append("KW1848 : 'KW' '1848';\n"); - grammarBuilder.append("KW1849 : 'KW' '1849';\n"); - grammarBuilder.append("KW1850 : 'KW' '1850';\n"); - grammarBuilder.append("KW1851 : 'KW' '1851';\n"); - grammarBuilder.append("KW1852 : 'KW' '1852';\n"); - grammarBuilder.append("KW1853 : 'KW' '1853';\n"); - grammarBuilder.append("KW1854 : 'KW' '1854';\n"); - grammarBuilder.append("KW1855 : 'KW' '1855';\n"); - grammarBuilder.append("KW1856 : 'KW' '1856';\n"); - grammarBuilder.append("KW1857 : 'KW' '1857';\n"); - grammarBuilder.append("KW1858 : 'KW' '1858';\n"); - grammarBuilder.append("KW1859 : 'KW' '1859';\n"); - grammarBuilder.append("KW1860 : 'KW' '1860';\n"); - grammarBuilder.append("KW1861 : 'KW' '1861';\n"); - grammarBuilder.append("KW1862 : 'KW' '1862';\n"); - grammarBuilder.append("KW1863 : 'KW' '1863';\n"); - grammarBuilder.append("KW1864 : 'KW' '1864';\n"); - grammarBuilder.append("KW1865 : 'KW' '1865';\n"); - grammarBuilder.append("KW1866 : 'KW' '1866';\n"); - grammarBuilder.append("KW1867 : 'KW' '1867';\n"); - grammarBuilder.append("KW1868 : 'KW' '1868';\n"); - grammarBuilder.append("KW1869 : 'KW' '1869';\n"); - grammarBuilder.append("KW1870 : 'KW' '1870';\n"); - grammarBuilder.append("KW1871 : 'KW' '1871';\n"); - grammarBuilder.append("KW1872 : 'KW' '1872';\n"); - grammarBuilder.append("KW1873 : 'KW' '1873';\n"); - grammarBuilder.append("KW1874 : 'KW' '1874';\n"); - grammarBuilder.append("KW1875 : 'KW' '1875';\n"); - grammarBuilder.append("KW1876 : 'KW' '1876';\n"); - grammarBuilder.append("KW1877 : 'KW' '1877';\n"); - grammarBuilder.append("KW1878 : 'KW' '1878';\n"); - grammarBuilder.append("KW1879 : 'KW' '1879';\n"); - grammarBuilder.append("KW1880 : 'KW' '1880';\n"); - grammarBuilder.append("KW1881 : 'KW' '1881';\n"); - grammarBuilder.append("KW1882 : 'KW' '1882';\n"); - grammarBuilder.append("KW1883 : 'KW' '1883';\n"); - grammarBuilder.append("KW1884 : 'KW' '1884';\n"); - grammarBuilder.append("KW1885 : 'KW' '1885';\n"); - grammarBuilder.append("KW1886 : 'KW' '1886';\n"); - grammarBuilder.append("KW1887 : 'KW' '1887';\n"); - grammarBuilder.append("KW1888 : 'KW' '1888';\n"); - grammarBuilder.append("KW1889 : 'KW' '1889';\n"); - grammarBuilder.append("KW1890 : 'KW' '1890';\n"); - grammarBuilder.append("KW1891 : 'KW' '1891';\n"); - grammarBuilder.append("KW1892 : 'KW' '1892';\n"); - grammarBuilder.append("KW1893 : 'KW' '1893';\n"); - grammarBuilder.append("KW1894 : 'KW' '1894';\n"); - grammarBuilder.append("KW1895 : 'KW' '1895';\n"); - grammarBuilder.append("KW1896 : 'KW' '1896';\n"); - grammarBuilder.append("KW1897 : 'KW' '1897';\n"); - grammarBuilder.append("KW1898 : 'KW' '1898';\n"); - grammarBuilder.append("KW1899 : 'KW' '1899';\n"); - grammarBuilder.append("KW1900 : 'KW' '1900';\n"); - grammarBuilder.append("KW1901 : 'KW' '1901';\n"); - grammarBuilder.append("KW1902 : 'KW' '1902';\n"); - grammarBuilder.append("KW1903 : 'KW' '1903';\n"); - grammarBuilder.append("KW1904 : 'KW' '1904';\n"); - grammarBuilder.append("KW1905 : 'KW' '1905';\n"); - grammarBuilder.append("KW1906 : 'KW' '1906';\n"); - grammarBuilder.append("KW1907 : 'KW' '1907';\n"); - grammarBuilder.append("KW1908 : 'KW' '1908';\n"); - grammarBuilder.append("KW1909 : 'KW' '1909';\n"); - grammarBuilder.append("KW1910 : 'KW' '1910';\n"); - grammarBuilder.append("KW1911 : 'KW' '1911';\n"); - grammarBuilder.append("KW1912 : 'KW' '1912';\n"); - grammarBuilder.append("KW1913 : 'KW' '1913';\n"); - grammarBuilder.append("KW1914 : 'KW' '1914';\n"); - grammarBuilder.append("KW1915 : 'KW' '1915';\n"); - grammarBuilder.append("KW1916 : 'KW' '1916';\n"); - grammarBuilder.append("KW1917 : 'KW' '1917';\n"); - grammarBuilder.append("KW1918 : 'KW' '1918';\n"); - grammarBuilder.append("KW1919 : 'KW' '1919';\n"); - grammarBuilder.append("KW1920 : 'KW' '1920';\n"); - grammarBuilder.append("KW1921 : 'KW' '1921';\n"); - grammarBuilder.append("KW1922 : 'KW' '1922';\n"); - grammarBuilder.append("KW1923 : 'KW' '1923';\n"); - grammarBuilder.append("KW1924 : 'KW' '1924';\n"); - grammarBuilder.append("KW1925 : 'KW' '1925';\n"); - grammarBuilder.append("KW1926 : 'KW' '1926';\n"); - grammarBuilder.append("KW1927 : 'KW' '1927';\n"); - grammarBuilder.append("KW1928 : 'KW' '1928';\n"); - grammarBuilder.append("KW1929 : 'KW' '1929';\n"); - grammarBuilder.append("KW1930 : 'KW' '1930';\n"); - grammarBuilder.append("KW1931 : 'KW' '1931';\n"); - grammarBuilder.append("KW1932 : 'KW' '1932';\n"); - grammarBuilder.append("KW1933 : 'KW' '1933';\n"); - grammarBuilder.append("KW1934 : 'KW' '1934';\n"); - grammarBuilder.append("KW1935 : 'KW' '1935';\n"); - grammarBuilder.append("KW1936 : 'KW' '1936';\n"); - grammarBuilder.append("KW1937 : 'KW' '1937';\n"); - grammarBuilder.append("KW1938 : 'KW' '1938';\n"); - grammarBuilder.append("KW1939 : 'KW' '1939';\n"); - grammarBuilder.append("KW1940 : 'KW' '1940';\n"); - grammarBuilder.append("KW1941 : 'KW' '1941';\n"); - grammarBuilder.append("KW1942 : 'KW' '1942';\n"); - grammarBuilder.append("KW1943 : 'KW' '1943';\n"); - grammarBuilder.append("KW1944 : 'KW' '1944';\n"); - grammarBuilder.append("KW1945 : 'KW' '1945';\n"); - grammarBuilder.append("KW1946 : 'KW' '1946';\n"); - grammarBuilder.append("KW1947 : 'KW' '1947';\n"); - grammarBuilder.append("KW1948 : 'KW' '1948';\n"); - grammarBuilder.append("KW1949 : 'KW' '1949';\n"); - grammarBuilder.append("KW1950 : 'KW' '1950';\n"); - grammarBuilder.append("KW1951 : 'KW' '1951';\n"); - grammarBuilder.append("KW1952 : 'KW' '1952';\n"); - grammarBuilder.append("KW1953 : 'KW' '1953';\n"); - grammarBuilder.append("KW1954 : 'KW' '1954';\n"); - grammarBuilder.append("KW1955 : 'KW' '1955';\n"); - grammarBuilder.append("KW1956 : 'KW' '1956';\n"); - grammarBuilder.append("KW1957 : 'KW' '1957';\n"); - grammarBuilder.append("KW1958 : 'KW' '1958';\n"); - grammarBuilder.append("KW1959 : 'KW' '1959';\n"); - grammarBuilder.append("KW1960 : 'KW' '1960';\n"); - grammarBuilder.append("KW1961 : 'KW' '1961';\n"); - grammarBuilder.append("KW1962 : 'KW' '1962';\n"); - grammarBuilder.append("KW1963 : 'KW' '1963';\n"); - grammarBuilder.append("KW1964 : 'KW' '1964';\n"); - grammarBuilder.append("KW1965 : 'KW' '1965';\n"); - grammarBuilder.append("KW1966 : 'KW' '1966';\n"); - grammarBuilder.append("KW1967 : 'KW' '1967';\n"); - grammarBuilder.append("KW1968 : 'KW' '1968';\n"); - grammarBuilder.append("KW1969 : 'KW' '1969';\n"); - grammarBuilder.append("KW1970 : 'KW' '1970';\n"); - grammarBuilder.append("KW1971 : 'KW' '1971';\n"); - grammarBuilder.append("KW1972 : 'KW' '1972';\n"); - grammarBuilder.append("KW1973 : 'KW' '1973';\n"); - grammarBuilder.append("KW1974 : 'KW' '1974';\n"); - grammarBuilder.append("KW1975 : 'KW' '1975';\n"); - grammarBuilder.append("KW1976 : 'KW' '1976';\n"); - grammarBuilder.append("KW1977 : 'KW' '1977';\n"); - grammarBuilder.append("KW1978 : 'KW' '1978';\n"); - grammarBuilder.append("KW1979 : 'KW' '1979';\n"); - grammarBuilder.append("KW1980 : 'KW' '1980';\n"); - grammarBuilder.append("KW1981 : 'KW' '1981';\n"); - grammarBuilder.append("KW1982 : 'KW' '1982';\n"); - grammarBuilder.append("KW1983 : 'KW' '1983';\n"); - grammarBuilder.append("KW1984 : 'KW' '1984';\n"); - grammarBuilder.append("KW1985 : 'KW' '1985';\n"); - grammarBuilder.append("KW1986 : 'KW' '1986';\n"); - grammarBuilder.append("KW1987 : 'KW' '1987';\n"); - grammarBuilder.append("KW1988 : 'KW' '1988';\n"); - grammarBuilder.append("KW1989 : 'KW' '1989';\n"); - grammarBuilder.append("KW1990 : 'KW' '1990';\n"); - grammarBuilder.append("KW1991 : 'KW' '1991';\n"); - grammarBuilder.append("KW1992 : 'KW' '1992';\n"); - grammarBuilder.append("KW1993 : 'KW' '1993';\n"); - grammarBuilder.append("KW1994 : 'KW' '1994';\n"); - grammarBuilder.append("KW1995 : 'KW' '1995';\n"); - grammarBuilder.append("KW1996 : 'KW' '1996';\n"); - grammarBuilder.append("KW1997 : 'KW' '1997';\n"); - grammarBuilder.append("KW1998 : 'KW' '1998';\n"); - grammarBuilder.append("KW1999 : 'KW' '1999';\n"); - grammarBuilder.append("KW2000 : 'KW' '2000';\n"); - grammarBuilder.append("KW2001 : 'KW' '2001';\n"); - grammarBuilder.append("KW2002 : 'KW' '2002';\n"); - grammarBuilder.append("KW2003 : 'KW' '2003';\n"); - grammarBuilder.append("KW2004 : 'KW' '2004';\n"); - grammarBuilder.append("KW2005 : 'KW' '2005';\n"); - grammarBuilder.append("KW2006 : 'KW' '2006';\n"); - grammarBuilder.append("KW2007 : 'KW' '2007';\n"); - grammarBuilder.append("KW2008 : 'KW' '2008';\n"); - grammarBuilder.append("KW2009 : 'KW' '2009';\n"); - grammarBuilder.append("KW2010 : 'KW' '2010';\n"); - grammarBuilder.append("KW2011 : 'KW' '2011';\n"); - grammarBuilder.append("KW2012 : 'KW' '2012';\n"); - grammarBuilder.append("KW2013 : 'KW' '2013';\n"); - grammarBuilder.append("KW2014 : 'KW' '2014';\n"); - grammarBuilder.append("KW2015 : 'KW' '2015';\n"); - grammarBuilder.append("KW2016 : 'KW' '2016';\n"); - grammarBuilder.append("KW2017 : 'KW' '2017';\n"); - grammarBuilder.append("KW2018 : 'KW' '2018';\n"); - grammarBuilder.append("KW2019 : 'KW' '2019';\n"); - grammarBuilder.append("KW2020 : 'KW' '2020';\n"); - grammarBuilder.append("KW2021 : 'KW' '2021';\n"); - grammarBuilder.append("KW2022 : 'KW' '2022';\n"); - grammarBuilder.append("KW2023 : 'KW' '2023';\n"); - grammarBuilder.append("KW2024 : 'KW' '2024';\n"); - grammarBuilder.append("KW2025 : 'KW' '2025';\n"); - grammarBuilder.append("KW2026 : 'KW' '2026';\n"); - grammarBuilder.append("KW2027 : 'KW' '2027';\n"); - grammarBuilder.append("KW2028 : 'KW' '2028';\n"); - grammarBuilder.append("KW2029 : 'KW' '2029';\n"); - grammarBuilder.append("KW2030 : 'KW' '2030';\n"); - grammarBuilder.append("KW2031 : 'KW' '2031';\n"); - grammarBuilder.append("KW2032 : 'KW' '2032';\n"); - grammarBuilder.append("KW2033 : 'KW' '2033';\n"); - grammarBuilder.append("KW2034 : 'KW' '2034';\n"); - grammarBuilder.append("KW2035 : 'KW' '2035';\n"); - grammarBuilder.append("KW2036 : 'KW' '2036';\n"); - grammarBuilder.append("KW2037 : 'KW' '2037';\n"); - grammarBuilder.append("KW2038 : 'KW' '2038';\n"); - grammarBuilder.append("KW2039 : 'KW' '2039';\n"); - grammarBuilder.append("KW2040 : 'KW' '2040';\n"); - grammarBuilder.append("KW2041 : 'KW' '2041';\n"); - grammarBuilder.append("KW2042 : 'KW' '2042';\n"); - grammarBuilder.append("KW2043 : 'KW' '2043';\n"); - grammarBuilder.append("KW2044 : 'KW' '2044';\n"); - grammarBuilder.append("KW2045 : 'KW' '2045';\n"); - grammarBuilder.append("KW2046 : 'KW' '2046';\n"); - grammarBuilder.append("KW2047 : 'KW' '2047';\n"); - grammarBuilder.append("KW2048 : 'KW' '2048';\n"); - grammarBuilder.append("KW2049 : 'KW' '2049';\n"); - grammarBuilder.append("KW2050 : 'KW' '2050';\n"); - grammarBuilder.append("KW2051 : 'KW' '2051';\n"); - grammarBuilder.append("KW2052 : 'KW' '2052';\n"); - grammarBuilder.append("KW2053 : 'KW' '2053';\n"); - grammarBuilder.append("KW2054 : 'KW' '2054';\n"); - grammarBuilder.append("KW2055 : 'KW' '2055';\n"); - grammarBuilder.append("KW2056 : 'KW' '2056';\n"); - grammarBuilder.append("KW2057 : 'KW' '2057';\n"); - grammarBuilder.append("KW2058 : 'KW' '2058';\n"); - grammarBuilder.append("KW2059 : 'KW' '2059';\n"); - grammarBuilder.append("KW2060 : 'KW' '2060';\n"); - grammarBuilder.append("KW2061 : 'KW' '2061';\n"); - grammarBuilder.append("KW2062 : 'KW' '2062';\n"); - grammarBuilder.append("KW2063 : 'KW' '2063';\n"); - grammarBuilder.append("KW2064 : 'KW' '2064';\n"); - grammarBuilder.append("KW2065 : 'KW' '2065';\n"); - grammarBuilder.append("KW2066 : 'KW' '2066';\n"); - grammarBuilder.append("KW2067 : 'KW' '2067';\n"); - grammarBuilder.append("KW2068 : 'KW' '2068';\n"); - grammarBuilder.append("KW2069 : 'KW' '2069';\n"); - grammarBuilder.append("KW2070 : 'KW' '2070';\n"); - grammarBuilder.append("KW2071 : 'KW' '2071';\n"); - grammarBuilder.append("KW2072 : 'KW' '2072';\n"); - grammarBuilder.append("KW2073 : 'KW' '2073';\n"); - grammarBuilder.append("KW2074 : 'KW' '2074';\n"); - grammarBuilder.append("KW2075 : 'KW' '2075';\n"); - grammarBuilder.append("KW2076 : 'KW' '2076';\n"); - grammarBuilder.append("KW2077 : 'KW' '2077';\n"); - grammarBuilder.append("KW2078 : 'KW' '2078';\n"); - grammarBuilder.append("KW2079 : 'KW' '2079';\n"); - grammarBuilder.append("KW2080 : 'KW' '2080';\n"); - grammarBuilder.append("KW2081 : 'KW' '2081';\n"); - grammarBuilder.append("KW2082 : 'KW' '2082';\n"); - grammarBuilder.append("KW2083 : 'KW' '2083';\n"); - grammarBuilder.append("KW2084 : 'KW' '2084';\n"); - grammarBuilder.append("KW2085 : 'KW' '2085';\n"); - grammarBuilder.append("KW2086 : 'KW' '2086';\n"); - grammarBuilder.append("KW2087 : 'KW' '2087';\n"); - grammarBuilder.append("KW2088 : 'KW' '2088';\n"); - grammarBuilder.append("KW2089 : 'KW' '2089';\n"); - grammarBuilder.append("KW2090 : 'KW' '2090';\n"); - grammarBuilder.append("KW2091 : 'KW' '2091';\n"); - grammarBuilder.append("KW2092 : 'KW' '2092';\n"); - grammarBuilder.append("KW2093 : 'KW' '2093';\n"); - grammarBuilder.append("KW2094 : 'KW' '2094';\n"); - grammarBuilder.append("KW2095 : 'KW' '2095';\n"); - grammarBuilder.append("KW2096 : 'KW' '2096';\n"); - grammarBuilder.append("KW2097 : 'KW' '2097';\n"); - grammarBuilder.append("KW2098 : 'KW' '2098';\n"); - grammarBuilder.append("KW2099 : 'KW' '2099';\n"); - grammarBuilder.append("KW2100 : 'KW' '2100';\n"); - grammarBuilder.append("KW2101 : 'KW' '2101';\n"); - grammarBuilder.append("KW2102 : 'KW' '2102';\n"); - grammarBuilder.append("KW2103 : 'KW' '2103';\n"); - grammarBuilder.append("KW2104 : 'KW' '2104';\n"); - grammarBuilder.append("KW2105 : 'KW' '2105';\n"); - grammarBuilder.append("KW2106 : 'KW' '2106';\n"); - grammarBuilder.append("KW2107 : 'KW' '2107';\n"); - grammarBuilder.append("KW2108 : 'KW' '2108';\n"); - grammarBuilder.append("KW2109 : 'KW' '2109';\n"); - grammarBuilder.append("KW2110 : 'KW' '2110';\n"); - grammarBuilder.append("KW2111 : 'KW' '2111';\n"); - grammarBuilder.append("KW2112 : 'KW' '2112';\n"); - grammarBuilder.append("KW2113 : 'KW' '2113';\n"); - grammarBuilder.append("KW2114 : 'KW' '2114';\n"); - grammarBuilder.append("KW2115 : 'KW' '2115';\n"); - grammarBuilder.append("KW2116 : 'KW' '2116';\n"); - grammarBuilder.append("KW2117 : 'KW' '2117';\n"); - grammarBuilder.append("KW2118 : 'KW' '2118';\n"); - grammarBuilder.append("KW2119 : 'KW' '2119';\n"); - grammarBuilder.append("KW2120 : 'KW' '2120';\n"); - grammarBuilder.append("KW2121 : 'KW' '2121';\n"); - grammarBuilder.append("KW2122 : 'KW' '2122';\n"); - grammarBuilder.append("KW2123 : 'KW' '2123';\n"); - grammarBuilder.append("KW2124 : 'KW' '2124';\n"); - grammarBuilder.append("KW2125 : 'KW' '2125';\n"); - grammarBuilder.append("KW2126 : 'KW' '2126';\n"); - grammarBuilder.append("KW2127 : 'KW' '2127';\n"); - grammarBuilder.append("KW2128 : 'KW' '2128';\n"); - grammarBuilder.append("KW2129 : 'KW' '2129';\n"); - grammarBuilder.append("KW2130 : 'KW' '2130';\n"); - grammarBuilder.append("KW2131 : 'KW' '2131';\n"); - grammarBuilder.append("KW2132 : 'KW' '2132';\n"); - grammarBuilder.append("KW2133 : 'KW' '2133';\n"); - grammarBuilder.append("KW2134 : 'KW' '2134';\n"); - grammarBuilder.append("KW2135 : 'KW' '2135';\n"); - grammarBuilder.append("KW2136 : 'KW' '2136';\n"); - grammarBuilder.append("KW2137 : 'KW' '2137';\n"); - grammarBuilder.append("KW2138 : 'KW' '2138';\n"); - grammarBuilder.append("KW2139 : 'KW' '2139';\n"); - grammarBuilder.append("KW2140 : 'KW' '2140';\n"); - grammarBuilder.append("KW2141 : 'KW' '2141';\n"); - grammarBuilder.append("KW2142 : 'KW' '2142';\n"); - grammarBuilder.append("KW2143 : 'KW' '2143';\n"); - grammarBuilder.append("KW2144 : 'KW' '2144';\n"); - grammarBuilder.append("KW2145 : 'KW' '2145';\n"); - grammarBuilder.append("KW2146 : 'KW' '2146';\n"); - grammarBuilder.append("KW2147 : 'KW' '2147';\n"); - grammarBuilder.append("KW2148 : 'KW' '2148';\n"); - grammarBuilder.append("KW2149 : 'KW' '2149';\n"); - grammarBuilder.append("KW2150 : 'KW' '2150';\n"); - grammarBuilder.append("KW2151 : 'KW' '2151';\n"); - grammarBuilder.append("KW2152 : 'KW' '2152';\n"); - grammarBuilder.append("KW2153 : 'KW' '2153';\n"); - grammarBuilder.append("KW2154 : 'KW' '2154';\n"); - grammarBuilder.append("KW2155 : 'KW' '2155';\n"); - grammarBuilder.append("KW2156 : 'KW' '2156';\n"); - grammarBuilder.append("KW2157 : 'KW' '2157';\n"); - grammarBuilder.append("KW2158 : 'KW' '2158';\n"); - grammarBuilder.append("KW2159 : 'KW' '2159';\n"); - grammarBuilder.append("KW2160 : 'KW' '2160';\n"); - grammarBuilder.append("KW2161 : 'KW' '2161';\n"); - grammarBuilder.append("KW2162 : 'KW' '2162';\n"); - grammarBuilder.append("KW2163 : 'KW' '2163';\n"); - grammarBuilder.append("KW2164 : 'KW' '2164';\n"); - grammarBuilder.append("KW2165 : 'KW' '2165';\n"); - grammarBuilder.append("KW2166 : 'KW' '2166';\n"); - grammarBuilder.append("KW2167 : 'KW' '2167';\n"); - grammarBuilder.append("KW2168 : 'KW' '2168';\n"); - grammarBuilder.append("KW2169 : 'KW' '2169';\n"); - grammarBuilder.append("KW2170 : 'KW' '2170';\n"); - grammarBuilder.append("KW2171 : 'KW' '2171';\n"); - grammarBuilder.append("KW2172 : 'KW' '2172';\n"); - grammarBuilder.append("KW2173 : 'KW' '2173';\n"); - grammarBuilder.append("KW2174 : 'KW' '2174';\n"); - grammarBuilder.append("KW2175 : 'KW' '2175';\n"); - grammarBuilder.append("KW2176 : 'KW' '2176';\n"); - grammarBuilder.append("KW2177 : 'KW' '2177';\n"); - grammarBuilder.append("KW2178 : 'KW' '2178';\n"); - grammarBuilder.append("KW2179 : 'KW' '2179';\n"); - grammarBuilder.append("KW2180 : 'KW' '2180';\n"); - grammarBuilder.append("KW2181 : 'KW' '2181';\n"); - grammarBuilder.append("KW2182 : 'KW' '2182';\n"); - grammarBuilder.append("KW2183 : 'KW' '2183';\n"); - grammarBuilder.append("KW2184 : 'KW' '2184';\n"); - grammarBuilder.append("KW2185 : 'KW' '2185';\n"); - grammarBuilder.append("KW2186 : 'KW' '2186';\n"); - grammarBuilder.append("KW2187 : 'KW' '2187';\n"); - grammarBuilder.append("KW2188 : 'KW' '2188';\n"); - grammarBuilder.append("KW2189 : 'KW' '2189';\n"); - grammarBuilder.append("KW2190 : 'KW' '2190';\n"); - grammarBuilder.append("KW2191 : 'KW' '2191';\n"); - grammarBuilder.append("KW2192 : 'KW' '2192';\n"); - grammarBuilder.append("KW2193 : 'KW' '2193';\n"); - grammarBuilder.append("KW2194 : 'KW' '2194';\n"); - grammarBuilder.append("KW2195 : 'KW' '2195';\n"); - grammarBuilder.append("KW2196 : 'KW' '2196';\n"); - grammarBuilder.append("KW2197 : 'KW' '2197';\n"); - grammarBuilder.append("KW2198 : 'KW' '2198';\n"); - grammarBuilder.append("KW2199 : 'KW' '2199';\n"); - grammarBuilder.append("KW2200 : 'KW' '2200';\n"); - grammarBuilder.append("KW2201 : 'KW' '2201';\n"); - grammarBuilder.append("KW2202 : 'KW' '2202';\n"); - grammarBuilder.append("KW2203 : 'KW' '2203';\n"); - grammarBuilder.append("KW2204 : 'KW' '2204';\n"); - grammarBuilder.append("KW2205 : 'KW' '2205';\n"); - grammarBuilder.append("KW2206 : 'KW' '2206';\n"); - grammarBuilder.append("KW2207 : 'KW' '2207';\n"); - grammarBuilder.append("KW2208 : 'KW' '2208';\n"); - grammarBuilder.append("KW2209 : 'KW' '2209';\n"); - grammarBuilder.append("KW2210 : 'KW' '2210';\n"); - grammarBuilder.append("KW2211 : 'KW' '2211';\n"); - grammarBuilder.append("KW2212 : 'KW' '2212';\n"); - grammarBuilder.append("KW2213 : 'KW' '2213';\n"); - grammarBuilder.append("KW2214 : 'KW' '2214';\n"); - grammarBuilder.append("KW2215 : 'KW' '2215';\n"); - grammarBuilder.append("KW2216 : 'KW' '2216';\n"); - grammarBuilder.append("KW2217 : 'KW' '2217';\n"); - grammarBuilder.append("KW2218 : 'KW' '2218';\n"); - grammarBuilder.append("KW2219 : 'KW' '2219';\n"); - grammarBuilder.append("KW2220 : 'KW' '2220';\n"); - grammarBuilder.append("KW2221 : 'KW' '2221';\n"); - grammarBuilder.append("KW2222 : 'KW' '2222';\n"); - grammarBuilder.append("KW2223 : 'KW' '2223';\n"); - grammarBuilder.append("KW2224 : 'KW' '2224';\n"); - grammarBuilder.append("KW2225 : 'KW' '2225';\n"); - grammarBuilder.append("KW2226 : 'KW' '2226';\n"); - grammarBuilder.append("KW2227 : 'KW' '2227';\n"); - grammarBuilder.append("KW2228 : 'KW' '2228';\n"); - grammarBuilder.append("KW2229 : 'KW' '2229';\n"); - grammarBuilder.append("KW2230 : 'KW' '2230';\n"); - grammarBuilder.append("KW2231 : 'KW' '2231';\n"); - grammarBuilder.append("KW2232 : 'KW' '2232';\n"); - grammarBuilder.append("KW2233 : 'KW' '2233';\n"); - grammarBuilder.append("KW2234 : 'KW' '2234';\n"); - grammarBuilder.append("KW2235 : 'KW' '2235';\n"); - grammarBuilder.append("KW2236 : 'KW' '2236';\n"); - grammarBuilder.append("KW2237 : 'KW' '2237';\n"); - grammarBuilder.append("KW2238 : 'KW' '2238';\n"); - grammarBuilder.append("KW2239 : 'KW' '2239';\n"); - grammarBuilder.append("KW2240 : 'KW' '2240';\n"); - grammarBuilder.append("KW2241 : 'KW' '2241';\n"); - grammarBuilder.append("KW2242 : 'KW' '2242';\n"); - grammarBuilder.append("KW2243 : 'KW' '2243';\n"); - grammarBuilder.append("KW2244 : 'KW' '2244';\n"); - grammarBuilder.append("KW2245 : 'KW' '2245';\n"); - grammarBuilder.append("KW2246 : 'KW' '2246';\n"); - grammarBuilder.append("KW2247 : 'KW' '2247';\n"); - grammarBuilder.append("KW2248 : 'KW' '2248';\n"); - grammarBuilder.append("KW2249 : 'KW' '2249';\n"); - grammarBuilder.append("KW2250 : 'KW' '2250';\n"); - grammarBuilder.append("KW2251 : 'KW' '2251';\n"); - grammarBuilder.append("KW2252 : 'KW' '2252';\n"); - grammarBuilder.append("KW2253 : 'KW' '2253';\n"); - grammarBuilder.append("KW2254 : 'KW' '2254';\n"); - grammarBuilder.append("KW2255 : 'KW' '2255';\n"); - grammarBuilder.append("KW2256 : 'KW' '2256';\n"); - grammarBuilder.append("KW2257 : 'KW' '2257';\n"); - grammarBuilder.append("KW2258 : 'KW' '2258';\n"); - grammarBuilder.append("KW2259 : 'KW' '2259';\n"); - grammarBuilder.append("KW2260 : 'KW' '2260';\n"); - grammarBuilder.append("KW2261 : 'KW' '2261';\n"); - grammarBuilder.append("KW2262 : 'KW' '2262';\n"); - grammarBuilder.append("KW2263 : 'KW' '2263';\n"); - grammarBuilder.append("KW2264 : 'KW' '2264';\n"); - grammarBuilder.append("KW2265 : 'KW' '2265';\n"); - grammarBuilder.append("KW2266 : 'KW' '2266';\n"); - grammarBuilder.append("KW2267 : 'KW' '2267';\n"); - grammarBuilder.append("KW2268 : 'KW' '2268';\n"); - grammarBuilder.append("KW2269 : 'KW' '2269';\n"); - grammarBuilder.append("KW2270 : 'KW' '2270';\n"); - grammarBuilder.append("KW2271 : 'KW' '2271';\n"); - grammarBuilder.append("KW2272 : 'KW' '2272';\n"); - grammarBuilder.append("KW2273 : 'KW' '2273';\n"); - grammarBuilder.append("KW2274 : 'KW' '2274';\n"); - grammarBuilder.append("KW2275 : 'KW' '2275';\n"); - grammarBuilder.append("KW2276 : 'KW' '2276';\n"); - grammarBuilder.append("KW2277 : 'KW' '2277';\n"); - grammarBuilder.append("KW2278 : 'KW' '2278';\n"); - grammarBuilder.append("KW2279 : 'KW' '2279';\n"); - grammarBuilder.append("KW2280 : 'KW' '2280';\n"); - grammarBuilder.append("KW2281 : 'KW' '2281';\n"); - grammarBuilder.append("KW2282 : 'KW' '2282';\n"); - grammarBuilder.append("KW2283 : 'KW' '2283';\n"); - grammarBuilder.append("KW2284 : 'KW' '2284';\n"); - grammarBuilder.append("KW2285 : 'KW' '2285';\n"); - grammarBuilder.append("KW2286 : 'KW' '2286';\n"); - grammarBuilder.append("KW2287 : 'KW' '2287';\n"); - grammarBuilder.append("KW2288 : 'KW' '2288';\n"); - grammarBuilder.append("KW2289 : 'KW' '2289';\n"); - grammarBuilder.append("KW2290 : 'KW' '2290';\n"); - grammarBuilder.append("KW2291 : 'KW' '2291';\n"); - grammarBuilder.append("KW2292 : 'KW' '2292';\n"); - grammarBuilder.append("KW2293 : 'KW' '2293';\n"); - grammarBuilder.append("KW2294 : 'KW' '2294';\n"); - grammarBuilder.append("KW2295 : 'KW' '2295';\n"); - grammarBuilder.append("KW2296 : 'KW' '2296';\n"); - grammarBuilder.append("KW2297 : 'KW' '2297';\n"); - grammarBuilder.append("KW2298 : 'KW' '2298';\n"); - grammarBuilder.append("KW2299 : 'KW' '2299';\n"); - grammarBuilder.append("KW2300 : 'KW' '2300';\n"); - grammarBuilder.append("KW2301 : 'KW' '2301';\n"); - grammarBuilder.append("KW2302 : 'KW' '2302';\n"); - grammarBuilder.append("KW2303 : 'KW' '2303';\n"); - grammarBuilder.append("KW2304 : 'KW' '2304';\n"); - grammarBuilder.append("KW2305 : 'KW' '2305';\n"); - grammarBuilder.append("KW2306 : 'KW' '2306';\n"); - grammarBuilder.append("KW2307 : 'KW' '2307';\n"); - grammarBuilder.append("KW2308 : 'KW' '2308';\n"); - grammarBuilder.append("KW2309 : 'KW' '2309';\n"); - grammarBuilder.append("KW2310 : 'KW' '2310';\n"); - grammarBuilder.append("KW2311 : 'KW' '2311';\n"); - grammarBuilder.append("KW2312 : 'KW' '2312';\n"); - grammarBuilder.append("KW2313 : 'KW' '2313';\n"); - grammarBuilder.append("KW2314 : 'KW' '2314';\n"); - grammarBuilder.append("KW2315 : 'KW' '2315';\n"); - grammarBuilder.append("KW2316 : 'KW' '2316';\n"); - grammarBuilder.append("KW2317 : 'KW' '2317';\n"); - grammarBuilder.append("KW2318 : 'KW' '2318';\n"); - grammarBuilder.append("KW2319 : 'KW' '2319';\n"); - grammarBuilder.append("KW2320 : 'KW' '2320';\n"); - grammarBuilder.append("KW2321 : 'KW' '2321';\n"); - grammarBuilder.append("KW2322 : 'KW' '2322';\n"); - grammarBuilder.append("KW2323 : 'KW' '2323';\n"); - grammarBuilder.append("KW2324 : 'KW' '2324';\n"); - grammarBuilder.append("KW2325 : 'KW' '2325';\n"); - grammarBuilder.append("KW2326 : 'KW' '2326';\n"); - grammarBuilder.append("KW2327 : 'KW' '2327';\n"); - grammarBuilder.append("KW2328 : 'KW' '2328';\n"); - grammarBuilder.append("KW2329 : 'KW' '2329';\n"); - grammarBuilder.append("KW2330 : 'KW' '2330';\n"); - grammarBuilder.append("KW2331 : 'KW' '2331';\n"); - grammarBuilder.append("KW2332 : 'KW' '2332';\n"); - grammarBuilder.append("KW2333 : 'KW' '2333';\n"); - grammarBuilder.append("KW2334 : 'KW' '2334';\n"); - grammarBuilder.append("KW2335 : 'KW' '2335';\n"); - grammarBuilder.append("KW2336 : 'KW' '2336';\n"); - grammarBuilder.append("KW2337 : 'KW' '2337';\n"); - grammarBuilder.append("KW2338 : 'KW' '2338';\n"); - grammarBuilder.append("KW2339 : 'KW' '2339';\n"); - grammarBuilder.append("KW2340 : 'KW' '2340';\n"); - grammarBuilder.append("KW2341 : 'KW' '2341';\n"); - grammarBuilder.append("KW2342 : 'KW' '2342';\n"); - grammarBuilder.append("KW2343 : 'KW' '2343';\n"); - grammarBuilder.append("KW2344 : 'KW' '2344';\n"); - grammarBuilder.append("KW2345 : 'KW' '2345';\n"); - grammarBuilder.append("KW2346 : 'KW' '2346';\n"); - grammarBuilder.append("KW2347 : 'KW' '2347';\n"); - grammarBuilder.append("KW2348 : 'KW' '2348';\n"); - grammarBuilder.append("KW2349 : 'KW' '2349';\n"); - grammarBuilder.append("KW2350 : 'KW' '2350';\n"); - grammarBuilder.append("KW2351 : 'KW' '2351';\n"); - grammarBuilder.append("KW2352 : 'KW' '2352';\n"); - grammarBuilder.append("KW2353 : 'KW' '2353';\n"); - grammarBuilder.append("KW2354 : 'KW' '2354';\n"); - grammarBuilder.append("KW2355 : 'KW' '2355';\n"); - grammarBuilder.append("KW2356 : 'KW' '2356';\n"); - grammarBuilder.append("KW2357 : 'KW' '2357';\n"); - grammarBuilder.append("KW2358 : 'KW' '2358';\n"); - grammarBuilder.append("KW2359 : 'KW' '2359';\n"); - grammarBuilder.append("KW2360 : 'KW' '2360';\n"); - grammarBuilder.append("KW2361 : 'KW' '2361';\n"); - grammarBuilder.append("KW2362 : 'KW' '2362';\n"); - grammarBuilder.append("KW2363 : 'KW' '2363';\n"); - grammarBuilder.append("KW2364 : 'KW' '2364';\n"); - grammarBuilder.append("KW2365 : 'KW' '2365';\n"); - grammarBuilder.append("KW2366 : 'KW' '2366';\n"); - grammarBuilder.append("KW2367 : 'KW' '2367';\n"); - grammarBuilder.append("KW2368 : 'KW' '2368';\n"); - grammarBuilder.append("KW2369 : 'KW' '2369';\n"); - grammarBuilder.append("KW2370 : 'KW' '2370';\n"); - grammarBuilder.append("KW2371 : 'KW' '2371';\n"); - grammarBuilder.append("KW2372 : 'KW' '2372';\n"); - grammarBuilder.append("KW2373 : 'KW' '2373';\n"); - grammarBuilder.append("KW2374 : 'KW' '2374';\n"); - grammarBuilder.append("KW2375 : 'KW' '2375';\n"); - grammarBuilder.append("KW2376 : 'KW' '2376';\n"); - grammarBuilder.append("KW2377 : 'KW' '2377';\n"); - grammarBuilder.append("KW2378 : 'KW' '2378';\n"); - grammarBuilder.append("KW2379 : 'KW' '2379';\n"); - grammarBuilder.append("KW2380 : 'KW' '2380';\n"); - grammarBuilder.append("KW2381 : 'KW' '2381';\n"); - grammarBuilder.append("KW2382 : 'KW' '2382';\n"); - grammarBuilder.append("KW2383 : 'KW' '2383';\n"); - grammarBuilder.append("KW2384 : 'KW' '2384';\n"); - grammarBuilder.append("KW2385 : 'KW' '2385';\n"); - grammarBuilder.append("KW2386 : 'KW' '2386';\n"); - grammarBuilder.append("KW2387 : 'KW' '2387';\n"); - grammarBuilder.append("KW2388 : 'KW' '2388';\n"); - grammarBuilder.append("KW2389 : 'KW' '2389';\n"); - grammarBuilder.append("KW2390 : 'KW' '2390';\n"); - grammarBuilder.append("KW2391 : 'KW' '2391';\n"); - grammarBuilder.append("KW2392 : 'KW' '2392';\n"); - grammarBuilder.append("KW2393 : 'KW' '2393';\n"); - grammarBuilder.append("KW2394 : 'KW' '2394';\n"); - grammarBuilder.append("KW2395 : 'KW' '2395';\n"); - grammarBuilder.append("KW2396 : 'KW' '2396';\n"); - grammarBuilder.append("KW2397 : 'KW' '2397';\n"); - grammarBuilder.append("KW2398 : 'KW' '2398';\n"); - grammarBuilder.append("KW2399 : 'KW' '2399';\n"); - grammarBuilder.append("KW2400 : 'KW' '2400';\n"); - grammarBuilder.append("KW2401 : 'KW' '2401';\n"); - grammarBuilder.append("KW2402 : 'KW' '2402';\n"); - grammarBuilder.append("KW2403 : 'KW' '2403';\n"); - grammarBuilder.append("KW2404 : 'KW' '2404';\n"); - grammarBuilder.append("KW2405 : 'KW' '2405';\n"); - grammarBuilder.append("KW2406 : 'KW' '2406';\n"); - grammarBuilder.append("KW2407 : 'KW' '2407';\n"); - grammarBuilder.append("KW2408 : 'KW' '2408';\n"); - grammarBuilder.append("KW2409 : 'KW' '2409';\n"); - grammarBuilder.append("KW2410 : 'KW' '2410';\n"); - grammarBuilder.append("KW2411 : 'KW' '2411';\n"); - grammarBuilder.append("KW2412 : 'KW' '2412';\n"); - grammarBuilder.append("KW2413 : 'KW' '2413';\n"); - grammarBuilder.append("KW2414 : 'KW' '2414';\n"); - grammarBuilder.append("KW2415 : 'KW' '2415';\n"); - grammarBuilder.append("KW2416 : 'KW' '2416';\n"); - grammarBuilder.append("KW2417 : 'KW' '2417';\n"); - grammarBuilder.append("KW2418 : 'KW' '2418';\n"); - grammarBuilder.append("KW2419 : 'KW' '2419';\n"); - grammarBuilder.append("KW2420 : 'KW' '2420';\n"); - grammarBuilder.append("KW2421 : 'KW' '2421';\n"); - grammarBuilder.append("KW2422 : 'KW' '2422';\n"); - grammarBuilder.append("KW2423 : 'KW' '2423';\n"); - grammarBuilder.append("KW2424 : 'KW' '2424';\n"); - grammarBuilder.append("KW2425 : 'KW' '2425';\n"); - grammarBuilder.append("KW2426 : 'KW' '2426';\n"); - grammarBuilder.append("KW2427 : 'KW' '2427';\n"); - grammarBuilder.append("KW2428 : 'KW' '2428';\n"); - grammarBuilder.append("KW2429 : 'KW' '2429';\n"); - grammarBuilder.append("KW2430 : 'KW' '2430';\n"); - grammarBuilder.append("KW2431 : 'KW' '2431';\n"); - grammarBuilder.append("KW2432 : 'KW' '2432';\n"); - grammarBuilder.append("KW2433 : 'KW' '2433';\n"); - grammarBuilder.append("KW2434 : 'KW' '2434';\n"); - grammarBuilder.append("KW2435 : 'KW' '2435';\n"); - grammarBuilder.append("KW2436 : 'KW' '2436';\n"); - grammarBuilder.append("KW2437 : 'KW' '2437';\n"); - grammarBuilder.append("KW2438 : 'KW' '2438';\n"); - grammarBuilder.append("KW2439 : 'KW' '2439';\n"); - grammarBuilder.append("KW2440 : 'KW' '2440';\n"); - grammarBuilder.append("KW2441 : 'KW' '2441';\n"); - grammarBuilder.append("KW2442 : 'KW' '2442';\n"); - grammarBuilder.append("KW2443 : 'KW' '2443';\n"); - grammarBuilder.append("KW2444 : 'KW' '2444';\n"); - grammarBuilder.append("KW2445 : 'KW' '2445';\n"); - grammarBuilder.append("KW2446 : 'KW' '2446';\n"); - grammarBuilder.append("KW2447 : 'KW' '2447';\n"); - grammarBuilder.append("KW2448 : 'KW' '2448';\n"); - grammarBuilder.append("KW2449 : 'KW' '2449';\n"); - grammarBuilder.append("KW2450 : 'KW' '2450';\n"); - grammarBuilder.append("KW2451 : 'KW' '2451';\n"); - grammarBuilder.append("KW2452 : 'KW' '2452';\n"); - grammarBuilder.append("KW2453 : 'KW' '2453';\n"); - grammarBuilder.append("KW2454 : 'KW' '2454';\n"); - grammarBuilder.append("KW2455 : 'KW' '2455';\n"); - grammarBuilder.append("KW2456 : 'KW' '2456';\n"); - grammarBuilder.append("KW2457 : 'KW' '2457';\n"); - grammarBuilder.append("KW2458 : 'KW' '2458';\n"); - grammarBuilder.append("KW2459 : 'KW' '2459';\n"); - grammarBuilder.append("KW2460 : 'KW' '2460';\n"); - grammarBuilder.append("KW2461 : 'KW' '2461';\n"); - grammarBuilder.append("KW2462 : 'KW' '2462';\n"); - grammarBuilder.append("KW2463 : 'KW' '2463';\n"); - grammarBuilder.append("KW2464 : 'KW' '2464';\n"); - grammarBuilder.append("KW2465 : 'KW' '2465';\n"); - grammarBuilder.append("KW2466 : 'KW' '2466';\n"); - grammarBuilder.append("KW2467 : 'KW' '2467';\n"); - grammarBuilder.append("KW2468 : 'KW' '2468';\n"); - grammarBuilder.append("KW2469 : 'KW' '2469';\n"); - grammarBuilder.append("KW2470 : 'KW' '2470';\n"); - grammarBuilder.append("KW2471 : 'KW' '2471';\n"); - grammarBuilder.append("KW2472 : 'KW' '2472';\n"); - grammarBuilder.append("KW2473 : 'KW' '2473';\n"); - grammarBuilder.append("KW2474 : 'KW' '2474';\n"); - grammarBuilder.append("KW2475 : 'KW' '2475';\n"); - grammarBuilder.append("KW2476 : 'KW' '2476';\n"); - grammarBuilder.append("KW2477 : 'KW' '2477';\n"); - grammarBuilder.append("KW2478 : 'KW' '2478';\n"); - grammarBuilder.append("KW2479 : 'KW' '2479';\n"); - grammarBuilder.append("KW2480 : 'KW' '2480';\n"); - grammarBuilder.append("KW2481 : 'KW' '2481';\n"); - grammarBuilder.append("KW2482 : 'KW' '2482';\n"); - grammarBuilder.append("KW2483 : 'KW' '2483';\n"); - grammarBuilder.append("KW2484 : 'KW' '2484';\n"); - grammarBuilder.append("KW2485 : 'KW' '2485';\n"); - grammarBuilder.append("KW2486 : 'KW' '2486';\n"); - grammarBuilder.append("KW2487 : 'KW' '2487';\n"); - grammarBuilder.append("KW2488 : 'KW' '2488';\n"); - grammarBuilder.append("KW2489 : 'KW' '2489';\n"); - grammarBuilder.append("KW2490 : 'KW' '2490';\n"); - grammarBuilder.append("KW2491 : 'KW' '2491';\n"); - grammarBuilder.append("KW2492 : 'KW' '2492';\n"); - grammarBuilder.append("KW2493 : 'KW' '2493';\n"); - grammarBuilder.append("KW2494 : 'KW' '2494';\n"); - grammarBuilder.append("KW2495 : 'KW' '2495';\n"); - grammarBuilder.append("KW2496 : 'KW' '2496';\n"); - grammarBuilder.append("KW2497 : 'KW' '2497';\n"); - grammarBuilder.append("KW2498 : 'KW' '2498';\n"); - grammarBuilder.append("KW2499 : 'KW' '2499';\n"); - grammarBuilder.append("KW2500 : 'KW' '2500';\n"); - grammarBuilder.append("KW2501 : 'KW' '2501';\n"); - grammarBuilder.append("KW2502 : 'KW' '2502';\n"); - grammarBuilder.append("KW2503 : 'KW' '2503';\n"); - grammarBuilder.append("KW2504 : 'KW' '2504';\n"); - grammarBuilder.append("KW2505 : 'KW' '2505';\n"); - grammarBuilder.append("KW2506 : 'KW' '2506';\n"); - grammarBuilder.append("KW2507 : 'KW' '2507';\n"); - grammarBuilder.append("KW2508 : 'KW' '2508';\n"); - grammarBuilder.append("KW2509 : 'KW' '2509';\n"); - grammarBuilder.append("KW2510 : 'KW' '2510';\n"); - grammarBuilder.append("KW2511 : 'KW' '2511';\n"); - grammarBuilder.append("KW2512 : 'KW' '2512';\n"); - grammarBuilder.append("KW2513 : 'KW' '2513';\n"); - grammarBuilder.append("KW2514 : 'KW' '2514';\n"); - grammarBuilder.append("KW2515 : 'KW' '2515';\n"); - grammarBuilder.append("KW2516 : 'KW' '2516';\n"); - grammarBuilder.append("KW2517 : 'KW' '2517';\n"); - grammarBuilder.append("KW2518 : 'KW' '2518';\n"); - grammarBuilder.append("KW2519 : 'KW' '2519';\n"); - grammarBuilder.append("KW2520 : 'KW' '2520';\n"); - grammarBuilder.append("KW2521 : 'KW' '2521';\n"); - grammarBuilder.append("KW2522 : 'KW' '2522';\n"); - grammarBuilder.append("KW2523 : 'KW' '2523';\n"); - grammarBuilder.append("KW2524 : 'KW' '2524';\n"); - grammarBuilder.append("KW2525 : 'KW' '2525';\n"); - grammarBuilder.append("KW2526 : 'KW' '2526';\n"); - grammarBuilder.append("KW2527 : 'KW' '2527';\n"); - grammarBuilder.append("KW2528 : 'KW' '2528';\n"); - grammarBuilder.append("KW2529 : 'KW' '2529';\n"); - grammarBuilder.append("KW2530 : 'KW' '2530';\n"); - grammarBuilder.append("KW2531 : 'KW' '2531';\n"); - grammarBuilder.append("KW2532 : 'KW' '2532';\n"); - grammarBuilder.append("KW2533 : 'KW' '2533';\n"); - grammarBuilder.append("KW2534 : 'KW' '2534';\n"); - grammarBuilder.append("KW2535 : 'KW' '2535';\n"); - grammarBuilder.append("KW2536 : 'KW' '2536';\n"); - grammarBuilder.append("KW2537 : 'KW' '2537';\n"); - grammarBuilder.append("KW2538 : 'KW' '2538';\n"); - grammarBuilder.append("KW2539 : 'KW' '2539';\n"); - grammarBuilder.append("KW2540 : 'KW' '2540';\n"); - grammarBuilder.append("KW2541 : 'KW' '2541';\n"); - grammarBuilder.append("KW2542 : 'KW' '2542';\n"); - grammarBuilder.append("KW2543 : 'KW' '2543';\n"); - grammarBuilder.append("KW2544 : 'KW' '2544';\n"); - grammarBuilder.append("KW2545 : 'KW' '2545';\n"); - grammarBuilder.append("KW2546 : 'KW' '2546';\n"); - grammarBuilder.append("KW2547 : 'KW' '2547';\n"); - grammarBuilder.append("KW2548 : 'KW' '2548';\n"); - grammarBuilder.append("KW2549 : 'KW' '2549';\n"); - grammarBuilder.append("KW2550 : 'KW' '2550';\n"); - grammarBuilder.append("KW2551 : 'KW' '2551';\n"); - grammarBuilder.append("KW2552 : 'KW' '2552';\n"); - grammarBuilder.append("KW2553 : 'KW' '2553';\n"); - grammarBuilder.append("KW2554 : 'KW' '2554';\n"); - grammarBuilder.append("KW2555 : 'KW' '2555';\n"); - grammarBuilder.append("KW2556 : 'KW' '2556';\n"); - grammarBuilder.append("KW2557 : 'KW' '2557';\n"); - grammarBuilder.append("KW2558 : 'KW' '2558';\n"); - grammarBuilder.append("KW2559 : 'KW' '2559';\n"); - grammarBuilder.append("KW2560 : 'KW' '2560';\n"); - grammarBuilder.append("KW2561 : 'KW' '2561';\n"); - grammarBuilder.append("KW2562 : 'KW' '2562';\n"); - grammarBuilder.append("KW2563 : 'KW' '2563';\n"); - grammarBuilder.append("KW2564 : 'KW' '2564';\n"); - grammarBuilder.append("KW2565 : 'KW' '2565';\n"); - grammarBuilder.append("KW2566 : 'KW' '2566';\n"); - grammarBuilder.append("KW2567 : 'KW' '2567';\n"); - grammarBuilder.append("KW2568 : 'KW' '2568';\n"); - grammarBuilder.append("KW2569 : 'KW' '2569';\n"); - grammarBuilder.append("KW2570 : 'KW' '2570';\n"); - grammarBuilder.append("KW2571 : 'KW' '2571';\n"); - grammarBuilder.append("KW2572 : 'KW' '2572';\n"); - grammarBuilder.append("KW2573 : 'KW' '2573';\n"); - grammarBuilder.append("KW2574 : 'KW' '2574';\n"); - grammarBuilder.append("KW2575 : 'KW' '2575';\n"); - grammarBuilder.append("KW2576 : 'KW' '2576';\n"); - grammarBuilder.append("KW2577 : 'KW' '2577';\n"); - grammarBuilder.append("KW2578 : 'KW' '2578';\n"); - grammarBuilder.append("KW2579 : 'KW' '2579';\n"); - grammarBuilder.append("KW2580 : 'KW' '2580';\n"); - grammarBuilder.append("KW2581 : 'KW' '2581';\n"); - grammarBuilder.append("KW2582 : 'KW' '2582';\n"); - grammarBuilder.append("KW2583 : 'KW' '2583';\n"); - grammarBuilder.append("KW2584 : 'KW' '2584';\n"); - grammarBuilder.append("KW2585 : 'KW' '2585';\n"); - grammarBuilder.append("KW2586 : 'KW' '2586';\n"); - grammarBuilder.append("KW2587 : 'KW' '2587';\n"); - grammarBuilder.append("KW2588 : 'KW' '2588';\n"); - grammarBuilder.append("KW2589 : 'KW' '2589';\n"); - grammarBuilder.append("KW2590 : 'KW' '2590';\n"); - grammarBuilder.append("KW2591 : 'KW' '2591';\n"); - grammarBuilder.append("KW2592 : 'KW' '2592';\n"); - grammarBuilder.append("KW2593 : 'KW' '2593';\n"); - grammarBuilder.append("KW2594 : 'KW' '2594';\n"); - grammarBuilder.append("KW2595 : 'KW' '2595';\n"); - grammarBuilder.append("KW2596 : 'KW' '2596';\n"); - grammarBuilder.append("KW2597 : 'KW' '2597';\n"); - grammarBuilder.append("KW2598 : 'KW' '2598';\n"); - grammarBuilder.append("KW2599 : 'KW' '2599';\n"); - grammarBuilder.append("KW2600 : 'KW' '2600';\n"); - grammarBuilder.append("KW2601 : 'KW' '2601';\n"); - grammarBuilder.append("KW2602 : 'KW' '2602';\n"); - grammarBuilder.append("KW2603 : 'KW' '2603';\n"); - grammarBuilder.append("KW2604 : 'KW' '2604';\n"); - grammarBuilder.append("KW2605 : 'KW' '2605';\n"); - grammarBuilder.append("KW2606 : 'KW' '2606';\n"); - grammarBuilder.append("KW2607 : 'KW' '2607';\n"); - grammarBuilder.append("KW2608 : 'KW' '2608';\n"); - grammarBuilder.append("KW2609 : 'KW' '2609';\n"); - grammarBuilder.append("KW2610 : 'KW' '2610';\n"); - grammarBuilder.append("KW2611 : 'KW' '2611';\n"); - grammarBuilder.append("KW2612 : 'KW' '2612';\n"); - grammarBuilder.append("KW2613 : 'KW' '2613';\n"); - grammarBuilder.append("KW2614 : 'KW' '2614';\n"); - grammarBuilder.append("KW2615 : 'KW' '2615';\n"); - grammarBuilder.append("KW2616 : 'KW' '2616';\n"); - grammarBuilder.append("KW2617 : 'KW' '2617';\n"); - grammarBuilder.append("KW2618 : 'KW' '2618';\n"); - grammarBuilder.append("KW2619 : 'KW' '2619';\n"); - grammarBuilder.append("KW2620 : 'KW' '2620';\n"); - grammarBuilder.append("KW2621 : 'KW' '2621';\n"); - grammarBuilder.append("KW2622 : 'KW' '2622';\n"); - grammarBuilder.append("KW2623 : 'KW' '2623';\n"); - grammarBuilder.append("KW2624 : 'KW' '2624';\n"); - grammarBuilder.append("KW2625 : 'KW' '2625';\n"); - grammarBuilder.append("KW2626 : 'KW' '2626';\n"); - grammarBuilder.append("KW2627 : 'KW' '2627';\n"); - grammarBuilder.append("KW2628 : 'KW' '2628';\n"); - grammarBuilder.append("KW2629 : 'KW' '2629';\n"); - grammarBuilder.append("KW2630 : 'KW' '2630';\n"); - grammarBuilder.append("KW2631 : 'KW' '2631';\n"); - grammarBuilder.append("KW2632 : 'KW' '2632';\n"); - grammarBuilder.append("KW2633 : 'KW' '2633';\n"); - grammarBuilder.append("KW2634 : 'KW' '2634';\n"); - grammarBuilder.append("KW2635 : 'KW' '2635';\n"); - grammarBuilder.append("KW2636 : 'KW' '2636';\n"); - grammarBuilder.append("KW2637 : 'KW' '2637';\n"); - grammarBuilder.append("KW2638 : 'KW' '2638';\n"); - grammarBuilder.append("KW2639 : 'KW' '2639';\n"); - grammarBuilder.append("KW2640 : 'KW' '2640';\n"); - grammarBuilder.append("KW2641 : 'KW' '2641';\n"); - grammarBuilder.append("KW2642 : 'KW' '2642';\n"); - grammarBuilder.append("KW2643 : 'KW' '2643';\n"); - grammarBuilder.append("KW2644 : 'KW' '2644';\n"); - grammarBuilder.append("KW2645 : 'KW' '2645';\n"); - grammarBuilder.append("KW2646 : 'KW' '2646';\n"); - grammarBuilder.append("KW2647 : 'KW' '2647';\n"); - grammarBuilder.append("KW2648 : 'KW' '2648';\n"); - grammarBuilder.append("KW2649 : 'KW' '2649';\n"); - grammarBuilder.append("KW2650 : 'KW' '2650';\n"); - grammarBuilder.append("KW2651 : 'KW' '2651';\n"); - grammarBuilder.append("KW2652 : 'KW' '2652';\n"); - grammarBuilder.append("KW2653 : 'KW' '2653';\n"); - grammarBuilder.append("KW2654 : 'KW' '2654';\n"); - grammarBuilder.append("KW2655 : 'KW' '2655';\n"); - grammarBuilder.append("KW2656 : 'KW' '2656';\n"); - grammarBuilder.append("KW2657 : 'KW' '2657';\n"); - grammarBuilder.append("KW2658 : 'KW' '2658';\n"); - grammarBuilder.append("KW2659 : 'KW' '2659';\n"); - grammarBuilder.append("KW2660 : 'KW' '2660';\n"); - grammarBuilder.append("KW2661 : 'KW' '2661';\n"); - grammarBuilder.append("KW2662 : 'KW' '2662';\n"); - grammarBuilder.append("KW2663 : 'KW' '2663';\n"); - grammarBuilder.append("KW2664 : 'KW' '2664';\n"); - grammarBuilder.append("KW2665 : 'KW' '2665';\n"); - grammarBuilder.append("KW2666 : 'KW' '2666';\n"); - grammarBuilder.append("KW2667 : 'KW' '2667';\n"); - grammarBuilder.append("KW2668 : 'KW' '2668';\n"); - grammarBuilder.append("KW2669 : 'KW' '2669';\n"); - grammarBuilder.append("KW2670 : 'KW' '2670';\n"); - grammarBuilder.append("KW2671 : 'KW' '2671';\n"); - grammarBuilder.append("KW2672 : 'KW' '2672';\n"); - grammarBuilder.append("KW2673 : 'KW' '2673';\n"); - grammarBuilder.append("KW2674 : 'KW' '2674';\n"); - grammarBuilder.append("KW2675 : 'KW' '2675';\n"); - grammarBuilder.append("KW2676 : 'KW' '2676';\n"); - grammarBuilder.append("KW2677 : 'KW' '2677';\n"); - grammarBuilder.append("KW2678 : 'KW' '2678';\n"); - grammarBuilder.append("KW2679 : 'KW' '2679';\n"); - grammarBuilder.append("KW2680 : 'KW' '2680';\n"); - grammarBuilder.append("KW2681 : 'KW' '2681';\n"); - grammarBuilder.append("KW2682 : 'KW' '2682';\n"); - grammarBuilder.append("KW2683 : 'KW' '2683';\n"); - grammarBuilder.append("KW2684 : 'KW' '2684';\n"); - grammarBuilder.append("KW2685 : 'KW' '2685';\n"); - grammarBuilder.append("KW2686 : 'KW' '2686';\n"); - grammarBuilder.append("KW2687 : 'KW' '2687';\n"); - grammarBuilder.append("KW2688 : 'KW' '2688';\n"); - grammarBuilder.append("KW2689 : 'KW' '2689';\n"); - grammarBuilder.append("KW2690 : 'KW' '2690';\n"); - grammarBuilder.append("KW2691 : 'KW' '2691';\n"); - grammarBuilder.append("KW2692 : 'KW' '2692';\n"); - grammarBuilder.append("KW2693 : 'KW' '2693';\n"); - grammarBuilder.append("KW2694 : 'KW' '2694';\n"); - grammarBuilder.append("KW2695 : 'KW' '2695';\n"); - grammarBuilder.append("KW2696 : 'KW' '2696';\n"); - grammarBuilder.append("KW2697 : 'KW' '2697';\n"); - grammarBuilder.append("KW2698 : 'KW' '2698';\n"); - grammarBuilder.append("KW2699 : 'KW' '2699';\n"); - grammarBuilder.append("KW2700 : 'KW' '2700';\n"); - grammarBuilder.append("KW2701 : 'KW' '2701';\n"); - grammarBuilder.append("KW2702 : 'KW' '2702';\n"); - grammarBuilder.append("KW2703 : 'KW' '2703';\n"); - grammarBuilder.append("KW2704 : 'KW' '2704';\n"); - grammarBuilder.append("KW2705 : 'KW' '2705';\n"); - grammarBuilder.append("KW2706 : 'KW' '2706';\n"); - grammarBuilder.append("KW2707 : 'KW' '2707';\n"); - grammarBuilder.append("KW2708 : 'KW' '2708';\n"); - grammarBuilder.append("KW2709 : 'KW' '2709';\n"); - grammarBuilder.append("KW2710 : 'KW' '2710';\n"); - grammarBuilder.append("KW2711 : 'KW' '2711';\n"); - grammarBuilder.append("KW2712 : 'KW' '2712';\n"); - grammarBuilder.append("KW2713 : 'KW' '2713';\n"); - grammarBuilder.append("KW2714 : 'KW' '2714';\n"); - grammarBuilder.append("KW2715 : 'KW' '2715';\n"); - grammarBuilder.append("KW2716 : 'KW' '2716';\n"); - grammarBuilder.append("KW2717 : 'KW' '2717';\n"); - grammarBuilder.append("KW2718 : 'KW' '2718';\n"); - grammarBuilder.append("KW2719 : 'KW' '2719';\n"); - grammarBuilder.append("KW2720 : 'KW' '2720';\n"); - grammarBuilder.append("KW2721 : 'KW' '2721';\n"); - grammarBuilder.append("KW2722 : 'KW' '2722';\n"); - grammarBuilder.append("KW2723 : 'KW' '2723';\n"); - grammarBuilder.append("KW2724 : 'KW' '2724';\n"); - grammarBuilder.append("KW2725 : 'KW' '2725';\n"); - grammarBuilder.append("KW2726 : 'KW' '2726';\n"); - grammarBuilder.append("KW2727 : 'KW' '2727';\n"); - grammarBuilder.append("KW2728 : 'KW' '2728';\n"); - grammarBuilder.append("KW2729 : 'KW' '2729';\n"); - grammarBuilder.append("KW2730 : 'KW' '2730';\n"); - grammarBuilder.append("KW2731 : 'KW' '2731';\n"); - grammarBuilder.append("KW2732 : 'KW' '2732';\n"); - grammarBuilder.append("KW2733 : 'KW' '2733';\n"); - grammarBuilder.append("KW2734 : 'KW' '2734';\n"); - grammarBuilder.append("KW2735 : 'KW' '2735';\n"); - grammarBuilder.append("KW2736 : 'KW' '2736';\n"); - grammarBuilder.append("KW2737 : 'KW' '2737';\n"); - grammarBuilder.append("KW2738 : 'KW' '2738';\n"); - grammarBuilder.append("KW2739 : 'KW' '2739';\n"); - grammarBuilder.append("KW2740 : 'KW' '2740';\n"); - grammarBuilder.append("KW2741 : 'KW' '2741';\n"); - grammarBuilder.append("KW2742 : 'KW' '2742';\n"); - grammarBuilder.append("KW2743 : 'KW' '2743';\n"); - grammarBuilder.append("KW2744 : 'KW' '2744';\n"); - grammarBuilder.append("KW2745 : 'KW' '2745';\n"); - grammarBuilder.append("KW2746 : 'KW' '2746';\n"); - grammarBuilder.append("KW2747 : 'KW' '2747';\n"); - grammarBuilder.append("KW2748 : 'KW' '2748';\n"); - grammarBuilder.append("KW2749 : 'KW' '2749';\n"); - grammarBuilder.append("KW2750 : 'KW' '2750';\n"); - grammarBuilder.append("KW2751 : 'KW' '2751';\n"); - grammarBuilder.append("KW2752 : 'KW' '2752';\n"); - grammarBuilder.append("KW2753 : 'KW' '2753';\n"); - grammarBuilder.append("KW2754 : 'KW' '2754';\n"); - grammarBuilder.append("KW2755 : 'KW' '2755';\n"); - grammarBuilder.append("KW2756 : 'KW' '2756';\n"); - grammarBuilder.append("KW2757 : 'KW' '2757';\n"); - grammarBuilder.append("KW2758 : 'KW' '2758';\n"); - grammarBuilder.append("KW2759 : 'KW' '2759';\n"); - grammarBuilder.append("KW2760 : 'KW' '2760';\n"); - grammarBuilder.append("KW2761 : 'KW' '2761';\n"); - grammarBuilder.append("KW2762 : 'KW' '2762';\n"); - grammarBuilder.append("KW2763 : 'KW' '2763';\n"); - grammarBuilder.append("KW2764 : 'KW' '2764';\n"); - grammarBuilder.append("KW2765 : 'KW' '2765';\n"); - grammarBuilder.append("KW2766 : 'KW' '2766';\n"); - grammarBuilder.append("KW2767 : 'KW' '2767';\n"); - grammarBuilder.append("KW2768 : 'KW' '2768';\n"); - grammarBuilder.append("KW2769 : 'KW' '2769';\n"); - grammarBuilder.append("KW2770 : 'KW' '2770';\n"); - grammarBuilder.append("KW2771 : 'KW' '2771';\n"); - grammarBuilder.append("KW2772 : 'KW' '2772';\n"); - grammarBuilder.append("KW2773 : 'KW' '2773';\n"); - grammarBuilder.append("KW2774 : 'KW' '2774';\n"); - grammarBuilder.append("KW2775 : 'KW' '2775';\n"); - grammarBuilder.append("KW2776 : 'KW' '2776';\n"); - grammarBuilder.append("KW2777 : 'KW' '2777';\n"); - grammarBuilder.append("KW2778 : 'KW' '2778';\n"); - grammarBuilder.append("KW2779 : 'KW' '2779';\n"); - grammarBuilder.append("KW2780 : 'KW' '2780';\n"); - grammarBuilder.append("KW2781 : 'KW' '2781';\n"); - grammarBuilder.append("KW2782 : 'KW' '2782';\n"); - grammarBuilder.append("KW2783 : 'KW' '2783';\n"); - grammarBuilder.append("KW2784 : 'KW' '2784';\n"); - grammarBuilder.append("KW2785 : 'KW' '2785';\n"); - grammarBuilder.append("KW2786 : 'KW' '2786';\n"); - grammarBuilder.append("KW2787 : 'KW' '2787';\n"); - grammarBuilder.append("KW2788 : 'KW' '2788';\n"); - grammarBuilder.append("KW2789 : 'KW' '2789';\n"); - grammarBuilder.append("KW2790 : 'KW' '2790';\n"); - grammarBuilder.append("KW2791 : 'KW' '2791';\n"); - grammarBuilder.append("KW2792 : 'KW' '2792';\n"); - grammarBuilder.append("KW2793 : 'KW' '2793';\n"); - grammarBuilder.append("KW2794 : 'KW' '2794';\n"); - grammarBuilder.append("KW2795 : 'KW' '2795';\n"); - grammarBuilder.append("KW2796 : 'KW' '2796';\n"); - grammarBuilder.append("KW2797 : 'KW' '2797';\n"); - grammarBuilder.append("KW2798 : 'KW' '2798';\n"); - grammarBuilder.append("KW2799 : 'KW' '2799';\n"); - grammarBuilder.append("KW2800 : 'KW' '2800';\n"); - grammarBuilder.append("KW2801 : 'KW' '2801';\n"); - grammarBuilder.append("KW2802 : 'KW' '2802';\n"); - grammarBuilder.append("KW2803 : 'KW' '2803';\n"); - grammarBuilder.append("KW2804 : 'KW' '2804';\n"); - grammarBuilder.append("KW2805 : 'KW' '2805';\n"); - grammarBuilder.append("KW2806 : 'KW' '2806';\n"); - grammarBuilder.append("KW2807 : 'KW' '2807';\n"); - grammarBuilder.append("KW2808 : 'KW' '2808';\n"); - grammarBuilder.append("KW2809 : 'KW' '2809';\n"); - grammarBuilder.append("KW2810 : 'KW' '2810';\n"); - grammarBuilder.append("KW2811 : 'KW' '2811';\n"); - grammarBuilder.append("KW2812 : 'KW' '2812';\n"); - grammarBuilder.append("KW2813 : 'KW' '2813';\n"); - grammarBuilder.append("KW2814 : 'KW' '2814';\n"); - grammarBuilder.append("KW2815 : 'KW' '2815';\n"); - grammarBuilder.append("KW2816 : 'KW' '2816';\n"); - grammarBuilder.append("KW2817 : 'KW' '2817';\n"); - grammarBuilder.append("KW2818 : 'KW' '2818';\n"); - grammarBuilder.append("KW2819 : 'KW' '2819';\n"); - grammarBuilder.append("KW2820 : 'KW' '2820';\n"); - grammarBuilder.append("KW2821 : 'KW' '2821';\n"); - grammarBuilder.append("KW2822 : 'KW' '2822';\n"); - grammarBuilder.append("KW2823 : 'KW' '2823';\n"); - grammarBuilder.append("KW2824 : 'KW' '2824';\n"); - grammarBuilder.append("KW2825 : 'KW' '2825';\n"); - grammarBuilder.append("KW2826 : 'KW' '2826';\n"); - grammarBuilder.append("KW2827 : 'KW' '2827';\n"); - grammarBuilder.append("KW2828 : 'KW' '2828';\n"); - grammarBuilder.append("KW2829 : 'KW' '2829';\n"); - grammarBuilder.append("KW2830 : 'KW' '2830';\n"); - grammarBuilder.append("KW2831 : 'KW' '2831';\n"); - grammarBuilder.append("KW2832 : 'KW' '2832';\n"); - grammarBuilder.append("KW2833 : 'KW' '2833';\n"); - grammarBuilder.append("KW2834 : 'KW' '2834';\n"); - grammarBuilder.append("KW2835 : 'KW' '2835';\n"); - grammarBuilder.append("KW2836 : 'KW' '2836';\n"); - grammarBuilder.append("KW2837 : 'KW' '2837';\n"); - grammarBuilder.append("KW2838 : 'KW' '2838';\n"); - grammarBuilder.append("KW2839 : 'KW' '2839';\n"); - grammarBuilder.append("KW2840 : 'KW' '2840';\n"); - grammarBuilder.append("KW2841 : 'KW' '2841';\n"); - grammarBuilder.append("KW2842 : 'KW' '2842';\n"); - grammarBuilder.append("KW2843 : 'KW' '2843';\n"); - grammarBuilder.append("KW2844 : 'KW' '2844';\n"); - grammarBuilder.append("KW2845 : 'KW' '2845';\n"); - grammarBuilder.append("KW2846 : 'KW' '2846';\n"); - grammarBuilder.append("KW2847 : 'KW' '2847';\n"); - grammarBuilder.append("KW2848 : 'KW' '2848';\n"); - grammarBuilder.append("KW2849 : 'KW' '2849';\n"); - grammarBuilder.append("KW2850 : 'KW' '2850';\n"); - grammarBuilder.append("KW2851 : 'KW' '2851';\n"); - grammarBuilder.append("KW2852 : 'KW' '2852';\n"); - grammarBuilder.append("KW2853 : 'KW' '2853';\n"); - grammarBuilder.append("KW2854 : 'KW' '2854';\n"); - grammarBuilder.append("KW2855 : 'KW' '2855';\n"); - grammarBuilder.append("KW2856 : 'KW' '2856';\n"); - grammarBuilder.append("KW2857 : 'KW' '2857';\n"); - grammarBuilder.append("KW2858 : 'KW' '2858';\n"); - grammarBuilder.append("KW2859 : 'KW' '2859';\n"); - grammarBuilder.append("KW2860 : 'KW' '2860';\n"); - grammarBuilder.append("KW2861 : 'KW' '2861';\n"); - grammarBuilder.append("KW2862 : 'KW' '2862';\n"); - grammarBuilder.append("KW2863 : 'KW' '2863';\n"); - grammarBuilder.append("KW2864 : 'KW' '2864';\n"); - grammarBuilder.append("KW2865 : 'KW' '2865';\n"); - grammarBuilder.append("KW2866 : 'KW' '2866';\n"); - grammarBuilder.append("KW2867 : 'KW' '2867';\n"); - grammarBuilder.append("KW2868 : 'KW' '2868';\n"); - grammarBuilder.append("KW2869 : 'KW' '2869';\n"); - grammarBuilder.append("KW2870 : 'KW' '2870';\n"); - grammarBuilder.append("KW2871 : 'KW' '2871';\n"); - grammarBuilder.append("KW2872 : 'KW' '2872';\n"); - grammarBuilder.append("KW2873 : 'KW' '2873';\n"); - grammarBuilder.append("KW2874 : 'KW' '2874';\n"); - grammarBuilder.append("KW2875 : 'KW' '2875';\n"); - grammarBuilder.append("KW2876 : 'KW' '2876';\n"); - grammarBuilder.append("KW2877 : 'KW' '2877';\n"); - grammarBuilder.append("KW2878 : 'KW' '2878';\n"); - grammarBuilder.append("KW2879 : 'KW' '2879';\n"); - grammarBuilder.append("KW2880 : 'KW' '2880';\n"); - grammarBuilder.append("KW2881 : 'KW' '2881';\n"); - grammarBuilder.append("KW2882 : 'KW' '2882';\n"); - grammarBuilder.append("KW2883 : 'KW' '2883';\n"); - grammarBuilder.append("KW2884 : 'KW' '2884';\n"); - grammarBuilder.append("KW2885 : 'KW' '2885';\n"); - grammarBuilder.append("KW2886 : 'KW' '2886';\n"); - grammarBuilder.append("KW2887 : 'KW' '2887';\n"); - grammarBuilder.append("KW2888 : 'KW' '2888';\n"); - grammarBuilder.append("KW2889 : 'KW' '2889';\n"); - grammarBuilder.append("KW2890 : 'KW' '2890';\n"); - grammarBuilder.append("KW2891 : 'KW' '2891';\n"); - grammarBuilder.append("KW2892 : 'KW' '2892';\n"); - grammarBuilder.append("KW2893 : 'KW' '2893';\n"); - grammarBuilder.append("KW2894 : 'KW' '2894';\n"); - grammarBuilder.append("KW2895 : 'KW' '2895';\n"); - grammarBuilder.append("KW2896 : 'KW' '2896';\n"); - grammarBuilder.append("KW2897 : 'KW' '2897';\n"); - grammarBuilder.append("KW2898 : 'KW' '2898';\n"); - grammarBuilder.append("KW2899 : 'KW' '2899';\n"); - grammarBuilder.append("KW2900 : 'KW' '2900';\n"); - grammarBuilder.append("KW2901 : 'KW' '2901';\n"); - grammarBuilder.append("KW2902 : 'KW' '2902';\n"); - grammarBuilder.append("KW2903 : 'KW' '2903';\n"); - grammarBuilder.append("KW2904 : 'KW' '2904';\n"); - grammarBuilder.append("KW2905 : 'KW' '2905';\n"); - grammarBuilder.append("KW2906 : 'KW' '2906';\n"); - grammarBuilder.append("KW2907 : 'KW' '2907';\n"); - grammarBuilder.append("KW2908 : 'KW' '2908';\n"); - grammarBuilder.append("KW2909 : 'KW' '2909';\n"); - grammarBuilder.append("KW2910 : 'KW' '2910';\n"); - grammarBuilder.append("KW2911 : 'KW' '2911';\n"); - grammarBuilder.append("KW2912 : 'KW' '2912';\n"); - grammarBuilder.append("KW2913 : 'KW' '2913';\n"); - grammarBuilder.append("KW2914 : 'KW' '2914';\n"); - grammarBuilder.append("KW2915 : 'KW' '2915';\n"); - grammarBuilder.append("KW2916 : 'KW' '2916';\n"); - grammarBuilder.append("KW2917 : 'KW' '2917';\n"); - grammarBuilder.append("KW2918 : 'KW' '2918';\n"); - grammarBuilder.append("KW2919 : 'KW' '2919';\n"); - grammarBuilder.append("KW2920 : 'KW' '2920';\n"); - grammarBuilder.append("KW2921 : 'KW' '2921';\n"); - grammarBuilder.append("KW2922 : 'KW' '2922';\n"); - grammarBuilder.append("KW2923 : 'KW' '2923';\n"); - grammarBuilder.append("KW2924 : 'KW' '2924';\n"); - grammarBuilder.append("KW2925 : 'KW' '2925';\n"); - grammarBuilder.append("KW2926 : 'KW' '2926';\n"); - grammarBuilder.append("KW2927 : 'KW' '2927';\n"); - grammarBuilder.append("KW2928 : 'KW' '2928';\n"); - grammarBuilder.append("KW2929 : 'KW' '2929';\n"); - grammarBuilder.append("KW2930 : 'KW' '2930';\n"); - grammarBuilder.append("KW2931 : 'KW' '2931';\n"); - grammarBuilder.append("KW2932 : 'KW' '2932';\n"); - grammarBuilder.append("KW2933 : 'KW' '2933';\n"); - grammarBuilder.append("KW2934 : 'KW' '2934';\n"); - grammarBuilder.append("KW2935 : 'KW' '2935';\n"); - grammarBuilder.append("KW2936 : 'KW' '2936';\n"); - grammarBuilder.append("KW2937 : 'KW' '2937';\n"); - grammarBuilder.append("KW2938 : 'KW' '2938';\n"); - grammarBuilder.append("KW2939 : 'KW' '2939';\n"); - grammarBuilder.append("KW2940 : 'KW' '2940';\n"); - grammarBuilder.append("KW2941 : 'KW' '2941';\n"); - grammarBuilder.append("KW2942 : 'KW' '2942';\n"); - grammarBuilder.append("KW2943 : 'KW' '2943';\n"); - grammarBuilder.append("KW2944 : 'KW' '2944';\n"); - grammarBuilder.append("KW2945 : 'KW' '2945';\n"); - grammarBuilder.append("KW2946 : 'KW' '2946';\n"); - grammarBuilder.append("KW2947 : 'KW' '2947';\n"); - grammarBuilder.append("KW2948 : 'KW' '2948';\n"); - grammarBuilder.append("KW2949 : 'KW' '2949';\n"); - grammarBuilder.append("KW2950 : 'KW' '2950';\n"); - grammarBuilder.append("KW2951 : 'KW' '2951';\n"); - grammarBuilder.append("KW2952 : 'KW' '2952';\n"); - grammarBuilder.append("KW2953 : 'KW' '2953';\n"); - grammarBuilder.append("KW2954 : 'KW' '2954';\n"); - grammarBuilder.append("KW2955 : 'KW' '2955';\n"); - grammarBuilder.append("KW2956 : 'KW' '2956';\n"); - grammarBuilder.append("KW2957 : 'KW' '2957';\n"); - grammarBuilder.append("KW2958 : 'KW' '2958';\n"); - grammarBuilder.append("KW2959 : 'KW' '2959';\n"); - grammarBuilder.append("KW2960 : 'KW' '2960';\n"); - grammarBuilder.append("KW2961 : 'KW' '2961';\n"); - grammarBuilder.append("KW2962 : 'KW' '2962';\n"); - grammarBuilder.append("KW2963 : 'KW' '2963';\n"); - grammarBuilder.append("KW2964 : 'KW' '2964';\n"); - grammarBuilder.append("KW2965 : 'KW' '2965';\n"); - grammarBuilder.append("KW2966 : 'KW' '2966';\n"); - grammarBuilder.append("KW2967 : 'KW' '2967';\n"); - grammarBuilder.append("KW2968 : 'KW' '2968';\n"); - grammarBuilder.append("KW2969 : 'KW' '2969';\n"); - grammarBuilder.append("KW2970 : 'KW' '2970';\n"); - grammarBuilder.append("KW2971 : 'KW' '2971';\n"); - grammarBuilder.append("KW2972 : 'KW' '2972';\n"); - grammarBuilder.append("KW2973 : 'KW' '2973';\n"); - grammarBuilder.append("KW2974 : 'KW' '2974';\n"); - grammarBuilder.append("KW2975 : 'KW' '2975';\n"); - grammarBuilder.append("KW2976 : 'KW' '2976';\n"); - grammarBuilder.append("KW2977 : 'KW' '2977';\n"); - grammarBuilder.append("KW2978 : 'KW' '2978';\n"); - grammarBuilder.append("KW2979 : 'KW' '2979';\n"); - grammarBuilder.append("KW2980 : 'KW' '2980';\n"); - grammarBuilder.append("KW2981 : 'KW' '2981';\n"); - grammarBuilder.append("KW2982 : 'KW' '2982';\n"); - grammarBuilder.append("KW2983 : 'KW' '2983';\n"); - grammarBuilder.append("KW2984 : 'KW' '2984';\n"); - grammarBuilder.append("KW2985 : 'KW' '2985';\n"); - grammarBuilder.append("KW2986 : 'KW' '2986';\n"); - grammarBuilder.append("KW2987 : 'KW' '2987';\n"); - grammarBuilder.append("KW2988 : 'KW' '2988';\n"); - grammarBuilder.append("KW2989 : 'KW' '2989';\n"); - grammarBuilder.append("KW2990 : 'KW' '2990';\n"); - grammarBuilder.append("KW2991 : 'KW' '2991';\n"); - grammarBuilder.append("KW2992 : 'KW' '2992';\n"); - grammarBuilder.append("KW2993 : 'KW' '2993';\n"); - grammarBuilder.append("KW2994 : 'KW' '2994';\n"); - grammarBuilder.append("KW2995 : 'KW' '2995';\n"); - grammarBuilder.append("KW2996 : 'KW' '2996';\n"); - grammarBuilder.append("KW2997 : 'KW' '2997';\n"); - grammarBuilder.append("KW2998 : 'KW' '2998';\n"); - grammarBuilder.append("KW2999 : 'KW' '2999';\n"); - grammarBuilder.append("KW3000 : 'KW' '3000';\n"); - grammarBuilder.append("KW3001 : 'KW' '3001';\n"); - grammarBuilder.append("KW3002 : 'KW' '3002';\n"); - grammarBuilder.append("KW3003 : 'KW' '3003';\n"); - grammarBuilder.append("KW3004 : 'KW' '3004';\n"); - grammarBuilder.append("KW3005 : 'KW' '3005';\n"); - grammarBuilder.append("KW3006 : 'KW' '3006';\n"); - grammarBuilder.append("KW3007 : 'KW' '3007';\n"); - grammarBuilder.append("KW3008 : 'KW' '3008';\n"); - grammarBuilder.append("KW3009 : 'KW' '3009';\n"); - grammarBuilder.append("KW3010 : 'KW' '3010';\n"); - grammarBuilder.append("KW3011 : 'KW' '3011';\n"); - grammarBuilder.append("KW3012 : 'KW' '3012';\n"); - grammarBuilder.append("KW3013 : 'KW' '3013';\n"); - grammarBuilder.append("KW3014 : 'KW' '3014';\n"); - grammarBuilder.append("KW3015 : 'KW' '3015';\n"); - grammarBuilder.append("KW3016 : 'KW' '3016';\n"); - grammarBuilder.append("KW3017 : 'KW' '3017';\n"); - grammarBuilder.append("KW3018 : 'KW' '3018';\n"); - grammarBuilder.append("KW3019 : 'KW' '3019';\n"); - grammarBuilder.append("KW3020 : 'KW' '3020';\n"); - grammarBuilder.append("KW3021 : 'KW' '3021';\n"); - grammarBuilder.append("KW3022 : 'KW' '3022';\n"); - grammarBuilder.append("KW3023 : 'KW' '3023';\n"); - grammarBuilder.append("KW3024 : 'KW' '3024';\n"); - grammarBuilder.append("KW3025 : 'KW' '3025';\n"); - grammarBuilder.append("KW3026 : 'KW' '3026';\n"); - grammarBuilder.append("KW3027 : 'KW' '3027';\n"); - grammarBuilder.append("KW3028 : 'KW' '3028';\n"); - grammarBuilder.append("KW3029 : 'KW' '3029';\n"); - grammarBuilder.append("KW3030 : 'KW' '3030';\n"); - grammarBuilder.append("KW3031 : 'KW' '3031';\n"); - grammarBuilder.append("KW3032 : 'KW' '3032';\n"); - grammarBuilder.append("KW3033 : 'KW' '3033';\n"); - grammarBuilder.append("KW3034 : 'KW' '3034';\n"); - grammarBuilder.append("KW3035 : 'KW' '3035';\n"); - grammarBuilder.append("KW3036 : 'KW' '3036';\n"); - grammarBuilder.append("KW3037 : 'KW' '3037';\n"); - grammarBuilder.append("KW3038 : 'KW' '3038';\n"); - grammarBuilder.append("KW3039 : 'KW' '3039';\n"); - grammarBuilder.append("KW3040 : 'KW' '3040';\n"); - grammarBuilder.append("KW3041 : 'KW' '3041';\n"); - grammarBuilder.append("KW3042 : 'KW' '3042';\n"); - grammarBuilder.append("KW3043 : 'KW' '3043';\n"); - grammarBuilder.append("KW3044 : 'KW' '3044';\n"); - grammarBuilder.append("KW3045 : 'KW' '3045';\n"); - grammarBuilder.append("KW3046 : 'KW' '3046';\n"); - grammarBuilder.append("KW3047 : 'KW' '3047';\n"); - grammarBuilder.append("KW3048 : 'KW' '3048';\n"); - grammarBuilder.append("KW3049 : 'KW' '3049';\n"); - grammarBuilder.append("KW3050 : 'KW' '3050';\n"); - grammarBuilder.append("KW3051 : 'KW' '3051';\n"); - grammarBuilder.append("KW3052 : 'KW' '3052';\n"); - grammarBuilder.append("KW3053 : 'KW' '3053';\n"); - grammarBuilder.append("KW3054 : 'KW' '3054';\n"); - grammarBuilder.append("KW3055 : 'KW' '3055';\n"); - grammarBuilder.append("KW3056 : 'KW' '3056';\n"); - grammarBuilder.append("KW3057 : 'KW' '3057';\n"); - grammarBuilder.append("KW3058 : 'KW' '3058';\n"); - grammarBuilder.append("KW3059 : 'KW' '3059';\n"); - grammarBuilder.append("KW3060 : 'KW' '3060';\n"); - grammarBuilder.append("KW3061 : 'KW' '3061';\n"); - grammarBuilder.append("KW3062 : 'KW' '3062';\n"); - grammarBuilder.append("KW3063 : 'KW' '3063';\n"); - grammarBuilder.append("KW3064 : 'KW' '3064';\n"); - grammarBuilder.append("KW3065 : 'KW' '3065';\n"); - grammarBuilder.append("KW3066 : 'KW' '3066';\n"); - grammarBuilder.append("KW3067 : 'KW' '3067';\n"); - grammarBuilder.append("KW3068 : 'KW' '3068';\n"); - grammarBuilder.append("KW3069 : 'KW' '3069';\n"); - grammarBuilder.append("KW3070 : 'KW' '3070';\n"); - grammarBuilder.append("KW3071 : 'KW' '3071';\n"); - grammarBuilder.append("KW3072 : 'KW' '3072';\n"); - grammarBuilder.append("KW3073 : 'KW' '3073';\n"); - grammarBuilder.append("KW3074 : 'KW' '3074';\n"); - grammarBuilder.append("KW3075 : 'KW' '3075';\n"); - grammarBuilder.append("KW3076 : 'KW' '3076';\n"); - grammarBuilder.append("KW3077 : 'KW' '3077';\n"); - grammarBuilder.append("KW3078 : 'KW' '3078';\n"); - grammarBuilder.append("KW3079 : 'KW' '3079';\n"); - grammarBuilder.append("KW3080 : 'KW' '3080';\n"); - grammarBuilder.append("KW3081 : 'KW' '3081';\n"); - grammarBuilder.append("KW3082 : 'KW' '3082';\n"); - grammarBuilder.append("KW3083 : 'KW' '3083';\n"); - grammarBuilder.append("KW3084 : 'KW' '3084';\n"); - grammarBuilder.append("KW3085 : 'KW' '3085';\n"); - grammarBuilder.append("KW3086 : 'KW' '3086';\n"); - grammarBuilder.append("KW3087 : 'KW' '3087';\n"); - grammarBuilder.append("KW3088 : 'KW' '3088';\n"); - grammarBuilder.append("KW3089 : 'KW' '3089';\n"); - grammarBuilder.append("KW3090 : 'KW' '3090';\n"); - grammarBuilder.append("KW3091 : 'KW' '3091';\n"); - grammarBuilder.append("KW3092 : 'KW' '3092';\n"); - grammarBuilder.append("KW3093 : 'KW' '3093';\n"); - grammarBuilder.append("KW3094 : 'KW' '3094';\n"); - grammarBuilder.append("KW3095 : 'KW' '3095';\n"); - grammarBuilder.append("KW3096 : 'KW' '3096';\n"); - grammarBuilder.append("KW3097 : 'KW' '3097';\n"); - grammarBuilder.append("KW3098 : 'KW' '3098';\n"); - grammarBuilder.append("KW3099 : 'KW' '3099';\n"); - grammarBuilder.append("KW3100 : 'KW' '3100';\n"); - grammarBuilder.append("KW3101 : 'KW' '3101';\n"); - grammarBuilder.append("KW3102 : 'KW' '3102';\n"); - grammarBuilder.append("KW3103 : 'KW' '3103';\n"); - grammarBuilder.append("KW3104 : 'KW' '3104';\n"); - grammarBuilder.append("KW3105 : 'KW' '3105';\n"); - grammarBuilder.append("KW3106 : 'KW' '3106';\n"); - grammarBuilder.append("KW3107 : 'KW' '3107';\n"); - grammarBuilder.append("KW3108 : 'KW' '3108';\n"); - grammarBuilder.append("KW3109 : 'KW' '3109';\n"); - grammarBuilder.append("KW3110 : 'KW' '3110';\n"); - grammarBuilder.append("KW3111 : 'KW' '3111';\n"); - grammarBuilder.append("KW3112 : 'KW' '3112';\n"); - grammarBuilder.append("KW3113 : 'KW' '3113';\n"); - grammarBuilder.append("KW3114 : 'KW' '3114';\n"); - grammarBuilder.append("KW3115 : 'KW' '3115';\n"); - grammarBuilder.append("KW3116 : 'KW' '3116';\n"); - grammarBuilder.append("KW3117 : 'KW' '3117';\n"); - grammarBuilder.append("KW3118 : 'KW' '3118';\n"); - grammarBuilder.append("KW3119 : 'KW' '3119';\n"); - grammarBuilder.append("KW3120 : 'KW' '3120';\n"); - grammarBuilder.append("KW3121 : 'KW' '3121';\n"); - grammarBuilder.append("KW3122 : 'KW' '3122';\n"); - grammarBuilder.append("KW3123 : 'KW' '3123';\n"); - grammarBuilder.append("KW3124 : 'KW' '3124';\n"); - grammarBuilder.append("KW3125 : 'KW' '3125';\n"); - grammarBuilder.append("KW3126 : 'KW' '3126';\n"); - grammarBuilder.append("KW3127 : 'KW' '3127';\n"); - grammarBuilder.append("KW3128 : 'KW' '3128';\n"); - grammarBuilder.append("KW3129 : 'KW' '3129';\n"); - grammarBuilder.append("KW3130 : 'KW' '3130';\n"); - grammarBuilder.append("KW3131 : 'KW' '3131';\n"); - grammarBuilder.append("KW3132 : 'KW' '3132';\n"); - grammarBuilder.append("KW3133 : 'KW' '3133';\n"); - grammarBuilder.append("KW3134 : 'KW' '3134';\n"); - grammarBuilder.append("KW3135 : 'KW' '3135';\n"); - grammarBuilder.append("KW3136 : 'KW' '3136';\n"); - grammarBuilder.append("KW3137 : 'KW' '3137';\n"); - grammarBuilder.append("KW3138 : 'KW' '3138';\n"); - grammarBuilder.append("KW3139 : 'KW' '3139';\n"); - grammarBuilder.append("KW3140 : 'KW' '3140';\n"); - grammarBuilder.append("KW3141 : 'KW' '3141';\n"); - grammarBuilder.append("KW3142 : 'KW' '3142';\n"); - grammarBuilder.append("KW3143 : 'KW' '3143';\n"); - grammarBuilder.append("KW3144 : 'KW' '3144';\n"); - grammarBuilder.append("KW3145 : 'KW' '3145';\n"); - grammarBuilder.append("KW3146 : 'KW' '3146';\n"); - grammarBuilder.append("KW3147 : 'KW' '3147';\n"); - grammarBuilder.append("KW3148 : 'KW' '3148';\n"); - grammarBuilder.append("KW3149 : 'KW' '3149';\n"); - grammarBuilder.append("KW3150 : 'KW' '3150';\n"); - grammarBuilder.append("KW3151 : 'KW' '3151';\n"); - grammarBuilder.append("KW3152 : 'KW' '3152';\n"); - grammarBuilder.append("KW3153 : 'KW' '3153';\n"); - grammarBuilder.append("KW3154 : 'KW' '3154';\n"); - grammarBuilder.append("KW3155 : 'KW' '3155';\n"); - grammarBuilder.append("KW3156 : 'KW' '3156';\n"); - grammarBuilder.append("KW3157 : 'KW' '3157';\n"); - grammarBuilder.append("KW3158 : 'KW' '3158';\n"); - grammarBuilder.append("KW3159 : 'KW' '3159';\n"); - grammarBuilder.append("KW3160 : 'KW' '3160';\n"); - grammarBuilder.append("KW3161 : 'KW' '3161';\n"); - grammarBuilder.append("KW3162 : 'KW' '3162';\n"); - grammarBuilder.append("KW3163 : 'KW' '3163';\n"); - grammarBuilder.append("KW3164 : 'KW' '3164';\n"); - grammarBuilder.append("KW3165 : 'KW' '3165';\n"); - grammarBuilder.append("KW3166 : 'KW' '3166';\n"); - grammarBuilder.append("KW3167 : 'KW' '3167';\n"); - grammarBuilder.append("KW3168 : 'KW' '3168';\n"); - grammarBuilder.append("KW3169 : 'KW' '3169';\n"); - grammarBuilder.append("KW3170 : 'KW' '3170';\n"); - grammarBuilder.append("KW3171 : 'KW' '3171';\n"); - grammarBuilder.append("KW3172 : 'KW' '3172';\n"); - grammarBuilder.append("KW3173 : 'KW' '3173';\n"); - grammarBuilder.append("KW3174 : 'KW' '3174';\n"); - grammarBuilder.append("KW3175 : 'KW' '3175';\n"); - grammarBuilder.append("KW3176 : 'KW' '3176';\n"); - grammarBuilder.append("KW3177 : 'KW' '3177';\n"); - grammarBuilder.append("KW3178 : 'KW' '3178';\n"); - grammarBuilder.append("KW3179 : 'KW' '3179';\n"); - grammarBuilder.append("KW3180 : 'KW' '3180';\n"); - grammarBuilder.append("KW3181 : 'KW' '3181';\n"); - grammarBuilder.append("KW3182 : 'KW' '3182';\n"); - grammarBuilder.append("KW3183 : 'KW' '3183';\n"); - grammarBuilder.append("KW3184 : 'KW' '3184';\n"); - grammarBuilder.append("KW3185 : 'KW' '3185';\n"); - grammarBuilder.append("KW3186 : 'KW' '3186';\n"); - grammarBuilder.append("KW3187 : 'KW' '3187';\n"); - grammarBuilder.append("KW3188 : 'KW' '3188';\n"); - grammarBuilder.append("KW3189 : 'KW' '3189';\n"); - grammarBuilder.append("KW3190 : 'KW' '3190';\n"); - grammarBuilder.append("KW3191 : 'KW' '3191';\n"); - grammarBuilder.append("KW3192 : 'KW' '3192';\n"); - grammarBuilder.append("KW3193 : 'KW' '3193';\n"); - grammarBuilder.append("KW3194 : 'KW' '3194';\n"); - grammarBuilder.append("KW3195 : 'KW' '3195';\n"); - grammarBuilder.append("KW3196 : 'KW' '3196';\n"); - grammarBuilder.append("KW3197 : 'KW' '3197';\n"); - grammarBuilder.append("KW3198 : 'KW' '3198';\n"); - grammarBuilder.append("KW3199 : 'KW' '3199';\n"); - grammarBuilder.append("KW3200 : 'KW' '3200';\n"); - grammarBuilder.append("KW3201 : 'KW' '3201';\n"); - grammarBuilder.append("KW3202 : 'KW' '3202';\n"); - grammarBuilder.append("KW3203 : 'KW' '3203';\n"); - grammarBuilder.append("KW3204 : 'KW' '3204';\n"); - grammarBuilder.append("KW3205 : 'KW' '3205';\n"); - grammarBuilder.append("KW3206 : 'KW' '3206';\n"); - grammarBuilder.append("KW3207 : 'KW' '3207';\n"); - grammarBuilder.append("KW3208 : 'KW' '3208';\n"); - grammarBuilder.append("KW3209 : 'KW' '3209';\n"); - grammarBuilder.append("KW3210 : 'KW' '3210';\n"); - grammarBuilder.append("KW3211 : 'KW' '3211';\n"); - grammarBuilder.append("KW3212 : 'KW' '3212';\n"); - grammarBuilder.append("KW3213 : 'KW' '3213';\n"); - grammarBuilder.append("KW3214 : 'KW' '3214';\n"); - grammarBuilder.append("KW3215 : 'KW' '3215';\n"); - grammarBuilder.append("KW3216 : 'KW' '3216';\n"); - grammarBuilder.append("KW3217 : 'KW' '3217';\n"); - grammarBuilder.append("KW3218 : 'KW' '3218';\n"); - grammarBuilder.append("KW3219 : 'KW' '3219';\n"); - grammarBuilder.append("KW3220 : 'KW' '3220';\n"); - grammarBuilder.append("KW3221 : 'KW' '3221';\n"); - grammarBuilder.append("KW3222 : 'KW' '3222';\n"); - grammarBuilder.append("KW3223 : 'KW' '3223';\n"); - grammarBuilder.append("KW3224 : 'KW' '3224';\n"); - grammarBuilder.append("KW3225 : 'KW' '3225';\n"); - grammarBuilder.append("KW3226 : 'KW' '3226';\n"); - grammarBuilder.append("KW3227 : 'KW' '3227';\n"); - grammarBuilder.append("KW3228 : 'KW' '3228';\n"); - grammarBuilder.append("KW3229 : 'KW' '3229';\n"); - grammarBuilder.append("KW3230 : 'KW' '3230';\n"); - grammarBuilder.append("KW3231 : 'KW' '3231';\n"); - grammarBuilder.append("KW3232 : 'KW' '3232';\n"); - grammarBuilder.append("KW3233 : 'KW' '3233';\n"); - grammarBuilder.append("KW3234 : 'KW' '3234';\n"); - grammarBuilder.append("KW3235 : 'KW' '3235';\n"); - grammarBuilder.append("KW3236 : 'KW' '3236';\n"); - grammarBuilder.append("KW3237 : 'KW' '3237';\n"); - grammarBuilder.append("KW3238 : 'KW' '3238';\n"); - grammarBuilder.append("KW3239 : 'KW' '3239';\n"); - grammarBuilder.append("KW3240 : 'KW' '3240';\n"); - grammarBuilder.append("KW3241 : 'KW' '3241';\n"); - grammarBuilder.append("KW3242 : 'KW' '3242';\n"); - grammarBuilder.append("KW3243 : 'KW' '3243';\n"); - grammarBuilder.append("KW3244 : 'KW' '3244';\n"); - grammarBuilder.append("KW3245 : 'KW' '3245';\n"); - grammarBuilder.append("KW3246 : 'KW' '3246';\n"); - grammarBuilder.append("KW3247 : 'KW' '3247';\n"); - grammarBuilder.append("KW3248 : 'KW' '3248';\n"); - grammarBuilder.append("KW3249 : 'KW' '3249';\n"); - grammarBuilder.append("KW3250 : 'KW' '3250';\n"); - grammarBuilder.append("KW3251 : 'KW' '3251';\n"); - grammarBuilder.append("KW3252 : 'KW' '3252';\n"); - grammarBuilder.append("KW3253 : 'KW' '3253';\n"); - grammarBuilder.append("KW3254 : 'KW' '3254';\n"); - grammarBuilder.append("KW3255 : 'KW' '3255';\n"); - grammarBuilder.append("KW3256 : 'KW' '3256';\n"); - grammarBuilder.append("KW3257 : 'KW' '3257';\n"); - grammarBuilder.append("KW3258 : 'KW' '3258';\n"); - grammarBuilder.append("KW3259 : 'KW' '3259';\n"); - grammarBuilder.append("KW3260 : 'KW' '3260';\n"); - grammarBuilder.append("KW3261 : 'KW' '3261';\n"); - grammarBuilder.append("KW3262 : 'KW' '3262';\n"); - grammarBuilder.append("KW3263 : 'KW' '3263';\n"); - grammarBuilder.append("KW3264 : 'KW' '3264';\n"); - grammarBuilder.append("KW3265 : 'KW' '3265';\n"); - grammarBuilder.append("KW3266 : 'KW' '3266';\n"); - grammarBuilder.append("KW3267 : 'KW' '3267';\n"); - grammarBuilder.append("KW3268 : 'KW' '3268';\n"); - grammarBuilder.append("KW3269 : 'KW' '3269';\n"); - grammarBuilder.append("KW3270 : 'KW' '3270';\n"); - grammarBuilder.append("KW3271 : 'KW' '3271';\n"); - grammarBuilder.append("KW3272 : 'KW' '3272';\n"); - grammarBuilder.append("KW3273 : 'KW' '3273';\n"); - grammarBuilder.append("KW3274 : 'KW' '3274';\n"); - grammarBuilder.append("KW3275 : 'KW' '3275';\n"); - grammarBuilder.append("KW3276 : 'KW' '3276';\n"); - grammarBuilder.append("KW3277 : 'KW' '3277';\n"); - grammarBuilder.append("KW3278 : 'KW' '3278';\n"); - grammarBuilder.append("KW3279 : 'KW' '3279';\n"); - grammarBuilder.append("KW3280 : 'KW' '3280';\n"); - grammarBuilder.append("KW3281 : 'KW' '3281';\n"); - grammarBuilder.append("KW3282 : 'KW' '3282';\n"); - grammarBuilder.append("KW3283 : 'KW' '3283';\n"); - grammarBuilder.append("KW3284 : 'KW' '3284';\n"); - grammarBuilder.append("KW3285 : 'KW' '3285';\n"); - grammarBuilder.append("KW3286 : 'KW' '3286';\n"); - grammarBuilder.append("KW3287 : 'KW' '3287';\n"); - grammarBuilder.append("KW3288 : 'KW' '3288';\n"); - grammarBuilder.append("KW3289 : 'KW' '3289';\n"); - grammarBuilder.append("KW3290 : 'KW' '3290';\n"); - grammarBuilder.append("KW3291 : 'KW' '3291';\n"); - grammarBuilder.append("KW3292 : 'KW' '3292';\n"); - grammarBuilder.append("KW3293 : 'KW' '3293';\n"); - grammarBuilder.append("KW3294 : 'KW' '3294';\n"); - grammarBuilder.append("KW3295 : 'KW' '3295';\n"); - grammarBuilder.append("KW3296 : 'KW' '3296';\n"); - grammarBuilder.append("KW3297 : 'KW' '3297';\n"); - grammarBuilder.append("KW3298 : 'KW' '3298';\n"); - grammarBuilder.append("KW3299 : 'KW' '3299';\n"); - grammarBuilder.append("KW3300 : 'KW' '3300';\n"); - grammarBuilder.append("KW3301 : 'KW' '3301';\n"); - grammarBuilder.append("KW3302 : 'KW' '3302';\n"); - grammarBuilder.append("KW3303 : 'KW' '3303';\n"); - grammarBuilder.append("KW3304 : 'KW' '3304';\n"); - grammarBuilder.append("KW3305 : 'KW' '3305';\n"); - grammarBuilder.append("KW3306 : 'KW' '3306';\n"); - grammarBuilder.append("KW3307 : 'KW' '3307';\n"); - grammarBuilder.append("KW3308 : 'KW' '3308';\n"); - grammarBuilder.append("KW3309 : 'KW' '3309';\n"); - grammarBuilder.append("KW3310 : 'KW' '3310';\n"); - grammarBuilder.append("KW3311 : 'KW' '3311';\n"); - grammarBuilder.append("KW3312 : 'KW' '3312';\n"); - grammarBuilder.append("KW3313 : 'KW' '3313';\n"); - grammarBuilder.append("KW3314 : 'KW' '3314';\n"); - grammarBuilder.append("KW3315 : 'KW' '3315';\n"); - grammarBuilder.append("KW3316 : 'KW' '3316';\n"); - grammarBuilder.append("KW3317 : 'KW' '3317';\n"); - grammarBuilder.append("KW3318 : 'KW' '3318';\n"); - grammarBuilder.append("KW3319 : 'KW' '3319';\n"); - grammarBuilder.append("KW3320 : 'KW' '3320';\n"); - grammarBuilder.append("KW3321 : 'KW' '3321';\n"); - grammarBuilder.append("KW3322 : 'KW' '3322';\n"); - grammarBuilder.append("KW3323 : 'KW' '3323';\n"); - grammarBuilder.append("KW3324 : 'KW' '3324';\n"); - grammarBuilder.append("KW3325 : 'KW' '3325';\n"); - grammarBuilder.append("KW3326 : 'KW' '3326';\n"); - grammarBuilder.append("KW3327 : 'KW' '3327';\n"); - grammarBuilder.append("KW3328 : 'KW' '3328';\n"); - grammarBuilder.append("KW3329 : 'KW' '3329';\n"); - grammarBuilder.append("KW3330 : 'KW' '3330';\n"); - grammarBuilder.append("KW3331 : 'KW' '3331';\n"); - grammarBuilder.append("KW3332 : 'KW' '3332';\n"); - grammarBuilder.append("KW3333 : 'KW' '3333';\n"); - grammarBuilder.append("KW3334 : 'KW' '3334';\n"); - grammarBuilder.append("KW3335 : 'KW' '3335';\n"); - grammarBuilder.append("KW3336 : 'KW' '3336';\n"); - grammarBuilder.append("KW3337 : 'KW' '3337';\n"); - grammarBuilder.append("KW3338 : 'KW' '3338';\n"); - grammarBuilder.append("KW3339 : 'KW' '3339';\n"); - grammarBuilder.append("KW3340 : 'KW' '3340';\n"); - grammarBuilder.append("KW3341 : 'KW' '3341';\n"); - grammarBuilder.append("KW3342 : 'KW' '3342';\n"); - grammarBuilder.append("KW3343 : 'KW' '3343';\n"); - grammarBuilder.append("KW3344 : 'KW' '3344';\n"); - grammarBuilder.append("KW3345 : 'KW' '3345';\n"); - grammarBuilder.append("KW3346 : 'KW' '3346';\n"); - grammarBuilder.append("KW3347 : 'KW' '3347';\n"); - grammarBuilder.append("KW3348 : 'KW' '3348';\n"); - grammarBuilder.append("KW3349 : 'KW' '3349';\n"); - grammarBuilder.append("KW3350 : 'KW' '3350';\n"); - grammarBuilder.append("KW3351 : 'KW' '3351';\n"); - grammarBuilder.append("KW3352 : 'KW' '3352';\n"); - grammarBuilder.append("KW3353 : 'KW' '3353';\n"); - grammarBuilder.append("KW3354 : 'KW' '3354';\n"); - grammarBuilder.append("KW3355 : 'KW' '3355';\n"); - grammarBuilder.append("KW3356 : 'KW' '3356';\n"); - grammarBuilder.append("KW3357 : 'KW' '3357';\n"); - grammarBuilder.append("KW3358 : 'KW' '3358';\n"); - grammarBuilder.append("KW3359 : 'KW' '3359';\n"); - grammarBuilder.append("KW3360 : 'KW' '3360';\n"); - grammarBuilder.append("KW3361 : 'KW' '3361';\n"); - grammarBuilder.append("KW3362 : 'KW' '3362';\n"); - grammarBuilder.append("KW3363 : 'KW' '3363';\n"); - grammarBuilder.append("KW3364 : 'KW' '3364';\n"); - grammarBuilder.append("KW3365 : 'KW' '3365';\n"); - grammarBuilder.append("KW3366 : 'KW' '3366';\n"); - grammarBuilder.append("KW3367 : 'KW' '3367';\n"); - grammarBuilder.append("KW3368 : 'KW' '3368';\n"); - grammarBuilder.append("KW3369 : 'KW' '3369';\n"); - grammarBuilder.append("KW3370 : 'KW' '3370';\n"); - grammarBuilder.append("KW3371 : 'KW' '3371';\n"); - grammarBuilder.append("KW3372 : 'KW' '3372';\n"); - grammarBuilder.append("KW3373 : 'KW' '3373';\n"); - grammarBuilder.append("KW3374 : 'KW' '3374';\n"); - grammarBuilder.append("KW3375 : 'KW' '3375';\n"); - grammarBuilder.append("KW3376 : 'KW' '3376';\n"); - grammarBuilder.append("KW3377 : 'KW' '3377';\n"); - grammarBuilder.append("KW3378 : 'KW' '3378';\n"); - grammarBuilder.append("KW3379 : 'KW' '3379';\n"); - grammarBuilder.append("KW3380 : 'KW' '3380';\n"); - grammarBuilder.append("KW3381 : 'KW' '3381';\n"); - grammarBuilder.append("KW3382 : 'KW' '3382';\n"); - grammarBuilder.append("KW3383 : 'KW' '3383';\n"); - grammarBuilder.append("KW3384 : 'KW' '3384';\n"); - grammarBuilder.append("KW3385 : 'KW' '3385';\n"); - grammarBuilder.append("KW3386 : 'KW' '3386';\n"); - grammarBuilder.append("KW3387 : 'KW' '3387';\n"); - grammarBuilder.append("KW3388 : 'KW' '3388';\n"); - grammarBuilder.append("KW3389 : 'KW' '3389';\n"); - grammarBuilder.append("KW3390 : 'KW' '3390';\n"); - grammarBuilder.append("KW3391 : 'KW' '3391';\n"); - grammarBuilder.append("KW3392 : 'KW' '3392';\n"); - grammarBuilder.append("KW3393 : 'KW' '3393';\n"); - grammarBuilder.append("KW3394 : 'KW' '3394';\n"); - grammarBuilder.append("KW3395 : 'KW' '3395';\n"); - grammarBuilder.append("KW3396 : 'KW' '3396';\n"); - grammarBuilder.append("KW3397 : 'KW' '3397';\n"); - grammarBuilder.append("KW3398 : 'KW' '3398';\n"); - grammarBuilder.append("KW3399 : 'KW' '3399';\n"); - grammarBuilder.append("KW3400 : 'KW' '3400';\n"); - grammarBuilder.append("KW3401 : 'KW' '3401';\n"); - grammarBuilder.append("KW3402 : 'KW' '3402';\n"); - grammarBuilder.append("KW3403 : 'KW' '3403';\n"); - grammarBuilder.append("KW3404 : 'KW' '3404';\n"); - grammarBuilder.append("KW3405 : 'KW' '3405';\n"); - grammarBuilder.append("KW3406 : 'KW' '3406';\n"); - grammarBuilder.append("KW3407 : 'KW' '3407';\n"); - grammarBuilder.append("KW3408 : 'KW' '3408';\n"); - grammarBuilder.append("KW3409 : 'KW' '3409';\n"); - grammarBuilder.append("KW3410 : 'KW' '3410';\n"); - grammarBuilder.append("KW3411 : 'KW' '3411';\n"); - grammarBuilder.append("KW3412 : 'KW' '3412';\n"); - grammarBuilder.append("KW3413 : 'KW' '3413';\n"); - grammarBuilder.append("KW3414 : 'KW' '3414';\n"); - grammarBuilder.append("KW3415 : 'KW' '3415';\n"); - grammarBuilder.append("KW3416 : 'KW' '3416';\n"); - grammarBuilder.append("KW3417 : 'KW' '3417';\n"); - grammarBuilder.append("KW3418 : 'KW' '3418';\n"); - grammarBuilder.append("KW3419 : 'KW' '3419';\n"); - grammarBuilder.append("KW3420 : 'KW' '3420';\n"); - grammarBuilder.append("KW3421 : 'KW' '3421';\n"); - grammarBuilder.append("KW3422 : 'KW' '3422';\n"); - grammarBuilder.append("KW3423 : 'KW' '3423';\n"); - grammarBuilder.append("KW3424 : 'KW' '3424';\n"); - grammarBuilder.append("KW3425 : 'KW' '3425';\n"); - grammarBuilder.append("KW3426 : 'KW' '3426';\n"); - grammarBuilder.append("KW3427 : 'KW' '3427';\n"); - grammarBuilder.append("KW3428 : 'KW' '3428';\n"); - grammarBuilder.append("KW3429 : 'KW' '3429';\n"); - grammarBuilder.append("KW3430 : 'KW' '3430';\n"); - grammarBuilder.append("KW3431 : 'KW' '3431';\n"); - grammarBuilder.append("KW3432 : 'KW' '3432';\n"); - grammarBuilder.append("KW3433 : 'KW' '3433';\n"); - grammarBuilder.append("KW3434 : 'KW' '3434';\n"); - grammarBuilder.append("KW3435 : 'KW' '3435';\n"); - grammarBuilder.append("KW3436 : 'KW' '3436';\n"); - grammarBuilder.append("KW3437 : 'KW' '3437';\n"); - grammarBuilder.append("KW3438 : 'KW' '3438';\n"); - grammarBuilder.append("KW3439 : 'KW' '3439';\n"); - grammarBuilder.append("KW3440 : 'KW' '3440';\n"); - grammarBuilder.append("KW3441 : 'KW' '3441';\n"); - grammarBuilder.append("KW3442 : 'KW' '3442';\n"); - grammarBuilder.append("KW3443 : 'KW' '3443';\n"); - grammarBuilder.append("KW3444 : 'KW' '3444';\n"); - grammarBuilder.append("KW3445 : 'KW' '3445';\n"); - grammarBuilder.append("KW3446 : 'KW' '3446';\n"); - grammarBuilder.append("KW3447 : 'KW' '3447';\n"); - grammarBuilder.append("KW3448 : 'KW' '3448';\n"); - grammarBuilder.append("KW3449 : 'KW' '3449';\n"); - grammarBuilder.append("KW3450 : 'KW' '3450';\n"); - grammarBuilder.append("KW3451 : 'KW' '3451';\n"); - grammarBuilder.append("KW3452 : 'KW' '3452';\n"); - grammarBuilder.append("KW3453 : 'KW' '3453';\n"); - grammarBuilder.append("KW3454 : 'KW' '3454';\n"); - grammarBuilder.append("KW3455 : 'KW' '3455';\n"); - grammarBuilder.append("KW3456 : 'KW' '3456';\n"); - grammarBuilder.append("KW3457 : 'KW' '3457';\n"); - grammarBuilder.append("KW3458 : 'KW' '3458';\n"); - grammarBuilder.append("KW3459 : 'KW' '3459';\n"); - grammarBuilder.append("KW3460 : 'KW' '3460';\n"); - grammarBuilder.append("KW3461 : 'KW' '3461';\n"); - grammarBuilder.append("KW3462 : 'KW' '3462';\n"); - grammarBuilder.append("KW3463 : 'KW' '3463';\n"); - grammarBuilder.append("KW3464 : 'KW' '3464';\n"); - grammarBuilder.append("KW3465 : 'KW' '3465';\n"); - grammarBuilder.append("KW3466 : 'KW' '3466';\n"); - grammarBuilder.append("KW3467 : 'KW' '3467';\n"); - grammarBuilder.append("KW3468 : 'KW' '3468';\n"); - grammarBuilder.append("KW3469 : 'KW' '3469';\n"); - grammarBuilder.append("KW3470 : 'KW' '3470';\n"); - grammarBuilder.append("KW3471 : 'KW' '3471';\n"); - grammarBuilder.append("KW3472 : 'KW' '3472';\n"); - grammarBuilder.append("KW3473 : 'KW' '3473';\n"); - grammarBuilder.append("KW3474 : 'KW' '3474';\n"); - grammarBuilder.append("KW3475 : 'KW' '3475';\n"); - grammarBuilder.append("KW3476 : 'KW' '3476';\n"); - grammarBuilder.append("KW3477 : 'KW' '3477';\n"); - grammarBuilder.append("KW3478 : 'KW' '3478';\n"); - grammarBuilder.append("KW3479 : 'KW' '3479';\n"); - grammarBuilder.append("KW3480 : 'KW' '3480';\n"); - grammarBuilder.append("KW3481 : 'KW' '3481';\n"); - grammarBuilder.append("KW3482 : 'KW' '3482';\n"); - grammarBuilder.append("KW3483 : 'KW' '3483';\n"); - grammarBuilder.append("KW3484 : 'KW' '3484';\n"); - grammarBuilder.append("KW3485 : 'KW' '3485';\n"); - grammarBuilder.append("KW3486 : 'KW' '3486';\n"); - grammarBuilder.append("KW3487 : 'KW' '3487';\n"); - grammarBuilder.append("KW3488 : 'KW' '3488';\n"); - grammarBuilder.append("KW3489 : 'KW' '3489';\n"); - grammarBuilder.append("KW3490 : 'KW' '3490';\n"); - grammarBuilder.append("KW3491 : 'KW' '3491';\n"); - grammarBuilder.append("KW3492 : 'KW' '3492';\n"); - grammarBuilder.append("KW3493 : 'KW' '3493';\n"); - grammarBuilder.append("KW3494 : 'KW' '3494';\n"); - grammarBuilder.append("KW3495 : 'KW' '3495';\n"); - grammarBuilder.append("KW3496 : 'KW' '3496';\n"); - grammarBuilder.append("KW3497 : 'KW' '3497';\n"); - grammarBuilder.append("KW3498 : 'KW' '3498';\n"); - grammarBuilder.append("KW3499 : 'KW' '3499';\n"); - grammarBuilder.append("KW3500 : 'KW' '3500';\n"); - grammarBuilder.append("KW3501 : 'KW' '3501';\n"); - grammarBuilder.append("KW3502 : 'KW' '3502';\n"); - grammarBuilder.append("KW3503 : 'KW' '3503';\n"); - grammarBuilder.append("KW3504 : 'KW' '3504';\n"); - grammarBuilder.append("KW3505 : 'KW' '3505';\n"); - grammarBuilder.append("KW3506 : 'KW' '3506';\n"); - grammarBuilder.append("KW3507 : 'KW' '3507';\n"); - grammarBuilder.append("KW3508 : 'KW' '3508';\n"); - grammarBuilder.append("KW3509 : 'KW' '3509';\n"); - grammarBuilder.append("KW3510 : 'KW' '3510';\n"); - grammarBuilder.append("KW3511 : 'KW' '3511';\n"); - grammarBuilder.append("KW3512 : 'KW' '3512';\n"); - grammarBuilder.append("KW3513 : 'KW' '3513';\n"); - grammarBuilder.append("KW3514 : 'KW' '3514';\n"); - grammarBuilder.append("KW3515 : 'KW' '3515';\n"); - grammarBuilder.append("KW3516 : 'KW' '3516';\n"); - grammarBuilder.append("KW3517 : 'KW' '3517';\n"); - grammarBuilder.append("KW3518 : 'KW' '3518';\n"); - grammarBuilder.append("KW3519 : 'KW' '3519';\n"); - grammarBuilder.append("KW3520 : 'KW' '3520';\n"); - grammarBuilder.append("KW3521 : 'KW' '3521';\n"); - grammarBuilder.append("KW3522 : 'KW' '3522';\n"); - grammarBuilder.append("KW3523 : 'KW' '3523';\n"); - grammarBuilder.append("KW3524 : 'KW' '3524';\n"); - grammarBuilder.append("KW3525 : 'KW' '3525';\n"); - grammarBuilder.append("KW3526 : 'KW' '3526';\n"); - grammarBuilder.append("KW3527 : 'KW' '3527';\n"); - grammarBuilder.append("KW3528 : 'KW' '3528';\n"); - grammarBuilder.append("KW3529 : 'KW' '3529';\n"); - grammarBuilder.append("KW3530 : 'KW' '3530';\n"); - grammarBuilder.append("KW3531 : 'KW' '3531';\n"); - grammarBuilder.append("KW3532 : 'KW' '3532';\n"); - grammarBuilder.append("KW3533 : 'KW' '3533';\n"); - grammarBuilder.append("KW3534 : 'KW' '3534';\n"); - grammarBuilder.append("KW3535 : 'KW' '3535';\n"); - grammarBuilder.append("KW3536 : 'KW' '3536';\n"); - grammarBuilder.append("KW3537 : 'KW' '3537';\n"); - grammarBuilder.append("KW3538 : 'KW' '3538';\n"); - grammarBuilder.append("KW3539 : 'KW' '3539';\n"); - grammarBuilder.append("KW3540 : 'KW' '3540';\n"); - grammarBuilder.append("KW3541 : 'KW' '3541';\n"); - grammarBuilder.append("KW3542 : 'KW' '3542';\n"); - grammarBuilder.append("KW3543 : 'KW' '3543';\n"); - grammarBuilder.append("KW3544 : 'KW' '3544';\n"); - grammarBuilder.append("KW3545 : 'KW' '3545';\n"); - grammarBuilder.append("KW3546 : 'KW' '3546';\n"); - grammarBuilder.append("KW3547 : 'KW' '3547';\n"); - grammarBuilder.append("KW3548 : 'KW' '3548';\n"); - grammarBuilder.append("KW3549 : 'KW' '3549';\n"); - grammarBuilder.append("KW3550 : 'KW' '3550';\n"); - grammarBuilder.append("KW3551 : 'KW' '3551';\n"); - grammarBuilder.append("KW3552 : 'KW' '3552';\n"); - grammarBuilder.append("KW3553 : 'KW' '3553';\n"); - grammarBuilder.append("KW3554 : 'KW' '3554';\n"); - grammarBuilder.append("KW3555 : 'KW' '3555';\n"); - grammarBuilder.append("KW3556 : 'KW' '3556';\n"); - grammarBuilder.append("KW3557 : 'KW' '3557';\n"); - grammarBuilder.append("KW3558 : 'KW' '3558';\n"); - grammarBuilder.append("KW3559 : 'KW' '3559';\n"); - grammarBuilder.append("KW3560 : 'KW' '3560';\n"); - grammarBuilder.append("KW3561 : 'KW' '3561';\n"); - grammarBuilder.append("KW3562 : 'KW' '3562';\n"); - grammarBuilder.append("KW3563 : 'KW' '3563';\n"); - grammarBuilder.append("KW3564 : 'KW' '3564';\n"); - grammarBuilder.append("KW3565 : 'KW' '3565';\n"); - grammarBuilder.append("KW3566 : 'KW' '3566';\n"); - grammarBuilder.append("KW3567 : 'KW' '3567';\n"); - grammarBuilder.append("KW3568 : 'KW' '3568';\n"); - grammarBuilder.append("KW3569 : 'KW' '3569';\n"); - grammarBuilder.append("KW3570 : 'KW' '3570';\n"); - grammarBuilder.append("KW3571 : 'KW' '3571';\n"); - grammarBuilder.append("KW3572 : 'KW' '3572';\n"); - grammarBuilder.append("KW3573 : 'KW' '3573';\n"); - grammarBuilder.append("KW3574 : 'KW' '3574';\n"); - grammarBuilder.append("KW3575 : 'KW' '3575';\n"); - grammarBuilder.append("KW3576 : 'KW' '3576';\n"); - grammarBuilder.append("KW3577 : 'KW' '3577';\n"); - grammarBuilder.append("KW3578 : 'KW' '3578';\n"); - grammarBuilder.append("KW3579 : 'KW' '3579';\n"); - grammarBuilder.append("KW3580 : 'KW' '3580';\n"); - grammarBuilder.append("KW3581 : 'KW' '3581';\n"); - grammarBuilder.append("KW3582 : 'KW' '3582';\n"); - grammarBuilder.append("KW3583 : 'KW' '3583';\n"); - grammarBuilder.append("KW3584 : 'KW' '3584';\n"); - grammarBuilder.append("KW3585 : 'KW' '3585';\n"); - grammarBuilder.append("KW3586 : 'KW' '3586';\n"); - grammarBuilder.append("KW3587 : 'KW' '3587';\n"); - grammarBuilder.append("KW3588 : 'KW' '3588';\n"); - grammarBuilder.append("KW3589 : 'KW' '3589';\n"); - grammarBuilder.append("KW3590 : 'KW' '3590';\n"); - grammarBuilder.append("KW3591 : 'KW' '3591';\n"); - grammarBuilder.append("KW3592 : 'KW' '3592';\n"); - grammarBuilder.append("KW3593 : 'KW' '3593';\n"); - grammarBuilder.append("KW3594 : 'KW' '3594';\n"); - grammarBuilder.append("KW3595 : 'KW' '3595';\n"); - grammarBuilder.append("KW3596 : 'KW' '3596';\n"); - grammarBuilder.append("KW3597 : 'KW' '3597';\n"); - grammarBuilder.append("KW3598 : 'KW' '3598';\n"); - grammarBuilder.append("KW3599 : 'KW' '3599';\n"); - grammarBuilder.append("KW3600 : 'KW' '3600';\n"); - grammarBuilder.append("KW3601 : 'KW' '3601';\n"); - grammarBuilder.append("KW3602 : 'KW' '3602';\n"); - grammarBuilder.append("KW3603 : 'KW' '3603';\n"); - grammarBuilder.append("KW3604 : 'KW' '3604';\n"); - grammarBuilder.append("KW3605 : 'KW' '3605';\n"); - grammarBuilder.append("KW3606 : 'KW' '3606';\n"); - grammarBuilder.append("KW3607 : 'KW' '3607';\n"); - grammarBuilder.append("KW3608 : 'KW' '3608';\n"); - grammarBuilder.append("KW3609 : 'KW' '3609';\n"); - grammarBuilder.append("KW3610 : 'KW' '3610';\n"); - grammarBuilder.append("KW3611 : 'KW' '3611';\n"); - grammarBuilder.append("KW3612 : 'KW' '3612';\n"); - grammarBuilder.append("KW3613 : 'KW' '3613';\n"); - grammarBuilder.append("KW3614 : 'KW' '3614';\n"); - grammarBuilder.append("KW3615 : 'KW' '3615';\n"); - grammarBuilder.append("KW3616 : 'KW' '3616';\n"); - grammarBuilder.append("KW3617 : 'KW' '3617';\n"); - grammarBuilder.append("KW3618 : 'KW' '3618';\n"); - grammarBuilder.append("KW3619 : 'KW' '3619';\n"); - grammarBuilder.append("KW3620 : 'KW' '3620';\n"); - grammarBuilder.append("KW3621 : 'KW' '3621';\n"); - grammarBuilder.append("KW3622 : 'KW' '3622';\n"); - grammarBuilder.append("KW3623 : 'KW' '3623';\n"); - grammarBuilder.append("KW3624 : 'KW' '3624';\n"); - grammarBuilder.append("KW3625 : 'KW' '3625';\n"); - grammarBuilder.append("KW3626 : 'KW' '3626';\n"); - grammarBuilder.append("KW3627 : 'KW' '3627';\n"); - grammarBuilder.append("KW3628 : 'KW' '3628';\n"); - grammarBuilder.append("KW3629 : 'KW' '3629';\n"); - grammarBuilder.append("KW3630 : 'KW' '3630';\n"); - grammarBuilder.append("KW3631 : 'KW' '3631';\n"); - grammarBuilder.append("KW3632 : 'KW' '3632';\n"); - grammarBuilder.append("KW3633 : 'KW' '3633';\n"); - grammarBuilder.append("KW3634 : 'KW' '3634';\n"); - grammarBuilder.append("KW3635 : 'KW' '3635';\n"); - grammarBuilder.append("KW3636 : 'KW' '3636';\n"); - grammarBuilder.append("KW3637 : 'KW' '3637';\n"); - grammarBuilder.append("KW3638 : 'KW' '3638';\n"); - grammarBuilder.append("KW3639 : 'KW' '3639';\n"); - grammarBuilder.append("KW3640 : 'KW' '3640';\n"); - grammarBuilder.append("KW3641 : 'KW' '3641';\n"); - grammarBuilder.append("KW3642 : 'KW' '3642';\n"); - grammarBuilder.append("KW3643 : 'KW' '3643';\n"); - grammarBuilder.append("KW3644 : 'KW' '3644';\n"); - grammarBuilder.append("KW3645 : 'KW' '3645';\n"); - grammarBuilder.append("KW3646 : 'KW' '3646';\n"); - grammarBuilder.append("KW3647 : 'KW' '3647';\n"); - grammarBuilder.append("KW3648 : 'KW' '3648';\n"); - grammarBuilder.append("KW3649 : 'KW' '3649';\n"); - grammarBuilder.append("KW3650 : 'KW' '3650';\n"); - grammarBuilder.append("KW3651 : 'KW' '3651';\n"); - grammarBuilder.append("KW3652 : 'KW' '3652';\n"); - grammarBuilder.append("KW3653 : 'KW' '3653';\n"); - grammarBuilder.append("KW3654 : 'KW' '3654';\n"); - grammarBuilder.append("KW3655 : 'KW' '3655';\n"); - grammarBuilder.append("KW3656 : 'KW' '3656';\n"); - grammarBuilder.append("KW3657 : 'KW' '3657';\n"); - grammarBuilder.append("KW3658 : 'KW' '3658';\n"); - grammarBuilder.append("KW3659 : 'KW' '3659';\n"); - grammarBuilder.append("KW3660 : 'KW' '3660';\n"); - grammarBuilder.append("KW3661 : 'KW' '3661';\n"); - grammarBuilder.append("KW3662 : 'KW' '3662';\n"); - grammarBuilder.append("KW3663 : 'KW' '3663';\n"); - grammarBuilder.append("KW3664 : 'KW' '3664';\n"); - grammarBuilder.append("KW3665 : 'KW' '3665';\n"); - grammarBuilder.append("KW3666 : 'KW' '3666';\n"); - grammarBuilder.append("KW3667 : 'KW' '3667';\n"); - grammarBuilder.append("KW3668 : 'KW' '3668';\n"); - grammarBuilder.append("KW3669 : 'KW' '3669';\n"); - grammarBuilder.append("KW3670 : 'KW' '3670';\n"); - grammarBuilder.append("KW3671 : 'KW' '3671';\n"); - grammarBuilder.append("KW3672 : 'KW' '3672';\n"); - grammarBuilder.append("KW3673 : 'KW' '3673';\n"); - grammarBuilder.append("KW3674 : 'KW' '3674';\n"); - grammarBuilder.append("KW3675 : 'KW' '3675';\n"); - grammarBuilder.append("KW3676 : 'KW' '3676';\n"); - grammarBuilder.append("KW3677 : 'KW' '3677';\n"); - grammarBuilder.append("KW3678 : 'KW' '3678';\n"); - grammarBuilder.append("KW3679 : 'KW' '3679';\n"); - grammarBuilder.append("KW3680 : 'KW' '3680';\n"); - grammarBuilder.append("KW3681 : 'KW' '3681';\n"); - grammarBuilder.append("KW3682 : 'KW' '3682';\n"); - grammarBuilder.append("KW3683 : 'KW' '3683';\n"); - grammarBuilder.append("KW3684 : 'KW' '3684';\n"); - grammarBuilder.append("KW3685 : 'KW' '3685';\n"); - grammarBuilder.append("KW3686 : 'KW' '3686';\n"); - grammarBuilder.append("KW3687 : 'KW' '3687';\n"); - grammarBuilder.append("KW3688 : 'KW' '3688';\n"); - grammarBuilder.append("KW3689 : 'KW' '3689';\n"); - grammarBuilder.append("KW3690 : 'KW' '3690';\n"); - grammarBuilder.append("KW3691 : 'KW' '3691';\n"); - grammarBuilder.append("KW3692 : 'KW' '3692';\n"); - grammarBuilder.append("KW3693 : 'KW' '3693';\n"); - grammarBuilder.append("KW3694 : 'KW' '3694';\n"); - grammarBuilder.append("KW3695 : 'KW' '3695';\n"); - grammarBuilder.append("KW3696 : 'KW' '3696';\n"); - grammarBuilder.append("KW3697 : 'KW' '3697';\n"); - grammarBuilder.append("KW3698 : 'KW' '3698';\n"); - grammarBuilder.append("KW3699 : 'KW' '3699';\n"); - grammarBuilder.append("KW3700 : 'KW' '3700';\n"); - grammarBuilder.append("KW3701 : 'KW' '3701';\n"); - grammarBuilder.append("KW3702 : 'KW' '3702';\n"); - grammarBuilder.append("KW3703 : 'KW' '3703';\n"); - grammarBuilder.append("KW3704 : 'KW' '3704';\n"); - grammarBuilder.append("KW3705 : 'KW' '3705';\n"); - grammarBuilder.append("KW3706 : 'KW' '3706';\n"); - grammarBuilder.append("KW3707 : 'KW' '3707';\n"); - grammarBuilder.append("KW3708 : 'KW' '3708';\n"); - grammarBuilder.append("KW3709 : 'KW' '3709';\n"); - grammarBuilder.append("KW3710 : 'KW' '3710';\n"); - grammarBuilder.append("KW3711 : 'KW' '3711';\n"); - grammarBuilder.append("KW3712 : 'KW' '3712';\n"); - grammarBuilder.append("KW3713 : 'KW' '3713';\n"); - grammarBuilder.append("KW3714 : 'KW' '3714';\n"); - grammarBuilder.append("KW3715 : 'KW' '3715';\n"); - grammarBuilder.append("KW3716 : 'KW' '3716';\n"); - grammarBuilder.append("KW3717 : 'KW' '3717';\n"); - grammarBuilder.append("KW3718 : 'KW' '3718';\n"); - grammarBuilder.append("KW3719 : 'KW' '3719';\n"); - grammarBuilder.append("KW3720 : 'KW' '3720';\n"); - grammarBuilder.append("KW3721 : 'KW' '3721';\n"); - grammarBuilder.append("KW3722 : 'KW' '3722';\n"); - grammarBuilder.append("KW3723 : 'KW' '3723';\n"); - grammarBuilder.append("KW3724 : 'KW' '3724';\n"); - grammarBuilder.append("KW3725 : 'KW' '3725';\n"); - grammarBuilder.append("KW3726 : 'KW' '3726';\n"); - grammarBuilder.append("KW3727 : 'KW' '3727';\n"); - grammarBuilder.append("KW3728 : 'KW' '3728';\n"); - grammarBuilder.append("KW3729 : 'KW' '3729';\n"); - grammarBuilder.append("KW3730 : 'KW' '3730';\n"); - grammarBuilder.append("KW3731 : 'KW' '3731';\n"); - grammarBuilder.append("KW3732 : 'KW' '3732';\n"); - grammarBuilder.append("KW3733 : 'KW' '3733';\n"); - grammarBuilder.append("KW3734 : 'KW' '3734';\n"); - grammarBuilder.append("KW3735 : 'KW' '3735';\n"); - grammarBuilder.append("KW3736 : 'KW' '3736';\n"); - grammarBuilder.append("KW3737 : 'KW' '3737';\n"); - grammarBuilder.append("KW3738 : 'KW' '3738';\n"); - grammarBuilder.append("KW3739 : 'KW' '3739';\n"); - grammarBuilder.append("KW3740 : 'KW' '3740';\n"); - grammarBuilder.append("KW3741 : 'KW' '3741';\n"); - grammarBuilder.append("KW3742 : 'KW' '3742';\n"); - grammarBuilder.append("KW3743 : 'KW' '3743';\n"); - grammarBuilder.append("KW3744 : 'KW' '3744';\n"); - grammarBuilder.append("KW3745 : 'KW' '3745';\n"); - grammarBuilder.append("KW3746 : 'KW' '3746';\n"); - grammarBuilder.append("KW3747 : 'KW' '3747';\n"); - grammarBuilder.append("KW3748 : 'KW' '3748';\n"); - grammarBuilder.append("KW3749 : 'KW' '3749';\n"); - grammarBuilder.append("KW3750 : 'KW' '3750';\n"); - grammarBuilder.append("KW3751 : 'KW' '3751';\n"); - grammarBuilder.append("KW3752 : 'KW' '3752';\n"); - grammarBuilder.append("KW3753 : 'KW' '3753';\n"); - grammarBuilder.append("KW3754 : 'KW' '3754';\n"); - grammarBuilder.append("KW3755 : 'KW' '3755';\n"); - grammarBuilder.append("KW3756 : 'KW' '3756';\n"); - grammarBuilder.append("KW3757 : 'KW' '3757';\n"); - grammarBuilder.append("KW3758 : 'KW' '3758';\n"); - grammarBuilder.append("KW3759 : 'KW' '3759';\n"); - grammarBuilder.append("KW3760 : 'KW' '3760';\n"); - grammarBuilder.append("KW3761 : 'KW' '3761';\n"); - grammarBuilder.append("KW3762 : 'KW' '3762';\n"); - grammarBuilder.append("KW3763 : 'KW' '3763';\n"); - grammarBuilder.append("KW3764 : 'KW' '3764';\n"); - grammarBuilder.append("KW3765 : 'KW' '3765';\n"); - grammarBuilder.append("KW3766 : 'KW' '3766';\n"); - grammarBuilder.append("KW3767 : 'KW' '3767';\n"); - grammarBuilder.append("KW3768 : 'KW' '3768';\n"); - grammarBuilder.append("KW3769 : 'KW' '3769';\n"); - grammarBuilder.append("KW3770 : 'KW' '3770';\n"); - grammarBuilder.append("KW3771 : 'KW' '3771';\n"); - grammarBuilder.append("KW3772 : 'KW' '3772';\n"); - grammarBuilder.append("KW3773 : 'KW' '3773';\n"); - grammarBuilder.append("KW3774 : 'KW' '3774';\n"); - grammarBuilder.append("KW3775 : 'KW' '3775';\n"); - grammarBuilder.append("KW3776 : 'KW' '3776';\n"); - grammarBuilder.append("KW3777 : 'KW' '3777';\n"); - grammarBuilder.append("KW3778 : 'KW' '3778';\n"); - grammarBuilder.append("KW3779 : 'KW' '3779';\n"); - grammarBuilder.append("KW3780 : 'KW' '3780';\n"); - grammarBuilder.append("KW3781 : 'KW' '3781';\n"); - grammarBuilder.append("KW3782 : 'KW' '3782';\n"); - grammarBuilder.append("KW3783 : 'KW' '3783';\n"); - grammarBuilder.append("KW3784 : 'KW' '3784';\n"); - grammarBuilder.append("KW3785 : 'KW' '3785';\n"); - grammarBuilder.append("KW3786 : 'KW' '3786';\n"); - grammarBuilder.append("KW3787 : 'KW' '3787';\n"); - grammarBuilder.append("KW3788 : 'KW' '3788';\n"); - grammarBuilder.append("KW3789 : 'KW' '3789';\n"); - grammarBuilder.append("KW3790 : 'KW' '3790';\n"); - grammarBuilder.append("KW3791 : 'KW' '3791';\n"); - grammarBuilder.append("KW3792 : 'KW' '3792';\n"); - grammarBuilder.append("KW3793 : 'KW' '3793';\n"); - grammarBuilder.append("KW3794 : 'KW' '3794';\n"); - grammarBuilder.append("KW3795 : 'KW' '3795';\n"); - grammarBuilder.append("KW3796 : 'KW' '3796';\n"); - grammarBuilder.append("KW3797 : 'KW' '3797';\n"); - grammarBuilder.append("KW3798 : 'KW' '3798';\n"); - grammarBuilder.append("KW3799 : 'KW' '3799';\n"); - grammarBuilder.append("KW3800 : 'KW' '3800';\n"); - grammarBuilder.append("KW3801 : 'KW' '3801';\n"); - grammarBuilder.append("KW3802 : 'KW' '3802';\n"); - grammarBuilder.append("KW3803 : 'KW' '3803';\n"); - grammarBuilder.append("KW3804 : 'KW' '3804';\n"); - grammarBuilder.append("KW3805 : 'KW' '3805';\n"); - grammarBuilder.append("KW3806 : 'KW' '3806';\n"); - grammarBuilder.append("KW3807 : 'KW' '3807';\n"); - grammarBuilder.append("KW3808 : 'KW' '3808';\n"); - grammarBuilder.append("KW3809 : 'KW' '3809';\n"); - grammarBuilder.append("KW3810 : 'KW' '3810';\n"); - grammarBuilder.append("KW3811 : 'KW' '3811';\n"); - grammarBuilder.append("KW3812 : 'KW' '3812';\n"); - grammarBuilder.append("KW3813 : 'KW' '3813';\n"); - grammarBuilder.append("KW3814 : 'KW' '3814';\n"); - grammarBuilder.append("KW3815 : 'KW' '3815';\n"); - grammarBuilder.append("KW3816 : 'KW' '3816';\n"); - grammarBuilder.append("KW3817 : 'KW' '3817';\n"); - grammarBuilder.append("KW3818 : 'KW' '3818';\n"); - grammarBuilder.append("KW3819 : 'KW' '3819';\n"); - grammarBuilder.append("KW3820 : 'KW' '3820';\n"); - grammarBuilder.append("KW3821 : 'KW' '3821';\n"); - grammarBuilder.append("KW3822 : 'KW' '3822';\n"); - grammarBuilder.append("KW3823 : 'KW' '3823';\n"); - grammarBuilder.append("KW3824 : 'KW' '3824';\n"); - grammarBuilder.append("KW3825 : 'KW' '3825';\n"); - grammarBuilder.append("KW3826 : 'KW' '3826';\n"); - grammarBuilder.append("KW3827 : 'KW' '3827';\n"); - grammarBuilder.append("KW3828 : 'KW' '3828';\n"); - grammarBuilder.append("KW3829 : 'KW' '3829';\n"); - grammarBuilder.append("KW3830 : 'KW' '3830';\n"); - grammarBuilder.append("KW3831 : 'KW' '3831';\n"); - grammarBuilder.append("KW3832 : 'KW' '3832';\n"); - grammarBuilder.append("KW3833 : 'KW' '3833';\n"); - grammarBuilder.append("KW3834 : 'KW' '3834';\n"); - grammarBuilder.append("KW3835 : 'KW' '3835';\n"); - grammarBuilder.append("KW3836 : 'KW' '3836';\n"); - grammarBuilder.append("KW3837 : 'KW' '3837';\n"); - grammarBuilder.append("KW3838 : 'KW' '3838';\n"); - grammarBuilder.append("KW3839 : 'KW' '3839';\n"); - grammarBuilder.append("KW3840 : 'KW' '3840';\n"); - grammarBuilder.append("KW3841 : 'KW' '3841';\n"); - grammarBuilder.append("KW3842 : 'KW' '3842';\n"); - grammarBuilder.append("KW3843 : 'KW' '3843';\n"); - grammarBuilder.append("KW3844 : 'KW' '3844';\n"); - grammarBuilder.append("KW3845 : 'KW' '3845';\n"); - grammarBuilder.append("KW3846 : 'KW' '3846';\n"); - grammarBuilder.append("KW3847 : 'KW' '3847';\n"); - grammarBuilder.append("KW3848 : 'KW' '3848';\n"); - grammarBuilder.append("KW3849 : 'KW' '3849';\n"); - grammarBuilder.append("KW3850 : 'KW' '3850';\n"); - grammarBuilder.append("KW3851 : 'KW' '3851';\n"); - grammarBuilder.append("KW3852 : 'KW' '3852';\n"); - grammarBuilder.append("KW3853 : 'KW' '3853';\n"); - grammarBuilder.append("KW3854 : 'KW' '3854';\n"); - grammarBuilder.append("KW3855 : 'KW' '3855';\n"); - grammarBuilder.append("KW3856 : 'KW' '3856';\n"); - grammarBuilder.append("KW3857 : 'KW' '3857';\n"); - grammarBuilder.append("KW3858 : 'KW' '3858';\n"); - grammarBuilder.append("KW3859 : 'KW' '3859';\n"); - grammarBuilder.append("KW3860 : 'KW' '3860';\n"); - grammarBuilder.append("KW3861 : 'KW' '3861';\n"); - grammarBuilder.append("KW3862 : 'KW' '3862';\n"); - grammarBuilder.append("KW3863 : 'KW' '3863';\n"); - grammarBuilder.append("KW3864 : 'KW' '3864';\n"); - grammarBuilder.append("KW3865 : 'KW' '3865';\n"); - grammarBuilder.append("KW3866 : 'KW' '3866';\n"); - grammarBuilder.append("KW3867 : 'KW' '3867';\n"); - grammarBuilder.append("KW3868 : 'KW' '3868';\n"); - grammarBuilder.append("KW3869 : 'KW' '3869';\n"); - grammarBuilder.append("KW3870 : 'KW' '3870';\n"); - grammarBuilder.append("KW3871 : 'KW' '3871';\n"); - grammarBuilder.append("KW3872 : 'KW' '3872';\n"); - grammarBuilder.append("KW3873 : 'KW' '3873';\n"); - grammarBuilder.append("KW3874 : 'KW' '3874';\n"); - grammarBuilder.append("KW3875 : 'KW' '3875';\n"); - grammarBuilder.append("KW3876 : 'KW' '3876';\n"); - grammarBuilder.append("KW3877 : 'KW' '3877';\n"); - grammarBuilder.append("KW3878 : 'KW' '3878';\n"); - grammarBuilder.append("KW3879 : 'KW' '3879';\n"); - grammarBuilder.append("KW3880 : 'KW' '3880';\n"); - grammarBuilder.append("KW3881 : 'KW' '3881';\n"); - grammarBuilder.append("KW3882 : 'KW' '3882';\n"); - grammarBuilder.append("KW3883 : 'KW' '3883';\n"); - grammarBuilder.append("KW3884 : 'KW' '3884';\n"); - grammarBuilder.append("KW3885 : 'KW' '3885';\n"); - grammarBuilder.append("KW3886 : 'KW' '3886';\n"); - grammarBuilder.append("KW3887 : 'KW' '3887';\n"); - grammarBuilder.append("KW3888 : 'KW' '3888';\n"); - grammarBuilder.append("KW3889 : 'KW' '3889';\n"); - grammarBuilder.append("KW3890 : 'KW' '3890';\n"); - grammarBuilder.append("KW3891 : 'KW' '3891';\n"); - grammarBuilder.append("KW3892 : 'KW' '3892';\n"); - grammarBuilder.append("KW3893 : 'KW' '3893';\n"); - grammarBuilder.append("KW3894 : 'KW' '3894';\n"); - grammarBuilder.append("KW3895 : 'KW' '3895';\n"); - grammarBuilder.append("KW3896 : 'KW' '3896';\n"); - grammarBuilder.append("KW3897 : 'KW' '3897';\n"); - grammarBuilder.append("KW3898 : 'KW' '3898';\n"); - grammarBuilder.append("KW3899 : 'KW' '3899';\n"); - grammarBuilder.append("KW3900 : 'KW' '3900';\n"); - grammarBuilder.append("KW3901 : 'KW' '3901';\n"); - grammarBuilder.append("KW3902 : 'KW' '3902';\n"); - grammarBuilder.append("KW3903 : 'KW' '3903';\n"); - grammarBuilder.append("KW3904 : 'KW' '3904';\n"); - grammarBuilder.append("KW3905 : 'KW' '3905';\n"); - grammarBuilder.append("KW3906 : 'KW' '3906';\n"); - grammarBuilder.append("KW3907 : 'KW' '3907';\n"); - grammarBuilder.append("KW3908 : 'KW' '3908';\n"); - grammarBuilder.append("KW3909 : 'KW' '3909';\n"); - grammarBuilder.append("KW3910 : 'KW' '3910';\n"); - grammarBuilder.append("KW3911 : 'KW' '3911';\n"); - grammarBuilder.append("KW3912 : 'KW' '3912';\n"); - grammarBuilder.append("KW3913 : 'KW' '3913';\n"); - grammarBuilder.append("KW3914 : 'KW' '3914';\n"); - grammarBuilder.append("KW3915 : 'KW' '3915';\n"); - grammarBuilder.append("KW3916 : 'KW' '3916';\n"); - grammarBuilder.append("KW3917 : 'KW' '3917';\n"); - grammarBuilder.append("KW3918 : 'KW' '3918';\n"); - grammarBuilder.append("KW3919 : 'KW' '3919';\n"); - grammarBuilder.append("KW3920 : 'KW' '3920';\n"); - grammarBuilder.append("KW3921 : 'KW' '3921';\n"); - grammarBuilder.append("KW3922 : 'KW' '3922';\n"); - grammarBuilder.append("KW3923 : 'KW' '3923';\n"); - grammarBuilder.append("KW3924 : 'KW' '3924';\n"); - grammarBuilder.append("KW3925 : 'KW' '3925';\n"); - grammarBuilder.append("KW3926 : 'KW' '3926';\n"); - grammarBuilder.append("KW3927 : 'KW' '3927';\n"); - grammarBuilder.append("KW3928 : 'KW' '3928';\n"); - grammarBuilder.append("KW3929 : 'KW' '3929';\n"); - grammarBuilder.append("KW3930 : 'KW' '3930';\n"); - grammarBuilder.append("KW3931 : 'KW' '3931';\n"); - grammarBuilder.append("KW3932 : 'KW' '3932';\n"); - grammarBuilder.append("KW3933 : 'KW' '3933';\n"); - grammarBuilder.append("KW3934 : 'KW' '3934';\n"); - grammarBuilder.append("KW3935 : 'KW' '3935';\n"); - grammarBuilder.append("KW3936 : 'KW' '3936';\n"); - grammarBuilder.append("KW3937 : 'KW' '3937';\n"); - grammarBuilder.append("KW3938 : 'KW' '3938';\n"); - grammarBuilder.append("KW3939 : 'KW' '3939';\n"); - grammarBuilder.append("KW3940 : 'KW' '3940';\n"); - grammarBuilder.append("KW3941 : 'KW' '3941';\n"); - grammarBuilder.append("KW3942 : 'KW' '3942';\n"); - grammarBuilder.append("KW3943 : 'KW' '3943';\n"); - grammarBuilder.append("KW3944 : 'KW' '3944';\n"); - grammarBuilder.append("KW3945 : 'KW' '3945';\n"); - grammarBuilder.append("KW3946 : 'KW' '3946';\n"); - grammarBuilder.append("KW3947 : 'KW' '3947';\n"); - grammarBuilder.append("KW3948 : 'KW' '3948';\n"); - grammarBuilder.append("KW3949 : 'KW' '3949';\n"); - grammarBuilder.append("KW3950 : 'KW' '3950';\n"); - grammarBuilder.append("KW3951 : 'KW' '3951';\n"); - grammarBuilder.append("KW3952 : 'KW' '3952';\n"); - grammarBuilder.append("KW3953 : 'KW' '3953';\n"); - grammarBuilder.append("KW3954 : 'KW' '3954';\n"); - grammarBuilder.append("KW3955 : 'KW' '3955';\n"); - grammarBuilder.append("KW3956 : 'KW' '3956';\n"); - grammarBuilder.append("KW3957 : 'KW' '3957';\n"); - grammarBuilder.append("KW3958 : 'KW' '3958';\n"); - grammarBuilder.append("KW3959 : 'KW' '3959';\n"); - grammarBuilder.append("KW3960 : 'KW' '3960';\n"); - grammarBuilder.append("KW3961 : 'KW' '3961';\n"); - grammarBuilder.append("KW3962 : 'KW' '3962';\n"); - grammarBuilder.append("KW3963 : 'KW' '3963';\n"); - grammarBuilder.append("KW3964 : 'KW' '3964';\n"); - grammarBuilder.append("KW3965 : 'KW' '3965';\n"); - grammarBuilder.append("KW3966 : 'KW' '3966';\n"); - grammarBuilder.append("KW3967 : 'KW' '3967';\n"); - grammarBuilder.append("KW3968 : 'KW' '3968';\n"); - grammarBuilder.append("KW3969 : 'KW' '3969';\n"); - grammarBuilder.append("KW3970 : 'KW' '3970';\n"); - grammarBuilder.append("KW3971 : 'KW' '3971';\n"); - grammarBuilder.append("KW3972 : 'KW' '3972';\n"); - grammarBuilder.append("KW3973 : 'KW' '3973';\n"); - grammarBuilder.append("KW3974 : 'KW' '3974';\n"); - grammarBuilder.append("KW3975 : 'KW' '3975';\n"); - grammarBuilder.append("KW3976 : 'KW' '3976';\n"); - grammarBuilder.append("KW3977 : 'KW' '3977';\n"); - grammarBuilder.append("KW3978 : 'KW' '3978';\n"); - grammarBuilder.append("KW3979 : 'KW' '3979';\n"); - grammarBuilder.append("KW3980 : 'KW' '3980';\n"); - grammarBuilder.append("KW3981 : 'KW' '3981';\n"); - grammarBuilder.append("KW3982 : 'KW' '3982';\n"); - grammarBuilder.append("KW3983 : 'KW' '3983';\n"); - grammarBuilder.append("KW3984 : 'KW' '3984';\n"); - grammarBuilder.append("KW3985 : 'KW' '3985';\n"); - grammarBuilder.append("KW3986 : 'KW' '3986';\n"); - grammarBuilder.append("KW3987 : 'KW' '3987';\n"); - grammarBuilder.append("KW3988 : 'KW' '3988';\n"); - grammarBuilder.append("KW3989 : 'KW' '3989';\n"); - grammarBuilder.append("KW3990 : 'KW' '3990';\n"); - grammarBuilder.append("KW3991 : 'KW' '3991';\n"); - grammarBuilder.append("KW3992 : 'KW' '3992';\n"); - grammarBuilder.append("KW3993 : 'KW' '3993';\n"); - grammarBuilder.append("KW3994 : 'KW' '3994';\n"); - grammarBuilder.append("KW3995 : 'KW' '3995';\n"); - grammarBuilder.append("KW3996 : 'KW' '3996';\n"); - grammarBuilder.append("KW3997 : 'KW' '3997';\n"); - grammarBuilder.append("KW3998 : 'KW' '3998';\n"); - grammarBuilder.append("KW3999 : 'KW' '3999';"); - String grammar = grammarBuilder.toString(); - - String input ="KW400"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='KW400',<402>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(110); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : .*? ('a' | 'ab') {print(self.text)} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : . {print(self.text)};"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "a\n" + - "b\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:1='b',<3>,1:1]\n" + - "[@2,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"hi\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:3='\"hi\"',<1>,1:0]\n" + - "[@1,4:8='\"mom\"',<1>,1:4]\n" + - "[@2,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParentheses() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("START_BLOCK: '-.-.-';\n"); - grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); - grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); - grammarBuilder.append("fragment L_A: '.-';\n"); - grammarBuilder.append("fragment L_K: '-.-';\n"); - grammarBuilder.append("SEPARATOR: '!';"); - String grammar = grammarBuilder.toString(); - - String input ="-.-.-!"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='-.-.-',<1>,1:0]\n" + - "[@1,5:5='!',<3>,1:5]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPositionAdjustingLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1839); - grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("def resetAcceptPosition(self, index, line, column):\n"); - grammarBuilder.append(" self._input.seek(index)\n"); - grammarBuilder.append(" self.line = line\n"); - grammarBuilder.append(" self.column = column\n"); - grammarBuilder.append(" self._interp.consume(self._input)\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def nextToken(self):\n"); - grammarBuilder.append(" if self._interp.__dict__.get(\"resetAcceptPosition\", None) is None:\n"); - grammarBuilder.append(" self._interp.__dict__[\"resetAcceptPosition\"] = self.resetAcceptPosition\n"); - grammarBuilder.append(" return super(type(self),self).nextToken()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def emit(self):\n"); - grammarBuilder.append(" if self._type==PositionAdjustingLexer.TOKENS:\n"); - grammarBuilder.append(" self.handleAcceptPositionForKeyword(\"tokens\")\n"); - grammarBuilder.append(" elif self._type==PositionAdjustingLexer.LABEL:\n"); - grammarBuilder.append(" self.handleAcceptPositionForIdentifier()\n"); - grammarBuilder.append(" return super(type(self),self).emit()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def handleAcceptPositionForIdentifier(self):\n"); - grammarBuilder.append(" tokenText = self.text\n"); - grammarBuilder.append(" identifierLength = 0\n"); - grammarBuilder.append(" while identifierLength < len(tokenText) and self.isIdentifierChar(tokenText[identifierLength]):\n"); - grammarBuilder.append(" identifierLength += 1\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + identifierLength:\n"); - grammarBuilder.append(" offset = identifierLength - 1\n"); - grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); - grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); - grammarBuilder.append(" return True\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" return False\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def handleAcceptPositionForKeyword(self, keyword):\n"); - grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + len(keyword):\n"); - grammarBuilder.append(" offset = len(keyword) - 1\n"); - grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); - grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); - grammarBuilder.append(" return True\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" return False\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@staticmethod\n"); - grammarBuilder.append("def isIdentifierChar(c):\n"); - grammarBuilder.append(" return c.isalnum() or c == '_'\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ASSIGN : '=' ;\n"); - grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); - grammarBuilder.append("LCURLY: '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// 'tokens' followed by '{'\n"); - grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); - grammarBuilder.append("LABEL\n"); - grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("IDENTIFIER\n"); - grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("IGNORED\n"); - grammarBuilder.append(" : [ \\t\\r\\n]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("NEWLINE\n"); - grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS\n"); - grammarBuilder.append(" : [ \\t]+ -> skip\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - String input = - "tokens\n" + - "tokens {\n" + - "notLabel\n" + - "label1 =\n" + - "label2 +=\n" + - "notLabel\n"; - String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); - assertEquals( - "[@0,0:5='tokens',<6>,1:0]\n" + - "[@1,7:12='tokens',<4>,2:0]\n" + - "[@2,14:14='{',<3>,2:7]\n" + - "[@3,16:23='notLabel',<6>,3:0]\n" + - "[@4,25:30='label1',<5>,4:0]\n" + - "[@5,32:32='=',<1>,4:7]\n" + - "[@6,34:39='label2',<5>,5:0]\n" + - "[@7,41:42='+=',<2>,5:7]\n" + - "[@8,44:51='notLabel',<6>,6:0]\n" + - "[@9,53:52='',<-1>,7:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testQuoteTranslation() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); - String grammar = grammarBuilder.toString(); - - String input ="\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\"',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : '-' I ;\n"); - grammarBuilder.append("I : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 -21 3"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='34',<2>,1:0]\n" + - "[@1,3:5='-21',<1>,1:3]\n" + - "[@2,7:7='3',<2>,1:7]\n" + - "[@3,8:7='',<-1>,1:8]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSlashes() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("Backslash : '\\\\';\n"); - grammarBuilder.append("Slash : '/';\n"); - grammarBuilder.append("Vee : '\\\\/';\n"); - grammarBuilder.append("Wedge : '/\\\\';\n"); - grammarBuilder.append("WS : [ \\t] -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="\\ / \\/ /\\"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\\',<1>,1:0]\n" + - "[@1,2:2='/',<2>,1:2]\n" + - "[@2,4:5='\\/',<3>,1:4]\n" + - "[@3,7:8='/\\',<4>,1:7]\n" + - "[@4,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testZeroLengthToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("BeginString\n"); - grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("mode StringMode;\n"); - grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); - grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); - grammarBuilder.append("mode EndStringMode; \n"); - grammarBuilder.append(" EndString : '\\'' -> popMode;"); - String grammar = grammarBuilder.toString(); - - String input ="'xxx'"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4=''xxx'',<1>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestListeners.java index d57a8cc8e..9104b6f7e 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestListeners.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestListeners.java @@ -1,371 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestListeners extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(490); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("class LeafListener(TListener):\n"); - grammarBuilder.append(" def visitTerminal(self, node):\n"); - grammarBuilder.append(" print(node.symbol.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "1\n" + - "2\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(651); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("class LeafListener(TListener):\n"); - grammarBuilder.append(" def exitE(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==3:\n"); - grammarBuilder.append(" print(ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text)\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1\n" + - "2\n" + - "3\n" + - "2 3 2\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(631); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("class LeafListener(TListener):\n"); - grammarBuilder.append(" def exitCall(self, ctx):\n"); - grammarBuilder.append(" print(ctx.e().start.text + ' ' + str(ctx.eList()))\n"); - grammarBuilder.append(" def exitInt(self, ctx):\n"); - grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1\n" + - "2\n" + - "3\n" + - "1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(676); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("class LeafListener(TListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b 1) (b 2))\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(676); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("class LeafListener(TListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(639); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("class LeafListener(TListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(639); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("class LeafListener(TListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParseTrees.java index 27edc6fe4..d8e7127ea 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParseTrees.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParseTrees.java @@ -1,301 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParseTrees extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2AltLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(136); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyyxyxz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x y y x y x z)\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2Alts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(129); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a y)\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAltNum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(562); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class MyRuleNode(ParserRuleContext):\n"); - grammarBuilder.append(" def __init__(self, parent = None, invokingStateNumber = None ):\n"); - grammarBuilder.append(" super(TParser.MyRuleNode, self).__init__(parent, invokingStateNumber)\n"); - grammarBuilder.append(" self.altNum = 0;\n"); - grammarBuilder.append(" def getAltNumber(self):\n"); - grammarBuilder.append(" return self.altNum\n"); - grammarBuilder.append(" def setAltNumber(self, altNum):\n"); - grammarBuilder.append(" self.altNum = altNum\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("a : 'f'\n"); - grammarBuilder.append(" | 'g'\n"); - grammarBuilder.append(" | 'x' b 'z'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'e' {} | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a:3 x (b:2 y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExtraToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="xzy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x z y)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(144); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a z)\n", found); - - assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleRef() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(138); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b 'x'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'y' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="yx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a (b y) x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSync() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(145); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'* '!'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xzyy!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x z y y !)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToken2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenAndRuleContextString() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(173); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' { \n"); - grammarBuilder.append("print(str_list(self.getRuleInvocationStack()))\n"); - grammarBuilder.append("} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "[a, s]\n" + - "(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserErrors.java index f6cf0512b..ba42e20af 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserErrors.java @@ -1,719 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserErrors extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x='b' {print(\"conjured=\" + str($x))} 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpTokenFromSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(67); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x=('b'|'c') {print(\"conjured=\" + str($x))} 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testContextListGetters() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(160); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members{\n"); - grammarBuilder.append("def foo():\n"); - grammarBuilder.append(" s = SContext()\n"); - grammarBuilder.append(" a = s.a()\n"); - grammarBuilder.append(" b = s.b()\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : (a | b)+;\n"); - grammarBuilder.append("a : 'a' {print(\"a\",end='')};\n"); - grammarBuilder.append("b : 'b' {print(\"b\",end='')};"); - String grammar = grammarBuilder.toString(); - - - String input ="abab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("abab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidATNStateRemoval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(102); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {pass} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input ="x:x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidEmptyInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID+;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - - assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1ErrorInfo() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(314); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); - grammarBuilder.append("animal : (DOG | CAT );\n"); - grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); - grammarBuilder.append("AND : 'and';\n"); - grammarBuilder.append("DOG : 'dog';\n"); - grammarBuilder.append("CAT : 'cat';\n"); - grammarBuilder.append("HARDWARE: 'hardware';\n"); - grammarBuilder.append("SOFTWARE: 'software';\n"); - grammarBuilder.append("WS : ' ' -> skip ;\n"); - grammarBuilder.append("acClass\n"); - grammarBuilder.append("@init\n"); - grammarBuilder.append("{print(self.getExpectedTokens().toString(self.literalNames, self.symbolicNames))}\n"); - grammarBuilder.append(" : ;"); - String grammar = grammarBuilder.toString(); - - - String input ="dog and software"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("{'hardware', 'software'}\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'\n"); - grammarBuilder.append(" | 'a' 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(55); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c'\n"); - grammarBuilder.append(" | 'a' 'b' 'd'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abe"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLLStar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aaae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(40); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(41); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAltAvoidance() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e '!' ;\n"); - grammarBuilder.append("e : 'a' 'b'\n"); - grammarBuilder.append(" | 'a'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a."; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(34); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("[@0,0:0='a',<3>,1:0]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('b' | 'c')\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'a'\n"); - grammarBuilder.append(";"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(25); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})*;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforePredict() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="caaab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="aabd"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("[@2,2:2='b',<1>,1:2]\n", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(41); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionExpectingSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); - grammarBuilder.append("expr: ID '=' STR ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="( ~FORCE_ERROR~ "; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserExec.java index b1dcc944f..ac90560df 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestParserExec.java @@ -1,791 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserExec extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID+ {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)+ {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorB() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(122); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID {\n"); - grammarBuilder.append("print(\"alt 1\")\n"); - grammarBuilder.append("} | INT {\n"); - grammarBuilder.append("print(\"alt 2\")\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(105); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})+ {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(105); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(105); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID INT {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFInClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : stat EOF;\n"); - grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(186); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(186); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(187); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(186); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(103); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(103); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : a* EOF;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : label=subrule {print($label.text)} #One\n"); - grammarBuilder.append(" | label='y' {print($label.text)} #Two\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("subrule : 'x';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "x\n" + - "y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); - grammarBuilder.append("b : id_=ID val+=INT*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelForClosureContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(456); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("ifStatement\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("assert isinstance(v, (list, tuple))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : 'if' expression\n"); - grammarBuilder.append(" ( ( 'then'\n"); - grammarBuilder.append(" executableStatement*\n"); - grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); - grammarBuilder.append(" elseStatement?\n"); - grammarBuilder.append(" 'end' 'if'\n"); - grammarBuilder.append(" ) | executableStatement )\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("elseIfStatement\n"); - grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expression : 'a' ;\n"); - grammarBuilder.append("executableStatement : 'a' ;\n"); - grammarBuilder.append("elseStatement : 'a' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelsOnSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b b* ';' ;\n"); - grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleEOFHandling() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(42); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserProperty() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(153); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("def Property(self):\n"); - grammarBuilder.append(" return True\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("a : {$parser.Property()}? ID {print(\"valid\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("valid\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedIfIfElse() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(175); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : stmt EOF ;\n"); - grammarBuilder.append("stmt : ifStmt | ID;\n"); - grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { self._input.LA(1)!=TParser.ELSE }?);\n"); - grammarBuilder.append("ELSE : 'else';\n"); - grammarBuilder.append("ID : [a-zA-Z]+;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x if x a else b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredictionIssue334() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(244); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_ @init{\n"); - grammarBuilder.append("self._errHandler = BailErrorStrategy()\n"); - grammarBuilder.append("} \n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); - grammarBuilder.append("item : A B?;\n"); - grammarBuilder.append("SEMICOLON: ';';\n"); - grammarBuilder.append("A : 'a'|'A';\n"); - grammarBuilder.append("B : 'b'|'B';\n"); - grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); - - assertEquals("(file_ (item a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestPerformance.java index 8677539c6..919098ead 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestPerformance.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestPerformance.java @@ -1,218 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestPerformance extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Python2"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalLexer.java index 116cd1350..6af8088c0 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalLexer.java @@ -1,218 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalLexer extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisableRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("E1 : 'enum' { False }? ;\n"); - grammarBuilder.append("E2 : 'enum' { True }? ; // winner not E1 or ID\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<3>,1:5]\n" + - "[@2,8:7='',<-1>,1:8]\n" + - "s0-' '->:s5=>4\n" + - "s0-'a'->:s6=>3\n" + - "s0-'e'->:s1=>3\n" + - ":s1=>3-'n'->:s2=>3\n" + - ":s2=>3-'u'->:s3=>3\n" + - ":s6=>3-'b'->:s6=>3\n" + - ":s6=>3-'c'->:s6=>3\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnumNotID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(96); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<1>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s3=>3\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDnotEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { False }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s2=>3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDvsEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : 'enum' { False }? ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s5=>3\n" + - "s0-'a'->:s4=>2\n" + - "s0-'e'->:s1=>2\n" + - ":s1=>2-'n'->:s2=>2\n" + - ":s2=>2-'u'->:s3=>2\n" + - ":s4=>2-'b'->:s4=>2\n" + - ":s4=>2-'c'->:s4=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndent() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { self._tokenStartColumn==0 }?\n"); - grammarBuilder.append(" { print(\"INDENT\") } ;\n"); - grammarBuilder.append("NL : '\\n';\n"); - grammarBuilder.append("WS : [ \\t]+ ;"); - String grammar = grammarBuilder.toString(); - - String input = - "abc\n" + - " def \n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "INDENT\n" + - "[@0,0:2='abc',<1>,1:0]\n" + - "[@1,3:3='\\n',<3>,1:3]\n" + - "[@2,4:5=' ',<2>,2:0]\n" + - "[@3,6:8='def',<1>,2:2]\n" + - "[@4,9:10=' ',<4>,2:5]\n" + - "[@5,11:11='\\n',<3>,2:7]\n" + - "[@6,12:11='',<-1>,3:0]\n" + - "s0-'\n" + - "'->:s2=>3\n" + - "s0-'a'->:s1=>1\n" + - "s0-'d'->:s1=>1\n" + - ":s1=>1-'b'->:s1=>1\n" + - ":s1=>1-'c'->:s1=>1\n" + - ":s1=>1-'e'->:s1=>1\n" + - ":s1=>1-'f'->:s1=>1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerInputPositionSensitivePredicates() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(206); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WORD1 : ID1+ { print(self.text) } ;\n"); - grammarBuilder.append("WORD2 : ID2+ { print(self.text) } ;\n"); - grammarBuilder.append("fragment ID1 : { self.column < 2 }? [a-zA-Z];\n"); - grammarBuilder.append("fragment ID2 : { self.column >= 2 }? [a-zA-Z];\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input = - "a cde\n" + - "abcde\n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "a\n" + - "cde\n" + - "ab\n" + - "cde\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:4='cde',<2>,1:2]\n" + - "[@2,6:7='ab',<1>,2:0]\n" + - "[@3,8:10='cde',<2>,2:2]\n" + - "[@4,12:11='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedKeywords() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? { print(\"enum!\") } ;\n"); - grammarBuilder.append("ID : [a-z]+ { print(\"ID \" + self.text) } ;\n"); - grammarBuilder.append("WS : [ \\n] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="enum enu a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "enum!\n" + - "ID enu\n" + - "ID a\n" + - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='enu',<2>,1:5]\n" + - "[@2,9:9='a',<2>,1:9]\n" + - "[@3,10:9='',<-1>,1:10]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalParser.java index 755a62aee..798349093 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSemPredEvalParser.java @@ -1,763 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalParser extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAlts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(276); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a; // do 2x: once in ATN, next in DFA\n"); - grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" | {False}? ID {print(\"alt 3\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "alt 1\n" + - "alt 1\n", found); - - assertEquals( - "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + - "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(321); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a ';' a;\n"); - grammarBuilder.append("a : INT {print(\"alt 1\")}\n"); - grammarBuilder.append(" | ID {print(\"alt 2\")} // must pick this one for ID since pred is false\n"); - grammarBuilder.append(" | ID {print(\"alt 3\")}\n"); - grammarBuilder.append(" | {False}? ID {print(\"alt 4\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34; x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "alt 1\n" + - "alt 2\n" + - "alt 2\n", found); - - assertEquals( - "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + - "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionHidesPreds() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(212); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : a+ ;\n"); - grammarBuilder.append("a : {self.i = 1} ID {self.i == 1}? {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {self.i = 2} ID {self.i == 2}? {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 1\n" + - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionsHidePredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(277); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("def pred(self, v):\n"); - grammarBuilder.append(" print('eval=' + str(v).lower())\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {} {self.pred(True)}? {print(\"parse\")} '!' ;\n"); - grammarBuilder.append("t : e {} {self.pred(False)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAtomWithClosureInTranslatedLRRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : e[0] EOF;\n"); - grammarBuilder.append("e[int _p]\n"); - grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); - grammarBuilder.append(" ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b+a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDepedentPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("def pred(self, v):\n"); - grammarBuilder.append(" print('eval=' + str(v).lower())\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : a[99] ;\n"); - grammarBuilder.append("a[int i] : e {self.pred($i==99)}? {print(\"parse\")} '!' ;\n"); - grammarBuilder.append("b[int i] : e {self.pred($i==99)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(256); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); - grammarBuilder.append("b[int i] : a[i] ;\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisabledAlternative() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); - grammarBuilder.append("content: anything | {False}? .;\n"); - grammarBuilder.append("anything: ANY_CHAR;\n"); - grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); - String grammar = grammarBuilder.toString(); - - - String input ="hello"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(169); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b ';' | b '.' ;\n"); - grammarBuilder.append("b : a ;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoTruePredsThrowsNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {False}? ID INT {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {False}? ID INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOrder() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); - grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); - grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); - grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(203); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); - - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); - - assertEquals( - "line 5:0 mismatched input '' expecting '\n" + - "'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(203); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n" + - "\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); - - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {enumKeyword = True}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); - grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); - - assertEquals("ID abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {enumKeyword = True}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); - grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="enum"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(189); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID \n"); - grammarBuilder.append(" | {$i==2}? ID \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(271); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("def pred(self, v):\n"); - grammarBuilder.append(" print('eval=' + str(v).lower())\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {self.pred(True)}? {print(\"parse\")} '!' ;\n"); - grammarBuilder.append("t : e {self.pred(False)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRewindBeforePredEval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(201); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {self._input.LT(1).text==\"x\"}? ID INT {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {self._input.LT(1).text==\"y\"}? ID INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" | INT {print(\"alt 3\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y 3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(153); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a;\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="3 4 x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n", found); - - assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeft() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append(" s : a+ ;\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeftWithVaryingPredicate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(243); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : ({self.i += 1\n"); - grammarBuilder.append("print(\"i=\",end='')\n"); - grammarBuilder.append("print(self.i)} a)+ ;\n"); - grammarBuilder.append("a : {self.i % 2 == 0}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {self.i % 2 != 0}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "i=1\n" + - "alt 2\n" + - "i=2\n" + - "alt 1\n" + - "i=3\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testUnpredicatedPathsInAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(169); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {print(\"alt 1\")}\n"); - grammarBuilder.append(" | b {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("a : {False}? ID INT\n"); - grammarBuilder.append(" | ID INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testValidateInDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(318); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ';' a;\n"); - grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); - grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); - grammarBuilder.append("// throws an exception if the validating predicate fails\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x ; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:0 no viable alternative at input 'x'\n" + - "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSets.java index 47777e685..c1c46705a 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestSets.java @@ -1,477 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSets extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetLiteral() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (A {print($A.text)})+ ;\n"); - grammarBuilder.append("A : [AaBb] ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="A a B b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals( - "A\n" + - "a\n" + - "B\n" + - "b\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testComplementSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("parse : ~NEW_LINE;\n"); - grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:0 token recognition error at: 'a'\n" + - "line 1:1 missing {} at ''\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : ~'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : ~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : h=~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithRuleRef3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("B : ~('a'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(50); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~('x'|'y') 'z' {print($t.text)} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(56); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("zz\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotTokenWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(44); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~'x' 'z' {print($t.text)} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(45); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=('x'|'y') {print($t.text)} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleAsSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print(self._input.getText())} : 'a' | 'b' |'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("b\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSeqDoesNotBecomeSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {print(self._input.getText())} ;\n"); - grammarBuilder.append("fragment A : '1' | '2';\n"); - grammarBuilder.append("fragment B : '3' '4';\n"); - grammarBuilder.append("C : A | B;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestVisitors.java index 79c001ec5..0faa96302 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestVisitors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python2/TestVisitors.java @@ -1,298 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python2; -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestVisitors extends BasePython2Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "[ '1', '2' ]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython2Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1,,2,,32 3 21 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Python2"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(271); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1,,2,,3,1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b 1) (b 2))\n" + - ",1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - ",1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/BasePython3Test.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/BasePython3Test.java index fdcbdabb4..a897e2fa9 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/BasePython3Test.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/BasePython3Test.java @@ -32,7 +32,7 @@ package org.antlr.v4.test.runtime.python3; import org.antlr.v4.test.runtime.python.BasePythonTest; import org.stringtemplate.v4.ST; -public abstract class BasePython3Test extends BasePythonTest { +public class BasePython3Test extends BasePythonTest { @Override protected String getLanguage() { diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeLexers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeLexers.java index 80c6ca850..8a53fb324 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeLexers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeLexers.java @@ -1,71 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeLexers extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {print(\"S.A\")};\n" + - "C : 'c' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="abc"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "S.A\n" + - "[@0,0:0='a',<3>,1:0]\n" + - "[@1,1:1='b',<1>,1:1]\n" + - "[@2,2:2='c',<4>,1:2]\n" + - "[@3,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeLexersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeLexers extends BaseRuntimeTest { + public TestCompositeLexers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "A : 'a' {print(\"S.A\")} ;\n" + - "B : 'b' {print(\"S.B\")} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(79); - grammarBuilder.append("lexer grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("A : 'a' B {print(\"M.A\")} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("M.g4", grammar, "M", input, false); - assertEquals( - "M.A\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeLexersDescriptors.class, "Python3"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeParsers.java index 1c98814fc..854e65510 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestCompositeParsers.java @@ -1,488 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.antlr.v4.test.runtime.java.ErrorQueue; -import org.antlr.v4.tool.Grammar; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestCompositeParsers extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBringInLiteralsFromDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : '=' 'a' {print(\"S.a\",end='')};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="=a"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.CompositeParsersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestCompositeParsers extends BaseRuntimeTest { + public TestCompositeParsers(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCombinedImportsCombined() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : 'x' INT {print(\"S.x\")};\n" + - "INT : '0'..'9'+ ;\n" + - "WS : (' '|'\\n') -> skip ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(31); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : x INT;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - new Grammar(tmpdir+"/M.g4", grammar, equeue); - assertEquals("unexpected errors: " + equeue, 0, equeue.errors.size()); - - - String input ="x 34 9"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.x\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(CompositeParsersDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatesSeeSameTokenType() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "tokens { A, B, C }\n" + - "x : A {print(\"S.x\")};"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { C, B, A } // reverse order\n" + - "y : A {print(\"T.y\")};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(598); - grammarBuilder.append("// The lexer will create rules to match letters a, b, c.\n"); - grammarBuilder.append("// The associated token types A, B, C must have the same value\n"); - grammarBuilder.append("// and all import'd parsers. Since ANTLR regenerates all imports\n"); - grammarBuilder.append("// for use with the delegator M, it can generate the same token type\n"); - grammarBuilder.append("// mapping in each parser:\n"); - grammarBuilder.append("// public static final int C=6;\n"); - grammarBuilder.append("// public static final int EOF=-1;\n"); - grammarBuilder.append("// public static final int B=5;\n"); - grammarBuilder.append("// public static final int WS=7;\n"); - grammarBuilder.append("// public static final int A=4;\n"); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : x y ; // matches AA, which should be 'aa'\n"); - grammarBuilder.append("B : 'b' ; // another order: B, A, C\n"); - grammarBuilder.append("A : 'a' ; \n"); - grammarBuilder.append("C : 'c' ; \n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - writeFile(tmpdir, "M.g4", grammar); - ErrorQueue equeue = new ErrorQueue(); - Grammar g = new Grammar(tmpdir+"/M.g4", grammar, equeue); - String expectedTokenIDToTypeMap = "{EOF=-1, B=1, A=2, C=3, WS=4}"; - String expectedStringLiteralToTypeMap = "{'a'=2, 'b'=1, 'c'=3}"; - String expectedTypeToTokenList = "[B, A, C, WS]"; - assertEquals(expectedTokenIDToTypeMap, g.tokenNameToTypeMap.toString()); - assertEquals(expectedStringLiteralToTypeMap, sort(g.stringLiteralToTypeMap).toString()); - assertEquals(expectedTypeToTokenList, realElements(g.typeToTokenList).toString()); - assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); - - - String input ="aa"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals( - "S.x\n" + - "T.y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorAccessesDelegateMembers() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "@parser::members {\n" + - "def foo(self):\n" + - " print('foo')\n" + - "}\n" + - "a : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(126); - grammarBuilder.append("grammar M; // uses no rules from the import\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : 'b' {self.foo()} ; // gS is import pointer\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("foo\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {print(\"S.a\")};"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(104); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithArgs() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a[int x] returns [int y] : B {print(\"S.a\",end='')} {$y=1000;} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : label=a[3] {print($label.y)} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a1000\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesDelegateRuleWithReturnStruct() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : B {print(\"S.a\",end='')} ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(128); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a {print($a.text,end='')} ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.ab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorInvokesFirstVersionOfDelegateRule() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {print(\"S.a\")};\n" + - "b : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "a : B {print(\"T.a\")};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S,T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ; // defines B from inherited token space\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {print(\"S.a\",end='')};\n" + - "b : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("b : 'b'|'c';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals("S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesDelegates() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a : b {print(\"S.a\")};\n" + - "b : 'b' ;"; - writeFile(tmpdir, "S.g4", slave_S); - - String slave_T = - "parser grammar T;\n" + - "tokens { A }\n" + - "b : 'b' {print(\"T.b\")};"; - writeFile(tmpdir, "T.g4", slave_T); - - StringBuilder grammarBuilder = new StringBuilder(81); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S, T;\n"); - grammarBuilder.append("b : 'b'|'c' {print(\"M.b\")}|B|A;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals( - "M.b\n" + - "S.a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDelegatorRuleOverridesLookaheadInDelegate() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "type_ : 'int' ;\n" + - "decl : type_ ID ';'\n" + - " | type_ ID init ';' {print(\"JavaDecl: \" + $text,end='')};\n" + - "init : '=' INT;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("prog : decl ;\n"); - grammarBuilder.append("type_ : 'int' | 'float' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="float x = 3;"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "prog", input, false); - - assertEquals("JavaDecl: floatx=3;\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportLexerWithOnlyFragmentRules() throws Exception { - mkdir(tmpdir); - - String slave_Unicode = - "lexer grammar Unicode;\n" + - "\n" + - "fragment\n" + - "UNICODE_CLASS_Zs : '\\u0020' | '\\u00A0' | '\\u1680' | '\\u180E'\n" + - " | '\\u2000'..'\\u200A'\n" + - " | '\\u202F' | '\\u205F' | '\\u3000'\n" + - " ;\n"; - writeFile(tmpdir, "Unicode.g4", slave_Unicode); - - StringBuilder grammarBuilder = new StringBuilder(91); - grammarBuilder.append("grammar Test;\n"); - grammarBuilder.append("import Unicode;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program : 'test' 'test';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : (UNICODE_CLASS_Zs)+ -> skip;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="test test"; - String found = execParser("Test.g4", grammar, "TestParser", "TestLexer", "TestListener", "TestVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedGrammarWithEmptyOptions() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "options {}\n" + - "a : B ;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("B : 'b' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testImportedRuleWithAction() throws Exception { - mkdir(tmpdir); - - String slave_S = - "parser grammar S;\n" + - "a @after {x = 0} : B;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("s : a;\n"); - grammarBuilder.append("B : 'b';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordVSIDOrder() throws Exception { - mkdir(tmpdir); - - String slave_S = - "lexer grammar S;\n" + - "ID : 'a'..'z'+;"; - writeFile(tmpdir, "S.g4", slave_S); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar M;\n"); - grammarBuilder.append("import S;\n"); - grammarBuilder.append("a : A {print(\"M.a: \" + str($A))};\n"); - grammarBuilder.append("A : 'abc' {print(\"M.A\")};\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("M.g4", grammar, "MParser", "MLexer", "MListener", "MVisitor", "a", input, false); - - assertEquals( - "M.A\n" + - "M.a: [@0,0:2='abc',<1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestFullContextParsing.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestFullContextParsing.java index d0f9294c0..03aa190db 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestFullContextParsing.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestFullContextParsing.java @@ -1,507 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestFullContextParsing extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigYieldsCtxSensitiveDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(100); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : ID | ID {} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 0:\n" + - "s0-ID->:s1^=>1\n", found); - - assertEquals("line 1:0 reportAttemptingFullContext d=0 (s), input='abc'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.FullContextParsingDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestFullContextParsing extends BaseRuntimeTest { + public TestFullContextParsing(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbiguityNoLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(206); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(" : expr expr {print(\"alt 1\")}\n"); - grammarBuilder.append(" | expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: '@'\n"); - grammarBuilder.append(" | ID '@'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a@"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); - - assertEquals("alt 1\n", found); - - assertEquals( - "line 1:2 reportAttemptingFullContext d=0 (prog), input='a@'\n" + - "line 1:2 reportAmbiguity d=0 (prog): ambigAlts={1, 2}, input='a@'\n" + - "line 1:2 reportAttemptingFullContext d=1 (expr), input='a@'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='a@'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(FullContextParsingDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFATwoDiffInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : ('$' a | '@' b)+ ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc @ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 2:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=2 (e), input='34'\n" + - "line 1:14 reportAttemptingFullContext d=2 (e), input='34abc'\n" + - "line 1:14 reportContextSensitivity d=2 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(161); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="$ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:2 reportContextSensitivity d=1 (e), input='34'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCtxSensitiveDFA_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(161); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '$' a | '@' b ;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="@ 34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:5 reportAttemptingFullContext d=1 (e), input='34abc'\n" + - "line 1:5 reportContextSensitivity d=1 (e), input='34abc'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(286); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("(expr a + (expr b))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExprAmbiguity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(286); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(": expr[0] {print($expr.ctx.toStringTree(recog=self))};\n"); - grammarBuilder.append(" expr[int _p]\n"); - grammarBuilder.append(" : ID \n"); - grammarBuilder.append(" ( \n"); - grammarBuilder.append(" {5 >= $_p}? '*' expr[6]\n"); - grammarBuilder.append(" | {4 >= $_p}? '+' expr[5]\n"); - grammarBuilder.append(" )*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("(expr a + (expr b * (expr c)))\n", found); - - assertEquals( - "line 1:1 reportAttemptingFullContext d=1 (expr), input='+'\n" + - "line 1:2 reportContextSensitivity d=1 (expr), input='+b'\n" + - "line 1:3 reportAttemptingFullContext d=1 (expr), input='*'\n" + - "line 1:5 reportAmbiguity d=1 (expr): ambigAlts={1, 2}, input='*c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s1=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="{ if x then if y then return else foo else bar }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:29 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='elsefooelse'\n" + - "line 1:38 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:38 reportContextSensitivity d=1 (stat), input='else'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testFullContextIF_THEN_ELSEParse_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(240); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s \n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append("@after {self.dumpDFA()}\n"); - grammarBuilder.append(" : '{' stat* '}' ;\n"); - grammarBuilder.append("stat: 'if' ID 'then' stat ('else' ID)?\n"); - grammarBuilder.append(" | 'return'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "{ if x then return else foo\n" + - "if x then if y then return else foo }"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 1:\n" + - "s0-'}'->:s2=>2\n" + - "s0-'else'->:s1^=>1\n", found); - - assertEquals( - "line 1:19 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 1:19 reportContextSensitivity d=1 (stat), input='else'\n" + - "line 2:27 reportAttemptingFullContext d=1 (stat), input='else'\n" + - "line 2:36 reportAmbiguity d=1 (stat): ambigAlts={1, 2}, input='elsefoo}'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLoopsSimulateTailRecursion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(299); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog\n"); - grammarBuilder.append("@init {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION}\n"); - grammarBuilder.append(" : expr_or_assign*;\n"); - grammarBuilder.append("expr_or_assign\n"); - grammarBuilder.append(" : expr '++' {print(\"fail.\")}\n"); - grammarBuilder.append(" | expr {print(\"pass: \"+$expr.text)}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr_primary ('<-' ID)?;\n"); - grammarBuilder.append("expr_primary\n"); - grammarBuilder.append(" : '(' ID ')'\n"); - grammarBuilder.append(" | ID '(' ID ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a(i)<-x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, true); - - assertEquals("pass: a(i)<-x\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=3 (expr_primary), input='a(i)'\n" + - "line 1:7 reportAmbiguity d=3 (expr_primary): ambigAlts={2, 3}, input='a(i)<-x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSLLSeesEOFInLLGrammar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(148); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {self.dumpDFA()}\n"); - grammarBuilder.append(" : a;\n"); - grammarBuilder.append("a : e ID ;\n"); - grammarBuilder.append("b : e INT ID ;\n"); - grammarBuilder.append("e : INT | ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\t'|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34 abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "Decision 0:\n" + - "s0-INT->s1\n" + - "s1-ID->:s2^=>1\n", found); - - assertEquals( - "line 1:3 reportAttemptingFullContext d=0 (e), input='34abc'\n" + - "line 1:0 reportContextSensitivity d=0 (e), input='34'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLeftRecursion.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLeftRecursion.java index d4ba5ec32..8d64cf4a6 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLeftRecursion.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLeftRecursion.java @@ -1,3405 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLeftRecursion extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="1\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a = 5\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="b = 6\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b*2\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAmbigLR_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(705); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog: stat ;\n"); - grammarBuilder.append("stat: expr NEWLINE # printExpr\n"); - grammarBuilder.append(" | ID '=' expr NEWLINE # assign\n"); - grammarBuilder.append(" | NEWLINE # blank\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expr: expr ('*'|'/') expr # MulDiv\n"); - grammarBuilder.append(" | expr ('+'|'-') expr # AddSub\n"); - grammarBuilder.append(" | INT # int\n"); - grammarBuilder.append(" | ID # id\n"); - grammarBuilder.append(" | '(' expr ')' # parens\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("MUL : '*' ; // assigns token name to '*' used above in grammar\n"); - grammarBuilder.append("DIV : '/' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("SUB : '-' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ; // match identifiers\n"); - grammarBuilder.append("INT : [0-9]+ ; // match integers\n"); - grammarBuilder.append("NEWLINE:'\\r'? '\\n' ; // return newlines to parser (is end-statement signal)\n"); - grammarBuilder.append("WS : [ \\t]+ -> skip ; // toss out whitespace"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3\n"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(*a)[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="**a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator * (declarator a))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[3]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator a) [ (e 3) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator b) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator ( (declarator a) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[]()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator (declarator a) [ ]) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a[][]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator (declarator (declarator a) [ ]) [ ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDeclarations_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(391); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : declarator EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("declarator\n"); - grammarBuilder.append(" : declarator '[' e ']'\n"); - grammarBuilder.append(" | declarator '[' ']'\n"); - grammarBuilder.append(" | declarator '(' ')'\n"); - grammarBuilder.append(" | '*' declarator // binds less tight than suffixes\n"); - grammarBuilder.append(" | '(' declarator ')'\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : INT ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="*a[]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (declarator * (declarator (declarator a) [ ])) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a (a x) y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDirectCallToLeftRecursiveRule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(119); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print($ctx.toStringTree(recog=self))} : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("(a (a (a x) y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 1) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) - (e 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.this"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) . this) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e - (e a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(250); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("e : e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | '-' e\n"); - grammarBuilder.append(" | e '*' e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e - (e a)) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a|b&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) | (e (e b) & (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_10() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f(x)==T.c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_11() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a.f().g(x,1)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_12() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new T[((n-1) * x) + 1]"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e new (typespec T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(a|b)&c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e a) | (e b)) )) & (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a > b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) > (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a >> b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) >> (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a^b^c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ^ (e (e b) ^ (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e ( (typespec T) ) (e x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="new A().b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e new (typespec A) ( )) . b) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testJavaExpressions_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1247); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow\n"); - grammarBuilder.append("expressionList\n"); - grammarBuilder.append(" : e (',' e)*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("e : '(' e ')'\n"); - grammarBuilder.append(" | 'this'\n"); - grammarBuilder.append(" | 'super'\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" | typespec '.' 'class'\n"); - grammarBuilder.append(" | e '.' ID\n"); - grammarBuilder.append(" | e '.' 'this'\n"); - grammarBuilder.append(" | e '.' 'super' '(' expressionList? ')'\n"); - grammarBuilder.append(" | e '.' 'new' ID '(' expressionList? ')'\n"); - grammarBuilder.append(" | 'new' typespec ( '(' expressionList? ')' | ('[' e ']')+)\n"); - grammarBuilder.append(" | e '[' e ']'\n"); - grammarBuilder.append(" | '(' typespec ')' e\n"); - grammarBuilder.append(" | e ('++' | '--')\n"); - grammarBuilder.append(" | e '(' expressionList? ')'\n"); - grammarBuilder.append(" | ('+'|'-'|'++'|'--') e\n"); - grammarBuilder.append(" | ('~'|'!') e\n"); - grammarBuilder.append(" | e ('*'|'/'|'%') e\n"); - grammarBuilder.append(" | e ('+'|'-') e\n"); - grammarBuilder.append(" | e ('<<' | '>>>' | '>>') e\n"); - grammarBuilder.append(" | e ('<=' | '>=' | '>' | '<') e\n"); - grammarBuilder.append(" | e 'instanceof' e\n"); - grammarBuilder.append(" | e ('==' | '!=') e\n"); - grammarBuilder.append(" | e '&' e\n"); - grammarBuilder.append(" | e '^' e\n"); - grammarBuilder.append(" | e '|' e\n"); - grammarBuilder.append(" | e '&&' e\n"); - grammarBuilder.append(" | e '||' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" |\n"); - grammarBuilder.append(" e ('='\n"); - grammarBuilder.append(" |'+='\n"); - grammarBuilder.append(" |'-='\n"); - grammarBuilder.append(" |'*='\n"); - grammarBuilder.append(" |'/='\n"); - grammarBuilder.append(" |'&='\n"); - grammarBuilder.append(" |'|='\n"); - grammarBuilder.append(" |'^='\n"); - grammarBuilder.append(" |'>>='\n"); - grammarBuilder.append(" |'>>>='\n"); - grammarBuilder.append(" |'<<='\n"); - grammarBuilder.append(" |'%=') e\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("typespec\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | ID '[' ']'\n"); - grammarBuilder.append(" | 'int'\n"); - grammarBuilder.append(" | 'int' '[' ']'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(T)t.f()"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (typespec T) ) (e (e t) . f)) ( )) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(170); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(170); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelsOnOpSubrule_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(170); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}\n"); - grammarBuilder.append(" | INT {}\n"); - grammarBuilder.append(" | '(' x=e ')' {}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActionsPredicatesOptions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(238); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{True}?\n"); - grammarBuilder.append(" | a=e op=('+'|'-') b=e {}{True}?\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e 4))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1*2/3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e (e 1) * (e 2)) / (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(177); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e ;\n"); - grammarBuilder.append("e : a=e op=('*'|'/') b=e {}{}\n"); - grammarBuilder.append(" | INT {}{}\n"); - grammarBuilder.append(" | '(' x=e ')' {}{}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="(1/2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleAlternativesWithCommonLabel_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(560); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)};\n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : e '*' e {$v = $ctx.e(0).v * $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | e '+' e {$v = $ctx.e(0).v + $ctx.e(1).v;} # binary\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' e ')' {$v = $e.v;} # parens\n"); - grammarBuilder.append(" | left=e INC {$v = $left.v + 1;} # unary\n"); - grammarBuilder.append(" | left=e DEC {$v = $left.v - 1;} # unary\n"); - grammarBuilder.append(" | ID {$v = 3} # anID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("INC : '++' ;\n"); - grammarBuilder.append("DEC : '--' ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrecedenceFilterConsidersContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog \n"); - grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); - grammarBuilder.append(": statement* EOF {};\n"); - grammarBuilder.append("statement: letterA | statement letterA 'b' ;\n"); - grammarBuilder.append("letterA: 'a';"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("(prog (statement (letterA a)) (statement (letterA a)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (literal - 1)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixAndOtherAlt_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF ; \n"); - grammarBuilder.append("expr : literal\n"); - grammarBuilder.append(" | op expr\n"); - grammarBuilder.append(" | expr op expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("literal : '-'? Integer ;\n"); - grammarBuilder.append("op : '+' | '-' ;\n"); - grammarBuilder.append("Integer : [0-9]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="-1 + -1"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (literal - 1)) (op +) (expr (literal - 1))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(329); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(329); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a+b)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPrefixOpWithActionAndLabel_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(329); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.result)} ;\n"); - grammarBuilder.append("e returns [String result]\n"); - grammarBuilder.append(" : ID '=' e1=e {$result = \"(\" + $ID.text + \"=\" + $e1.result + \")\";}\n"); - grammarBuilder.append(" | ID {$result = $ID.text;}\n"); - grammarBuilder.append(" | e1=e '+' e2=e {$result = \"(\" + $e1.result + \"+\" + $e2.result + \")\";}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b+c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("((a=b)+c)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsAndLabels_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(447); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : q=e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v]\n"); - grammarBuilder.append(" : a=e op='*' b=e {$v = $a.v * $b.v;} # mult\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;} # add\n"); - grammarBuilder.append(" | INT {$v = $INT.int;} # anInt\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;} # parens\n"); - grammarBuilder.append(" | x=e '++' {$v = $x.v+1;} # inc\n"); - grammarBuilder.append(" | e '--' # dec\n"); - grammarBuilder.append(" | ID {$v = 3;} # anID\n"); - grammarBuilder.append(" ; \n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="i++*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("12\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) , (expr c) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList1_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr (',' b+=expr)* '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr a) * (expr b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a,c>>x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr a) , (expr c)) >> (expr x)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr x) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActionsList2_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(317); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : expr EOF;\n"); - grammarBuilder.append("expr:\n"); - grammarBuilder.append(" a=expr '*' a=expr #Factor\n"); - grammarBuilder.append(" | b+=expr ',' b+=expr #Comma\n"); - grammarBuilder.append(" | b+=expr '>>' c=expr #Send\n"); - grammarBuilder.append(" | ID #JustId //semantic check on modifiers\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : ('a'..'z'|'A'..'Z'|'_')\n"); - grammarBuilder.append(" ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b,c,x*y>>r"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) >> (expr r)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("4\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("7\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReturnValueAndActions_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e {print($e.v)}; \n"); - grammarBuilder.append("e returns [int v, ignored]\n"); - grammarBuilder.append(" : a=e '*' b=e {$v = $a.v * $b.v;}\n"); - grammarBuilder.append(" | a=e '+' b=e {$v = $a.v + $b.v;}\n"); - grammarBuilder.append(" | INT {$v = $INT.int;}\n"); - grammarBuilder.append(" | '(' x=e ')' {$v = $x.v;}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="(1+2)*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("9\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPred() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a {True}? ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSemPredFailOption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(159); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID {False}?\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a x) y z))\n", found); - - assertEquals("line 1:4 rule a custom message\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a x))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a x) y))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : a ;\n"); - grammarBuilder.append("a : a ID\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (a (a (a x) y) z))\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExprExplicitAssociativity_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) + (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a*b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) * (e b)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b:c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e c)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_5() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a=b=c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) = (e (e b) = (e c))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_6() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b+c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) + (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_7() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b=c:d"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) = (e c)) : (e d)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_8() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a? b?c:d : e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e (e b) ? (e c) : (e d)) : (e e)) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTernaryExpr_9() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s @after {print($ctx.toStringTree(recog=self))} : e EOF ; // must indicate EOF can follow or 'a' won't match\n"); - grammarBuilder.append("e : e '*' e\n"); - grammarBuilder.append(" | e '+' e\n"); - grammarBuilder.append(" | e '?' e ':' e\n"); - grammarBuilder.append(" | e '=' e\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a?b: c?d:e"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(s (e (e a) ? (e b) : (e (e c) ? (e d) : (e e))) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1,3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LeftRecursionDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLeftRecursion extends BaseRuntimeTest { + public TestLeftRecursion(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testWhitespaceInfluence_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(2763); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("prog : expression EOF;\n"); - grammarBuilder.append("expression\n"); - grammarBuilder.append(" : ID '(' expression (',' expression)* ')' # doFunction\n"); - grammarBuilder.append(" | '(' expression ')' # doParenthesis\n"); - grammarBuilder.append(" | '!' expression # doNot\n"); - grammarBuilder.append(" | '-' expression # doNegate\n"); - grammarBuilder.append(" | '+' expression # doPositiv\n"); - grammarBuilder.append(" | expression '^' expression # doPower\n"); - grammarBuilder.append(" | expression '*' expression # doMultipy\n"); - grammarBuilder.append(" | expression '/' expression # doDivide\n"); - grammarBuilder.append(" | expression '%' expression # doModulo\n"); - grammarBuilder.append(" | expression '-' expression # doMinus\n"); - grammarBuilder.append(" | expression '+' expression # doPlus\n"); - grammarBuilder.append(" | expression '=' expression # doEqual\n"); - grammarBuilder.append(" | expression '!=' expression # doNotEqual\n"); - grammarBuilder.append(" | expression '>' expression # doGreather\n"); - grammarBuilder.append(" | expression '>=' expression # doGreatherEqual\n"); - grammarBuilder.append(" | expression '<' expression # doLesser\n"); - grammarBuilder.append(" | expression '<=' expression # doLesserEqual\n"); - grammarBuilder.append(" | expression K_IN '(' expression (',' expression)* ')' # doIn\n"); - grammarBuilder.append(" | expression ( '&' | K_AND) expression # doAnd\n"); - grammarBuilder.append(" | expression ( '|' | K_OR) expression # doOr\n"); - grammarBuilder.append(" | '[' expression (',' expression)* ']' # newArray\n"); - grammarBuilder.append(" | K_TRUE # newTrueBoolean\n"); - grammarBuilder.append(" | K_FALSE # newFalseBoolean\n"); - grammarBuilder.append(" | NUMBER # newNumber\n"); - grammarBuilder.append(" | DATE # newDateTime\n"); - grammarBuilder.append(" | ID # newIdentifier\n"); - grammarBuilder.append(" | SQ_STRING # newString\n"); - grammarBuilder.append(" | K_NULL # newNull\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Fragments\n"); - grammarBuilder.append("fragment DIGIT : '0' .. '9'; \n"); - grammarBuilder.append("fragment UPPER : 'A' .. 'Z';\n"); - grammarBuilder.append("fragment LOWER : 'a' .. 'z';\n"); - grammarBuilder.append("fragment LETTER : LOWER | UPPER;\n"); - grammarBuilder.append("fragment WORD : LETTER | '_' | '$' | '#' | '.';\n"); - grammarBuilder.append("fragment ALPHANUM : WORD | DIGIT; \n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// Tokens\n"); - grammarBuilder.append("ID : LETTER ALPHANUM*;\n"); - grammarBuilder.append("NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;\n"); - grammarBuilder.append("DATE : '\\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\\'';\n"); - grammarBuilder.append("SQ_STRING : '\\'' ('\\'\\'' | ~'\\'')* '\\'';\n"); - grammarBuilder.append("DQ_STRING : '\"' ('\\\\\"' | ~'\"')* '\"';\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;\n"); - grammarBuilder.append("COMMENTS : ('/*' .*? '*/' | '//' ~'\\n'* '\\n' ) -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="Test(1, 3)"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LeftRecursionDescriptors.class, "Python3"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerErrors.java index abbf3c56b..3d0dd03be 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerErrors.java @@ -1,259 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerErrors extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatFailsBackToDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(39); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:3='ab',<1>,1:2]\n" + - "[@2,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:4 token recognition error at: 'x'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerErrors extends BaseRuntimeTest { + public TestLexerErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDFAToATNThatMatchesThenFailsInATN() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'ab' ;\n"); - grammarBuilder.append("B : 'abc' ;\n"); - grammarBuilder.append("C : 'abcd' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ababcx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:4='abc',<2>,1:2]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:5 token recognition error at: 'x'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerErrorsDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { } }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='{ { } }',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnforcedGreedyNestedBrances_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION : '{' (ACTION | ~[{}])* '}';\n"); - grammarBuilder.append("WS : [ \\r\\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="{ { }"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,5:4='',<-1>,1:5]\n", found); - - assertEquals("line 1:0 token recognition error at: '{ { }'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testErrorInMiddle() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'abc' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:0 token recognition error at: 'abx'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStart() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,1:0='',<-1>,1:1]\n", found); - - assertEquals("line 1:0 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharAtStartAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abx"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - - assertEquals("line 1:2 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="ax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,2:1='',<-1>,1:2]\n", found); - - assertEquals("line 1:0 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidCharInTokenAfterDFACache() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - String input ="abax"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - - assertEquals("line 1:2 token recognition error at: 'ax'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerExecDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar L;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - String input ="x : x"; - String found = execLexer("L.g4", grammar, "LLexer", input, false); - assertEquals( - "[@0,0:0='x',<3>,1:0]\n" + - "[@1,2:2=':',<1>,1:2]\n" + - "[@2,4:4='x',<3>,1:4]\n" + - "[@3,5:4='',<-1>,1:5]\n", found); - - assertEquals( - "line 1:1 token recognition error at: ' '\n" + - "line 1:3 token recognition error at: ' '\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo\"]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='[\"foo\"]',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStringsEmbeddedInActions_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(109); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ACTION2 : '[' (STRING | ~'\"')*? ']';\n"); - grammarBuilder.append("STRING : '\"' ('\\\"' | .)*? '\"';\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="[\"foo]"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,6:5='',<-1>,1:6]\n", found); - - assertEquals("line 1:0 token recognition error at: '[\"foo]'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerExec.java index 7b3d02e77..71ebc4181 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestLexerExec.java @@ -1,4997 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestLexerExec extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionPlacement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(228); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ({print(\"stuff fail: \" + self.text)} 'a'\n"); - grammarBuilder.append("| {print(\"stuff0: \" + self.text)}\n"); - grammarBuilder.append(" 'a' {print(\"stuff1: \" + self.text)}\n"); - grammarBuilder.append(" 'b' {print(\"stuff2: \" + self.text)})\n"); - grammarBuilder.append(" {print(self.text)} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "stuff0: \n" + - "stuff1: a\n" + - "stuff2: ab\n" + - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.LexerExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestLexerExec extends BaseRuntimeTest { + public TestLexerExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(72); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(LexerExecDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetInSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(79); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : (~[ab \\n]|'a') {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="a x"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:2='x',<1>,1:2]\n" + - "[@2,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetNot() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ~[ab \\n] ~[ \\ncd]* {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="xaf"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:2='xaf',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(73); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : '0'..'9'+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,6:5='',<-1>,2:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(115); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); - grammarBuilder.append("ID : [a-zA-Z] [a-zA-Z0-9]* {print(\"ID\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u0009\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input = - "34\n" + - " 34 a2 abc \n" + - " "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "I\n" + - "ID\n" + - "ID\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,4:5='34',<1>,2:1]\n" + - "[@2,7:8='a2',<2>,2:4]\n" + - "[@3,10:12='abc',<2>,2:7]\n" + - "[@4,18:17='',<-1>,3:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithEscapedChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(81); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DASHBRACK : [\\-\\]]+ {print(\"DASHBRACK\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="- ] "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "DASHBRACK\n" + - "DASHBRACK\n" + - "[@0,0:0='-',<1>,1:0]\n" + - "[@1,2:2=']',<1>,1:2]\n" + - "[@2,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEndRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-]+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\u000D]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="00\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='00',<1>,1:0]\n" + - "[@1,3:2='',<-1>,2:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithMissingEscapeChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : [0-9]+ {print(\"I\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 "; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "I\n" + - "[@0,0:1='34',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(67); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"a-z]+ {print(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:2='b\"a',<1>,1:0]\n" + - "[@1,3:2='',<-1>,1:3]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithQuote2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(68); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [\"\\\\ab]+ {print(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="b\"\\a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:3='b\"\\a',<1>,1:0]\n" + - "[@1,4:3='',<-1>,1:4]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetWithReversedRange() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(65); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : [z-a9]+ {print(\"A\")} ;\n"); - grammarBuilder.append("WS : [ \\u]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="9"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "A\n" + - "[@0,0:0='9',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFByItself() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("DONE : EOF ;\n"); - grammarBuilder.append("A : 'a';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:-1='',<1>,1:0]\n" + - "[@1,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input =""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals("[@0,0:-1='',<-1>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFSuffixInFirstRule_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : 'a' EOF ;\n"); - grammarBuilder.append("B : 'a';\n"); - grammarBuilder.append("C : 'c';"); - String grammar = grammarBuilder.toString(); - - String input ="a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(87); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : ('a' | 'ab') {print(self.text)} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : .;"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "ab\n" + - "[@0,0:1='ab',<1>,1:0]\n" + - "[@1,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(60); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(58); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:13='//blah\\n//blah\\n',<1>,1:0]\n" + - "[@1,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testHexVsID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(265); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("HexLiteral : '0' ('x'|'X') HexDigit+ ;\n"); - grammarBuilder.append("DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) ;\n"); - grammarBuilder.append("FloatingPointLiteral : ('0x' | '0X') HexDigit* ('.' HexDigit*)? ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("fragment HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="x 0 1 a.b a.l"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='x',<5>,1:0]\n" + - "[@1,1:1=' ',<6>,1:1]\n" + - "[@2,2:2='0',<2>,1:2]\n" + - "[@3,3:3=' ',<6>,1:3]\n" + - "[@4,4:4='1',<2>,1:4]\n" + - "[@5,5:5=' ',<6>,1:5]\n" + - "[@6,6:6='a',<5>,1:6]\n" + - "[@7,7:7='.',<4>,1:7]\n" + - "[@8,8:8='b',<5>,1:8]\n" + - "[@9,9:9=' ',<6>,1:9]\n" + - "[@10,10:10='a',<5>,1:10]\n" + - "[@11,11:11='.',<4>,1:11]\n" + - "[@12,12:12='l',<5>,1:12]\n" + - "[@13,13:12='',<-1>,1:13]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testKeywordID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("KEND : 'end' ; // has priority\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input ="end eend ending a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:2='end',<1>,1:0]\n" + - "[@1,3:3=' ',<3>,1:3]\n" + - "[@2,4:7='eend',<2>,1:4]\n" + - "[@3,8:8=' ',<3>,1:8]\n" + - "[@4,9:14='ending',<2>,1:9]\n" + - "[@5,15:15=' ',<3>,1:15]\n" + - "[@6,16:16='a',<2>,1:16]\n" + - "[@7,17:16='',<-1>,1:17]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLargeLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85821); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;\n"); - grammarBuilder.append("KW0 : 'KW' '0';\n"); - grammarBuilder.append("KW1 : 'KW' '1';\n"); - grammarBuilder.append("KW2 : 'KW' '2';\n"); - grammarBuilder.append("KW3 : 'KW' '3';\n"); - grammarBuilder.append("KW4 : 'KW' '4';\n"); - grammarBuilder.append("KW5 : 'KW' '5';\n"); - grammarBuilder.append("KW6 : 'KW' '6';\n"); - grammarBuilder.append("KW7 : 'KW' '7';\n"); - grammarBuilder.append("KW8 : 'KW' '8';\n"); - grammarBuilder.append("KW9 : 'KW' '9';\n"); - grammarBuilder.append("KW10 : 'KW' '10';\n"); - grammarBuilder.append("KW11 : 'KW' '11';\n"); - grammarBuilder.append("KW12 : 'KW' '12';\n"); - grammarBuilder.append("KW13 : 'KW' '13';\n"); - grammarBuilder.append("KW14 : 'KW' '14';\n"); - grammarBuilder.append("KW15 : 'KW' '15';\n"); - grammarBuilder.append("KW16 : 'KW' '16';\n"); - grammarBuilder.append("KW17 : 'KW' '17';\n"); - grammarBuilder.append("KW18 : 'KW' '18';\n"); - grammarBuilder.append("KW19 : 'KW' '19';\n"); - grammarBuilder.append("KW20 : 'KW' '20';\n"); - grammarBuilder.append("KW21 : 'KW' '21';\n"); - grammarBuilder.append("KW22 : 'KW' '22';\n"); - grammarBuilder.append("KW23 : 'KW' '23';\n"); - grammarBuilder.append("KW24 : 'KW' '24';\n"); - grammarBuilder.append("KW25 : 'KW' '25';\n"); - grammarBuilder.append("KW26 : 'KW' '26';\n"); - grammarBuilder.append("KW27 : 'KW' '27';\n"); - grammarBuilder.append("KW28 : 'KW' '28';\n"); - grammarBuilder.append("KW29 : 'KW' '29';\n"); - grammarBuilder.append("KW30 : 'KW' '30';\n"); - grammarBuilder.append("KW31 : 'KW' '31';\n"); - grammarBuilder.append("KW32 : 'KW' '32';\n"); - grammarBuilder.append("KW33 : 'KW' '33';\n"); - grammarBuilder.append("KW34 : 'KW' '34';\n"); - grammarBuilder.append("KW35 : 'KW' '35';\n"); - grammarBuilder.append("KW36 : 'KW' '36';\n"); - grammarBuilder.append("KW37 : 'KW' '37';\n"); - grammarBuilder.append("KW38 : 'KW' '38';\n"); - grammarBuilder.append("KW39 : 'KW' '39';\n"); - grammarBuilder.append("KW40 : 'KW' '40';\n"); - grammarBuilder.append("KW41 : 'KW' '41';\n"); - grammarBuilder.append("KW42 : 'KW' '42';\n"); - grammarBuilder.append("KW43 : 'KW' '43';\n"); - grammarBuilder.append("KW44 : 'KW' '44';\n"); - grammarBuilder.append("KW45 : 'KW' '45';\n"); - grammarBuilder.append("KW46 : 'KW' '46';\n"); - grammarBuilder.append("KW47 : 'KW' '47';\n"); - grammarBuilder.append("KW48 : 'KW' '48';\n"); - grammarBuilder.append("KW49 : 'KW' '49';\n"); - grammarBuilder.append("KW50 : 'KW' '50';\n"); - grammarBuilder.append("KW51 : 'KW' '51';\n"); - grammarBuilder.append("KW52 : 'KW' '52';\n"); - grammarBuilder.append("KW53 : 'KW' '53';\n"); - grammarBuilder.append("KW54 : 'KW' '54';\n"); - grammarBuilder.append("KW55 : 'KW' '55';\n"); - grammarBuilder.append("KW56 : 'KW' '56';\n"); - grammarBuilder.append("KW57 : 'KW' '57';\n"); - grammarBuilder.append("KW58 : 'KW' '58';\n"); - grammarBuilder.append("KW59 : 'KW' '59';\n"); - grammarBuilder.append("KW60 : 'KW' '60';\n"); - grammarBuilder.append("KW61 : 'KW' '61';\n"); - grammarBuilder.append("KW62 : 'KW' '62';\n"); - grammarBuilder.append("KW63 : 'KW' '63';\n"); - grammarBuilder.append("KW64 : 'KW' '64';\n"); - grammarBuilder.append("KW65 : 'KW' '65';\n"); - grammarBuilder.append("KW66 : 'KW' '66';\n"); - grammarBuilder.append("KW67 : 'KW' '67';\n"); - grammarBuilder.append("KW68 : 'KW' '68';\n"); - grammarBuilder.append("KW69 : 'KW' '69';\n"); - grammarBuilder.append("KW70 : 'KW' '70';\n"); - grammarBuilder.append("KW71 : 'KW' '71';\n"); - grammarBuilder.append("KW72 : 'KW' '72';\n"); - grammarBuilder.append("KW73 : 'KW' '73';\n"); - grammarBuilder.append("KW74 : 'KW' '74';\n"); - grammarBuilder.append("KW75 : 'KW' '75';\n"); - grammarBuilder.append("KW76 : 'KW' '76';\n"); - grammarBuilder.append("KW77 : 'KW' '77';\n"); - grammarBuilder.append("KW78 : 'KW' '78';\n"); - grammarBuilder.append("KW79 : 'KW' '79';\n"); - grammarBuilder.append("KW80 : 'KW' '80';\n"); - grammarBuilder.append("KW81 : 'KW' '81';\n"); - grammarBuilder.append("KW82 : 'KW' '82';\n"); - grammarBuilder.append("KW83 : 'KW' '83';\n"); - grammarBuilder.append("KW84 : 'KW' '84';\n"); - grammarBuilder.append("KW85 : 'KW' '85';\n"); - grammarBuilder.append("KW86 : 'KW' '86';\n"); - grammarBuilder.append("KW87 : 'KW' '87';\n"); - grammarBuilder.append("KW88 : 'KW' '88';\n"); - grammarBuilder.append("KW89 : 'KW' '89';\n"); - grammarBuilder.append("KW90 : 'KW' '90';\n"); - grammarBuilder.append("KW91 : 'KW' '91';\n"); - grammarBuilder.append("KW92 : 'KW' '92';\n"); - grammarBuilder.append("KW93 : 'KW' '93';\n"); - grammarBuilder.append("KW94 : 'KW' '94';\n"); - grammarBuilder.append("KW95 : 'KW' '95';\n"); - grammarBuilder.append("KW96 : 'KW' '96';\n"); - grammarBuilder.append("KW97 : 'KW' '97';\n"); - grammarBuilder.append("KW98 : 'KW' '98';\n"); - grammarBuilder.append("KW99 : 'KW' '99';\n"); - grammarBuilder.append("KW100 : 'KW' '100';\n"); - grammarBuilder.append("KW101 : 'KW' '101';\n"); - grammarBuilder.append("KW102 : 'KW' '102';\n"); - grammarBuilder.append("KW103 : 'KW' '103';\n"); - grammarBuilder.append("KW104 : 'KW' '104';\n"); - grammarBuilder.append("KW105 : 'KW' '105';\n"); - grammarBuilder.append("KW106 : 'KW' '106';\n"); - grammarBuilder.append("KW107 : 'KW' '107';\n"); - grammarBuilder.append("KW108 : 'KW' '108';\n"); - grammarBuilder.append("KW109 : 'KW' '109';\n"); - grammarBuilder.append("KW110 : 'KW' '110';\n"); - grammarBuilder.append("KW111 : 'KW' '111';\n"); - grammarBuilder.append("KW112 : 'KW' '112';\n"); - grammarBuilder.append("KW113 : 'KW' '113';\n"); - grammarBuilder.append("KW114 : 'KW' '114';\n"); - grammarBuilder.append("KW115 : 'KW' '115';\n"); - grammarBuilder.append("KW116 : 'KW' '116';\n"); - grammarBuilder.append("KW117 : 'KW' '117';\n"); - grammarBuilder.append("KW118 : 'KW' '118';\n"); - grammarBuilder.append("KW119 : 'KW' '119';\n"); - grammarBuilder.append("KW120 : 'KW' '120';\n"); - grammarBuilder.append("KW121 : 'KW' '121';\n"); - grammarBuilder.append("KW122 : 'KW' '122';\n"); - grammarBuilder.append("KW123 : 'KW' '123';\n"); - grammarBuilder.append("KW124 : 'KW' '124';\n"); - grammarBuilder.append("KW125 : 'KW' '125';\n"); - grammarBuilder.append("KW126 : 'KW' '126';\n"); - grammarBuilder.append("KW127 : 'KW' '127';\n"); - grammarBuilder.append("KW128 : 'KW' '128';\n"); - grammarBuilder.append("KW129 : 'KW' '129';\n"); - grammarBuilder.append("KW130 : 'KW' '130';\n"); - grammarBuilder.append("KW131 : 'KW' '131';\n"); - grammarBuilder.append("KW132 : 'KW' '132';\n"); - grammarBuilder.append("KW133 : 'KW' '133';\n"); - grammarBuilder.append("KW134 : 'KW' '134';\n"); - grammarBuilder.append("KW135 : 'KW' '135';\n"); - grammarBuilder.append("KW136 : 'KW' '136';\n"); - grammarBuilder.append("KW137 : 'KW' '137';\n"); - grammarBuilder.append("KW138 : 'KW' '138';\n"); - grammarBuilder.append("KW139 : 'KW' '139';\n"); - grammarBuilder.append("KW140 : 'KW' '140';\n"); - grammarBuilder.append("KW141 : 'KW' '141';\n"); - grammarBuilder.append("KW142 : 'KW' '142';\n"); - grammarBuilder.append("KW143 : 'KW' '143';\n"); - grammarBuilder.append("KW144 : 'KW' '144';\n"); - grammarBuilder.append("KW145 : 'KW' '145';\n"); - grammarBuilder.append("KW146 : 'KW' '146';\n"); - grammarBuilder.append("KW147 : 'KW' '147';\n"); - grammarBuilder.append("KW148 : 'KW' '148';\n"); - grammarBuilder.append("KW149 : 'KW' '149';\n"); - grammarBuilder.append("KW150 : 'KW' '150';\n"); - grammarBuilder.append("KW151 : 'KW' '151';\n"); - grammarBuilder.append("KW152 : 'KW' '152';\n"); - grammarBuilder.append("KW153 : 'KW' '153';\n"); - grammarBuilder.append("KW154 : 'KW' '154';\n"); - grammarBuilder.append("KW155 : 'KW' '155';\n"); - grammarBuilder.append("KW156 : 'KW' '156';\n"); - grammarBuilder.append("KW157 : 'KW' '157';\n"); - grammarBuilder.append("KW158 : 'KW' '158';\n"); - grammarBuilder.append("KW159 : 'KW' '159';\n"); - grammarBuilder.append("KW160 : 'KW' '160';\n"); - grammarBuilder.append("KW161 : 'KW' '161';\n"); - grammarBuilder.append("KW162 : 'KW' '162';\n"); - grammarBuilder.append("KW163 : 'KW' '163';\n"); - grammarBuilder.append("KW164 : 'KW' '164';\n"); - grammarBuilder.append("KW165 : 'KW' '165';\n"); - grammarBuilder.append("KW166 : 'KW' '166';\n"); - grammarBuilder.append("KW167 : 'KW' '167';\n"); - grammarBuilder.append("KW168 : 'KW' '168';\n"); - grammarBuilder.append("KW169 : 'KW' '169';\n"); - grammarBuilder.append("KW170 : 'KW' '170';\n"); - grammarBuilder.append("KW171 : 'KW' '171';\n"); - grammarBuilder.append("KW172 : 'KW' '172';\n"); - grammarBuilder.append("KW173 : 'KW' '173';\n"); - grammarBuilder.append("KW174 : 'KW' '174';\n"); - grammarBuilder.append("KW175 : 'KW' '175';\n"); - grammarBuilder.append("KW176 : 'KW' '176';\n"); - grammarBuilder.append("KW177 : 'KW' '177';\n"); - grammarBuilder.append("KW178 : 'KW' '178';\n"); - grammarBuilder.append("KW179 : 'KW' '179';\n"); - grammarBuilder.append("KW180 : 'KW' '180';\n"); - grammarBuilder.append("KW181 : 'KW' '181';\n"); - grammarBuilder.append("KW182 : 'KW' '182';\n"); - grammarBuilder.append("KW183 : 'KW' '183';\n"); - grammarBuilder.append("KW184 : 'KW' '184';\n"); - grammarBuilder.append("KW185 : 'KW' '185';\n"); - grammarBuilder.append("KW186 : 'KW' '186';\n"); - grammarBuilder.append("KW187 : 'KW' '187';\n"); - grammarBuilder.append("KW188 : 'KW' '188';\n"); - grammarBuilder.append("KW189 : 'KW' '189';\n"); - grammarBuilder.append("KW190 : 'KW' '190';\n"); - grammarBuilder.append("KW191 : 'KW' '191';\n"); - grammarBuilder.append("KW192 : 'KW' '192';\n"); - grammarBuilder.append("KW193 : 'KW' '193';\n"); - grammarBuilder.append("KW194 : 'KW' '194';\n"); - grammarBuilder.append("KW195 : 'KW' '195';\n"); - grammarBuilder.append("KW196 : 'KW' '196';\n"); - grammarBuilder.append("KW197 : 'KW' '197';\n"); - grammarBuilder.append("KW198 : 'KW' '198';\n"); - grammarBuilder.append("KW199 : 'KW' '199';\n"); - grammarBuilder.append("KW200 : 'KW' '200';\n"); - grammarBuilder.append("KW201 : 'KW' '201';\n"); - grammarBuilder.append("KW202 : 'KW' '202';\n"); - grammarBuilder.append("KW203 : 'KW' '203';\n"); - grammarBuilder.append("KW204 : 'KW' '204';\n"); - grammarBuilder.append("KW205 : 'KW' '205';\n"); - grammarBuilder.append("KW206 : 'KW' '206';\n"); - grammarBuilder.append("KW207 : 'KW' '207';\n"); - grammarBuilder.append("KW208 : 'KW' '208';\n"); - grammarBuilder.append("KW209 : 'KW' '209';\n"); - grammarBuilder.append("KW210 : 'KW' '210';\n"); - grammarBuilder.append("KW211 : 'KW' '211';\n"); - grammarBuilder.append("KW212 : 'KW' '212';\n"); - grammarBuilder.append("KW213 : 'KW' '213';\n"); - grammarBuilder.append("KW214 : 'KW' '214';\n"); - grammarBuilder.append("KW215 : 'KW' '215';\n"); - grammarBuilder.append("KW216 : 'KW' '216';\n"); - grammarBuilder.append("KW217 : 'KW' '217';\n"); - grammarBuilder.append("KW218 : 'KW' '218';\n"); - grammarBuilder.append("KW219 : 'KW' '219';\n"); - grammarBuilder.append("KW220 : 'KW' '220';\n"); - grammarBuilder.append("KW221 : 'KW' '221';\n"); - grammarBuilder.append("KW222 : 'KW' '222';\n"); - grammarBuilder.append("KW223 : 'KW' '223';\n"); - grammarBuilder.append("KW224 : 'KW' '224';\n"); - grammarBuilder.append("KW225 : 'KW' '225';\n"); - grammarBuilder.append("KW226 : 'KW' '226';\n"); - grammarBuilder.append("KW227 : 'KW' '227';\n"); - grammarBuilder.append("KW228 : 'KW' '228';\n"); - grammarBuilder.append("KW229 : 'KW' '229';\n"); - grammarBuilder.append("KW230 : 'KW' '230';\n"); - grammarBuilder.append("KW231 : 'KW' '231';\n"); - grammarBuilder.append("KW232 : 'KW' '232';\n"); - grammarBuilder.append("KW233 : 'KW' '233';\n"); - grammarBuilder.append("KW234 : 'KW' '234';\n"); - grammarBuilder.append("KW235 : 'KW' '235';\n"); - grammarBuilder.append("KW236 : 'KW' '236';\n"); - grammarBuilder.append("KW237 : 'KW' '237';\n"); - grammarBuilder.append("KW238 : 'KW' '238';\n"); - grammarBuilder.append("KW239 : 'KW' '239';\n"); - grammarBuilder.append("KW240 : 'KW' '240';\n"); - grammarBuilder.append("KW241 : 'KW' '241';\n"); - grammarBuilder.append("KW242 : 'KW' '242';\n"); - grammarBuilder.append("KW243 : 'KW' '243';\n"); - grammarBuilder.append("KW244 : 'KW' '244';\n"); - grammarBuilder.append("KW245 : 'KW' '245';\n"); - grammarBuilder.append("KW246 : 'KW' '246';\n"); - grammarBuilder.append("KW247 : 'KW' '247';\n"); - grammarBuilder.append("KW248 : 'KW' '248';\n"); - grammarBuilder.append("KW249 : 'KW' '249';\n"); - grammarBuilder.append("KW250 : 'KW' '250';\n"); - grammarBuilder.append("KW251 : 'KW' '251';\n"); - grammarBuilder.append("KW252 : 'KW' '252';\n"); - grammarBuilder.append("KW253 : 'KW' '253';\n"); - grammarBuilder.append("KW254 : 'KW' '254';\n"); - grammarBuilder.append("KW255 : 'KW' '255';\n"); - grammarBuilder.append("KW256 : 'KW' '256';\n"); - grammarBuilder.append("KW257 : 'KW' '257';\n"); - grammarBuilder.append("KW258 : 'KW' '258';\n"); - grammarBuilder.append("KW259 : 'KW' '259';\n"); - grammarBuilder.append("KW260 : 'KW' '260';\n"); - grammarBuilder.append("KW261 : 'KW' '261';\n"); - grammarBuilder.append("KW262 : 'KW' '262';\n"); - grammarBuilder.append("KW263 : 'KW' '263';\n"); - grammarBuilder.append("KW264 : 'KW' '264';\n"); - grammarBuilder.append("KW265 : 'KW' '265';\n"); - grammarBuilder.append("KW266 : 'KW' '266';\n"); - grammarBuilder.append("KW267 : 'KW' '267';\n"); - grammarBuilder.append("KW268 : 'KW' '268';\n"); - grammarBuilder.append("KW269 : 'KW' '269';\n"); - grammarBuilder.append("KW270 : 'KW' '270';\n"); - grammarBuilder.append("KW271 : 'KW' '271';\n"); - grammarBuilder.append("KW272 : 'KW' '272';\n"); - grammarBuilder.append("KW273 : 'KW' '273';\n"); - grammarBuilder.append("KW274 : 'KW' '274';\n"); - grammarBuilder.append("KW275 : 'KW' '275';\n"); - grammarBuilder.append("KW276 : 'KW' '276';\n"); - grammarBuilder.append("KW277 : 'KW' '277';\n"); - grammarBuilder.append("KW278 : 'KW' '278';\n"); - grammarBuilder.append("KW279 : 'KW' '279';\n"); - grammarBuilder.append("KW280 : 'KW' '280';\n"); - grammarBuilder.append("KW281 : 'KW' '281';\n"); - grammarBuilder.append("KW282 : 'KW' '282';\n"); - grammarBuilder.append("KW283 : 'KW' '283';\n"); - grammarBuilder.append("KW284 : 'KW' '284';\n"); - grammarBuilder.append("KW285 : 'KW' '285';\n"); - grammarBuilder.append("KW286 : 'KW' '286';\n"); - grammarBuilder.append("KW287 : 'KW' '287';\n"); - grammarBuilder.append("KW288 : 'KW' '288';\n"); - grammarBuilder.append("KW289 : 'KW' '289';\n"); - grammarBuilder.append("KW290 : 'KW' '290';\n"); - grammarBuilder.append("KW291 : 'KW' '291';\n"); - grammarBuilder.append("KW292 : 'KW' '292';\n"); - grammarBuilder.append("KW293 : 'KW' '293';\n"); - grammarBuilder.append("KW294 : 'KW' '294';\n"); - grammarBuilder.append("KW295 : 'KW' '295';\n"); - grammarBuilder.append("KW296 : 'KW' '296';\n"); - grammarBuilder.append("KW297 : 'KW' '297';\n"); - grammarBuilder.append("KW298 : 'KW' '298';\n"); - grammarBuilder.append("KW299 : 'KW' '299';\n"); - grammarBuilder.append("KW300 : 'KW' '300';\n"); - grammarBuilder.append("KW301 : 'KW' '301';\n"); - grammarBuilder.append("KW302 : 'KW' '302';\n"); - grammarBuilder.append("KW303 : 'KW' '303';\n"); - grammarBuilder.append("KW304 : 'KW' '304';\n"); - grammarBuilder.append("KW305 : 'KW' '305';\n"); - grammarBuilder.append("KW306 : 'KW' '306';\n"); - grammarBuilder.append("KW307 : 'KW' '307';\n"); - grammarBuilder.append("KW308 : 'KW' '308';\n"); - grammarBuilder.append("KW309 : 'KW' '309';\n"); - grammarBuilder.append("KW310 : 'KW' '310';\n"); - grammarBuilder.append("KW311 : 'KW' '311';\n"); - grammarBuilder.append("KW312 : 'KW' '312';\n"); - grammarBuilder.append("KW313 : 'KW' '313';\n"); - grammarBuilder.append("KW314 : 'KW' '314';\n"); - grammarBuilder.append("KW315 : 'KW' '315';\n"); - grammarBuilder.append("KW316 : 'KW' '316';\n"); - grammarBuilder.append("KW317 : 'KW' '317';\n"); - grammarBuilder.append("KW318 : 'KW' '318';\n"); - grammarBuilder.append("KW319 : 'KW' '319';\n"); - grammarBuilder.append("KW320 : 'KW' '320';\n"); - grammarBuilder.append("KW321 : 'KW' '321';\n"); - grammarBuilder.append("KW322 : 'KW' '322';\n"); - grammarBuilder.append("KW323 : 'KW' '323';\n"); - grammarBuilder.append("KW324 : 'KW' '324';\n"); - grammarBuilder.append("KW325 : 'KW' '325';\n"); - grammarBuilder.append("KW326 : 'KW' '326';\n"); - grammarBuilder.append("KW327 : 'KW' '327';\n"); - grammarBuilder.append("KW328 : 'KW' '328';\n"); - grammarBuilder.append("KW329 : 'KW' '329';\n"); - grammarBuilder.append("KW330 : 'KW' '330';\n"); - grammarBuilder.append("KW331 : 'KW' '331';\n"); - grammarBuilder.append("KW332 : 'KW' '332';\n"); - grammarBuilder.append("KW333 : 'KW' '333';\n"); - grammarBuilder.append("KW334 : 'KW' '334';\n"); - grammarBuilder.append("KW335 : 'KW' '335';\n"); - grammarBuilder.append("KW336 : 'KW' '336';\n"); - grammarBuilder.append("KW337 : 'KW' '337';\n"); - grammarBuilder.append("KW338 : 'KW' '338';\n"); - grammarBuilder.append("KW339 : 'KW' '339';\n"); - grammarBuilder.append("KW340 : 'KW' '340';\n"); - grammarBuilder.append("KW341 : 'KW' '341';\n"); - grammarBuilder.append("KW342 : 'KW' '342';\n"); - grammarBuilder.append("KW343 : 'KW' '343';\n"); - grammarBuilder.append("KW344 : 'KW' '344';\n"); - grammarBuilder.append("KW345 : 'KW' '345';\n"); - grammarBuilder.append("KW346 : 'KW' '346';\n"); - grammarBuilder.append("KW347 : 'KW' '347';\n"); - grammarBuilder.append("KW348 : 'KW' '348';\n"); - grammarBuilder.append("KW349 : 'KW' '349';\n"); - grammarBuilder.append("KW350 : 'KW' '350';\n"); - grammarBuilder.append("KW351 : 'KW' '351';\n"); - grammarBuilder.append("KW352 : 'KW' '352';\n"); - grammarBuilder.append("KW353 : 'KW' '353';\n"); - grammarBuilder.append("KW354 : 'KW' '354';\n"); - grammarBuilder.append("KW355 : 'KW' '355';\n"); - grammarBuilder.append("KW356 : 'KW' '356';\n"); - grammarBuilder.append("KW357 : 'KW' '357';\n"); - grammarBuilder.append("KW358 : 'KW' '358';\n"); - grammarBuilder.append("KW359 : 'KW' '359';\n"); - grammarBuilder.append("KW360 : 'KW' '360';\n"); - grammarBuilder.append("KW361 : 'KW' '361';\n"); - grammarBuilder.append("KW362 : 'KW' '362';\n"); - grammarBuilder.append("KW363 : 'KW' '363';\n"); - grammarBuilder.append("KW364 : 'KW' '364';\n"); - grammarBuilder.append("KW365 : 'KW' '365';\n"); - grammarBuilder.append("KW366 : 'KW' '366';\n"); - grammarBuilder.append("KW367 : 'KW' '367';\n"); - grammarBuilder.append("KW368 : 'KW' '368';\n"); - grammarBuilder.append("KW369 : 'KW' '369';\n"); - grammarBuilder.append("KW370 : 'KW' '370';\n"); - grammarBuilder.append("KW371 : 'KW' '371';\n"); - grammarBuilder.append("KW372 : 'KW' '372';\n"); - grammarBuilder.append("KW373 : 'KW' '373';\n"); - grammarBuilder.append("KW374 : 'KW' '374';\n"); - grammarBuilder.append("KW375 : 'KW' '375';\n"); - grammarBuilder.append("KW376 : 'KW' '376';\n"); - grammarBuilder.append("KW377 : 'KW' '377';\n"); - grammarBuilder.append("KW378 : 'KW' '378';\n"); - grammarBuilder.append("KW379 : 'KW' '379';\n"); - grammarBuilder.append("KW380 : 'KW' '380';\n"); - grammarBuilder.append("KW381 : 'KW' '381';\n"); - grammarBuilder.append("KW382 : 'KW' '382';\n"); - grammarBuilder.append("KW383 : 'KW' '383';\n"); - grammarBuilder.append("KW384 : 'KW' '384';\n"); - grammarBuilder.append("KW385 : 'KW' '385';\n"); - grammarBuilder.append("KW386 : 'KW' '386';\n"); - grammarBuilder.append("KW387 : 'KW' '387';\n"); - grammarBuilder.append("KW388 : 'KW' '388';\n"); - grammarBuilder.append("KW389 : 'KW' '389';\n"); - grammarBuilder.append("KW390 : 'KW' '390';\n"); - grammarBuilder.append("KW391 : 'KW' '391';\n"); - grammarBuilder.append("KW392 : 'KW' '392';\n"); - grammarBuilder.append("KW393 : 'KW' '393';\n"); - grammarBuilder.append("KW394 : 'KW' '394';\n"); - grammarBuilder.append("KW395 : 'KW' '395';\n"); - grammarBuilder.append("KW396 : 'KW' '396';\n"); - grammarBuilder.append("KW397 : 'KW' '397';\n"); - grammarBuilder.append("KW398 : 'KW' '398';\n"); - grammarBuilder.append("KW399 : 'KW' '399';\n"); - grammarBuilder.append("KW400 : 'KW' '400';\n"); - grammarBuilder.append("KW401 : 'KW' '401';\n"); - grammarBuilder.append("KW402 : 'KW' '402';\n"); - grammarBuilder.append("KW403 : 'KW' '403';\n"); - grammarBuilder.append("KW404 : 'KW' '404';\n"); - grammarBuilder.append("KW405 : 'KW' '405';\n"); - grammarBuilder.append("KW406 : 'KW' '406';\n"); - grammarBuilder.append("KW407 : 'KW' '407';\n"); - grammarBuilder.append("KW408 : 'KW' '408';\n"); - grammarBuilder.append("KW409 : 'KW' '409';\n"); - grammarBuilder.append("KW410 : 'KW' '410';\n"); - grammarBuilder.append("KW411 : 'KW' '411';\n"); - grammarBuilder.append("KW412 : 'KW' '412';\n"); - grammarBuilder.append("KW413 : 'KW' '413';\n"); - grammarBuilder.append("KW414 : 'KW' '414';\n"); - grammarBuilder.append("KW415 : 'KW' '415';\n"); - grammarBuilder.append("KW416 : 'KW' '416';\n"); - grammarBuilder.append("KW417 : 'KW' '417';\n"); - grammarBuilder.append("KW418 : 'KW' '418';\n"); - grammarBuilder.append("KW419 : 'KW' '419';\n"); - grammarBuilder.append("KW420 : 'KW' '420';\n"); - grammarBuilder.append("KW421 : 'KW' '421';\n"); - grammarBuilder.append("KW422 : 'KW' '422';\n"); - grammarBuilder.append("KW423 : 'KW' '423';\n"); - grammarBuilder.append("KW424 : 'KW' '424';\n"); - grammarBuilder.append("KW425 : 'KW' '425';\n"); - grammarBuilder.append("KW426 : 'KW' '426';\n"); - grammarBuilder.append("KW427 : 'KW' '427';\n"); - grammarBuilder.append("KW428 : 'KW' '428';\n"); - grammarBuilder.append("KW429 : 'KW' '429';\n"); - grammarBuilder.append("KW430 : 'KW' '430';\n"); - grammarBuilder.append("KW431 : 'KW' '431';\n"); - grammarBuilder.append("KW432 : 'KW' '432';\n"); - grammarBuilder.append("KW433 : 'KW' '433';\n"); - grammarBuilder.append("KW434 : 'KW' '434';\n"); - grammarBuilder.append("KW435 : 'KW' '435';\n"); - grammarBuilder.append("KW436 : 'KW' '436';\n"); - grammarBuilder.append("KW437 : 'KW' '437';\n"); - grammarBuilder.append("KW438 : 'KW' '438';\n"); - grammarBuilder.append("KW439 : 'KW' '439';\n"); - grammarBuilder.append("KW440 : 'KW' '440';\n"); - grammarBuilder.append("KW441 : 'KW' '441';\n"); - grammarBuilder.append("KW442 : 'KW' '442';\n"); - grammarBuilder.append("KW443 : 'KW' '443';\n"); - grammarBuilder.append("KW444 : 'KW' '444';\n"); - grammarBuilder.append("KW445 : 'KW' '445';\n"); - grammarBuilder.append("KW446 : 'KW' '446';\n"); - grammarBuilder.append("KW447 : 'KW' '447';\n"); - grammarBuilder.append("KW448 : 'KW' '448';\n"); - grammarBuilder.append("KW449 : 'KW' '449';\n"); - grammarBuilder.append("KW450 : 'KW' '450';\n"); - grammarBuilder.append("KW451 : 'KW' '451';\n"); - grammarBuilder.append("KW452 : 'KW' '452';\n"); - grammarBuilder.append("KW453 : 'KW' '453';\n"); - grammarBuilder.append("KW454 : 'KW' '454';\n"); - grammarBuilder.append("KW455 : 'KW' '455';\n"); - grammarBuilder.append("KW456 : 'KW' '456';\n"); - grammarBuilder.append("KW457 : 'KW' '457';\n"); - grammarBuilder.append("KW458 : 'KW' '458';\n"); - grammarBuilder.append("KW459 : 'KW' '459';\n"); - grammarBuilder.append("KW460 : 'KW' '460';\n"); - grammarBuilder.append("KW461 : 'KW' '461';\n"); - grammarBuilder.append("KW462 : 'KW' '462';\n"); - grammarBuilder.append("KW463 : 'KW' '463';\n"); - grammarBuilder.append("KW464 : 'KW' '464';\n"); - grammarBuilder.append("KW465 : 'KW' '465';\n"); - grammarBuilder.append("KW466 : 'KW' '466';\n"); - grammarBuilder.append("KW467 : 'KW' '467';\n"); - grammarBuilder.append("KW468 : 'KW' '468';\n"); - grammarBuilder.append("KW469 : 'KW' '469';\n"); - grammarBuilder.append("KW470 : 'KW' '470';\n"); - grammarBuilder.append("KW471 : 'KW' '471';\n"); - grammarBuilder.append("KW472 : 'KW' '472';\n"); - grammarBuilder.append("KW473 : 'KW' '473';\n"); - grammarBuilder.append("KW474 : 'KW' '474';\n"); - grammarBuilder.append("KW475 : 'KW' '475';\n"); - grammarBuilder.append("KW476 : 'KW' '476';\n"); - grammarBuilder.append("KW477 : 'KW' '477';\n"); - grammarBuilder.append("KW478 : 'KW' '478';\n"); - grammarBuilder.append("KW479 : 'KW' '479';\n"); - grammarBuilder.append("KW480 : 'KW' '480';\n"); - grammarBuilder.append("KW481 : 'KW' '481';\n"); - grammarBuilder.append("KW482 : 'KW' '482';\n"); - grammarBuilder.append("KW483 : 'KW' '483';\n"); - grammarBuilder.append("KW484 : 'KW' '484';\n"); - grammarBuilder.append("KW485 : 'KW' '485';\n"); - grammarBuilder.append("KW486 : 'KW' '486';\n"); - grammarBuilder.append("KW487 : 'KW' '487';\n"); - grammarBuilder.append("KW488 : 'KW' '488';\n"); - grammarBuilder.append("KW489 : 'KW' '489';\n"); - grammarBuilder.append("KW490 : 'KW' '490';\n"); - grammarBuilder.append("KW491 : 'KW' '491';\n"); - grammarBuilder.append("KW492 : 'KW' '492';\n"); - grammarBuilder.append("KW493 : 'KW' '493';\n"); - grammarBuilder.append("KW494 : 'KW' '494';\n"); - grammarBuilder.append("KW495 : 'KW' '495';\n"); - grammarBuilder.append("KW496 : 'KW' '496';\n"); - grammarBuilder.append("KW497 : 'KW' '497';\n"); - grammarBuilder.append("KW498 : 'KW' '498';\n"); - grammarBuilder.append("KW499 : 'KW' '499';\n"); - grammarBuilder.append("KW500 : 'KW' '500';\n"); - grammarBuilder.append("KW501 : 'KW' '501';\n"); - grammarBuilder.append("KW502 : 'KW' '502';\n"); - grammarBuilder.append("KW503 : 'KW' '503';\n"); - grammarBuilder.append("KW504 : 'KW' '504';\n"); - grammarBuilder.append("KW505 : 'KW' '505';\n"); - grammarBuilder.append("KW506 : 'KW' '506';\n"); - grammarBuilder.append("KW507 : 'KW' '507';\n"); - grammarBuilder.append("KW508 : 'KW' '508';\n"); - grammarBuilder.append("KW509 : 'KW' '509';\n"); - grammarBuilder.append("KW510 : 'KW' '510';\n"); - grammarBuilder.append("KW511 : 'KW' '511';\n"); - grammarBuilder.append("KW512 : 'KW' '512';\n"); - grammarBuilder.append("KW513 : 'KW' '513';\n"); - grammarBuilder.append("KW514 : 'KW' '514';\n"); - grammarBuilder.append("KW515 : 'KW' '515';\n"); - grammarBuilder.append("KW516 : 'KW' '516';\n"); - grammarBuilder.append("KW517 : 'KW' '517';\n"); - grammarBuilder.append("KW518 : 'KW' '518';\n"); - grammarBuilder.append("KW519 : 'KW' '519';\n"); - grammarBuilder.append("KW520 : 'KW' '520';\n"); - grammarBuilder.append("KW521 : 'KW' '521';\n"); - grammarBuilder.append("KW522 : 'KW' '522';\n"); - grammarBuilder.append("KW523 : 'KW' '523';\n"); - grammarBuilder.append("KW524 : 'KW' '524';\n"); - grammarBuilder.append("KW525 : 'KW' '525';\n"); - grammarBuilder.append("KW526 : 'KW' '526';\n"); - grammarBuilder.append("KW527 : 'KW' '527';\n"); - grammarBuilder.append("KW528 : 'KW' '528';\n"); - grammarBuilder.append("KW529 : 'KW' '529';\n"); - grammarBuilder.append("KW530 : 'KW' '530';\n"); - grammarBuilder.append("KW531 : 'KW' '531';\n"); - grammarBuilder.append("KW532 : 'KW' '532';\n"); - grammarBuilder.append("KW533 : 'KW' '533';\n"); - grammarBuilder.append("KW534 : 'KW' '534';\n"); - grammarBuilder.append("KW535 : 'KW' '535';\n"); - grammarBuilder.append("KW536 : 'KW' '536';\n"); - grammarBuilder.append("KW537 : 'KW' '537';\n"); - grammarBuilder.append("KW538 : 'KW' '538';\n"); - grammarBuilder.append("KW539 : 'KW' '539';\n"); - grammarBuilder.append("KW540 : 'KW' '540';\n"); - grammarBuilder.append("KW541 : 'KW' '541';\n"); - grammarBuilder.append("KW542 : 'KW' '542';\n"); - grammarBuilder.append("KW543 : 'KW' '543';\n"); - grammarBuilder.append("KW544 : 'KW' '544';\n"); - grammarBuilder.append("KW545 : 'KW' '545';\n"); - grammarBuilder.append("KW546 : 'KW' '546';\n"); - grammarBuilder.append("KW547 : 'KW' '547';\n"); - grammarBuilder.append("KW548 : 'KW' '548';\n"); - grammarBuilder.append("KW549 : 'KW' '549';\n"); - grammarBuilder.append("KW550 : 'KW' '550';\n"); - grammarBuilder.append("KW551 : 'KW' '551';\n"); - grammarBuilder.append("KW552 : 'KW' '552';\n"); - grammarBuilder.append("KW553 : 'KW' '553';\n"); - grammarBuilder.append("KW554 : 'KW' '554';\n"); - grammarBuilder.append("KW555 : 'KW' '555';\n"); - grammarBuilder.append("KW556 : 'KW' '556';\n"); - grammarBuilder.append("KW557 : 'KW' '557';\n"); - grammarBuilder.append("KW558 : 'KW' '558';\n"); - grammarBuilder.append("KW559 : 'KW' '559';\n"); - grammarBuilder.append("KW560 : 'KW' '560';\n"); - grammarBuilder.append("KW561 : 'KW' '561';\n"); - grammarBuilder.append("KW562 : 'KW' '562';\n"); - grammarBuilder.append("KW563 : 'KW' '563';\n"); - grammarBuilder.append("KW564 : 'KW' '564';\n"); - grammarBuilder.append("KW565 : 'KW' '565';\n"); - grammarBuilder.append("KW566 : 'KW' '566';\n"); - grammarBuilder.append("KW567 : 'KW' '567';\n"); - grammarBuilder.append("KW568 : 'KW' '568';\n"); - grammarBuilder.append("KW569 : 'KW' '569';\n"); - grammarBuilder.append("KW570 : 'KW' '570';\n"); - grammarBuilder.append("KW571 : 'KW' '571';\n"); - grammarBuilder.append("KW572 : 'KW' '572';\n"); - grammarBuilder.append("KW573 : 'KW' '573';\n"); - grammarBuilder.append("KW574 : 'KW' '574';\n"); - grammarBuilder.append("KW575 : 'KW' '575';\n"); - grammarBuilder.append("KW576 : 'KW' '576';\n"); - grammarBuilder.append("KW577 : 'KW' '577';\n"); - grammarBuilder.append("KW578 : 'KW' '578';\n"); - grammarBuilder.append("KW579 : 'KW' '579';\n"); - grammarBuilder.append("KW580 : 'KW' '580';\n"); - grammarBuilder.append("KW581 : 'KW' '581';\n"); - grammarBuilder.append("KW582 : 'KW' '582';\n"); - grammarBuilder.append("KW583 : 'KW' '583';\n"); - grammarBuilder.append("KW584 : 'KW' '584';\n"); - grammarBuilder.append("KW585 : 'KW' '585';\n"); - grammarBuilder.append("KW586 : 'KW' '586';\n"); - grammarBuilder.append("KW587 : 'KW' '587';\n"); - grammarBuilder.append("KW588 : 'KW' '588';\n"); - grammarBuilder.append("KW589 : 'KW' '589';\n"); - grammarBuilder.append("KW590 : 'KW' '590';\n"); - grammarBuilder.append("KW591 : 'KW' '591';\n"); - grammarBuilder.append("KW592 : 'KW' '592';\n"); - grammarBuilder.append("KW593 : 'KW' '593';\n"); - grammarBuilder.append("KW594 : 'KW' '594';\n"); - grammarBuilder.append("KW595 : 'KW' '595';\n"); - grammarBuilder.append("KW596 : 'KW' '596';\n"); - grammarBuilder.append("KW597 : 'KW' '597';\n"); - grammarBuilder.append("KW598 : 'KW' '598';\n"); - grammarBuilder.append("KW599 : 'KW' '599';\n"); - grammarBuilder.append("KW600 : 'KW' '600';\n"); - grammarBuilder.append("KW601 : 'KW' '601';\n"); - grammarBuilder.append("KW602 : 'KW' '602';\n"); - grammarBuilder.append("KW603 : 'KW' '603';\n"); - grammarBuilder.append("KW604 : 'KW' '604';\n"); - grammarBuilder.append("KW605 : 'KW' '605';\n"); - grammarBuilder.append("KW606 : 'KW' '606';\n"); - grammarBuilder.append("KW607 : 'KW' '607';\n"); - grammarBuilder.append("KW608 : 'KW' '608';\n"); - grammarBuilder.append("KW609 : 'KW' '609';\n"); - grammarBuilder.append("KW610 : 'KW' '610';\n"); - grammarBuilder.append("KW611 : 'KW' '611';\n"); - grammarBuilder.append("KW612 : 'KW' '612';\n"); - grammarBuilder.append("KW613 : 'KW' '613';\n"); - grammarBuilder.append("KW614 : 'KW' '614';\n"); - grammarBuilder.append("KW615 : 'KW' '615';\n"); - grammarBuilder.append("KW616 : 'KW' '616';\n"); - grammarBuilder.append("KW617 : 'KW' '617';\n"); - grammarBuilder.append("KW618 : 'KW' '618';\n"); - grammarBuilder.append("KW619 : 'KW' '619';\n"); - grammarBuilder.append("KW620 : 'KW' '620';\n"); - grammarBuilder.append("KW621 : 'KW' '621';\n"); - grammarBuilder.append("KW622 : 'KW' '622';\n"); - grammarBuilder.append("KW623 : 'KW' '623';\n"); - grammarBuilder.append("KW624 : 'KW' '624';\n"); - grammarBuilder.append("KW625 : 'KW' '625';\n"); - grammarBuilder.append("KW626 : 'KW' '626';\n"); - grammarBuilder.append("KW627 : 'KW' '627';\n"); - grammarBuilder.append("KW628 : 'KW' '628';\n"); - grammarBuilder.append("KW629 : 'KW' '629';\n"); - grammarBuilder.append("KW630 : 'KW' '630';\n"); - grammarBuilder.append("KW631 : 'KW' '631';\n"); - grammarBuilder.append("KW632 : 'KW' '632';\n"); - grammarBuilder.append("KW633 : 'KW' '633';\n"); - grammarBuilder.append("KW634 : 'KW' '634';\n"); - grammarBuilder.append("KW635 : 'KW' '635';\n"); - grammarBuilder.append("KW636 : 'KW' '636';\n"); - grammarBuilder.append("KW637 : 'KW' '637';\n"); - grammarBuilder.append("KW638 : 'KW' '638';\n"); - grammarBuilder.append("KW639 : 'KW' '639';\n"); - grammarBuilder.append("KW640 : 'KW' '640';\n"); - grammarBuilder.append("KW641 : 'KW' '641';\n"); - grammarBuilder.append("KW642 : 'KW' '642';\n"); - grammarBuilder.append("KW643 : 'KW' '643';\n"); - grammarBuilder.append("KW644 : 'KW' '644';\n"); - grammarBuilder.append("KW645 : 'KW' '645';\n"); - grammarBuilder.append("KW646 : 'KW' '646';\n"); - grammarBuilder.append("KW647 : 'KW' '647';\n"); - grammarBuilder.append("KW648 : 'KW' '648';\n"); - grammarBuilder.append("KW649 : 'KW' '649';\n"); - grammarBuilder.append("KW650 : 'KW' '650';\n"); - grammarBuilder.append("KW651 : 'KW' '651';\n"); - grammarBuilder.append("KW652 : 'KW' '652';\n"); - grammarBuilder.append("KW653 : 'KW' '653';\n"); - grammarBuilder.append("KW654 : 'KW' '654';\n"); - grammarBuilder.append("KW655 : 'KW' '655';\n"); - grammarBuilder.append("KW656 : 'KW' '656';\n"); - grammarBuilder.append("KW657 : 'KW' '657';\n"); - grammarBuilder.append("KW658 : 'KW' '658';\n"); - grammarBuilder.append("KW659 : 'KW' '659';\n"); - grammarBuilder.append("KW660 : 'KW' '660';\n"); - grammarBuilder.append("KW661 : 'KW' '661';\n"); - grammarBuilder.append("KW662 : 'KW' '662';\n"); - grammarBuilder.append("KW663 : 'KW' '663';\n"); - grammarBuilder.append("KW664 : 'KW' '664';\n"); - grammarBuilder.append("KW665 : 'KW' '665';\n"); - grammarBuilder.append("KW666 : 'KW' '666';\n"); - grammarBuilder.append("KW667 : 'KW' '667';\n"); - grammarBuilder.append("KW668 : 'KW' '668';\n"); - grammarBuilder.append("KW669 : 'KW' '669';\n"); - grammarBuilder.append("KW670 : 'KW' '670';\n"); - grammarBuilder.append("KW671 : 'KW' '671';\n"); - grammarBuilder.append("KW672 : 'KW' '672';\n"); - grammarBuilder.append("KW673 : 'KW' '673';\n"); - grammarBuilder.append("KW674 : 'KW' '674';\n"); - grammarBuilder.append("KW675 : 'KW' '675';\n"); - grammarBuilder.append("KW676 : 'KW' '676';\n"); - grammarBuilder.append("KW677 : 'KW' '677';\n"); - grammarBuilder.append("KW678 : 'KW' '678';\n"); - grammarBuilder.append("KW679 : 'KW' '679';\n"); - grammarBuilder.append("KW680 : 'KW' '680';\n"); - grammarBuilder.append("KW681 : 'KW' '681';\n"); - grammarBuilder.append("KW682 : 'KW' '682';\n"); - grammarBuilder.append("KW683 : 'KW' '683';\n"); - grammarBuilder.append("KW684 : 'KW' '684';\n"); - grammarBuilder.append("KW685 : 'KW' '685';\n"); - grammarBuilder.append("KW686 : 'KW' '686';\n"); - grammarBuilder.append("KW687 : 'KW' '687';\n"); - grammarBuilder.append("KW688 : 'KW' '688';\n"); - grammarBuilder.append("KW689 : 'KW' '689';\n"); - grammarBuilder.append("KW690 : 'KW' '690';\n"); - grammarBuilder.append("KW691 : 'KW' '691';\n"); - grammarBuilder.append("KW692 : 'KW' '692';\n"); - grammarBuilder.append("KW693 : 'KW' '693';\n"); - grammarBuilder.append("KW694 : 'KW' '694';\n"); - grammarBuilder.append("KW695 : 'KW' '695';\n"); - grammarBuilder.append("KW696 : 'KW' '696';\n"); - grammarBuilder.append("KW697 : 'KW' '697';\n"); - grammarBuilder.append("KW698 : 'KW' '698';\n"); - grammarBuilder.append("KW699 : 'KW' '699';\n"); - grammarBuilder.append("KW700 : 'KW' '700';\n"); - grammarBuilder.append("KW701 : 'KW' '701';\n"); - grammarBuilder.append("KW702 : 'KW' '702';\n"); - grammarBuilder.append("KW703 : 'KW' '703';\n"); - grammarBuilder.append("KW704 : 'KW' '704';\n"); - grammarBuilder.append("KW705 : 'KW' '705';\n"); - grammarBuilder.append("KW706 : 'KW' '706';\n"); - grammarBuilder.append("KW707 : 'KW' '707';\n"); - grammarBuilder.append("KW708 : 'KW' '708';\n"); - grammarBuilder.append("KW709 : 'KW' '709';\n"); - grammarBuilder.append("KW710 : 'KW' '710';\n"); - grammarBuilder.append("KW711 : 'KW' '711';\n"); - grammarBuilder.append("KW712 : 'KW' '712';\n"); - grammarBuilder.append("KW713 : 'KW' '713';\n"); - grammarBuilder.append("KW714 : 'KW' '714';\n"); - grammarBuilder.append("KW715 : 'KW' '715';\n"); - grammarBuilder.append("KW716 : 'KW' '716';\n"); - grammarBuilder.append("KW717 : 'KW' '717';\n"); - grammarBuilder.append("KW718 : 'KW' '718';\n"); - grammarBuilder.append("KW719 : 'KW' '719';\n"); - grammarBuilder.append("KW720 : 'KW' '720';\n"); - grammarBuilder.append("KW721 : 'KW' '721';\n"); - grammarBuilder.append("KW722 : 'KW' '722';\n"); - grammarBuilder.append("KW723 : 'KW' '723';\n"); - grammarBuilder.append("KW724 : 'KW' '724';\n"); - grammarBuilder.append("KW725 : 'KW' '725';\n"); - grammarBuilder.append("KW726 : 'KW' '726';\n"); - grammarBuilder.append("KW727 : 'KW' '727';\n"); - grammarBuilder.append("KW728 : 'KW' '728';\n"); - grammarBuilder.append("KW729 : 'KW' '729';\n"); - grammarBuilder.append("KW730 : 'KW' '730';\n"); - grammarBuilder.append("KW731 : 'KW' '731';\n"); - grammarBuilder.append("KW732 : 'KW' '732';\n"); - grammarBuilder.append("KW733 : 'KW' '733';\n"); - grammarBuilder.append("KW734 : 'KW' '734';\n"); - grammarBuilder.append("KW735 : 'KW' '735';\n"); - grammarBuilder.append("KW736 : 'KW' '736';\n"); - grammarBuilder.append("KW737 : 'KW' '737';\n"); - grammarBuilder.append("KW738 : 'KW' '738';\n"); - grammarBuilder.append("KW739 : 'KW' '739';\n"); - grammarBuilder.append("KW740 : 'KW' '740';\n"); - grammarBuilder.append("KW741 : 'KW' '741';\n"); - grammarBuilder.append("KW742 : 'KW' '742';\n"); - grammarBuilder.append("KW743 : 'KW' '743';\n"); - grammarBuilder.append("KW744 : 'KW' '744';\n"); - grammarBuilder.append("KW745 : 'KW' '745';\n"); - grammarBuilder.append("KW746 : 'KW' '746';\n"); - grammarBuilder.append("KW747 : 'KW' '747';\n"); - grammarBuilder.append("KW748 : 'KW' '748';\n"); - grammarBuilder.append("KW749 : 'KW' '749';\n"); - grammarBuilder.append("KW750 : 'KW' '750';\n"); - grammarBuilder.append("KW751 : 'KW' '751';\n"); - grammarBuilder.append("KW752 : 'KW' '752';\n"); - grammarBuilder.append("KW753 : 'KW' '753';\n"); - grammarBuilder.append("KW754 : 'KW' '754';\n"); - grammarBuilder.append("KW755 : 'KW' '755';\n"); - grammarBuilder.append("KW756 : 'KW' '756';\n"); - grammarBuilder.append("KW757 : 'KW' '757';\n"); - grammarBuilder.append("KW758 : 'KW' '758';\n"); - grammarBuilder.append("KW759 : 'KW' '759';\n"); - grammarBuilder.append("KW760 : 'KW' '760';\n"); - grammarBuilder.append("KW761 : 'KW' '761';\n"); - grammarBuilder.append("KW762 : 'KW' '762';\n"); - grammarBuilder.append("KW763 : 'KW' '763';\n"); - grammarBuilder.append("KW764 : 'KW' '764';\n"); - grammarBuilder.append("KW765 : 'KW' '765';\n"); - grammarBuilder.append("KW766 : 'KW' '766';\n"); - grammarBuilder.append("KW767 : 'KW' '767';\n"); - grammarBuilder.append("KW768 : 'KW' '768';\n"); - grammarBuilder.append("KW769 : 'KW' '769';\n"); - grammarBuilder.append("KW770 : 'KW' '770';\n"); - grammarBuilder.append("KW771 : 'KW' '771';\n"); - grammarBuilder.append("KW772 : 'KW' '772';\n"); - grammarBuilder.append("KW773 : 'KW' '773';\n"); - grammarBuilder.append("KW774 : 'KW' '774';\n"); - grammarBuilder.append("KW775 : 'KW' '775';\n"); - grammarBuilder.append("KW776 : 'KW' '776';\n"); - grammarBuilder.append("KW777 : 'KW' '777';\n"); - grammarBuilder.append("KW778 : 'KW' '778';\n"); - grammarBuilder.append("KW779 : 'KW' '779';\n"); - grammarBuilder.append("KW780 : 'KW' '780';\n"); - grammarBuilder.append("KW781 : 'KW' '781';\n"); - grammarBuilder.append("KW782 : 'KW' '782';\n"); - grammarBuilder.append("KW783 : 'KW' '783';\n"); - grammarBuilder.append("KW784 : 'KW' '784';\n"); - grammarBuilder.append("KW785 : 'KW' '785';\n"); - grammarBuilder.append("KW786 : 'KW' '786';\n"); - grammarBuilder.append("KW787 : 'KW' '787';\n"); - grammarBuilder.append("KW788 : 'KW' '788';\n"); - grammarBuilder.append("KW789 : 'KW' '789';\n"); - grammarBuilder.append("KW790 : 'KW' '790';\n"); - grammarBuilder.append("KW791 : 'KW' '791';\n"); - grammarBuilder.append("KW792 : 'KW' '792';\n"); - grammarBuilder.append("KW793 : 'KW' '793';\n"); - grammarBuilder.append("KW794 : 'KW' '794';\n"); - grammarBuilder.append("KW795 : 'KW' '795';\n"); - grammarBuilder.append("KW796 : 'KW' '796';\n"); - grammarBuilder.append("KW797 : 'KW' '797';\n"); - grammarBuilder.append("KW798 : 'KW' '798';\n"); - grammarBuilder.append("KW799 : 'KW' '799';\n"); - grammarBuilder.append("KW800 : 'KW' '800';\n"); - grammarBuilder.append("KW801 : 'KW' '801';\n"); - grammarBuilder.append("KW802 : 'KW' '802';\n"); - grammarBuilder.append("KW803 : 'KW' '803';\n"); - grammarBuilder.append("KW804 : 'KW' '804';\n"); - grammarBuilder.append("KW805 : 'KW' '805';\n"); - grammarBuilder.append("KW806 : 'KW' '806';\n"); - grammarBuilder.append("KW807 : 'KW' '807';\n"); - grammarBuilder.append("KW808 : 'KW' '808';\n"); - grammarBuilder.append("KW809 : 'KW' '809';\n"); - grammarBuilder.append("KW810 : 'KW' '810';\n"); - grammarBuilder.append("KW811 : 'KW' '811';\n"); - grammarBuilder.append("KW812 : 'KW' '812';\n"); - grammarBuilder.append("KW813 : 'KW' '813';\n"); - grammarBuilder.append("KW814 : 'KW' '814';\n"); - grammarBuilder.append("KW815 : 'KW' '815';\n"); - grammarBuilder.append("KW816 : 'KW' '816';\n"); - grammarBuilder.append("KW817 : 'KW' '817';\n"); - grammarBuilder.append("KW818 : 'KW' '818';\n"); - grammarBuilder.append("KW819 : 'KW' '819';\n"); - grammarBuilder.append("KW820 : 'KW' '820';\n"); - grammarBuilder.append("KW821 : 'KW' '821';\n"); - grammarBuilder.append("KW822 : 'KW' '822';\n"); - grammarBuilder.append("KW823 : 'KW' '823';\n"); - grammarBuilder.append("KW824 : 'KW' '824';\n"); - grammarBuilder.append("KW825 : 'KW' '825';\n"); - grammarBuilder.append("KW826 : 'KW' '826';\n"); - grammarBuilder.append("KW827 : 'KW' '827';\n"); - grammarBuilder.append("KW828 : 'KW' '828';\n"); - grammarBuilder.append("KW829 : 'KW' '829';\n"); - grammarBuilder.append("KW830 : 'KW' '830';\n"); - grammarBuilder.append("KW831 : 'KW' '831';\n"); - grammarBuilder.append("KW832 : 'KW' '832';\n"); - grammarBuilder.append("KW833 : 'KW' '833';\n"); - grammarBuilder.append("KW834 : 'KW' '834';\n"); - grammarBuilder.append("KW835 : 'KW' '835';\n"); - grammarBuilder.append("KW836 : 'KW' '836';\n"); - grammarBuilder.append("KW837 : 'KW' '837';\n"); - grammarBuilder.append("KW838 : 'KW' '838';\n"); - grammarBuilder.append("KW839 : 'KW' '839';\n"); - grammarBuilder.append("KW840 : 'KW' '840';\n"); - grammarBuilder.append("KW841 : 'KW' '841';\n"); - grammarBuilder.append("KW842 : 'KW' '842';\n"); - grammarBuilder.append("KW843 : 'KW' '843';\n"); - grammarBuilder.append("KW844 : 'KW' '844';\n"); - grammarBuilder.append("KW845 : 'KW' '845';\n"); - grammarBuilder.append("KW846 : 'KW' '846';\n"); - grammarBuilder.append("KW847 : 'KW' '847';\n"); - grammarBuilder.append("KW848 : 'KW' '848';\n"); - grammarBuilder.append("KW849 : 'KW' '849';\n"); - grammarBuilder.append("KW850 : 'KW' '850';\n"); - grammarBuilder.append("KW851 : 'KW' '851';\n"); - grammarBuilder.append("KW852 : 'KW' '852';\n"); - grammarBuilder.append("KW853 : 'KW' '853';\n"); - grammarBuilder.append("KW854 : 'KW' '854';\n"); - grammarBuilder.append("KW855 : 'KW' '855';\n"); - grammarBuilder.append("KW856 : 'KW' '856';\n"); - grammarBuilder.append("KW857 : 'KW' '857';\n"); - grammarBuilder.append("KW858 : 'KW' '858';\n"); - grammarBuilder.append("KW859 : 'KW' '859';\n"); - grammarBuilder.append("KW860 : 'KW' '860';\n"); - grammarBuilder.append("KW861 : 'KW' '861';\n"); - grammarBuilder.append("KW862 : 'KW' '862';\n"); - grammarBuilder.append("KW863 : 'KW' '863';\n"); - grammarBuilder.append("KW864 : 'KW' '864';\n"); - grammarBuilder.append("KW865 : 'KW' '865';\n"); - grammarBuilder.append("KW866 : 'KW' '866';\n"); - grammarBuilder.append("KW867 : 'KW' '867';\n"); - grammarBuilder.append("KW868 : 'KW' '868';\n"); - grammarBuilder.append("KW869 : 'KW' '869';\n"); - grammarBuilder.append("KW870 : 'KW' '870';\n"); - grammarBuilder.append("KW871 : 'KW' '871';\n"); - grammarBuilder.append("KW872 : 'KW' '872';\n"); - grammarBuilder.append("KW873 : 'KW' '873';\n"); - grammarBuilder.append("KW874 : 'KW' '874';\n"); - grammarBuilder.append("KW875 : 'KW' '875';\n"); - grammarBuilder.append("KW876 : 'KW' '876';\n"); - grammarBuilder.append("KW877 : 'KW' '877';\n"); - grammarBuilder.append("KW878 : 'KW' '878';\n"); - grammarBuilder.append("KW879 : 'KW' '879';\n"); - grammarBuilder.append("KW880 : 'KW' '880';\n"); - grammarBuilder.append("KW881 : 'KW' '881';\n"); - grammarBuilder.append("KW882 : 'KW' '882';\n"); - grammarBuilder.append("KW883 : 'KW' '883';\n"); - grammarBuilder.append("KW884 : 'KW' '884';\n"); - grammarBuilder.append("KW885 : 'KW' '885';\n"); - grammarBuilder.append("KW886 : 'KW' '886';\n"); - grammarBuilder.append("KW887 : 'KW' '887';\n"); - grammarBuilder.append("KW888 : 'KW' '888';\n"); - grammarBuilder.append("KW889 : 'KW' '889';\n"); - grammarBuilder.append("KW890 : 'KW' '890';\n"); - grammarBuilder.append("KW891 : 'KW' '891';\n"); - grammarBuilder.append("KW892 : 'KW' '892';\n"); - grammarBuilder.append("KW893 : 'KW' '893';\n"); - grammarBuilder.append("KW894 : 'KW' '894';\n"); - grammarBuilder.append("KW895 : 'KW' '895';\n"); - grammarBuilder.append("KW896 : 'KW' '896';\n"); - grammarBuilder.append("KW897 : 'KW' '897';\n"); - grammarBuilder.append("KW898 : 'KW' '898';\n"); - grammarBuilder.append("KW899 : 'KW' '899';\n"); - grammarBuilder.append("KW900 : 'KW' '900';\n"); - grammarBuilder.append("KW901 : 'KW' '901';\n"); - grammarBuilder.append("KW902 : 'KW' '902';\n"); - grammarBuilder.append("KW903 : 'KW' '903';\n"); - grammarBuilder.append("KW904 : 'KW' '904';\n"); - grammarBuilder.append("KW905 : 'KW' '905';\n"); - grammarBuilder.append("KW906 : 'KW' '906';\n"); - grammarBuilder.append("KW907 : 'KW' '907';\n"); - grammarBuilder.append("KW908 : 'KW' '908';\n"); - grammarBuilder.append("KW909 : 'KW' '909';\n"); - grammarBuilder.append("KW910 : 'KW' '910';\n"); - grammarBuilder.append("KW911 : 'KW' '911';\n"); - grammarBuilder.append("KW912 : 'KW' '912';\n"); - grammarBuilder.append("KW913 : 'KW' '913';\n"); - grammarBuilder.append("KW914 : 'KW' '914';\n"); - grammarBuilder.append("KW915 : 'KW' '915';\n"); - grammarBuilder.append("KW916 : 'KW' '916';\n"); - grammarBuilder.append("KW917 : 'KW' '917';\n"); - grammarBuilder.append("KW918 : 'KW' '918';\n"); - grammarBuilder.append("KW919 : 'KW' '919';\n"); - grammarBuilder.append("KW920 : 'KW' '920';\n"); - grammarBuilder.append("KW921 : 'KW' '921';\n"); - grammarBuilder.append("KW922 : 'KW' '922';\n"); - grammarBuilder.append("KW923 : 'KW' '923';\n"); - grammarBuilder.append("KW924 : 'KW' '924';\n"); - grammarBuilder.append("KW925 : 'KW' '925';\n"); - grammarBuilder.append("KW926 : 'KW' '926';\n"); - grammarBuilder.append("KW927 : 'KW' '927';\n"); - grammarBuilder.append("KW928 : 'KW' '928';\n"); - grammarBuilder.append("KW929 : 'KW' '929';\n"); - grammarBuilder.append("KW930 : 'KW' '930';\n"); - grammarBuilder.append("KW931 : 'KW' '931';\n"); - grammarBuilder.append("KW932 : 'KW' '932';\n"); - grammarBuilder.append("KW933 : 'KW' '933';\n"); - grammarBuilder.append("KW934 : 'KW' '934';\n"); - grammarBuilder.append("KW935 : 'KW' '935';\n"); - grammarBuilder.append("KW936 : 'KW' '936';\n"); - grammarBuilder.append("KW937 : 'KW' '937';\n"); - grammarBuilder.append("KW938 : 'KW' '938';\n"); - grammarBuilder.append("KW939 : 'KW' '939';\n"); - grammarBuilder.append("KW940 : 'KW' '940';\n"); - grammarBuilder.append("KW941 : 'KW' '941';\n"); - grammarBuilder.append("KW942 : 'KW' '942';\n"); - grammarBuilder.append("KW943 : 'KW' '943';\n"); - grammarBuilder.append("KW944 : 'KW' '944';\n"); - grammarBuilder.append("KW945 : 'KW' '945';\n"); - grammarBuilder.append("KW946 : 'KW' '946';\n"); - grammarBuilder.append("KW947 : 'KW' '947';\n"); - grammarBuilder.append("KW948 : 'KW' '948';\n"); - grammarBuilder.append("KW949 : 'KW' '949';\n"); - grammarBuilder.append("KW950 : 'KW' '950';\n"); - grammarBuilder.append("KW951 : 'KW' '951';\n"); - grammarBuilder.append("KW952 : 'KW' '952';\n"); - grammarBuilder.append("KW953 : 'KW' '953';\n"); - grammarBuilder.append("KW954 : 'KW' '954';\n"); - grammarBuilder.append("KW955 : 'KW' '955';\n"); - grammarBuilder.append("KW956 : 'KW' '956';\n"); - grammarBuilder.append("KW957 : 'KW' '957';\n"); - grammarBuilder.append("KW958 : 'KW' '958';\n"); - grammarBuilder.append("KW959 : 'KW' '959';\n"); - grammarBuilder.append("KW960 : 'KW' '960';\n"); - grammarBuilder.append("KW961 : 'KW' '961';\n"); - grammarBuilder.append("KW962 : 'KW' '962';\n"); - grammarBuilder.append("KW963 : 'KW' '963';\n"); - grammarBuilder.append("KW964 : 'KW' '964';\n"); - grammarBuilder.append("KW965 : 'KW' '965';\n"); - grammarBuilder.append("KW966 : 'KW' '966';\n"); - grammarBuilder.append("KW967 : 'KW' '967';\n"); - grammarBuilder.append("KW968 : 'KW' '968';\n"); - grammarBuilder.append("KW969 : 'KW' '969';\n"); - grammarBuilder.append("KW970 : 'KW' '970';\n"); - grammarBuilder.append("KW971 : 'KW' '971';\n"); - grammarBuilder.append("KW972 : 'KW' '972';\n"); - grammarBuilder.append("KW973 : 'KW' '973';\n"); - grammarBuilder.append("KW974 : 'KW' '974';\n"); - grammarBuilder.append("KW975 : 'KW' '975';\n"); - grammarBuilder.append("KW976 : 'KW' '976';\n"); - grammarBuilder.append("KW977 : 'KW' '977';\n"); - grammarBuilder.append("KW978 : 'KW' '978';\n"); - grammarBuilder.append("KW979 : 'KW' '979';\n"); - grammarBuilder.append("KW980 : 'KW' '980';\n"); - grammarBuilder.append("KW981 : 'KW' '981';\n"); - grammarBuilder.append("KW982 : 'KW' '982';\n"); - grammarBuilder.append("KW983 : 'KW' '983';\n"); - grammarBuilder.append("KW984 : 'KW' '984';\n"); - grammarBuilder.append("KW985 : 'KW' '985';\n"); - grammarBuilder.append("KW986 : 'KW' '986';\n"); - grammarBuilder.append("KW987 : 'KW' '987';\n"); - grammarBuilder.append("KW988 : 'KW' '988';\n"); - grammarBuilder.append("KW989 : 'KW' '989';\n"); - grammarBuilder.append("KW990 : 'KW' '990';\n"); - grammarBuilder.append("KW991 : 'KW' '991';\n"); - grammarBuilder.append("KW992 : 'KW' '992';\n"); - grammarBuilder.append("KW993 : 'KW' '993';\n"); - grammarBuilder.append("KW994 : 'KW' '994';\n"); - grammarBuilder.append("KW995 : 'KW' '995';\n"); - grammarBuilder.append("KW996 : 'KW' '996';\n"); - grammarBuilder.append("KW997 : 'KW' '997';\n"); - grammarBuilder.append("KW998 : 'KW' '998';\n"); - grammarBuilder.append("KW999 : 'KW' '999';\n"); - grammarBuilder.append("KW1000 : 'KW' '1000';\n"); - grammarBuilder.append("KW1001 : 'KW' '1001';\n"); - grammarBuilder.append("KW1002 : 'KW' '1002';\n"); - grammarBuilder.append("KW1003 : 'KW' '1003';\n"); - grammarBuilder.append("KW1004 : 'KW' '1004';\n"); - grammarBuilder.append("KW1005 : 'KW' '1005';\n"); - grammarBuilder.append("KW1006 : 'KW' '1006';\n"); - grammarBuilder.append("KW1007 : 'KW' '1007';\n"); - grammarBuilder.append("KW1008 : 'KW' '1008';\n"); - grammarBuilder.append("KW1009 : 'KW' '1009';\n"); - grammarBuilder.append("KW1010 : 'KW' '1010';\n"); - grammarBuilder.append("KW1011 : 'KW' '1011';\n"); - grammarBuilder.append("KW1012 : 'KW' '1012';\n"); - grammarBuilder.append("KW1013 : 'KW' '1013';\n"); - grammarBuilder.append("KW1014 : 'KW' '1014';\n"); - grammarBuilder.append("KW1015 : 'KW' '1015';\n"); - grammarBuilder.append("KW1016 : 'KW' '1016';\n"); - grammarBuilder.append("KW1017 : 'KW' '1017';\n"); - grammarBuilder.append("KW1018 : 'KW' '1018';\n"); - grammarBuilder.append("KW1019 : 'KW' '1019';\n"); - grammarBuilder.append("KW1020 : 'KW' '1020';\n"); - grammarBuilder.append("KW1021 : 'KW' '1021';\n"); - grammarBuilder.append("KW1022 : 'KW' '1022';\n"); - grammarBuilder.append("KW1023 : 'KW' '1023';\n"); - grammarBuilder.append("KW1024 : 'KW' '1024';\n"); - grammarBuilder.append("KW1025 : 'KW' '1025';\n"); - grammarBuilder.append("KW1026 : 'KW' '1026';\n"); - grammarBuilder.append("KW1027 : 'KW' '1027';\n"); - grammarBuilder.append("KW1028 : 'KW' '1028';\n"); - grammarBuilder.append("KW1029 : 'KW' '1029';\n"); - grammarBuilder.append("KW1030 : 'KW' '1030';\n"); - grammarBuilder.append("KW1031 : 'KW' '1031';\n"); - grammarBuilder.append("KW1032 : 'KW' '1032';\n"); - grammarBuilder.append("KW1033 : 'KW' '1033';\n"); - grammarBuilder.append("KW1034 : 'KW' '1034';\n"); - grammarBuilder.append("KW1035 : 'KW' '1035';\n"); - grammarBuilder.append("KW1036 : 'KW' '1036';\n"); - grammarBuilder.append("KW1037 : 'KW' '1037';\n"); - grammarBuilder.append("KW1038 : 'KW' '1038';\n"); - grammarBuilder.append("KW1039 : 'KW' '1039';\n"); - grammarBuilder.append("KW1040 : 'KW' '1040';\n"); - grammarBuilder.append("KW1041 : 'KW' '1041';\n"); - grammarBuilder.append("KW1042 : 'KW' '1042';\n"); - grammarBuilder.append("KW1043 : 'KW' '1043';\n"); - grammarBuilder.append("KW1044 : 'KW' '1044';\n"); - grammarBuilder.append("KW1045 : 'KW' '1045';\n"); - grammarBuilder.append("KW1046 : 'KW' '1046';\n"); - grammarBuilder.append("KW1047 : 'KW' '1047';\n"); - grammarBuilder.append("KW1048 : 'KW' '1048';\n"); - grammarBuilder.append("KW1049 : 'KW' '1049';\n"); - grammarBuilder.append("KW1050 : 'KW' '1050';\n"); - grammarBuilder.append("KW1051 : 'KW' '1051';\n"); - grammarBuilder.append("KW1052 : 'KW' '1052';\n"); - grammarBuilder.append("KW1053 : 'KW' '1053';\n"); - grammarBuilder.append("KW1054 : 'KW' '1054';\n"); - grammarBuilder.append("KW1055 : 'KW' '1055';\n"); - grammarBuilder.append("KW1056 : 'KW' '1056';\n"); - grammarBuilder.append("KW1057 : 'KW' '1057';\n"); - grammarBuilder.append("KW1058 : 'KW' '1058';\n"); - grammarBuilder.append("KW1059 : 'KW' '1059';\n"); - grammarBuilder.append("KW1060 : 'KW' '1060';\n"); - grammarBuilder.append("KW1061 : 'KW' '1061';\n"); - grammarBuilder.append("KW1062 : 'KW' '1062';\n"); - grammarBuilder.append("KW1063 : 'KW' '1063';\n"); - grammarBuilder.append("KW1064 : 'KW' '1064';\n"); - grammarBuilder.append("KW1065 : 'KW' '1065';\n"); - grammarBuilder.append("KW1066 : 'KW' '1066';\n"); - grammarBuilder.append("KW1067 : 'KW' '1067';\n"); - grammarBuilder.append("KW1068 : 'KW' '1068';\n"); - grammarBuilder.append("KW1069 : 'KW' '1069';\n"); - grammarBuilder.append("KW1070 : 'KW' '1070';\n"); - grammarBuilder.append("KW1071 : 'KW' '1071';\n"); - grammarBuilder.append("KW1072 : 'KW' '1072';\n"); - grammarBuilder.append("KW1073 : 'KW' '1073';\n"); - grammarBuilder.append("KW1074 : 'KW' '1074';\n"); - grammarBuilder.append("KW1075 : 'KW' '1075';\n"); - grammarBuilder.append("KW1076 : 'KW' '1076';\n"); - grammarBuilder.append("KW1077 : 'KW' '1077';\n"); - grammarBuilder.append("KW1078 : 'KW' '1078';\n"); - grammarBuilder.append("KW1079 : 'KW' '1079';\n"); - grammarBuilder.append("KW1080 : 'KW' '1080';\n"); - grammarBuilder.append("KW1081 : 'KW' '1081';\n"); - grammarBuilder.append("KW1082 : 'KW' '1082';\n"); - grammarBuilder.append("KW1083 : 'KW' '1083';\n"); - grammarBuilder.append("KW1084 : 'KW' '1084';\n"); - grammarBuilder.append("KW1085 : 'KW' '1085';\n"); - grammarBuilder.append("KW1086 : 'KW' '1086';\n"); - grammarBuilder.append("KW1087 : 'KW' '1087';\n"); - grammarBuilder.append("KW1088 : 'KW' '1088';\n"); - grammarBuilder.append("KW1089 : 'KW' '1089';\n"); - grammarBuilder.append("KW1090 : 'KW' '1090';\n"); - grammarBuilder.append("KW1091 : 'KW' '1091';\n"); - grammarBuilder.append("KW1092 : 'KW' '1092';\n"); - grammarBuilder.append("KW1093 : 'KW' '1093';\n"); - grammarBuilder.append("KW1094 : 'KW' '1094';\n"); - grammarBuilder.append("KW1095 : 'KW' '1095';\n"); - grammarBuilder.append("KW1096 : 'KW' '1096';\n"); - grammarBuilder.append("KW1097 : 'KW' '1097';\n"); - grammarBuilder.append("KW1098 : 'KW' '1098';\n"); - grammarBuilder.append("KW1099 : 'KW' '1099';\n"); - grammarBuilder.append("KW1100 : 'KW' '1100';\n"); - grammarBuilder.append("KW1101 : 'KW' '1101';\n"); - grammarBuilder.append("KW1102 : 'KW' '1102';\n"); - grammarBuilder.append("KW1103 : 'KW' '1103';\n"); - grammarBuilder.append("KW1104 : 'KW' '1104';\n"); - grammarBuilder.append("KW1105 : 'KW' '1105';\n"); - grammarBuilder.append("KW1106 : 'KW' '1106';\n"); - grammarBuilder.append("KW1107 : 'KW' '1107';\n"); - grammarBuilder.append("KW1108 : 'KW' '1108';\n"); - grammarBuilder.append("KW1109 : 'KW' '1109';\n"); - grammarBuilder.append("KW1110 : 'KW' '1110';\n"); - grammarBuilder.append("KW1111 : 'KW' '1111';\n"); - grammarBuilder.append("KW1112 : 'KW' '1112';\n"); - grammarBuilder.append("KW1113 : 'KW' '1113';\n"); - grammarBuilder.append("KW1114 : 'KW' '1114';\n"); - grammarBuilder.append("KW1115 : 'KW' '1115';\n"); - grammarBuilder.append("KW1116 : 'KW' '1116';\n"); - grammarBuilder.append("KW1117 : 'KW' '1117';\n"); - grammarBuilder.append("KW1118 : 'KW' '1118';\n"); - grammarBuilder.append("KW1119 : 'KW' '1119';\n"); - grammarBuilder.append("KW1120 : 'KW' '1120';\n"); - grammarBuilder.append("KW1121 : 'KW' '1121';\n"); - grammarBuilder.append("KW1122 : 'KW' '1122';\n"); - grammarBuilder.append("KW1123 : 'KW' '1123';\n"); - grammarBuilder.append("KW1124 : 'KW' '1124';\n"); - grammarBuilder.append("KW1125 : 'KW' '1125';\n"); - grammarBuilder.append("KW1126 : 'KW' '1126';\n"); - grammarBuilder.append("KW1127 : 'KW' '1127';\n"); - grammarBuilder.append("KW1128 : 'KW' '1128';\n"); - grammarBuilder.append("KW1129 : 'KW' '1129';\n"); - grammarBuilder.append("KW1130 : 'KW' '1130';\n"); - grammarBuilder.append("KW1131 : 'KW' '1131';\n"); - grammarBuilder.append("KW1132 : 'KW' '1132';\n"); - grammarBuilder.append("KW1133 : 'KW' '1133';\n"); - grammarBuilder.append("KW1134 : 'KW' '1134';\n"); - grammarBuilder.append("KW1135 : 'KW' '1135';\n"); - grammarBuilder.append("KW1136 : 'KW' '1136';\n"); - grammarBuilder.append("KW1137 : 'KW' '1137';\n"); - grammarBuilder.append("KW1138 : 'KW' '1138';\n"); - grammarBuilder.append("KW1139 : 'KW' '1139';\n"); - grammarBuilder.append("KW1140 : 'KW' '1140';\n"); - grammarBuilder.append("KW1141 : 'KW' '1141';\n"); - grammarBuilder.append("KW1142 : 'KW' '1142';\n"); - grammarBuilder.append("KW1143 : 'KW' '1143';\n"); - grammarBuilder.append("KW1144 : 'KW' '1144';\n"); - grammarBuilder.append("KW1145 : 'KW' '1145';\n"); - grammarBuilder.append("KW1146 : 'KW' '1146';\n"); - grammarBuilder.append("KW1147 : 'KW' '1147';\n"); - grammarBuilder.append("KW1148 : 'KW' '1148';\n"); - grammarBuilder.append("KW1149 : 'KW' '1149';\n"); - grammarBuilder.append("KW1150 : 'KW' '1150';\n"); - grammarBuilder.append("KW1151 : 'KW' '1151';\n"); - grammarBuilder.append("KW1152 : 'KW' '1152';\n"); - grammarBuilder.append("KW1153 : 'KW' '1153';\n"); - grammarBuilder.append("KW1154 : 'KW' '1154';\n"); - grammarBuilder.append("KW1155 : 'KW' '1155';\n"); - grammarBuilder.append("KW1156 : 'KW' '1156';\n"); - grammarBuilder.append("KW1157 : 'KW' '1157';\n"); - grammarBuilder.append("KW1158 : 'KW' '1158';\n"); - grammarBuilder.append("KW1159 : 'KW' '1159';\n"); - grammarBuilder.append("KW1160 : 'KW' '1160';\n"); - grammarBuilder.append("KW1161 : 'KW' '1161';\n"); - grammarBuilder.append("KW1162 : 'KW' '1162';\n"); - grammarBuilder.append("KW1163 : 'KW' '1163';\n"); - grammarBuilder.append("KW1164 : 'KW' '1164';\n"); - grammarBuilder.append("KW1165 : 'KW' '1165';\n"); - grammarBuilder.append("KW1166 : 'KW' '1166';\n"); - grammarBuilder.append("KW1167 : 'KW' '1167';\n"); - grammarBuilder.append("KW1168 : 'KW' '1168';\n"); - grammarBuilder.append("KW1169 : 'KW' '1169';\n"); - grammarBuilder.append("KW1170 : 'KW' '1170';\n"); - grammarBuilder.append("KW1171 : 'KW' '1171';\n"); - grammarBuilder.append("KW1172 : 'KW' '1172';\n"); - grammarBuilder.append("KW1173 : 'KW' '1173';\n"); - grammarBuilder.append("KW1174 : 'KW' '1174';\n"); - grammarBuilder.append("KW1175 : 'KW' '1175';\n"); - grammarBuilder.append("KW1176 : 'KW' '1176';\n"); - grammarBuilder.append("KW1177 : 'KW' '1177';\n"); - grammarBuilder.append("KW1178 : 'KW' '1178';\n"); - grammarBuilder.append("KW1179 : 'KW' '1179';\n"); - grammarBuilder.append("KW1180 : 'KW' '1180';\n"); - grammarBuilder.append("KW1181 : 'KW' '1181';\n"); - grammarBuilder.append("KW1182 : 'KW' '1182';\n"); - grammarBuilder.append("KW1183 : 'KW' '1183';\n"); - grammarBuilder.append("KW1184 : 'KW' '1184';\n"); - grammarBuilder.append("KW1185 : 'KW' '1185';\n"); - grammarBuilder.append("KW1186 : 'KW' '1186';\n"); - grammarBuilder.append("KW1187 : 'KW' '1187';\n"); - grammarBuilder.append("KW1188 : 'KW' '1188';\n"); - grammarBuilder.append("KW1189 : 'KW' '1189';\n"); - grammarBuilder.append("KW1190 : 'KW' '1190';\n"); - grammarBuilder.append("KW1191 : 'KW' '1191';\n"); - grammarBuilder.append("KW1192 : 'KW' '1192';\n"); - grammarBuilder.append("KW1193 : 'KW' '1193';\n"); - grammarBuilder.append("KW1194 : 'KW' '1194';\n"); - grammarBuilder.append("KW1195 : 'KW' '1195';\n"); - grammarBuilder.append("KW1196 : 'KW' '1196';\n"); - grammarBuilder.append("KW1197 : 'KW' '1197';\n"); - grammarBuilder.append("KW1198 : 'KW' '1198';\n"); - grammarBuilder.append("KW1199 : 'KW' '1199';\n"); - grammarBuilder.append("KW1200 : 'KW' '1200';\n"); - grammarBuilder.append("KW1201 : 'KW' '1201';\n"); - grammarBuilder.append("KW1202 : 'KW' '1202';\n"); - grammarBuilder.append("KW1203 : 'KW' '1203';\n"); - grammarBuilder.append("KW1204 : 'KW' '1204';\n"); - grammarBuilder.append("KW1205 : 'KW' '1205';\n"); - grammarBuilder.append("KW1206 : 'KW' '1206';\n"); - grammarBuilder.append("KW1207 : 'KW' '1207';\n"); - grammarBuilder.append("KW1208 : 'KW' '1208';\n"); - grammarBuilder.append("KW1209 : 'KW' '1209';\n"); - grammarBuilder.append("KW1210 : 'KW' '1210';\n"); - grammarBuilder.append("KW1211 : 'KW' '1211';\n"); - grammarBuilder.append("KW1212 : 'KW' '1212';\n"); - grammarBuilder.append("KW1213 : 'KW' '1213';\n"); - grammarBuilder.append("KW1214 : 'KW' '1214';\n"); - grammarBuilder.append("KW1215 : 'KW' '1215';\n"); - grammarBuilder.append("KW1216 : 'KW' '1216';\n"); - grammarBuilder.append("KW1217 : 'KW' '1217';\n"); - grammarBuilder.append("KW1218 : 'KW' '1218';\n"); - grammarBuilder.append("KW1219 : 'KW' '1219';\n"); - grammarBuilder.append("KW1220 : 'KW' '1220';\n"); - grammarBuilder.append("KW1221 : 'KW' '1221';\n"); - grammarBuilder.append("KW1222 : 'KW' '1222';\n"); - grammarBuilder.append("KW1223 : 'KW' '1223';\n"); - grammarBuilder.append("KW1224 : 'KW' '1224';\n"); - grammarBuilder.append("KW1225 : 'KW' '1225';\n"); - grammarBuilder.append("KW1226 : 'KW' '1226';\n"); - grammarBuilder.append("KW1227 : 'KW' '1227';\n"); - grammarBuilder.append("KW1228 : 'KW' '1228';\n"); - grammarBuilder.append("KW1229 : 'KW' '1229';\n"); - grammarBuilder.append("KW1230 : 'KW' '1230';\n"); - grammarBuilder.append("KW1231 : 'KW' '1231';\n"); - grammarBuilder.append("KW1232 : 'KW' '1232';\n"); - grammarBuilder.append("KW1233 : 'KW' '1233';\n"); - grammarBuilder.append("KW1234 : 'KW' '1234';\n"); - grammarBuilder.append("KW1235 : 'KW' '1235';\n"); - grammarBuilder.append("KW1236 : 'KW' '1236';\n"); - grammarBuilder.append("KW1237 : 'KW' '1237';\n"); - grammarBuilder.append("KW1238 : 'KW' '1238';\n"); - grammarBuilder.append("KW1239 : 'KW' '1239';\n"); - grammarBuilder.append("KW1240 : 'KW' '1240';\n"); - grammarBuilder.append("KW1241 : 'KW' '1241';\n"); - grammarBuilder.append("KW1242 : 'KW' '1242';\n"); - grammarBuilder.append("KW1243 : 'KW' '1243';\n"); - grammarBuilder.append("KW1244 : 'KW' '1244';\n"); - grammarBuilder.append("KW1245 : 'KW' '1245';\n"); - grammarBuilder.append("KW1246 : 'KW' '1246';\n"); - grammarBuilder.append("KW1247 : 'KW' '1247';\n"); - grammarBuilder.append("KW1248 : 'KW' '1248';\n"); - grammarBuilder.append("KW1249 : 'KW' '1249';\n"); - grammarBuilder.append("KW1250 : 'KW' '1250';\n"); - grammarBuilder.append("KW1251 : 'KW' '1251';\n"); - grammarBuilder.append("KW1252 : 'KW' '1252';\n"); - grammarBuilder.append("KW1253 : 'KW' '1253';\n"); - grammarBuilder.append("KW1254 : 'KW' '1254';\n"); - grammarBuilder.append("KW1255 : 'KW' '1255';\n"); - grammarBuilder.append("KW1256 : 'KW' '1256';\n"); - grammarBuilder.append("KW1257 : 'KW' '1257';\n"); - grammarBuilder.append("KW1258 : 'KW' '1258';\n"); - grammarBuilder.append("KW1259 : 'KW' '1259';\n"); - grammarBuilder.append("KW1260 : 'KW' '1260';\n"); - grammarBuilder.append("KW1261 : 'KW' '1261';\n"); - grammarBuilder.append("KW1262 : 'KW' '1262';\n"); - grammarBuilder.append("KW1263 : 'KW' '1263';\n"); - grammarBuilder.append("KW1264 : 'KW' '1264';\n"); - grammarBuilder.append("KW1265 : 'KW' '1265';\n"); - grammarBuilder.append("KW1266 : 'KW' '1266';\n"); - grammarBuilder.append("KW1267 : 'KW' '1267';\n"); - grammarBuilder.append("KW1268 : 'KW' '1268';\n"); - grammarBuilder.append("KW1269 : 'KW' '1269';\n"); - grammarBuilder.append("KW1270 : 'KW' '1270';\n"); - grammarBuilder.append("KW1271 : 'KW' '1271';\n"); - grammarBuilder.append("KW1272 : 'KW' '1272';\n"); - grammarBuilder.append("KW1273 : 'KW' '1273';\n"); - grammarBuilder.append("KW1274 : 'KW' '1274';\n"); - grammarBuilder.append("KW1275 : 'KW' '1275';\n"); - grammarBuilder.append("KW1276 : 'KW' '1276';\n"); - grammarBuilder.append("KW1277 : 'KW' '1277';\n"); - grammarBuilder.append("KW1278 : 'KW' '1278';\n"); - grammarBuilder.append("KW1279 : 'KW' '1279';\n"); - grammarBuilder.append("KW1280 : 'KW' '1280';\n"); - grammarBuilder.append("KW1281 : 'KW' '1281';\n"); - grammarBuilder.append("KW1282 : 'KW' '1282';\n"); - grammarBuilder.append("KW1283 : 'KW' '1283';\n"); - grammarBuilder.append("KW1284 : 'KW' '1284';\n"); - grammarBuilder.append("KW1285 : 'KW' '1285';\n"); - grammarBuilder.append("KW1286 : 'KW' '1286';\n"); - grammarBuilder.append("KW1287 : 'KW' '1287';\n"); - grammarBuilder.append("KW1288 : 'KW' '1288';\n"); - grammarBuilder.append("KW1289 : 'KW' '1289';\n"); - grammarBuilder.append("KW1290 : 'KW' '1290';\n"); - grammarBuilder.append("KW1291 : 'KW' '1291';\n"); - grammarBuilder.append("KW1292 : 'KW' '1292';\n"); - grammarBuilder.append("KW1293 : 'KW' '1293';\n"); - grammarBuilder.append("KW1294 : 'KW' '1294';\n"); - grammarBuilder.append("KW1295 : 'KW' '1295';\n"); - grammarBuilder.append("KW1296 : 'KW' '1296';\n"); - grammarBuilder.append("KW1297 : 'KW' '1297';\n"); - grammarBuilder.append("KW1298 : 'KW' '1298';\n"); - grammarBuilder.append("KW1299 : 'KW' '1299';\n"); - grammarBuilder.append("KW1300 : 'KW' '1300';\n"); - grammarBuilder.append("KW1301 : 'KW' '1301';\n"); - grammarBuilder.append("KW1302 : 'KW' '1302';\n"); - grammarBuilder.append("KW1303 : 'KW' '1303';\n"); - grammarBuilder.append("KW1304 : 'KW' '1304';\n"); - grammarBuilder.append("KW1305 : 'KW' '1305';\n"); - grammarBuilder.append("KW1306 : 'KW' '1306';\n"); - grammarBuilder.append("KW1307 : 'KW' '1307';\n"); - grammarBuilder.append("KW1308 : 'KW' '1308';\n"); - grammarBuilder.append("KW1309 : 'KW' '1309';\n"); - grammarBuilder.append("KW1310 : 'KW' '1310';\n"); - grammarBuilder.append("KW1311 : 'KW' '1311';\n"); - grammarBuilder.append("KW1312 : 'KW' '1312';\n"); - grammarBuilder.append("KW1313 : 'KW' '1313';\n"); - grammarBuilder.append("KW1314 : 'KW' '1314';\n"); - grammarBuilder.append("KW1315 : 'KW' '1315';\n"); - grammarBuilder.append("KW1316 : 'KW' '1316';\n"); - grammarBuilder.append("KW1317 : 'KW' '1317';\n"); - grammarBuilder.append("KW1318 : 'KW' '1318';\n"); - grammarBuilder.append("KW1319 : 'KW' '1319';\n"); - grammarBuilder.append("KW1320 : 'KW' '1320';\n"); - grammarBuilder.append("KW1321 : 'KW' '1321';\n"); - grammarBuilder.append("KW1322 : 'KW' '1322';\n"); - grammarBuilder.append("KW1323 : 'KW' '1323';\n"); - grammarBuilder.append("KW1324 : 'KW' '1324';\n"); - grammarBuilder.append("KW1325 : 'KW' '1325';\n"); - grammarBuilder.append("KW1326 : 'KW' '1326';\n"); - grammarBuilder.append("KW1327 : 'KW' '1327';\n"); - grammarBuilder.append("KW1328 : 'KW' '1328';\n"); - grammarBuilder.append("KW1329 : 'KW' '1329';\n"); - grammarBuilder.append("KW1330 : 'KW' '1330';\n"); - grammarBuilder.append("KW1331 : 'KW' '1331';\n"); - grammarBuilder.append("KW1332 : 'KW' '1332';\n"); - grammarBuilder.append("KW1333 : 'KW' '1333';\n"); - grammarBuilder.append("KW1334 : 'KW' '1334';\n"); - grammarBuilder.append("KW1335 : 'KW' '1335';\n"); - grammarBuilder.append("KW1336 : 'KW' '1336';\n"); - grammarBuilder.append("KW1337 : 'KW' '1337';\n"); - grammarBuilder.append("KW1338 : 'KW' '1338';\n"); - grammarBuilder.append("KW1339 : 'KW' '1339';\n"); - grammarBuilder.append("KW1340 : 'KW' '1340';\n"); - grammarBuilder.append("KW1341 : 'KW' '1341';\n"); - grammarBuilder.append("KW1342 : 'KW' '1342';\n"); - grammarBuilder.append("KW1343 : 'KW' '1343';\n"); - grammarBuilder.append("KW1344 : 'KW' '1344';\n"); - grammarBuilder.append("KW1345 : 'KW' '1345';\n"); - grammarBuilder.append("KW1346 : 'KW' '1346';\n"); - grammarBuilder.append("KW1347 : 'KW' '1347';\n"); - grammarBuilder.append("KW1348 : 'KW' '1348';\n"); - grammarBuilder.append("KW1349 : 'KW' '1349';\n"); - grammarBuilder.append("KW1350 : 'KW' '1350';\n"); - grammarBuilder.append("KW1351 : 'KW' '1351';\n"); - grammarBuilder.append("KW1352 : 'KW' '1352';\n"); - grammarBuilder.append("KW1353 : 'KW' '1353';\n"); - grammarBuilder.append("KW1354 : 'KW' '1354';\n"); - grammarBuilder.append("KW1355 : 'KW' '1355';\n"); - grammarBuilder.append("KW1356 : 'KW' '1356';\n"); - grammarBuilder.append("KW1357 : 'KW' '1357';\n"); - grammarBuilder.append("KW1358 : 'KW' '1358';\n"); - grammarBuilder.append("KW1359 : 'KW' '1359';\n"); - grammarBuilder.append("KW1360 : 'KW' '1360';\n"); - grammarBuilder.append("KW1361 : 'KW' '1361';\n"); - grammarBuilder.append("KW1362 : 'KW' '1362';\n"); - grammarBuilder.append("KW1363 : 'KW' '1363';\n"); - grammarBuilder.append("KW1364 : 'KW' '1364';\n"); - grammarBuilder.append("KW1365 : 'KW' '1365';\n"); - grammarBuilder.append("KW1366 : 'KW' '1366';\n"); - grammarBuilder.append("KW1367 : 'KW' '1367';\n"); - grammarBuilder.append("KW1368 : 'KW' '1368';\n"); - grammarBuilder.append("KW1369 : 'KW' '1369';\n"); - grammarBuilder.append("KW1370 : 'KW' '1370';\n"); - grammarBuilder.append("KW1371 : 'KW' '1371';\n"); - grammarBuilder.append("KW1372 : 'KW' '1372';\n"); - grammarBuilder.append("KW1373 : 'KW' '1373';\n"); - grammarBuilder.append("KW1374 : 'KW' '1374';\n"); - grammarBuilder.append("KW1375 : 'KW' '1375';\n"); - grammarBuilder.append("KW1376 : 'KW' '1376';\n"); - grammarBuilder.append("KW1377 : 'KW' '1377';\n"); - grammarBuilder.append("KW1378 : 'KW' '1378';\n"); - grammarBuilder.append("KW1379 : 'KW' '1379';\n"); - grammarBuilder.append("KW1380 : 'KW' '1380';\n"); - grammarBuilder.append("KW1381 : 'KW' '1381';\n"); - grammarBuilder.append("KW1382 : 'KW' '1382';\n"); - grammarBuilder.append("KW1383 : 'KW' '1383';\n"); - grammarBuilder.append("KW1384 : 'KW' '1384';\n"); - grammarBuilder.append("KW1385 : 'KW' '1385';\n"); - grammarBuilder.append("KW1386 : 'KW' '1386';\n"); - grammarBuilder.append("KW1387 : 'KW' '1387';\n"); - grammarBuilder.append("KW1388 : 'KW' '1388';\n"); - grammarBuilder.append("KW1389 : 'KW' '1389';\n"); - grammarBuilder.append("KW1390 : 'KW' '1390';\n"); - grammarBuilder.append("KW1391 : 'KW' '1391';\n"); - grammarBuilder.append("KW1392 : 'KW' '1392';\n"); - grammarBuilder.append("KW1393 : 'KW' '1393';\n"); - grammarBuilder.append("KW1394 : 'KW' '1394';\n"); - grammarBuilder.append("KW1395 : 'KW' '1395';\n"); - grammarBuilder.append("KW1396 : 'KW' '1396';\n"); - grammarBuilder.append("KW1397 : 'KW' '1397';\n"); - grammarBuilder.append("KW1398 : 'KW' '1398';\n"); - grammarBuilder.append("KW1399 : 'KW' '1399';\n"); - grammarBuilder.append("KW1400 : 'KW' '1400';\n"); - grammarBuilder.append("KW1401 : 'KW' '1401';\n"); - grammarBuilder.append("KW1402 : 'KW' '1402';\n"); - grammarBuilder.append("KW1403 : 'KW' '1403';\n"); - grammarBuilder.append("KW1404 : 'KW' '1404';\n"); - grammarBuilder.append("KW1405 : 'KW' '1405';\n"); - grammarBuilder.append("KW1406 : 'KW' '1406';\n"); - grammarBuilder.append("KW1407 : 'KW' '1407';\n"); - grammarBuilder.append("KW1408 : 'KW' '1408';\n"); - grammarBuilder.append("KW1409 : 'KW' '1409';\n"); - grammarBuilder.append("KW1410 : 'KW' '1410';\n"); - grammarBuilder.append("KW1411 : 'KW' '1411';\n"); - grammarBuilder.append("KW1412 : 'KW' '1412';\n"); - grammarBuilder.append("KW1413 : 'KW' '1413';\n"); - grammarBuilder.append("KW1414 : 'KW' '1414';\n"); - grammarBuilder.append("KW1415 : 'KW' '1415';\n"); - grammarBuilder.append("KW1416 : 'KW' '1416';\n"); - grammarBuilder.append("KW1417 : 'KW' '1417';\n"); - grammarBuilder.append("KW1418 : 'KW' '1418';\n"); - grammarBuilder.append("KW1419 : 'KW' '1419';\n"); - grammarBuilder.append("KW1420 : 'KW' '1420';\n"); - grammarBuilder.append("KW1421 : 'KW' '1421';\n"); - grammarBuilder.append("KW1422 : 'KW' '1422';\n"); - grammarBuilder.append("KW1423 : 'KW' '1423';\n"); - grammarBuilder.append("KW1424 : 'KW' '1424';\n"); - grammarBuilder.append("KW1425 : 'KW' '1425';\n"); - grammarBuilder.append("KW1426 : 'KW' '1426';\n"); - grammarBuilder.append("KW1427 : 'KW' '1427';\n"); - grammarBuilder.append("KW1428 : 'KW' '1428';\n"); - grammarBuilder.append("KW1429 : 'KW' '1429';\n"); - grammarBuilder.append("KW1430 : 'KW' '1430';\n"); - grammarBuilder.append("KW1431 : 'KW' '1431';\n"); - grammarBuilder.append("KW1432 : 'KW' '1432';\n"); - grammarBuilder.append("KW1433 : 'KW' '1433';\n"); - grammarBuilder.append("KW1434 : 'KW' '1434';\n"); - grammarBuilder.append("KW1435 : 'KW' '1435';\n"); - grammarBuilder.append("KW1436 : 'KW' '1436';\n"); - grammarBuilder.append("KW1437 : 'KW' '1437';\n"); - grammarBuilder.append("KW1438 : 'KW' '1438';\n"); - grammarBuilder.append("KW1439 : 'KW' '1439';\n"); - grammarBuilder.append("KW1440 : 'KW' '1440';\n"); - grammarBuilder.append("KW1441 : 'KW' '1441';\n"); - grammarBuilder.append("KW1442 : 'KW' '1442';\n"); - grammarBuilder.append("KW1443 : 'KW' '1443';\n"); - grammarBuilder.append("KW1444 : 'KW' '1444';\n"); - grammarBuilder.append("KW1445 : 'KW' '1445';\n"); - grammarBuilder.append("KW1446 : 'KW' '1446';\n"); - grammarBuilder.append("KW1447 : 'KW' '1447';\n"); - grammarBuilder.append("KW1448 : 'KW' '1448';\n"); - grammarBuilder.append("KW1449 : 'KW' '1449';\n"); - grammarBuilder.append("KW1450 : 'KW' '1450';\n"); - grammarBuilder.append("KW1451 : 'KW' '1451';\n"); - grammarBuilder.append("KW1452 : 'KW' '1452';\n"); - grammarBuilder.append("KW1453 : 'KW' '1453';\n"); - grammarBuilder.append("KW1454 : 'KW' '1454';\n"); - grammarBuilder.append("KW1455 : 'KW' '1455';\n"); - grammarBuilder.append("KW1456 : 'KW' '1456';\n"); - grammarBuilder.append("KW1457 : 'KW' '1457';\n"); - grammarBuilder.append("KW1458 : 'KW' '1458';\n"); - grammarBuilder.append("KW1459 : 'KW' '1459';\n"); - grammarBuilder.append("KW1460 : 'KW' '1460';\n"); - grammarBuilder.append("KW1461 : 'KW' '1461';\n"); - grammarBuilder.append("KW1462 : 'KW' '1462';\n"); - grammarBuilder.append("KW1463 : 'KW' '1463';\n"); - grammarBuilder.append("KW1464 : 'KW' '1464';\n"); - grammarBuilder.append("KW1465 : 'KW' '1465';\n"); - grammarBuilder.append("KW1466 : 'KW' '1466';\n"); - grammarBuilder.append("KW1467 : 'KW' '1467';\n"); - grammarBuilder.append("KW1468 : 'KW' '1468';\n"); - grammarBuilder.append("KW1469 : 'KW' '1469';\n"); - grammarBuilder.append("KW1470 : 'KW' '1470';\n"); - grammarBuilder.append("KW1471 : 'KW' '1471';\n"); - grammarBuilder.append("KW1472 : 'KW' '1472';\n"); - grammarBuilder.append("KW1473 : 'KW' '1473';\n"); - grammarBuilder.append("KW1474 : 'KW' '1474';\n"); - grammarBuilder.append("KW1475 : 'KW' '1475';\n"); - grammarBuilder.append("KW1476 : 'KW' '1476';\n"); - grammarBuilder.append("KW1477 : 'KW' '1477';\n"); - grammarBuilder.append("KW1478 : 'KW' '1478';\n"); - grammarBuilder.append("KW1479 : 'KW' '1479';\n"); - grammarBuilder.append("KW1480 : 'KW' '1480';\n"); - grammarBuilder.append("KW1481 : 'KW' '1481';\n"); - grammarBuilder.append("KW1482 : 'KW' '1482';\n"); - grammarBuilder.append("KW1483 : 'KW' '1483';\n"); - grammarBuilder.append("KW1484 : 'KW' '1484';\n"); - grammarBuilder.append("KW1485 : 'KW' '1485';\n"); - grammarBuilder.append("KW1486 : 'KW' '1486';\n"); - grammarBuilder.append("KW1487 : 'KW' '1487';\n"); - grammarBuilder.append("KW1488 : 'KW' '1488';\n"); - grammarBuilder.append("KW1489 : 'KW' '1489';\n"); - grammarBuilder.append("KW1490 : 'KW' '1490';\n"); - grammarBuilder.append("KW1491 : 'KW' '1491';\n"); - grammarBuilder.append("KW1492 : 'KW' '1492';\n"); - grammarBuilder.append("KW1493 : 'KW' '1493';\n"); - grammarBuilder.append("KW1494 : 'KW' '1494';\n"); - grammarBuilder.append("KW1495 : 'KW' '1495';\n"); - grammarBuilder.append("KW1496 : 'KW' '1496';\n"); - grammarBuilder.append("KW1497 : 'KW' '1497';\n"); - grammarBuilder.append("KW1498 : 'KW' '1498';\n"); - grammarBuilder.append("KW1499 : 'KW' '1499';\n"); - grammarBuilder.append("KW1500 : 'KW' '1500';\n"); - grammarBuilder.append("KW1501 : 'KW' '1501';\n"); - grammarBuilder.append("KW1502 : 'KW' '1502';\n"); - grammarBuilder.append("KW1503 : 'KW' '1503';\n"); - grammarBuilder.append("KW1504 : 'KW' '1504';\n"); - grammarBuilder.append("KW1505 : 'KW' '1505';\n"); - grammarBuilder.append("KW1506 : 'KW' '1506';\n"); - grammarBuilder.append("KW1507 : 'KW' '1507';\n"); - grammarBuilder.append("KW1508 : 'KW' '1508';\n"); - grammarBuilder.append("KW1509 : 'KW' '1509';\n"); - grammarBuilder.append("KW1510 : 'KW' '1510';\n"); - grammarBuilder.append("KW1511 : 'KW' '1511';\n"); - grammarBuilder.append("KW1512 : 'KW' '1512';\n"); - grammarBuilder.append("KW1513 : 'KW' '1513';\n"); - grammarBuilder.append("KW1514 : 'KW' '1514';\n"); - grammarBuilder.append("KW1515 : 'KW' '1515';\n"); - grammarBuilder.append("KW1516 : 'KW' '1516';\n"); - grammarBuilder.append("KW1517 : 'KW' '1517';\n"); - grammarBuilder.append("KW1518 : 'KW' '1518';\n"); - grammarBuilder.append("KW1519 : 'KW' '1519';\n"); - grammarBuilder.append("KW1520 : 'KW' '1520';\n"); - grammarBuilder.append("KW1521 : 'KW' '1521';\n"); - grammarBuilder.append("KW1522 : 'KW' '1522';\n"); - grammarBuilder.append("KW1523 : 'KW' '1523';\n"); - grammarBuilder.append("KW1524 : 'KW' '1524';\n"); - grammarBuilder.append("KW1525 : 'KW' '1525';\n"); - grammarBuilder.append("KW1526 : 'KW' '1526';\n"); - grammarBuilder.append("KW1527 : 'KW' '1527';\n"); - grammarBuilder.append("KW1528 : 'KW' '1528';\n"); - grammarBuilder.append("KW1529 : 'KW' '1529';\n"); - grammarBuilder.append("KW1530 : 'KW' '1530';\n"); - grammarBuilder.append("KW1531 : 'KW' '1531';\n"); - grammarBuilder.append("KW1532 : 'KW' '1532';\n"); - grammarBuilder.append("KW1533 : 'KW' '1533';\n"); - grammarBuilder.append("KW1534 : 'KW' '1534';\n"); - grammarBuilder.append("KW1535 : 'KW' '1535';\n"); - grammarBuilder.append("KW1536 : 'KW' '1536';\n"); - grammarBuilder.append("KW1537 : 'KW' '1537';\n"); - grammarBuilder.append("KW1538 : 'KW' '1538';\n"); - grammarBuilder.append("KW1539 : 'KW' '1539';\n"); - grammarBuilder.append("KW1540 : 'KW' '1540';\n"); - grammarBuilder.append("KW1541 : 'KW' '1541';\n"); - grammarBuilder.append("KW1542 : 'KW' '1542';\n"); - grammarBuilder.append("KW1543 : 'KW' '1543';\n"); - grammarBuilder.append("KW1544 : 'KW' '1544';\n"); - grammarBuilder.append("KW1545 : 'KW' '1545';\n"); - grammarBuilder.append("KW1546 : 'KW' '1546';\n"); - grammarBuilder.append("KW1547 : 'KW' '1547';\n"); - grammarBuilder.append("KW1548 : 'KW' '1548';\n"); - grammarBuilder.append("KW1549 : 'KW' '1549';\n"); - grammarBuilder.append("KW1550 : 'KW' '1550';\n"); - grammarBuilder.append("KW1551 : 'KW' '1551';\n"); - grammarBuilder.append("KW1552 : 'KW' '1552';\n"); - grammarBuilder.append("KW1553 : 'KW' '1553';\n"); - grammarBuilder.append("KW1554 : 'KW' '1554';\n"); - grammarBuilder.append("KW1555 : 'KW' '1555';\n"); - grammarBuilder.append("KW1556 : 'KW' '1556';\n"); - grammarBuilder.append("KW1557 : 'KW' '1557';\n"); - grammarBuilder.append("KW1558 : 'KW' '1558';\n"); - grammarBuilder.append("KW1559 : 'KW' '1559';\n"); - grammarBuilder.append("KW1560 : 'KW' '1560';\n"); - grammarBuilder.append("KW1561 : 'KW' '1561';\n"); - grammarBuilder.append("KW1562 : 'KW' '1562';\n"); - grammarBuilder.append("KW1563 : 'KW' '1563';\n"); - grammarBuilder.append("KW1564 : 'KW' '1564';\n"); - grammarBuilder.append("KW1565 : 'KW' '1565';\n"); - grammarBuilder.append("KW1566 : 'KW' '1566';\n"); - grammarBuilder.append("KW1567 : 'KW' '1567';\n"); - grammarBuilder.append("KW1568 : 'KW' '1568';\n"); - grammarBuilder.append("KW1569 : 'KW' '1569';\n"); - grammarBuilder.append("KW1570 : 'KW' '1570';\n"); - grammarBuilder.append("KW1571 : 'KW' '1571';\n"); - grammarBuilder.append("KW1572 : 'KW' '1572';\n"); - grammarBuilder.append("KW1573 : 'KW' '1573';\n"); - grammarBuilder.append("KW1574 : 'KW' '1574';\n"); - grammarBuilder.append("KW1575 : 'KW' '1575';\n"); - grammarBuilder.append("KW1576 : 'KW' '1576';\n"); - grammarBuilder.append("KW1577 : 'KW' '1577';\n"); - grammarBuilder.append("KW1578 : 'KW' '1578';\n"); - grammarBuilder.append("KW1579 : 'KW' '1579';\n"); - grammarBuilder.append("KW1580 : 'KW' '1580';\n"); - grammarBuilder.append("KW1581 : 'KW' '1581';\n"); - grammarBuilder.append("KW1582 : 'KW' '1582';\n"); - grammarBuilder.append("KW1583 : 'KW' '1583';\n"); - grammarBuilder.append("KW1584 : 'KW' '1584';\n"); - grammarBuilder.append("KW1585 : 'KW' '1585';\n"); - grammarBuilder.append("KW1586 : 'KW' '1586';\n"); - grammarBuilder.append("KW1587 : 'KW' '1587';\n"); - grammarBuilder.append("KW1588 : 'KW' '1588';\n"); - grammarBuilder.append("KW1589 : 'KW' '1589';\n"); - grammarBuilder.append("KW1590 : 'KW' '1590';\n"); - grammarBuilder.append("KW1591 : 'KW' '1591';\n"); - grammarBuilder.append("KW1592 : 'KW' '1592';\n"); - grammarBuilder.append("KW1593 : 'KW' '1593';\n"); - grammarBuilder.append("KW1594 : 'KW' '1594';\n"); - grammarBuilder.append("KW1595 : 'KW' '1595';\n"); - grammarBuilder.append("KW1596 : 'KW' '1596';\n"); - grammarBuilder.append("KW1597 : 'KW' '1597';\n"); - grammarBuilder.append("KW1598 : 'KW' '1598';\n"); - grammarBuilder.append("KW1599 : 'KW' '1599';\n"); - grammarBuilder.append("KW1600 : 'KW' '1600';\n"); - grammarBuilder.append("KW1601 : 'KW' '1601';\n"); - grammarBuilder.append("KW1602 : 'KW' '1602';\n"); - grammarBuilder.append("KW1603 : 'KW' '1603';\n"); - grammarBuilder.append("KW1604 : 'KW' '1604';\n"); - grammarBuilder.append("KW1605 : 'KW' '1605';\n"); - grammarBuilder.append("KW1606 : 'KW' '1606';\n"); - grammarBuilder.append("KW1607 : 'KW' '1607';\n"); - grammarBuilder.append("KW1608 : 'KW' '1608';\n"); - grammarBuilder.append("KW1609 : 'KW' '1609';\n"); - grammarBuilder.append("KW1610 : 'KW' '1610';\n"); - grammarBuilder.append("KW1611 : 'KW' '1611';\n"); - grammarBuilder.append("KW1612 : 'KW' '1612';\n"); - grammarBuilder.append("KW1613 : 'KW' '1613';\n"); - grammarBuilder.append("KW1614 : 'KW' '1614';\n"); - grammarBuilder.append("KW1615 : 'KW' '1615';\n"); - grammarBuilder.append("KW1616 : 'KW' '1616';\n"); - grammarBuilder.append("KW1617 : 'KW' '1617';\n"); - grammarBuilder.append("KW1618 : 'KW' '1618';\n"); - grammarBuilder.append("KW1619 : 'KW' '1619';\n"); - grammarBuilder.append("KW1620 : 'KW' '1620';\n"); - grammarBuilder.append("KW1621 : 'KW' '1621';\n"); - grammarBuilder.append("KW1622 : 'KW' '1622';\n"); - grammarBuilder.append("KW1623 : 'KW' '1623';\n"); - grammarBuilder.append("KW1624 : 'KW' '1624';\n"); - grammarBuilder.append("KW1625 : 'KW' '1625';\n"); - grammarBuilder.append("KW1626 : 'KW' '1626';\n"); - grammarBuilder.append("KW1627 : 'KW' '1627';\n"); - grammarBuilder.append("KW1628 : 'KW' '1628';\n"); - grammarBuilder.append("KW1629 : 'KW' '1629';\n"); - grammarBuilder.append("KW1630 : 'KW' '1630';\n"); - grammarBuilder.append("KW1631 : 'KW' '1631';\n"); - grammarBuilder.append("KW1632 : 'KW' '1632';\n"); - grammarBuilder.append("KW1633 : 'KW' '1633';\n"); - grammarBuilder.append("KW1634 : 'KW' '1634';\n"); - grammarBuilder.append("KW1635 : 'KW' '1635';\n"); - grammarBuilder.append("KW1636 : 'KW' '1636';\n"); - grammarBuilder.append("KW1637 : 'KW' '1637';\n"); - grammarBuilder.append("KW1638 : 'KW' '1638';\n"); - grammarBuilder.append("KW1639 : 'KW' '1639';\n"); - grammarBuilder.append("KW1640 : 'KW' '1640';\n"); - grammarBuilder.append("KW1641 : 'KW' '1641';\n"); - grammarBuilder.append("KW1642 : 'KW' '1642';\n"); - grammarBuilder.append("KW1643 : 'KW' '1643';\n"); - grammarBuilder.append("KW1644 : 'KW' '1644';\n"); - grammarBuilder.append("KW1645 : 'KW' '1645';\n"); - grammarBuilder.append("KW1646 : 'KW' '1646';\n"); - grammarBuilder.append("KW1647 : 'KW' '1647';\n"); - grammarBuilder.append("KW1648 : 'KW' '1648';\n"); - grammarBuilder.append("KW1649 : 'KW' '1649';\n"); - grammarBuilder.append("KW1650 : 'KW' '1650';\n"); - grammarBuilder.append("KW1651 : 'KW' '1651';\n"); - grammarBuilder.append("KW1652 : 'KW' '1652';\n"); - grammarBuilder.append("KW1653 : 'KW' '1653';\n"); - grammarBuilder.append("KW1654 : 'KW' '1654';\n"); - grammarBuilder.append("KW1655 : 'KW' '1655';\n"); - grammarBuilder.append("KW1656 : 'KW' '1656';\n"); - grammarBuilder.append("KW1657 : 'KW' '1657';\n"); - grammarBuilder.append("KW1658 : 'KW' '1658';\n"); - grammarBuilder.append("KW1659 : 'KW' '1659';\n"); - grammarBuilder.append("KW1660 : 'KW' '1660';\n"); - grammarBuilder.append("KW1661 : 'KW' '1661';\n"); - grammarBuilder.append("KW1662 : 'KW' '1662';\n"); - grammarBuilder.append("KW1663 : 'KW' '1663';\n"); - grammarBuilder.append("KW1664 : 'KW' '1664';\n"); - grammarBuilder.append("KW1665 : 'KW' '1665';\n"); - grammarBuilder.append("KW1666 : 'KW' '1666';\n"); - grammarBuilder.append("KW1667 : 'KW' '1667';\n"); - grammarBuilder.append("KW1668 : 'KW' '1668';\n"); - grammarBuilder.append("KW1669 : 'KW' '1669';\n"); - grammarBuilder.append("KW1670 : 'KW' '1670';\n"); - grammarBuilder.append("KW1671 : 'KW' '1671';\n"); - grammarBuilder.append("KW1672 : 'KW' '1672';\n"); - grammarBuilder.append("KW1673 : 'KW' '1673';\n"); - grammarBuilder.append("KW1674 : 'KW' '1674';\n"); - grammarBuilder.append("KW1675 : 'KW' '1675';\n"); - grammarBuilder.append("KW1676 : 'KW' '1676';\n"); - grammarBuilder.append("KW1677 : 'KW' '1677';\n"); - grammarBuilder.append("KW1678 : 'KW' '1678';\n"); - grammarBuilder.append("KW1679 : 'KW' '1679';\n"); - grammarBuilder.append("KW1680 : 'KW' '1680';\n"); - grammarBuilder.append("KW1681 : 'KW' '1681';\n"); - grammarBuilder.append("KW1682 : 'KW' '1682';\n"); - grammarBuilder.append("KW1683 : 'KW' '1683';\n"); - grammarBuilder.append("KW1684 : 'KW' '1684';\n"); - grammarBuilder.append("KW1685 : 'KW' '1685';\n"); - grammarBuilder.append("KW1686 : 'KW' '1686';\n"); - grammarBuilder.append("KW1687 : 'KW' '1687';\n"); - grammarBuilder.append("KW1688 : 'KW' '1688';\n"); - grammarBuilder.append("KW1689 : 'KW' '1689';\n"); - grammarBuilder.append("KW1690 : 'KW' '1690';\n"); - grammarBuilder.append("KW1691 : 'KW' '1691';\n"); - grammarBuilder.append("KW1692 : 'KW' '1692';\n"); - grammarBuilder.append("KW1693 : 'KW' '1693';\n"); - grammarBuilder.append("KW1694 : 'KW' '1694';\n"); - grammarBuilder.append("KW1695 : 'KW' '1695';\n"); - grammarBuilder.append("KW1696 : 'KW' '1696';\n"); - grammarBuilder.append("KW1697 : 'KW' '1697';\n"); - grammarBuilder.append("KW1698 : 'KW' '1698';\n"); - grammarBuilder.append("KW1699 : 'KW' '1699';\n"); - grammarBuilder.append("KW1700 : 'KW' '1700';\n"); - grammarBuilder.append("KW1701 : 'KW' '1701';\n"); - grammarBuilder.append("KW1702 : 'KW' '1702';\n"); - grammarBuilder.append("KW1703 : 'KW' '1703';\n"); - grammarBuilder.append("KW1704 : 'KW' '1704';\n"); - grammarBuilder.append("KW1705 : 'KW' '1705';\n"); - grammarBuilder.append("KW1706 : 'KW' '1706';\n"); - grammarBuilder.append("KW1707 : 'KW' '1707';\n"); - grammarBuilder.append("KW1708 : 'KW' '1708';\n"); - grammarBuilder.append("KW1709 : 'KW' '1709';\n"); - grammarBuilder.append("KW1710 : 'KW' '1710';\n"); - grammarBuilder.append("KW1711 : 'KW' '1711';\n"); - grammarBuilder.append("KW1712 : 'KW' '1712';\n"); - grammarBuilder.append("KW1713 : 'KW' '1713';\n"); - grammarBuilder.append("KW1714 : 'KW' '1714';\n"); - grammarBuilder.append("KW1715 : 'KW' '1715';\n"); - grammarBuilder.append("KW1716 : 'KW' '1716';\n"); - grammarBuilder.append("KW1717 : 'KW' '1717';\n"); - grammarBuilder.append("KW1718 : 'KW' '1718';\n"); - grammarBuilder.append("KW1719 : 'KW' '1719';\n"); - grammarBuilder.append("KW1720 : 'KW' '1720';\n"); - grammarBuilder.append("KW1721 : 'KW' '1721';\n"); - grammarBuilder.append("KW1722 : 'KW' '1722';\n"); - grammarBuilder.append("KW1723 : 'KW' '1723';\n"); - grammarBuilder.append("KW1724 : 'KW' '1724';\n"); - grammarBuilder.append("KW1725 : 'KW' '1725';\n"); - grammarBuilder.append("KW1726 : 'KW' '1726';\n"); - grammarBuilder.append("KW1727 : 'KW' '1727';\n"); - grammarBuilder.append("KW1728 : 'KW' '1728';\n"); - grammarBuilder.append("KW1729 : 'KW' '1729';\n"); - grammarBuilder.append("KW1730 : 'KW' '1730';\n"); - grammarBuilder.append("KW1731 : 'KW' '1731';\n"); - grammarBuilder.append("KW1732 : 'KW' '1732';\n"); - grammarBuilder.append("KW1733 : 'KW' '1733';\n"); - grammarBuilder.append("KW1734 : 'KW' '1734';\n"); - grammarBuilder.append("KW1735 : 'KW' '1735';\n"); - grammarBuilder.append("KW1736 : 'KW' '1736';\n"); - grammarBuilder.append("KW1737 : 'KW' '1737';\n"); - grammarBuilder.append("KW1738 : 'KW' '1738';\n"); - grammarBuilder.append("KW1739 : 'KW' '1739';\n"); - grammarBuilder.append("KW1740 : 'KW' '1740';\n"); - grammarBuilder.append("KW1741 : 'KW' '1741';\n"); - grammarBuilder.append("KW1742 : 'KW' '1742';\n"); - grammarBuilder.append("KW1743 : 'KW' '1743';\n"); - grammarBuilder.append("KW1744 : 'KW' '1744';\n"); - grammarBuilder.append("KW1745 : 'KW' '1745';\n"); - grammarBuilder.append("KW1746 : 'KW' '1746';\n"); - grammarBuilder.append("KW1747 : 'KW' '1747';\n"); - grammarBuilder.append("KW1748 : 'KW' '1748';\n"); - grammarBuilder.append("KW1749 : 'KW' '1749';\n"); - grammarBuilder.append("KW1750 : 'KW' '1750';\n"); - grammarBuilder.append("KW1751 : 'KW' '1751';\n"); - grammarBuilder.append("KW1752 : 'KW' '1752';\n"); - grammarBuilder.append("KW1753 : 'KW' '1753';\n"); - grammarBuilder.append("KW1754 : 'KW' '1754';\n"); - grammarBuilder.append("KW1755 : 'KW' '1755';\n"); - grammarBuilder.append("KW1756 : 'KW' '1756';\n"); - grammarBuilder.append("KW1757 : 'KW' '1757';\n"); - grammarBuilder.append("KW1758 : 'KW' '1758';\n"); - grammarBuilder.append("KW1759 : 'KW' '1759';\n"); - grammarBuilder.append("KW1760 : 'KW' '1760';\n"); - grammarBuilder.append("KW1761 : 'KW' '1761';\n"); - grammarBuilder.append("KW1762 : 'KW' '1762';\n"); - grammarBuilder.append("KW1763 : 'KW' '1763';\n"); - grammarBuilder.append("KW1764 : 'KW' '1764';\n"); - grammarBuilder.append("KW1765 : 'KW' '1765';\n"); - grammarBuilder.append("KW1766 : 'KW' '1766';\n"); - grammarBuilder.append("KW1767 : 'KW' '1767';\n"); - grammarBuilder.append("KW1768 : 'KW' '1768';\n"); - grammarBuilder.append("KW1769 : 'KW' '1769';\n"); - grammarBuilder.append("KW1770 : 'KW' '1770';\n"); - grammarBuilder.append("KW1771 : 'KW' '1771';\n"); - grammarBuilder.append("KW1772 : 'KW' '1772';\n"); - grammarBuilder.append("KW1773 : 'KW' '1773';\n"); - grammarBuilder.append("KW1774 : 'KW' '1774';\n"); - grammarBuilder.append("KW1775 : 'KW' '1775';\n"); - grammarBuilder.append("KW1776 : 'KW' '1776';\n"); - grammarBuilder.append("KW1777 : 'KW' '1777';\n"); - grammarBuilder.append("KW1778 : 'KW' '1778';\n"); - grammarBuilder.append("KW1779 : 'KW' '1779';\n"); - grammarBuilder.append("KW1780 : 'KW' '1780';\n"); - grammarBuilder.append("KW1781 : 'KW' '1781';\n"); - grammarBuilder.append("KW1782 : 'KW' '1782';\n"); - grammarBuilder.append("KW1783 : 'KW' '1783';\n"); - grammarBuilder.append("KW1784 : 'KW' '1784';\n"); - grammarBuilder.append("KW1785 : 'KW' '1785';\n"); - grammarBuilder.append("KW1786 : 'KW' '1786';\n"); - grammarBuilder.append("KW1787 : 'KW' '1787';\n"); - grammarBuilder.append("KW1788 : 'KW' '1788';\n"); - grammarBuilder.append("KW1789 : 'KW' '1789';\n"); - grammarBuilder.append("KW1790 : 'KW' '1790';\n"); - grammarBuilder.append("KW1791 : 'KW' '1791';\n"); - grammarBuilder.append("KW1792 : 'KW' '1792';\n"); - grammarBuilder.append("KW1793 : 'KW' '1793';\n"); - grammarBuilder.append("KW1794 : 'KW' '1794';\n"); - grammarBuilder.append("KW1795 : 'KW' '1795';\n"); - grammarBuilder.append("KW1796 : 'KW' '1796';\n"); - grammarBuilder.append("KW1797 : 'KW' '1797';\n"); - grammarBuilder.append("KW1798 : 'KW' '1798';\n"); - grammarBuilder.append("KW1799 : 'KW' '1799';\n"); - grammarBuilder.append("KW1800 : 'KW' '1800';\n"); - grammarBuilder.append("KW1801 : 'KW' '1801';\n"); - grammarBuilder.append("KW1802 : 'KW' '1802';\n"); - grammarBuilder.append("KW1803 : 'KW' '1803';\n"); - grammarBuilder.append("KW1804 : 'KW' '1804';\n"); - grammarBuilder.append("KW1805 : 'KW' '1805';\n"); - grammarBuilder.append("KW1806 : 'KW' '1806';\n"); - grammarBuilder.append("KW1807 : 'KW' '1807';\n"); - grammarBuilder.append("KW1808 : 'KW' '1808';\n"); - grammarBuilder.append("KW1809 : 'KW' '1809';\n"); - grammarBuilder.append("KW1810 : 'KW' '1810';\n"); - grammarBuilder.append("KW1811 : 'KW' '1811';\n"); - grammarBuilder.append("KW1812 : 'KW' '1812';\n"); - grammarBuilder.append("KW1813 : 'KW' '1813';\n"); - grammarBuilder.append("KW1814 : 'KW' '1814';\n"); - grammarBuilder.append("KW1815 : 'KW' '1815';\n"); - grammarBuilder.append("KW1816 : 'KW' '1816';\n"); - grammarBuilder.append("KW1817 : 'KW' '1817';\n"); - grammarBuilder.append("KW1818 : 'KW' '1818';\n"); - grammarBuilder.append("KW1819 : 'KW' '1819';\n"); - grammarBuilder.append("KW1820 : 'KW' '1820';\n"); - grammarBuilder.append("KW1821 : 'KW' '1821';\n"); - grammarBuilder.append("KW1822 : 'KW' '1822';\n"); - grammarBuilder.append("KW1823 : 'KW' '1823';\n"); - grammarBuilder.append("KW1824 : 'KW' '1824';\n"); - grammarBuilder.append("KW1825 : 'KW' '1825';\n"); - grammarBuilder.append("KW1826 : 'KW' '1826';\n"); - grammarBuilder.append("KW1827 : 'KW' '1827';\n"); - grammarBuilder.append("KW1828 : 'KW' '1828';\n"); - grammarBuilder.append("KW1829 : 'KW' '1829';\n"); - grammarBuilder.append("KW1830 : 'KW' '1830';\n"); - grammarBuilder.append("KW1831 : 'KW' '1831';\n"); - grammarBuilder.append("KW1832 : 'KW' '1832';\n"); - grammarBuilder.append("KW1833 : 'KW' '1833';\n"); - grammarBuilder.append("KW1834 : 'KW' '1834';\n"); - grammarBuilder.append("KW1835 : 'KW' '1835';\n"); - grammarBuilder.append("KW1836 : 'KW' '1836';\n"); - grammarBuilder.append("KW1837 : 'KW' '1837';\n"); - grammarBuilder.append("KW1838 : 'KW' '1838';\n"); - grammarBuilder.append("KW1839 : 'KW' '1839';\n"); - grammarBuilder.append("KW1840 : 'KW' '1840';\n"); - grammarBuilder.append("KW1841 : 'KW' '1841';\n"); - grammarBuilder.append("KW1842 : 'KW' '1842';\n"); - grammarBuilder.append("KW1843 : 'KW' '1843';\n"); - grammarBuilder.append("KW1844 : 'KW' '1844';\n"); - grammarBuilder.append("KW1845 : 'KW' '1845';\n"); - grammarBuilder.append("KW1846 : 'KW' '1846';\n"); - grammarBuilder.append("KW1847 : 'KW' '1847';\n"); - grammarBuilder.append("KW1848 : 'KW' '1848';\n"); - grammarBuilder.append("KW1849 : 'KW' '1849';\n"); - grammarBuilder.append("KW1850 : 'KW' '1850';\n"); - grammarBuilder.append("KW1851 : 'KW' '1851';\n"); - grammarBuilder.append("KW1852 : 'KW' '1852';\n"); - grammarBuilder.append("KW1853 : 'KW' '1853';\n"); - grammarBuilder.append("KW1854 : 'KW' '1854';\n"); - grammarBuilder.append("KW1855 : 'KW' '1855';\n"); - grammarBuilder.append("KW1856 : 'KW' '1856';\n"); - grammarBuilder.append("KW1857 : 'KW' '1857';\n"); - grammarBuilder.append("KW1858 : 'KW' '1858';\n"); - grammarBuilder.append("KW1859 : 'KW' '1859';\n"); - grammarBuilder.append("KW1860 : 'KW' '1860';\n"); - grammarBuilder.append("KW1861 : 'KW' '1861';\n"); - grammarBuilder.append("KW1862 : 'KW' '1862';\n"); - grammarBuilder.append("KW1863 : 'KW' '1863';\n"); - grammarBuilder.append("KW1864 : 'KW' '1864';\n"); - grammarBuilder.append("KW1865 : 'KW' '1865';\n"); - grammarBuilder.append("KW1866 : 'KW' '1866';\n"); - grammarBuilder.append("KW1867 : 'KW' '1867';\n"); - grammarBuilder.append("KW1868 : 'KW' '1868';\n"); - grammarBuilder.append("KW1869 : 'KW' '1869';\n"); - grammarBuilder.append("KW1870 : 'KW' '1870';\n"); - grammarBuilder.append("KW1871 : 'KW' '1871';\n"); - grammarBuilder.append("KW1872 : 'KW' '1872';\n"); - grammarBuilder.append("KW1873 : 'KW' '1873';\n"); - grammarBuilder.append("KW1874 : 'KW' '1874';\n"); - grammarBuilder.append("KW1875 : 'KW' '1875';\n"); - grammarBuilder.append("KW1876 : 'KW' '1876';\n"); - grammarBuilder.append("KW1877 : 'KW' '1877';\n"); - grammarBuilder.append("KW1878 : 'KW' '1878';\n"); - grammarBuilder.append("KW1879 : 'KW' '1879';\n"); - grammarBuilder.append("KW1880 : 'KW' '1880';\n"); - grammarBuilder.append("KW1881 : 'KW' '1881';\n"); - grammarBuilder.append("KW1882 : 'KW' '1882';\n"); - grammarBuilder.append("KW1883 : 'KW' '1883';\n"); - grammarBuilder.append("KW1884 : 'KW' '1884';\n"); - grammarBuilder.append("KW1885 : 'KW' '1885';\n"); - grammarBuilder.append("KW1886 : 'KW' '1886';\n"); - grammarBuilder.append("KW1887 : 'KW' '1887';\n"); - grammarBuilder.append("KW1888 : 'KW' '1888';\n"); - grammarBuilder.append("KW1889 : 'KW' '1889';\n"); - grammarBuilder.append("KW1890 : 'KW' '1890';\n"); - grammarBuilder.append("KW1891 : 'KW' '1891';\n"); - grammarBuilder.append("KW1892 : 'KW' '1892';\n"); - grammarBuilder.append("KW1893 : 'KW' '1893';\n"); - grammarBuilder.append("KW1894 : 'KW' '1894';\n"); - grammarBuilder.append("KW1895 : 'KW' '1895';\n"); - grammarBuilder.append("KW1896 : 'KW' '1896';\n"); - grammarBuilder.append("KW1897 : 'KW' '1897';\n"); - grammarBuilder.append("KW1898 : 'KW' '1898';\n"); - grammarBuilder.append("KW1899 : 'KW' '1899';\n"); - grammarBuilder.append("KW1900 : 'KW' '1900';\n"); - grammarBuilder.append("KW1901 : 'KW' '1901';\n"); - grammarBuilder.append("KW1902 : 'KW' '1902';\n"); - grammarBuilder.append("KW1903 : 'KW' '1903';\n"); - grammarBuilder.append("KW1904 : 'KW' '1904';\n"); - grammarBuilder.append("KW1905 : 'KW' '1905';\n"); - grammarBuilder.append("KW1906 : 'KW' '1906';\n"); - grammarBuilder.append("KW1907 : 'KW' '1907';\n"); - grammarBuilder.append("KW1908 : 'KW' '1908';\n"); - grammarBuilder.append("KW1909 : 'KW' '1909';\n"); - grammarBuilder.append("KW1910 : 'KW' '1910';\n"); - grammarBuilder.append("KW1911 : 'KW' '1911';\n"); - grammarBuilder.append("KW1912 : 'KW' '1912';\n"); - grammarBuilder.append("KW1913 : 'KW' '1913';\n"); - grammarBuilder.append("KW1914 : 'KW' '1914';\n"); - grammarBuilder.append("KW1915 : 'KW' '1915';\n"); - grammarBuilder.append("KW1916 : 'KW' '1916';\n"); - grammarBuilder.append("KW1917 : 'KW' '1917';\n"); - grammarBuilder.append("KW1918 : 'KW' '1918';\n"); - grammarBuilder.append("KW1919 : 'KW' '1919';\n"); - grammarBuilder.append("KW1920 : 'KW' '1920';\n"); - grammarBuilder.append("KW1921 : 'KW' '1921';\n"); - grammarBuilder.append("KW1922 : 'KW' '1922';\n"); - grammarBuilder.append("KW1923 : 'KW' '1923';\n"); - grammarBuilder.append("KW1924 : 'KW' '1924';\n"); - grammarBuilder.append("KW1925 : 'KW' '1925';\n"); - grammarBuilder.append("KW1926 : 'KW' '1926';\n"); - grammarBuilder.append("KW1927 : 'KW' '1927';\n"); - grammarBuilder.append("KW1928 : 'KW' '1928';\n"); - grammarBuilder.append("KW1929 : 'KW' '1929';\n"); - grammarBuilder.append("KW1930 : 'KW' '1930';\n"); - grammarBuilder.append("KW1931 : 'KW' '1931';\n"); - grammarBuilder.append("KW1932 : 'KW' '1932';\n"); - grammarBuilder.append("KW1933 : 'KW' '1933';\n"); - grammarBuilder.append("KW1934 : 'KW' '1934';\n"); - grammarBuilder.append("KW1935 : 'KW' '1935';\n"); - grammarBuilder.append("KW1936 : 'KW' '1936';\n"); - grammarBuilder.append("KW1937 : 'KW' '1937';\n"); - grammarBuilder.append("KW1938 : 'KW' '1938';\n"); - grammarBuilder.append("KW1939 : 'KW' '1939';\n"); - grammarBuilder.append("KW1940 : 'KW' '1940';\n"); - grammarBuilder.append("KW1941 : 'KW' '1941';\n"); - grammarBuilder.append("KW1942 : 'KW' '1942';\n"); - grammarBuilder.append("KW1943 : 'KW' '1943';\n"); - grammarBuilder.append("KW1944 : 'KW' '1944';\n"); - grammarBuilder.append("KW1945 : 'KW' '1945';\n"); - grammarBuilder.append("KW1946 : 'KW' '1946';\n"); - grammarBuilder.append("KW1947 : 'KW' '1947';\n"); - grammarBuilder.append("KW1948 : 'KW' '1948';\n"); - grammarBuilder.append("KW1949 : 'KW' '1949';\n"); - grammarBuilder.append("KW1950 : 'KW' '1950';\n"); - grammarBuilder.append("KW1951 : 'KW' '1951';\n"); - grammarBuilder.append("KW1952 : 'KW' '1952';\n"); - grammarBuilder.append("KW1953 : 'KW' '1953';\n"); - grammarBuilder.append("KW1954 : 'KW' '1954';\n"); - grammarBuilder.append("KW1955 : 'KW' '1955';\n"); - grammarBuilder.append("KW1956 : 'KW' '1956';\n"); - grammarBuilder.append("KW1957 : 'KW' '1957';\n"); - grammarBuilder.append("KW1958 : 'KW' '1958';\n"); - grammarBuilder.append("KW1959 : 'KW' '1959';\n"); - grammarBuilder.append("KW1960 : 'KW' '1960';\n"); - grammarBuilder.append("KW1961 : 'KW' '1961';\n"); - grammarBuilder.append("KW1962 : 'KW' '1962';\n"); - grammarBuilder.append("KW1963 : 'KW' '1963';\n"); - grammarBuilder.append("KW1964 : 'KW' '1964';\n"); - grammarBuilder.append("KW1965 : 'KW' '1965';\n"); - grammarBuilder.append("KW1966 : 'KW' '1966';\n"); - grammarBuilder.append("KW1967 : 'KW' '1967';\n"); - grammarBuilder.append("KW1968 : 'KW' '1968';\n"); - grammarBuilder.append("KW1969 : 'KW' '1969';\n"); - grammarBuilder.append("KW1970 : 'KW' '1970';\n"); - grammarBuilder.append("KW1971 : 'KW' '1971';\n"); - grammarBuilder.append("KW1972 : 'KW' '1972';\n"); - grammarBuilder.append("KW1973 : 'KW' '1973';\n"); - grammarBuilder.append("KW1974 : 'KW' '1974';\n"); - grammarBuilder.append("KW1975 : 'KW' '1975';\n"); - grammarBuilder.append("KW1976 : 'KW' '1976';\n"); - grammarBuilder.append("KW1977 : 'KW' '1977';\n"); - grammarBuilder.append("KW1978 : 'KW' '1978';\n"); - grammarBuilder.append("KW1979 : 'KW' '1979';\n"); - grammarBuilder.append("KW1980 : 'KW' '1980';\n"); - grammarBuilder.append("KW1981 : 'KW' '1981';\n"); - grammarBuilder.append("KW1982 : 'KW' '1982';\n"); - grammarBuilder.append("KW1983 : 'KW' '1983';\n"); - grammarBuilder.append("KW1984 : 'KW' '1984';\n"); - grammarBuilder.append("KW1985 : 'KW' '1985';\n"); - grammarBuilder.append("KW1986 : 'KW' '1986';\n"); - grammarBuilder.append("KW1987 : 'KW' '1987';\n"); - grammarBuilder.append("KW1988 : 'KW' '1988';\n"); - grammarBuilder.append("KW1989 : 'KW' '1989';\n"); - grammarBuilder.append("KW1990 : 'KW' '1990';\n"); - grammarBuilder.append("KW1991 : 'KW' '1991';\n"); - grammarBuilder.append("KW1992 : 'KW' '1992';\n"); - grammarBuilder.append("KW1993 : 'KW' '1993';\n"); - grammarBuilder.append("KW1994 : 'KW' '1994';\n"); - grammarBuilder.append("KW1995 : 'KW' '1995';\n"); - grammarBuilder.append("KW1996 : 'KW' '1996';\n"); - grammarBuilder.append("KW1997 : 'KW' '1997';\n"); - grammarBuilder.append("KW1998 : 'KW' '1998';\n"); - grammarBuilder.append("KW1999 : 'KW' '1999';\n"); - grammarBuilder.append("KW2000 : 'KW' '2000';\n"); - grammarBuilder.append("KW2001 : 'KW' '2001';\n"); - grammarBuilder.append("KW2002 : 'KW' '2002';\n"); - grammarBuilder.append("KW2003 : 'KW' '2003';\n"); - grammarBuilder.append("KW2004 : 'KW' '2004';\n"); - grammarBuilder.append("KW2005 : 'KW' '2005';\n"); - grammarBuilder.append("KW2006 : 'KW' '2006';\n"); - grammarBuilder.append("KW2007 : 'KW' '2007';\n"); - grammarBuilder.append("KW2008 : 'KW' '2008';\n"); - grammarBuilder.append("KW2009 : 'KW' '2009';\n"); - grammarBuilder.append("KW2010 : 'KW' '2010';\n"); - grammarBuilder.append("KW2011 : 'KW' '2011';\n"); - grammarBuilder.append("KW2012 : 'KW' '2012';\n"); - grammarBuilder.append("KW2013 : 'KW' '2013';\n"); - grammarBuilder.append("KW2014 : 'KW' '2014';\n"); - grammarBuilder.append("KW2015 : 'KW' '2015';\n"); - grammarBuilder.append("KW2016 : 'KW' '2016';\n"); - grammarBuilder.append("KW2017 : 'KW' '2017';\n"); - grammarBuilder.append("KW2018 : 'KW' '2018';\n"); - grammarBuilder.append("KW2019 : 'KW' '2019';\n"); - grammarBuilder.append("KW2020 : 'KW' '2020';\n"); - grammarBuilder.append("KW2021 : 'KW' '2021';\n"); - grammarBuilder.append("KW2022 : 'KW' '2022';\n"); - grammarBuilder.append("KW2023 : 'KW' '2023';\n"); - grammarBuilder.append("KW2024 : 'KW' '2024';\n"); - grammarBuilder.append("KW2025 : 'KW' '2025';\n"); - grammarBuilder.append("KW2026 : 'KW' '2026';\n"); - grammarBuilder.append("KW2027 : 'KW' '2027';\n"); - grammarBuilder.append("KW2028 : 'KW' '2028';\n"); - grammarBuilder.append("KW2029 : 'KW' '2029';\n"); - grammarBuilder.append("KW2030 : 'KW' '2030';\n"); - grammarBuilder.append("KW2031 : 'KW' '2031';\n"); - grammarBuilder.append("KW2032 : 'KW' '2032';\n"); - grammarBuilder.append("KW2033 : 'KW' '2033';\n"); - grammarBuilder.append("KW2034 : 'KW' '2034';\n"); - grammarBuilder.append("KW2035 : 'KW' '2035';\n"); - grammarBuilder.append("KW2036 : 'KW' '2036';\n"); - grammarBuilder.append("KW2037 : 'KW' '2037';\n"); - grammarBuilder.append("KW2038 : 'KW' '2038';\n"); - grammarBuilder.append("KW2039 : 'KW' '2039';\n"); - grammarBuilder.append("KW2040 : 'KW' '2040';\n"); - grammarBuilder.append("KW2041 : 'KW' '2041';\n"); - grammarBuilder.append("KW2042 : 'KW' '2042';\n"); - grammarBuilder.append("KW2043 : 'KW' '2043';\n"); - grammarBuilder.append("KW2044 : 'KW' '2044';\n"); - grammarBuilder.append("KW2045 : 'KW' '2045';\n"); - grammarBuilder.append("KW2046 : 'KW' '2046';\n"); - grammarBuilder.append("KW2047 : 'KW' '2047';\n"); - grammarBuilder.append("KW2048 : 'KW' '2048';\n"); - grammarBuilder.append("KW2049 : 'KW' '2049';\n"); - grammarBuilder.append("KW2050 : 'KW' '2050';\n"); - grammarBuilder.append("KW2051 : 'KW' '2051';\n"); - grammarBuilder.append("KW2052 : 'KW' '2052';\n"); - grammarBuilder.append("KW2053 : 'KW' '2053';\n"); - grammarBuilder.append("KW2054 : 'KW' '2054';\n"); - grammarBuilder.append("KW2055 : 'KW' '2055';\n"); - grammarBuilder.append("KW2056 : 'KW' '2056';\n"); - grammarBuilder.append("KW2057 : 'KW' '2057';\n"); - grammarBuilder.append("KW2058 : 'KW' '2058';\n"); - grammarBuilder.append("KW2059 : 'KW' '2059';\n"); - grammarBuilder.append("KW2060 : 'KW' '2060';\n"); - grammarBuilder.append("KW2061 : 'KW' '2061';\n"); - grammarBuilder.append("KW2062 : 'KW' '2062';\n"); - grammarBuilder.append("KW2063 : 'KW' '2063';\n"); - grammarBuilder.append("KW2064 : 'KW' '2064';\n"); - grammarBuilder.append("KW2065 : 'KW' '2065';\n"); - grammarBuilder.append("KW2066 : 'KW' '2066';\n"); - grammarBuilder.append("KW2067 : 'KW' '2067';\n"); - grammarBuilder.append("KW2068 : 'KW' '2068';\n"); - grammarBuilder.append("KW2069 : 'KW' '2069';\n"); - grammarBuilder.append("KW2070 : 'KW' '2070';\n"); - grammarBuilder.append("KW2071 : 'KW' '2071';\n"); - grammarBuilder.append("KW2072 : 'KW' '2072';\n"); - grammarBuilder.append("KW2073 : 'KW' '2073';\n"); - grammarBuilder.append("KW2074 : 'KW' '2074';\n"); - grammarBuilder.append("KW2075 : 'KW' '2075';\n"); - grammarBuilder.append("KW2076 : 'KW' '2076';\n"); - grammarBuilder.append("KW2077 : 'KW' '2077';\n"); - grammarBuilder.append("KW2078 : 'KW' '2078';\n"); - grammarBuilder.append("KW2079 : 'KW' '2079';\n"); - grammarBuilder.append("KW2080 : 'KW' '2080';\n"); - grammarBuilder.append("KW2081 : 'KW' '2081';\n"); - grammarBuilder.append("KW2082 : 'KW' '2082';\n"); - grammarBuilder.append("KW2083 : 'KW' '2083';\n"); - grammarBuilder.append("KW2084 : 'KW' '2084';\n"); - grammarBuilder.append("KW2085 : 'KW' '2085';\n"); - grammarBuilder.append("KW2086 : 'KW' '2086';\n"); - grammarBuilder.append("KW2087 : 'KW' '2087';\n"); - grammarBuilder.append("KW2088 : 'KW' '2088';\n"); - grammarBuilder.append("KW2089 : 'KW' '2089';\n"); - grammarBuilder.append("KW2090 : 'KW' '2090';\n"); - grammarBuilder.append("KW2091 : 'KW' '2091';\n"); - grammarBuilder.append("KW2092 : 'KW' '2092';\n"); - grammarBuilder.append("KW2093 : 'KW' '2093';\n"); - grammarBuilder.append("KW2094 : 'KW' '2094';\n"); - grammarBuilder.append("KW2095 : 'KW' '2095';\n"); - grammarBuilder.append("KW2096 : 'KW' '2096';\n"); - grammarBuilder.append("KW2097 : 'KW' '2097';\n"); - grammarBuilder.append("KW2098 : 'KW' '2098';\n"); - grammarBuilder.append("KW2099 : 'KW' '2099';\n"); - grammarBuilder.append("KW2100 : 'KW' '2100';\n"); - grammarBuilder.append("KW2101 : 'KW' '2101';\n"); - grammarBuilder.append("KW2102 : 'KW' '2102';\n"); - grammarBuilder.append("KW2103 : 'KW' '2103';\n"); - grammarBuilder.append("KW2104 : 'KW' '2104';\n"); - grammarBuilder.append("KW2105 : 'KW' '2105';\n"); - grammarBuilder.append("KW2106 : 'KW' '2106';\n"); - grammarBuilder.append("KW2107 : 'KW' '2107';\n"); - grammarBuilder.append("KW2108 : 'KW' '2108';\n"); - grammarBuilder.append("KW2109 : 'KW' '2109';\n"); - grammarBuilder.append("KW2110 : 'KW' '2110';\n"); - grammarBuilder.append("KW2111 : 'KW' '2111';\n"); - grammarBuilder.append("KW2112 : 'KW' '2112';\n"); - grammarBuilder.append("KW2113 : 'KW' '2113';\n"); - grammarBuilder.append("KW2114 : 'KW' '2114';\n"); - grammarBuilder.append("KW2115 : 'KW' '2115';\n"); - grammarBuilder.append("KW2116 : 'KW' '2116';\n"); - grammarBuilder.append("KW2117 : 'KW' '2117';\n"); - grammarBuilder.append("KW2118 : 'KW' '2118';\n"); - grammarBuilder.append("KW2119 : 'KW' '2119';\n"); - grammarBuilder.append("KW2120 : 'KW' '2120';\n"); - grammarBuilder.append("KW2121 : 'KW' '2121';\n"); - grammarBuilder.append("KW2122 : 'KW' '2122';\n"); - grammarBuilder.append("KW2123 : 'KW' '2123';\n"); - grammarBuilder.append("KW2124 : 'KW' '2124';\n"); - grammarBuilder.append("KW2125 : 'KW' '2125';\n"); - grammarBuilder.append("KW2126 : 'KW' '2126';\n"); - grammarBuilder.append("KW2127 : 'KW' '2127';\n"); - grammarBuilder.append("KW2128 : 'KW' '2128';\n"); - grammarBuilder.append("KW2129 : 'KW' '2129';\n"); - grammarBuilder.append("KW2130 : 'KW' '2130';\n"); - grammarBuilder.append("KW2131 : 'KW' '2131';\n"); - grammarBuilder.append("KW2132 : 'KW' '2132';\n"); - grammarBuilder.append("KW2133 : 'KW' '2133';\n"); - grammarBuilder.append("KW2134 : 'KW' '2134';\n"); - grammarBuilder.append("KW2135 : 'KW' '2135';\n"); - grammarBuilder.append("KW2136 : 'KW' '2136';\n"); - grammarBuilder.append("KW2137 : 'KW' '2137';\n"); - grammarBuilder.append("KW2138 : 'KW' '2138';\n"); - grammarBuilder.append("KW2139 : 'KW' '2139';\n"); - grammarBuilder.append("KW2140 : 'KW' '2140';\n"); - grammarBuilder.append("KW2141 : 'KW' '2141';\n"); - grammarBuilder.append("KW2142 : 'KW' '2142';\n"); - grammarBuilder.append("KW2143 : 'KW' '2143';\n"); - grammarBuilder.append("KW2144 : 'KW' '2144';\n"); - grammarBuilder.append("KW2145 : 'KW' '2145';\n"); - grammarBuilder.append("KW2146 : 'KW' '2146';\n"); - grammarBuilder.append("KW2147 : 'KW' '2147';\n"); - grammarBuilder.append("KW2148 : 'KW' '2148';\n"); - grammarBuilder.append("KW2149 : 'KW' '2149';\n"); - grammarBuilder.append("KW2150 : 'KW' '2150';\n"); - grammarBuilder.append("KW2151 : 'KW' '2151';\n"); - grammarBuilder.append("KW2152 : 'KW' '2152';\n"); - grammarBuilder.append("KW2153 : 'KW' '2153';\n"); - grammarBuilder.append("KW2154 : 'KW' '2154';\n"); - grammarBuilder.append("KW2155 : 'KW' '2155';\n"); - grammarBuilder.append("KW2156 : 'KW' '2156';\n"); - grammarBuilder.append("KW2157 : 'KW' '2157';\n"); - grammarBuilder.append("KW2158 : 'KW' '2158';\n"); - grammarBuilder.append("KW2159 : 'KW' '2159';\n"); - grammarBuilder.append("KW2160 : 'KW' '2160';\n"); - grammarBuilder.append("KW2161 : 'KW' '2161';\n"); - grammarBuilder.append("KW2162 : 'KW' '2162';\n"); - grammarBuilder.append("KW2163 : 'KW' '2163';\n"); - grammarBuilder.append("KW2164 : 'KW' '2164';\n"); - grammarBuilder.append("KW2165 : 'KW' '2165';\n"); - grammarBuilder.append("KW2166 : 'KW' '2166';\n"); - grammarBuilder.append("KW2167 : 'KW' '2167';\n"); - grammarBuilder.append("KW2168 : 'KW' '2168';\n"); - grammarBuilder.append("KW2169 : 'KW' '2169';\n"); - grammarBuilder.append("KW2170 : 'KW' '2170';\n"); - grammarBuilder.append("KW2171 : 'KW' '2171';\n"); - grammarBuilder.append("KW2172 : 'KW' '2172';\n"); - grammarBuilder.append("KW2173 : 'KW' '2173';\n"); - grammarBuilder.append("KW2174 : 'KW' '2174';\n"); - grammarBuilder.append("KW2175 : 'KW' '2175';\n"); - grammarBuilder.append("KW2176 : 'KW' '2176';\n"); - grammarBuilder.append("KW2177 : 'KW' '2177';\n"); - grammarBuilder.append("KW2178 : 'KW' '2178';\n"); - grammarBuilder.append("KW2179 : 'KW' '2179';\n"); - grammarBuilder.append("KW2180 : 'KW' '2180';\n"); - grammarBuilder.append("KW2181 : 'KW' '2181';\n"); - grammarBuilder.append("KW2182 : 'KW' '2182';\n"); - grammarBuilder.append("KW2183 : 'KW' '2183';\n"); - grammarBuilder.append("KW2184 : 'KW' '2184';\n"); - grammarBuilder.append("KW2185 : 'KW' '2185';\n"); - grammarBuilder.append("KW2186 : 'KW' '2186';\n"); - grammarBuilder.append("KW2187 : 'KW' '2187';\n"); - grammarBuilder.append("KW2188 : 'KW' '2188';\n"); - grammarBuilder.append("KW2189 : 'KW' '2189';\n"); - grammarBuilder.append("KW2190 : 'KW' '2190';\n"); - grammarBuilder.append("KW2191 : 'KW' '2191';\n"); - grammarBuilder.append("KW2192 : 'KW' '2192';\n"); - grammarBuilder.append("KW2193 : 'KW' '2193';\n"); - grammarBuilder.append("KW2194 : 'KW' '2194';\n"); - grammarBuilder.append("KW2195 : 'KW' '2195';\n"); - grammarBuilder.append("KW2196 : 'KW' '2196';\n"); - grammarBuilder.append("KW2197 : 'KW' '2197';\n"); - grammarBuilder.append("KW2198 : 'KW' '2198';\n"); - grammarBuilder.append("KW2199 : 'KW' '2199';\n"); - grammarBuilder.append("KW2200 : 'KW' '2200';\n"); - grammarBuilder.append("KW2201 : 'KW' '2201';\n"); - grammarBuilder.append("KW2202 : 'KW' '2202';\n"); - grammarBuilder.append("KW2203 : 'KW' '2203';\n"); - grammarBuilder.append("KW2204 : 'KW' '2204';\n"); - grammarBuilder.append("KW2205 : 'KW' '2205';\n"); - grammarBuilder.append("KW2206 : 'KW' '2206';\n"); - grammarBuilder.append("KW2207 : 'KW' '2207';\n"); - grammarBuilder.append("KW2208 : 'KW' '2208';\n"); - grammarBuilder.append("KW2209 : 'KW' '2209';\n"); - grammarBuilder.append("KW2210 : 'KW' '2210';\n"); - grammarBuilder.append("KW2211 : 'KW' '2211';\n"); - grammarBuilder.append("KW2212 : 'KW' '2212';\n"); - grammarBuilder.append("KW2213 : 'KW' '2213';\n"); - grammarBuilder.append("KW2214 : 'KW' '2214';\n"); - grammarBuilder.append("KW2215 : 'KW' '2215';\n"); - grammarBuilder.append("KW2216 : 'KW' '2216';\n"); - grammarBuilder.append("KW2217 : 'KW' '2217';\n"); - grammarBuilder.append("KW2218 : 'KW' '2218';\n"); - grammarBuilder.append("KW2219 : 'KW' '2219';\n"); - grammarBuilder.append("KW2220 : 'KW' '2220';\n"); - grammarBuilder.append("KW2221 : 'KW' '2221';\n"); - grammarBuilder.append("KW2222 : 'KW' '2222';\n"); - grammarBuilder.append("KW2223 : 'KW' '2223';\n"); - grammarBuilder.append("KW2224 : 'KW' '2224';\n"); - grammarBuilder.append("KW2225 : 'KW' '2225';\n"); - grammarBuilder.append("KW2226 : 'KW' '2226';\n"); - grammarBuilder.append("KW2227 : 'KW' '2227';\n"); - grammarBuilder.append("KW2228 : 'KW' '2228';\n"); - grammarBuilder.append("KW2229 : 'KW' '2229';\n"); - grammarBuilder.append("KW2230 : 'KW' '2230';\n"); - grammarBuilder.append("KW2231 : 'KW' '2231';\n"); - grammarBuilder.append("KW2232 : 'KW' '2232';\n"); - grammarBuilder.append("KW2233 : 'KW' '2233';\n"); - grammarBuilder.append("KW2234 : 'KW' '2234';\n"); - grammarBuilder.append("KW2235 : 'KW' '2235';\n"); - grammarBuilder.append("KW2236 : 'KW' '2236';\n"); - grammarBuilder.append("KW2237 : 'KW' '2237';\n"); - grammarBuilder.append("KW2238 : 'KW' '2238';\n"); - grammarBuilder.append("KW2239 : 'KW' '2239';\n"); - grammarBuilder.append("KW2240 : 'KW' '2240';\n"); - grammarBuilder.append("KW2241 : 'KW' '2241';\n"); - grammarBuilder.append("KW2242 : 'KW' '2242';\n"); - grammarBuilder.append("KW2243 : 'KW' '2243';\n"); - grammarBuilder.append("KW2244 : 'KW' '2244';\n"); - grammarBuilder.append("KW2245 : 'KW' '2245';\n"); - grammarBuilder.append("KW2246 : 'KW' '2246';\n"); - grammarBuilder.append("KW2247 : 'KW' '2247';\n"); - grammarBuilder.append("KW2248 : 'KW' '2248';\n"); - grammarBuilder.append("KW2249 : 'KW' '2249';\n"); - grammarBuilder.append("KW2250 : 'KW' '2250';\n"); - grammarBuilder.append("KW2251 : 'KW' '2251';\n"); - grammarBuilder.append("KW2252 : 'KW' '2252';\n"); - grammarBuilder.append("KW2253 : 'KW' '2253';\n"); - grammarBuilder.append("KW2254 : 'KW' '2254';\n"); - grammarBuilder.append("KW2255 : 'KW' '2255';\n"); - grammarBuilder.append("KW2256 : 'KW' '2256';\n"); - grammarBuilder.append("KW2257 : 'KW' '2257';\n"); - grammarBuilder.append("KW2258 : 'KW' '2258';\n"); - grammarBuilder.append("KW2259 : 'KW' '2259';\n"); - grammarBuilder.append("KW2260 : 'KW' '2260';\n"); - grammarBuilder.append("KW2261 : 'KW' '2261';\n"); - grammarBuilder.append("KW2262 : 'KW' '2262';\n"); - grammarBuilder.append("KW2263 : 'KW' '2263';\n"); - grammarBuilder.append("KW2264 : 'KW' '2264';\n"); - grammarBuilder.append("KW2265 : 'KW' '2265';\n"); - grammarBuilder.append("KW2266 : 'KW' '2266';\n"); - grammarBuilder.append("KW2267 : 'KW' '2267';\n"); - grammarBuilder.append("KW2268 : 'KW' '2268';\n"); - grammarBuilder.append("KW2269 : 'KW' '2269';\n"); - grammarBuilder.append("KW2270 : 'KW' '2270';\n"); - grammarBuilder.append("KW2271 : 'KW' '2271';\n"); - grammarBuilder.append("KW2272 : 'KW' '2272';\n"); - grammarBuilder.append("KW2273 : 'KW' '2273';\n"); - grammarBuilder.append("KW2274 : 'KW' '2274';\n"); - grammarBuilder.append("KW2275 : 'KW' '2275';\n"); - grammarBuilder.append("KW2276 : 'KW' '2276';\n"); - grammarBuilder.append("KW2277 : 'KW' '2277';\n"); - grammarBuilder.append("KW2278 : 'KW' '2278';\n"); - grammarBuilder.append("KW2279 : 'KW' '2279';\n"); - grammarBuilder.append("KW2280 : 'KW' '2280';\n"); - grammarBuilder.append("KW2281 : 'KW' '2281';\n"); - grammarBuilder.append("KW2282 : 'KW' '2282';\n"); - grammarBuilder.append("KW2283 : 'KW' '2283';\n"); - grammarBuilder.append("KW2284 : 'KW' '2284';\n"); - grammarBuilder.append("KW2285 : 'KW' '2285';\n"); - grammarBuilder.append("KW2286 : 'KW' '2286';\n"); - grammarBuilder.append("KW2287 : 'KW' '2287';\n"); - grammarBuilder.append("KW2288 : 'KW' '2288';\n"); - grammarBuilder.append("KW2289 : 'KW' '2289';\n"); - grammarBuilder.append("KW2290 : 'KW' '2290';\n"); - grammarBuilder.append("KW2291 : 'KW' '2291';\n"); - grammarBuilder.append("KW2292 : 'KW' '2292';\n"); - grammarBuilder.append("KW2293 : 'KW' '2293';\n"); - grammarBuilder.append("KW2294 : 'KW' '2294';\n"); - grammarBuilder.append("KW2295 : 'KW' '2295';\n"); - grammarBuilder.append("KW2296 : 'KW' '2296';\n"); - grammarBuilder.append("KW2297 : 'KW' '2297';\n"); - grammarBuilder.append("KW2298 : 'KW' '2298';\n"); - grammarBuilder.append("KW2299 : 'KW' '2299';\n"); - grammarBuilder.append("KW2300 : 'KW' '2300';\n"); - grammarBuilder.append("KW2301 : 'KW' '2301';\n"); - grammarBuilder.append("KW2302 : 'KW' '2302';\n"); - grammarBuilder.append("KW2303 : 'KW' '2303';\n"); - grammarBuilder.append("KW2304 : 'KW' '2304';\n"); - grammarBuilder.append("KW2305 : 'KW' '2305';\n"); - grammarBuilder.append("KW2306 : 'KW' '2306';\n"); - grammarBuilder.append("KW2307 : 'KW' '2307';\n"); - grammarBuilder.append("KW2308 : 'KW' '2308';\n"); - grammarBuilder.append("KW2309 : 'KW' '2309';\n"); - grammarBuilder.append("KW2310 : 'KW' '2310';\n"); - grammarBuilder.append("KW2311 : 'KW' '2311';\n"); - grammarBuilder.append("KW2312 : 'KW' '2312';\n"); - grammarBuilder.append("KW2313 : 'KW' '2313';\n"); - grammarBuilder.append("KW2314 : 'KW' '2314';\n"); - grammarBuilder.append("KW2315 : 'KW' '2315';\n"); - grammarBuilder.append("KW2316 : 'KW' '2316';\n"); - grammarBuilder.append("KW2317 : 'KW' '2317';\n"); - grammarBuilder.append("KW2318 : 'KW' '2318';\n"); - grammarBuilder.append("KW2319 : 'KW' '2319';\n"); - grammarBuilder.append("KW2320 : 'KW' '2320';\n"); - grammarBuilder.append("KW2321 : 'KW' '2321';\n"); - grammarBuilder.append("KW2322 : 'KW' '2322';\n"); - grammarBuilder.append("KW2323 : 'KW' '2323';\n"); - grammarBuilder.append("KW2324 : 'KW' '2324';\n"); - grammarBuilder.append("KW2325 : 'KW' '2325';\n"); - grammarBuilder.append("KW2326 : 'KW' '2326';\n"); - grammarBuilder.append("KW2327 : 'KW' '2327';\n"); - grammarBuilder.append("KW2328 : 'KW' '2328';\n"); - grammarBuilder.append("KW2329 : 'KW' '2329';\n"); - grammarBuilder.append("KW2330 : 'KW' '2330';\n"); - grammarBuilder.append("KW2331 : 'KW' '2331';\n"); - grammarBuilder.append("KW2332 : 'KW' '2332';\n"); - grammarBuilder.append("KW2333 : 'KW' '2333';\n"); - grammarBuilder.append("KW2334 : 'KW' '2334';\n"); - grammarBuilder.append("KW2335 : 'KW' '2335';\n"); - grammarBuilder.append("KW2336 : 'KW' '2336';\n"); - grammarBuilder.append("KW2337 : 'KW' '2337';\n"); - grammarBuilder.append("KW2338 : 'KW' '2338';\n"); - grammarBuilder.append("KW2339 : 'KW' '2339';\n"); - grammarBuilder.append("KW2340 : 'KW' '2340';\n"); - grammarBuilder.append("KW2341 : 'KW' '2341';\n"); - grammarBuilder.append("KW2342 : 'KW' '2342';\n"); - grammarBuilder.append("KW2343 : 'KW' '2343';\n"); - grammarBuilder.append("KW2344 : 'KW' '2344';\n"); - grammarBuilder.append("KW2345 : 'KW' '2345';\n"); - grammarBuilder.append("KW2346 : 'KW' '2346';\n"); - grammarBuilder.append("KW2347 : 'KW' '2347';\n"); - grammarBuilder.append("KW2348 : 'KW' '2348';\n"); - grammarBuilder.append("KW2349 : 'KW' '2349';\n"); - grammarBuilder.append("KW2350 : 'KW' '2350';\n"); - grammarBuilder.append("KW2351 : 'KW' '2351';\n"); - grammarBuilder.append("KW2352 : 'KW' '2352';\n"); - grammarBuilder.append("KW2353 : 'KW' '2353';\n"); - grammarBuilder.append("KW2354 : 'KW' '2354';\n"); - grammarBuilder.append("KW2355 : 'KW' '2355';\n"); - grammarBuilder.append("KW2356 : 'KW' '2356';\n"); - grammarBuilder.append("KW2357 : 'KW' '2357';\n"); - grammarBuilder.append("KW2358 : 'KW' '2358';\n"); - grammarBuilder.append("KW2359 : 'KW' '2359';\n"); - grammarBuilder.append("KW2360 : 'KW' '2360';\n"); - grammarBuilder.append("KW2361 : 'KW' '2361';\n"); - grammarBuilder.append("KW2362 : 'KW' '2362';\n"); - grammarBuilder.append("KW2363 : 'KW' '2363';\n"); - grammarBuilder.append("KW2364 : 'KW' '2364';\n"); - grammarBuilder.append("KW2365 : 'KW' '2365';\n"); - grammarBuilder.append("KW2366 : 'KW' '2366';\n"); - grammarBuilder.append("KW2367 : 'KW' '2367';\n"); - grammarBuilder.append("KW2368 : 'KW' '2368';\n"); - grammarBuilder.append("KW2369 : 'KW' '2369';\n"); - grammarBuilder.append("KW2370 : 'KW' '2370';\n"); - grammarBuilder.append("KW2371 : 'KW' '2371';\n"); - grammarBuilder.append("KW2372 : 'KW' '2372';\n"); - grammarBuilder.append("KW2373 : 'KW' '2373';\n"); - grammarBuilder.append("KW2374 : 'KW' '2374';\n"); - grammarBuilder.append("KW2375 : 'KW' '2375';\n"); - grammarBuilder.append("KW2376 : 'KW' '2376';\n"); - grammarBuilder.append("KW2377 : 'KW' '2377';\n"); - grammarBuilder.append("KW2378 : 'KW' '2378';\n"); - grammarBuilder.append("KW2379 : 'KW' '2379';\n"); - grammarBuilder.append("KW2380 : 'KW' '2380';\n"); - grammarBuilder.append("KW2381 : 'KW' '2381';\n"); - grammarBuilder.append("KW2382 : 'KW' '2382';\n"); - grammarBuilder.append("KW2383 : 'KW' '2383';\n"); - grammarBuilder.append("KW2384 : 'KW' '2384';\n"); - grammarBuilder.append("KW2385 : 'KW' '2385';\n"); - grammarBuilder.append("KW2386 : 'KW' '2386';\n"); - grammarBuilder.append("KW2387 : 'KW' '2387';\n"); - grammarBuilder.append("KW2388 : 'KW' '2388';\n"); - grammarBuilder.append("KW2389 : 'KW' '2389';\n"); - grammarBuilder.append("KW2390 : 'KW' '2390';\n"); - grammarBuilder.append("KW2391 : 'KW' '2391';\n"); - grammarBuilder.append("KW2392 : 'KW' '2392';\n"); - grammarBuilder.append("KW2393 : 'KW' '2393';\n"); - grammarBuilder.append("KW2394 : 'KW' '2394';\n"); - grammarBuilder.append("KW2395 : 'KW' '2395';\n"); - grammarBuilder.append("KW2396 : 'KW' '2396';\n"); - grammarBuilder.append("KW2397 : 'KW' '2397';\n"); - grammarBuilder.append("KW2398 : 'KW' '2398';\n"); - grammarBuilder.append("KW2399 : 'KW' '2399';\n"); - grammarBuilder.append("KW2400 : 'KW' '2400';\n"); - grammarBuilder.append("KW2401 : 'KW' '2401';\n"); - grammarBuilder.append("KW2402 : 'KW' '2402';\n"); - grammarBuilder.append("KW2403 : 'KW' '2403';\n"); - grammarBuilder.append("KW2404 : 'KW' '2404';\n"); - grammarBuilder.append("KW2405 : 'KW' '2405';\n"); - grammarBuilder.append("KW2406 : 'KW' '2406';\n"); - grammarBuilder.append("KW2407 : 'KW' '2407';\n"); - grammarBuilder.append("KW2408 : 'KW' '2408';\n"); - grammarBuilder.append("KW2409 : 'KW' '2409';\n"); - grammarBuilder.append("KW2410 : 'KW' '2410';\n"); - grammarBuilder.append("KW2411 : 'KW' '2411';\n"); - grammarBuilder.append("KW2412 : 'KW' '2412';\n"); - grammarBuilder.append("KW2413 : 'KW' '2413';\n"); - grammarBuilder.append("KW2414 : 'KW' '2414';\n"); - grammarBuilder.append("KW2415 : 'KW' '2415';\n"); - grammarBuilder.append("KW2416 : 'KW' '2416';\n"); - grammarBuilder.append("KW2417 : 'KW' '2417';\n"); - grammarBuilder.append("KW2418 : 'KW' '2418';\n"); - grammarBuilder.append("KW2419 : 'KW' '2419';\n"); - grammarBuilder.append("KW2420 : 'KW' '2420';\n"); - grammarBuilder.append("KW2421 : 'KW' '2421';\n"); - grammarBuilder.append("KW2422 : 'KW' '2422';\n"); - grammarBuilder.append("KW2423 : 'KW' '2423';\n"); - grammarBuilder.append("KW2424 : 'KW' '2424';\n"); - grammarBuilder.append("KW2425 : 'KW' '2425';\n"); - grammarBuilder.append("KW2426 : 'KW' '2426';\n"); - grammarBuilder.append("KW2427 : 'KW' '2427';\n"); - grammarBuilder.append("KW2428 : 'KW' '2428';\n"); - grammarBuilder.append("KW2429 : 'KW' '2429';\n"); - grammarBuilder.append("KW2430 : 'KW' '2430';\n"); - grammarBuilder.append("KW2431 : 'KW' '2431';\n"); - grammarBuilder.append("KW2432 : 'KW' '2432';\n"); - grammarBuilder.append("KW2433 : 'KW' '2433';\n"); - grammarBuilder.append("KW2434 : 'KW' '2434';\n"); - grammarBuilder.append("KW2435 : 'KW' '2435';\n"); - grammarBuilder.append("KW2436 : 'KW' '2436';\n"); - grammarBuilder.append("KW2437 : 'KW' '2437';\n"); - grammarBuilder.append("KW2438 : 'KW' '2438';\n"); - grammarBuilder.append("KW2439 : 'KW' '2439';\n"); - grammarBuilder.append("KW2440 : 'KW' '2440';\n"); - grammarBuilder.append("KW2441 : 'KW' '2441';\n"); - grammarBuilder.append("KW2442 : 'KW' '2442';\n"); - grammarBuilder.append("KW2443 : 'KW' '2443';\n"); - grammarBuilder.append("KW2444 : 'KW' '2444';\n"); - grammarBuilder.append("KW2445 : 'KW' '2445';\n"); - grammarBuilder.append("KW2446 : 'KW' '2446';\n"); - grammarBuilder.append("KW2447 : 'KW' '2447';\n"); - grammarBuilder.append("KW2448 : 'KW' '2448';\n"); - grammarBuilder.append("KW2449 : 'KW' '2449';\n"); - grammarBuilder.append("KW2450 : 'KW' '2450';\n"); - grammarBuilder.append("KW2451 : 'KW' '2451';\n"); - grammarBuilder.append("KW2452 : 'KW' '2452';\n"); - grammarBuilder.append("KW2453 : 'KW' '2453';\n"); - grammarBuilder.append("KW2454 : 'KW' '2454';\n"); - grammarBuilder.append("KW2455 : 'KW' '2455';\n"); - grammarBuilder.append("KW2456 : 'KW' '2456';\n"); - grammarBuilder.append("KW2457 : 'KW' '2457';\n"); - grammarBuilder.append("KW2458 : 'KW' '2458';\n"); - grammarBuilder.append("KW2459 : 'KW' '2459';\n"); - grammarBuilder.append("KW2460 : 'KW' '2460';\n"); - grammarBuilder.append("KW2461 : 'KW' '2461';\n"); - grammarBuilder.append("KW2462 : 'KW' '2462';\n"); - grammarBuilder.append("KW2463 : 'KW' '2463';\n"); - grammarBuilder.append("KW2464 : 'KW' '2464';\n"); - grammarBuilder.append("KW2465 : 'KW' '2465';\n"); - grammarBuilder.append("KW2466 : 'KW' '2466';\n"); - grammarBuilder.append("KW2467 : 'KW' '2467';\n"); - grammarBuilder.append("KW2468 : 'KW' '2468';\n"); - grammarBuilder.append("KW2469 : 'KW' '2469';\n"); - grammarBuilder.append("KW2470 : 'KW' '2470';\n"); - grammarBuilder.append("KW2471 : 'KW' '2471';\n"); - grammarBuilder.append("KW2472 : 'KW' '2472';\n"); - grammarBuilder.append("KW2473 : 'KW' '2473';\n"); - grammarBuilder.append("KW2474 : 'KW' '2474';\n"); - grammarBuilder.append("KW2475 : 'KW' '2475';\n"); - grammarBuilder.append("KW2476 : 'KW' '2476';\n"); - grammarBuilder.append("KW2477 : 'KW' '2477';\n"); - grammarBuilder.append("KW2478 : 'KW' '2478';\n"); - grammarBuilder.append("KW2479 : 'KW' '2479';\n"); - grammarBuilder.append("KW2480 : 'KW' '2480';\n"); - grammarBuilder.append("KW2481 : 'KW' '2481';\n"); - grammarBuilder.append("KW2482 : 'KW' '2482';\n"); - grammarBuilder.append("KW2483 : 'KW' '2483';\n"); - grammarBuilder.append("KW2484 : 'KW' '2484';\n"); - grammarBuilder.append("KW2485 : 'KW' '2485';\n"); - grammarBuilder.append("KW2486 : 'KW' '2486';\n"); - grammarBuilder.append("KW2487 : 'KW' '2487';\n"); - grammarBuilder.append("KW2488 : 'KW' '2488';\n"); - grammarBuilder.append("KW2489 : 'KW' '2489';\n"); - grammarBuilder.append("KW2490 : 'KW' '2490';\n"); - grammarBuilder.append("KW2491 : 'KW' '2491';\n"); - grammarBuilder.append("KW2492 : 'KW' '2492';\n"); - grammarBuilder.append("KW2493 : 'KW' '2493';\n"); - grammarBuilder.append("KW2494 : 'KW' '2494';\n"); - grammarBuilder.append("KW2495 : 'KW' '2495';\n"); - grammarBuilder.append("KW2496 : 'KW' '2496';\n"); - grammarBuilder.append("KW2497 : 'KW' '2497';\n"); - grammarBuilder.append("KW2498 : 'KW' '2498';\n"); - grammarBuilder.append("KW2499 : 'KW' '2499';\n"); - grammarBuilder.append("KW2500 : 'KW' '2500';\n"); - grammarBuilder.append("KW2501 : 'KW' '2501';\n"); - grammarBuilder.append("KW2502 : 'KW' '2502';\n"); - grammarBuilder.append("KW2503 : 'KW' '2503';\n"); - grammarBuilder.append("KW2504 : 'KW' '2504';\n"); - grammarBuilder.append("KW2505 : 'KW' '2505';\n"); - grammarBuilder.append("KW2506 : 'KW' '2506';\n"); - grammarBuilder.append("KW2507 : 'KW' '2507';\n"); - grammarBuilder.append("KW2508 : 'KW' '2508';\n"); - grammarBuilder.append("KW2509 : 'KW' '2509';\n"); - grammarBuilder.append("KW2510 : 'KW' '2510';\n"); - grammarBuilder.append("KW2511 : 'KW' '2511';\n"); - grammarBuilder.append("KW2512 : 'KW' '2512';\n"); - grammarBuilder.append("KW2513 : 'KW' '2513';\n"); - grammarBuilder.append("KW2514 : 'KW' '2514';\n"); - grammarBuilder.append("KW2515 : 'KW' '2515';\n"); - grammarBuilder.append("KW2516 : 'KW' '2516';\n"); - grammarBuilder.append("KW2517 : 'KW' '2517';\n"); - grammarBuilder.append("KW2518 : 'KW' '2518';\n"); - grammarBuilder.append("KW2519 : 'KW' '2519';\n"); - grammarBuilder.append("KW2520 : 'KW' '2520';\n"); - grammarBuilder.append("KW2521 : 'KW' '2521';\n"); - grammarBuilder.append("KW2522 : 'KW' '2522';\n"); - grammarBuilder.append("KW2523 : 'KW' '2523';\n"); - grammarBuilder.append("KW2524 : 'KW' '2524';\n"); - grammarBuilder.append("KW2525 : 'KW' '2525';\n"); - grammarBuilder.append("KW2526 : 'KW' '2526';\n"); - grammarBuilder.append("KW2527 : 'KW' '2527';\n"); - grammarBuilder.append("KW2528 : 'KW' '2528';\n"); - grammarBuilder.append("KW2529 : 'KW' '2529';\n"); - grammarBuilder.append("KW2530 : 'KW' '2530';\n"); - grammarBuilder.append("KW2531 : 'KW' '2531';\n"); - grammarBuilder.append("KW2532 : 'KW' '2532';\n"); - grammarBuilder.append("KW2533 : 'KW' '2533';\n"); - grammarBuilder.append("KW2534 : 'KW' '2534';\n"); - grammarBuilder.append("KW2535 : 'KW' '2535';\n"); - grammarBuilder.append("KW2536 : 'KW' '2536';\n"); - grammarBuilder.append("KW2537 : 'KW' '2537';\n"); - grammarBuilder.append("KW2538 : 'KW' '2538';\n"); - grammarBuilder.append("KW2539 : 'KW' '2539';\n"); - grammarBuilder.append("KW2540 : 'KW' '2540';\n"); - grammarBuilder.append("KW2541 : 'KW' '2541';\n"); - grammarBuilder.append("KW2542 : 'KW' '2542';\n"); - grammarBuilder.append("KW2543 : 'KW' '2543';\n"); - grammarBuilder.append("KW2544 : 'KW' '2544';\n"); - grammarBuilder.append("KW2545 : 'KW' '2545';\n"); - grammarBuilder.append("KW2546 : 'KW' '2546';\n"); - grammarBuilder.append("KW2547 : 'KW' '2547';\n"); - grammarBuilder.append("KW2548 : 'KW' '2548';\n"); - grammarBuilder.append("KW2549 : 'KW' '2549';\n"); - grammarBuilder.append("KW2550 : 'KW' '2550';\n"); - grammarBuilder.append("KW2551 : 'KW' '2551';\n"); - grammarBuilder.append("KW2552 : 'KW' '2552';\n"); - grammarBuilder.append("KW2553 : 'KW' '2553';\n"); - grammarBuilder.append("KW2554 : 'KW' '2554';\n"); - grammarBuilder.append("KW2555 : 'KW' '2555';\n"); - grammarBuilder.append("KW2556 : 'KW' '2556';\n"); - grammarBuilder.append("KW2557 : 'KW' '2557';\n"); - grammarBuilder.append("KW2558 : 'KW' '2558';\n"); - grammarBuilder.append("KW2559 : 'KW' '2559';\n"); - grammarBuilder.append("KW2560 : 'KW' '2560';\n"); - grammarBuilder.append("KW2561 : 'KW' '2561';\n"); - grammarBuilder.append("KW2562 : 'KW' '2562';\n"); - grammarBuilder.append("KW2563 : 'KW' '2563';\n"); - grammarBuilder.append("KW2564 : 'KW' '2564';\n"); - grammarBuilder.append("KW2565 : 'KW' '2565';\n"); - grammarBuilder.append("KW2566 : 'KW' '2566';\n"); - grammarBuilder.append("KW2567 : 'KW' '2567';\n"); - grammarBuilder.append("KW2568 : 'KW' '2568';\n"); - grammarBuilder.append("KW2569 : 'KW' '2569';\n"); - grammarBuilder.append("KW2570 : 'KW' '2570';\n"); - grammarBuilder.append("KW2571 : 'KW' '2571';\n"); - grammarBuilder.append("KW2572 : 'KW' '2572';\n"); - grammarBuilder.append("KW2573 : 'KW' '2573';\n"); - grammarBuilder.append("KW2574 : 'KW' '2574';\n"); - grammarBuilder.append("KW2575 : 'KW' '2575';\n"); - grammarBuilder.append("KW2576 : 'KW' '2576';\n"); - grammarBuilder.append("KW2577 : 'KW' '2577';\n"); - grammarBuilder.append("KW2578 : 'KW' '2578';\n"); - grammarBuilder.append("KW2579 : 'KW' '2579';\n"); - grammarBuilder.append("KW2580 : 'KW' '2580';\n"); - grammarBuilder.append("KW2581 : 'KW' '2581';\n"); - grammarBuilder.append("KW2582 : 'KW' '2582';\n"); - grammarBuilder.append("KW2583 : 'KW' '2583';\n"); - grammarBuilder.append("KW2584 : 'KW' '2584';\n"); - grammarBuilder.append("KW2585 : 'KW' '2585';\n"); - grammarBuilder.append("KW2586 : 'KW' '2586';\n"); - grammarBuilder.append("KW2587 : 'KW' '2587';\n"); - grammarBuilder.append("KW2588 : 'KW' '2588';\n"); - grammarBuilder.append("KW2589 : 'KW' '2589';\n"); - grammarBuilder.append("KW2590 : 'KW' '2590';\n"); - grammarBuilder.append("KW2591 : 'KW' '2591';\n"); - grammarBuilder.append("KW2592 : 'KW' '2592';\n"); - grammarBuilder.append("KW2593 : 'KW' '2593';\n"); - grammarBuilder.append("KW2594 : 'KW' '2594';\n"); - grammarBuilder.append("KW2595 : 'KW' '2595';\n"); - grammarBuilder.append("KW2596 : 'KW' '2596';\n"); - grammarBuilder.append("KW2597 : 'KW' '2597';\n"); - grammarBuilder.append("KW2598 : 'KW' '2598';\n"); - grammarBuilder.append("KW2599 : 'KW' '2599';\n"); - grammarBuilder.append("KW2600 : 'KW' '2600';\n"); - grammarBuilder.append("KW2601 : 'KW' '2601';\n"); - grammarBuilder.append("KW2602 : 'KW' '2602';\n"); - grammarBuilder.append("KW2603 : 'KW' '2603';\n"); - grammarBuilder.append("KW2604 : 'KW' '2604';\n"); - grammarBuilder.append("KW2605 : 'KW' '2605';\n"); - grammarBuilder.append("KW2606 : 'KW' '2606';\n"); - grammarBuilder.append("KW2607 : 'KW' '2607';\n"); - grammarBuilder.append("KW2608 : 'KW' '2608';\n"); - grammarBuilder.append("KW2609 : 'KW' '2609';\n"); - grammarBuilder.append("KW2610 : 'KW' '2610';\n"); - grammarBuilder.append("KW2611 : 'KW' '2611';\n"); - grammarBuilder.append("KW2612 : 'KW' '2612';\n"); - grammarBuilder.append("KW2613 : 'KW' '2613';\n"); - grammarBuilder.append("KW2614 : 'KW' '2614';\n"); - grammarBuilder.append("KW2615 : 'KW' '2615';\n"); - grammarBuilder.append("KW2616 : 'KW' '2616';\n"); - grammarBuilder.append("KW2617 : 'KW' '2617';\n"); - grammarBuilder.append("KW2618 : 'KW' '2618';\n"); - grammarBuilder.append("KW2619 : 'KW' '2619';\n"); - grammarBuilder.append("KW2620 : 'KW' '2620';\n"); - grammarBuilder.append("KW2621 : 'KW' '2621';\n"); - grammarBuilder.append("KW2622 : 'KW' '2622';\n"); - grammarBuilder.append("KW2623 : 'KW' '2623';\n"); - grammarBuilder.append("KW2624 : 'KW' '2624';\n"); - grammarBuilder.append("KW2625 : 'KW' '2625';\n"); - grammarBuilder.append("KW2626 : 'KW' '2626';\n"); - grammarBuilder.append("KW2627 : 'KW' '2627';\n"); - grammarBuilder.append("KW2628 : 'KW' '2628';\n"); - grammarBuilder.append("KW2629 : 'KW' '2629';\n"); - grammarBuilder.append("KW2630 : 'KW' '2630';\n"); - grammarBuilder.append("KW2631 : 'KW' '2631';\n"); - grammarBuilder.append("KW2632 : 'KW' '2632';\n"); - grammarBuilder.append("KW2633 : 'KW' '2633';\n"); - grammarBuilder.append("KW2634 : 'KW' '2634';\n"); - grammarBuilder.append("KW2635 : 'KW' '2635';\n"); - grammarBuilder.append("KW2636 : 'KW' '2636';\n"); - grammarBuilder.append("KW2637 : 'KW' '2637';\n"); - grammarBuilder.append("KW2638 : 'KW' '2638';\n"); - grammarBuilder.append("KW2639 : 'KW' '2639';\n"); - grammarBuilder.append("KW2640 : 'KW' '2640';\n"); - grammarBuilder.append("KW2641 : 'KW' '2641';\n"); - grammarBuilder.append("KW2642 : 'KW' '2642';\n"); - grammarBuilder.append("KW2643 : 'KW' '2643';\n"); - grammarBuilder.append("KW2644 : 'KW' '2644';\n"); - grammarBuilder.append("KW2645 : 'KW' '2645';\n"); - grammarBuilder.append("KW2646 : 'KW' '2646';\n"); - grammarBuilder.append("KW2647 : 'KW' '2647';\n"); - grammarBuilder.append("KW2648 : 'KW' '2648';\n"); - grammarBuilder.append("KW2649 : 'KW' '2649';\n"); - grammarBuilder.append("KW2650 : 'KW' '2650';\n"); - grammarBuilder.append("KW2651 : 'KW' '2651';\n"); - grammarBuilder.append("KW2652 : 'KW' '2652';\n"); - grammarBuilder.append("KW2653 : 'KW' '2653';\n"); - grammarBuilder.append("KW2654 : 'KW' '2654';\n"); - grammarBuilder.append("KW2655 : 'KW' '2655';\n"); - grammarBuilder.append("KW2656 : 'KW' '2656';\n"); - grammarBuilder.append("KW2657 : 'KW' '2657';\n"); - grammarBuilder.append("KW2658 : 'KW' '2658';\n"); - grammarBuilder.append("KW2659 : 'KW' '2659';\n"); - grammarBuilder.append("KW2660 : 'KW' '2660';\n"); - grammarBuilder.append("KW2661 : 'KW' '2661';\n"); - grammarBuilder.append("KW2662 : 'KW' '2662';\n"); - grammarBuilder.append("KW2663 : 'KW' '2663';\n"); - grammarBuilder.append("KW2664 : 'KW' '2664';\n"); - grammarBuilder.append("KW2665 : 'KW' '2665';\n"); - grammarBuilder.append("KW2666 : 'KW' '2666';\n"); - grammarBuilder.append("KW2667 : 'KW' '2667';\n"); - grammarBuilder.append("KW2668 : 'KW' '2668';\n"); - grammarBuilder.append("KW2669 : 'KW' '2669';\n"); - grammarBuilder.append("KW2670 : 'KW' '2670';\n"); - grammarBuilder.append("KW2671 : 'KW' '2671';\n"); - grammarBuilder.append("KW2672 : 'KW' '2672';\n"); - grammarBuilder.append("KW2673 : 'KW' '2673';\n"); - grammarBuilder.append("KW2674 : 'KW' '2674';\n"); - grammarBuilder.append("KW2675 : 'KW' '2675';\n"); - grammarBuilder.append("KW2676 : 'KW' '2676';\n"); - grammarBuilder.append("KW2677 : 'KW' '2677';\n"); - grammarBuilder.append("KW2678 : 'KW' '2678';\n"); - grammarBuilder.append("KW2679 : 'KW' '2679';\n"); - grammarBuilder.append("KW2680 : 'KW' '2680';\n"); - grammarBuilder.append("KW2681 : 'KW' '2681';\n"); - grammarBuilder.append("KW2682 : 'KW' '2682';\n"); - grammarBuilder.append("KW2683 : 'KW' '2683';\n"); - grammarBuilder.append("KW2684 : 'KW' '2684';\n"); - grammarBuilder.append("KW2685 : 'KW' '2685';\n"); - grammarBuilder.append("KW2686 : 'KW' '2686';\n"); - grammarBuilder.append("KW2687 : 'KW' '2687';\n"); - grammarBuilder.append("KW2688 : 'KW' '2688';\n"); - grammarBuilder.append("KW2689 : 'KW' '2689';\n"); - grammarBuilder.append("KW2690 : 'KW' '2690';\n"); - grammarBuilder.append("KW2691 : 'KW' '2691';\n"); - grammarBuilder.append("KW2692 : 'KW' '2692';\n"); - grammarBuilder.append("KW2693 : 'KW' '2693';\n"); - grammarBuilder.append("KW2694 : 'KW' '2694';\n"); - grammarBuilder.append("KW2695 : 'KW' '2695';\n"); - grammarBuilder.append("KW2696 : 'KW' '2696';\n"); - grammarBuilder.append("KW2697 : 'KW' '2697';\n"); - grammarBuilder.append("KW2698 : 'KW' '2698';\n"); - grammarBuilder.append("KW2699 : 'KW' '2699';\n"); - grammarBuilder.append("KW2700 : 'KW' '2700';\n"); - grammarBuilder.append("KW2701 : 'KW' '2701';\n"); - grammarBuilder.append("KW2702 : 'KW' '2702';\n"); - grammarBuilder.append("KW2703 : 'KW' '2703';\n"); - grammarBuilder.append("KW2704 : 'KW' '2704';\n"); - grammarBuilder.append("KW2705 : 'KW' '2705';\n"); - grammarBuilder.append("KW2706 : 'KW' '2706';\n"); - grammarBuilder.append("KW2707 : 'KW' '2707';\n"); - grammarBuilder.append("KW2708 : 'KW' '2708';\n"); - grammarBuilder.append("KW2709 : 'KW' '2709';\n"); - grammarBuilder.append("KW2710 : 'KW' '2710';\n"); - grammarBuilder.append("KW2711 : 'KW' '2711';\n"); - grammarBuilder.append("KW2712 : 'KW' '2712';\n"); - grammarBuilder.append("KW2713 : 'KW' '2713';\n"); - grammarBuilder.append("KW2714 : 'KW' '2714';\n"); - grammarBuilder.append("KW2715 : 'KW' '2715';\n"); - grammarBuilder.append("KW2716 : 'KW' '2716';\n"); - grammarBuilder.append("KW2717 : 'KW' '2717';\n"); - grammarBuilder.append("KW2718 : 'KW' '2718';\n"); - grammarBuilder.append("KW2719 : 'KW' '2719';\n"); - grammarBuilder.append("KW2720 : 'KW' '2720';\n"); - grammarBuilder.append("KW2721 : 'KW' '2721';\n"); - grammarBuilder.append("KW2722 : 'KW' '2722';\n"); - grammarBuilder.append("KW2723 : 'KW' '2723';\n"); - grammarBuilder.append("KW2724 : 'KW' '2724';\n"); - grammarBuilder.append("KW2725 : 'KW' '2725';\n"); - grammarBuilder.append("KW2726 : 'KW' '2726';\n"); - grammarBuilder.append("KW2727 : 'KW' '2727';\n"); - grammarBuilder.append("KW2728 : 'KW' '2728';\n"); - grammarBuilder.append("KW2729 : 'KW' '2729';\n"); - grammarBuilder.append("KW2730 : 'KW' '2730';\n"); - grammarBuilder.append("KW2731 : 'KW' '2731';\n"); - grammarBuilder.append("KW2732 : 'KW' '2732';\n"); - grammarBuilder.append("KW2733 : 'KW' '2733';\n"); - grammarBuilder.append("KW2734 : 'KW' '2734';\n"); - grammarBuilder.append("KW2735 : 'KW' '2735';\n"); - grammarBuilder.append("KW2736 : 'KW' '2736';\n"); - grammarBuilder.append("KW2737 : 'KW' '2737';\n"); - grammarBuilder.append("KW2738 : 'KW' '2738';\n"); - grammarBuilder.append("KW2739 : 'KW' '2739';\n"); - grammarBuilder.append("KW2740 : 'KW' '2740';\n"); - grammarBuilder.append("KW2741 : 'KW' '2741';\n"); - grammarBuilder.append("KW2742 : 'KW' '2742';\n"); - grammarBuilder.append("KW2743 : 'KW' '2743';\n"); - grammarBuilder.append("KW2744 : 'KW' '2744';\n"); - grammarBuilder.append("KW2745 : 'KW' '2745';\n"); - grammarBuilder.append("KW2746 : 'KW' '2746';\n"); - grammarBuilder.append("KW2747 : 'KW' '2747';\n"); - grammarBuilder.append("KW2748 : 'KW' '2748';\n"); - grammarBuilder.append("KW2749 : 'KW' '2749';\n"); - grammarBuilder.append("KW2750 : 'KW' '2750';\n"); - grammarBuilder.append("KW2751 : 'KW' '2751';\n"); - grammarBuilder.append("KW2752 : 'KW' '2752';\n"); - grammarBuilder.append("KW2753 : 'KW' '2753';\n"); - grammarBuilder.append("KW2754 : 'KW' '2754';\n"); - grammarBuilder.append("KW2755 : 'KW' '2755';\n"); - grammarBuilder.append("KW2756 : 'KW' '2756';\n"); - grammarBuilder.append("KW2757 : 'KW' '2757';\n"); - grammarBuilder.append("KW2758 : 'KW' '2758';\n"); - grammarBuilder.append("KW2759 : 'KW' '2759';\n"); - grammarBuilder.append("KW2760 : 'KW' '2760';\n"); - grammarBuilder.append("KW2761 : 'KW' '2761';\n"); - grammarBuilder.append("KW2762 : 'KW' '2762';\n"); - grammarBuilder.append("KW2763 : 'KW' '2763';\n"); - grammarBuilder.append("KW2764 : 'KW' '2764';\n"); - grammarBuilder.append("KW2765 : 'KW' '2765';\n"); - grammarBuilder.append("KW2766 : 'KW' '2766';\n"); - grammarBuilder.append("KW2767 : 'KW' '2767';\n"); - grammarBuilder.append("KW2768 : 'KW' '2768';\n"); - grammarBuilder.append("KW2769 : 'KW' '2769';\n"); - grammarBuilder.append("KW2770 : 'KW' '2770';\n"); - grammarBuilder.append("KW2771 : 'KW' '2771';\n"); - grammarBuilder.append("KW2772 : 'KW' '2772';\n"); - grammarBuilder.append("KW2773 : 'KW' '2773';\n"); - grammarBuilder.append("KW2774 : 'KW' '2774';\n"); - grammarBuilder.append("KW2775 : 'KW' '2775';\n"); - grammarBuilder.append("KW2776 : 'KW' '2776';\n"); - grammarBuilder.append("KW2777 : 'KW' '2777';\n"); - grammarBuilder.append("KW2778 : 'KW' '2778';\n"); - grammarBuilder.append("KW2779 : 'KW' '2779';\n"); - grammarBuilder.append("KW2780 : 'KW' '2780';\n"); - grammarBuilder.append("KW2781 : 'KW' '2781';\n"); - grammarBuilder.append("KW2782 : 'KW' '2782';\n"); - grammarBuilder.append("KW2783 : 'KW' '2783';\n"); - grammarBuilder.append("KW2784 : 'KW' '2784';\n"); - grammarBuilder.append("KW2785 : 'KW' '2785';\n"); - grammarBuilder.append("KW2786 : 'KW' '2786';\n"); - grammarBuilder.append("KW2787 : 'KW' '2787';\n"); - grammarBuilder.append("KW2788 : 'KW' '2788';\n"); - grammarBuilder.append("KW2789 : 'KW' '2789';\n"); - grammarBuilder.append("KW2790 : 'KW' '2790';\n"); - grammarBuilder.append("KW2791 : 'KW' '2791';\n"); - grammarBuilder.append("KW2792 : 'KW' '2792';\n"); - grammarBuilder.append("KW2793 : 'KW' '2793';\n"); - grammarBuilder.append("KW2794 : 'KW' '2794';\n"); - grammarBuilder.append("KW2795 : 'KW' '2795';\n"); - grammarBuilder.append("KW2796 : 'KW' '2796';\n"); - grammarBuilder.append("KW2797 : 'KW' '2797';\n"); - grammarBuilder.append("KW2798 : 'KW' '2798';\n"); - grammarBuilder.append("KW2799 : 'KW' '2799';\n"); - grammarBuilder.append("KW2800 : 'KW' '2800';\n"); - grammarBuilder.append("KW2801 : 'KW' '2801';\n"); - grammarBuilder.append("KW2802 : 'KW' '2802';\n"); - grammarBuilder.append("KW2803 : 'KW' '2803';\n"); - grammarBuilder.append("KW2804 : 'KW' '2804';\n"); - grammarBuilder.append("KW2805 : 'KW' '2805';\n"); - grammarBuilder.append("KW2806 : 'KW' '2806';\n"); - grammarBuilder.append("KW2807 : 'KW' '2807';\n"); - grammarBuilder.append("KW2808 : 'KW' '2808';\n"); - grammarBuilder.append("KW2809 : 'KW' '2809';\n"); - grammarBuilder.append("KW2810 : 'KW' '2810';\n"); - grammarBuilder.append("KW2811 : 'KW' '2811';\n"); - grammarBuilder.append("KW2812 : 'KW' '2812';\n"); - grammarBuilder.append("KW2813 : 'KW' '2813';\n"); - grammarBuilder.append("KW2814 : 'KW' '2814';\n"); - grammarBuilder.append("KW2815 : 'KW' '2815';\n"); - grammarBuilder.append("KW2816 : 'KW' '2816';\n"); - grammarBuilder.append("KW2817 : 'KW' '2817';\n"); - grammarBuilder.append("KW2818 : 'KW' '2818';\n"); - grammarBuilder.append("KW2819 : 'KW' '2819';\n"); - grammarBuilder.append("KW2820 : 'KW' '2820';\n"); - grammarBuilder.append("KW2821 : 'KW' '2821';\n"); - grammarBuilder.append("KW2822 : 'KW' '2822';\n"); - grammarBuilder.append("KW2823 : 'KW' '2823';\n"); - grammarBuilder.append("KW2824 : 'KW' '2824';\n"); - grammarBuilder.append("KW2825 : 'KW' '2825';\n"); - grammarBuilder.append("KW2826 : 'KW' '2826';\n"); - grammarBuilder.append("KW2827 : 'KW' '2827';\n"); - grammarBuilder.append("KW2828 : 'KW' '2828';\n"); - grammarBuilder.append("KW2829 : 'KW' '2829';\n"); - grammarBuilder.append("KW2830 : 'KW' '2830';\n"); - grammarBuilder.append("KW2831 : 'KW' '2831';\n"); - grammarBuilder.append("KW2832 : 'KW' '2832';\n"); - grammarBuilder.append("KW2833 : 'KW' '2833';\n"); - grammarBuilder.append("KW2834 : 'KW' '2834';\n"); - grammarBuilder.append("KW2835 : 'KW' '2835';\n"); - grammarBuilder.append("KW2836 : 'KW' '2836';\n"); - grammarBuilder.append("KW2837 : 'KW' '2837';\n"); - grammarBuilder.append("KW2838 : 'KW' '2838';\n"); - grammarBuilder.append("KW2839 : 'KW' '2839';\n"); - grammarBuilder.append("KW2840 : 'KW' '2840';\n"); - grammarBuilder.append("KW2841 : 'KW' '2841';\n"); - grammarBuilder.append("KW2842 : 'KW' '2842';\n"); - grammarBuilder.append("KW2843 : 'KW' '2843';\n"); - grammarBuilder.append("KW2844 : 'KW' '2844';\n"); - grammarBuilder.append("KW2845 : 'KW' '2845';\n"); - grammarBuilder.append("KW2846 : 'KW' '2846';\n"); - grammarBuilder.append("KW2847 : 'KW' '2847';\n"); - grammarBuilder.append("KW2848 : 'KW' '2848';\n"); - grammarBuilder.append("KW2849 : 'KW' '2849';\n"); - grammarBuilder.append("KW2850 : 'KW' '2850';\n"); - grammarBuilder.append("KW2851 : 'KW' '2851';\n"); - grammarBuilder.append("KW2852 : 'KW' '2852';\n"); - grammarBuilder.append("KW2853 : 'KW' '2853';\n"); - grammarBuilder.append("KW2854 : 'KW' '2854';\n"); - grammarBuilder.append("KW2855 : 'KW' '2855';\n"); - grammarBuilder.append("KW2856 : 'KW' '2856';\n"); - grammarBuilder.append("KW2857 : 'KW' '2857';\n"); - grammarBuilder.append("KW2858 : 'KW' '2858';\n"); - grammarBuilder.append("KW2859 : 'KW' '2859';\n"); - grammarBuilder.append("KW2860 : 'KW' '2860';\n"); - grammarBuilder.append("KW2861 : 'KW' '2861';\n"); - grammarBuilder.append("KW2862 : 'KW' '2862';\n"); - grammarBuilder.append("KW2863 : 'KW' '2863';\n"); - grammarBuilder.append("KW2864 : 'KW' '2864';\n"); - grammarBuilder.append("KW2865 : 'KW' '2865';\n"); - grammarBuilder.append("KW2866 : 'KW' '2866';\n"); - grammarBuilder.append("KW2867 : 'KW' '2867';\n"); - grammarBuilder.append("KW2868 : 'KW' '2868';\n"); - grammarBuilder.append("KW2869 : 'KW' '2869';\n"); - grammarBuilder.append("KW2870 : 'KW' '2870';\n"); - grammarBuilder.append("KW2871 : 'KW' '2871';\n"); - grammarBuilder.append("KW2872 : 'KW' '2872';\n"); - grammarBuilder.append("KW2873 : 'KW' '2873';\n"); - grammarBuilder.append("KW2874 : 'KW' '2874';\n"); - grammarBuilder.append("KW2875 : 'KW' '2875';\n"); - grammarBuilder.append("KW2876 : 'KW' '2876';\n"); - grammarBuilder.append("KW2877 : 'KW' '2877';\n"); - grammarBuilder.append("KW2878 : 'KW' '2878';\n"); - grammarBuilder.append("KW2879 : 'KW' '2879';\n"); - grammarBuilder.append("KW2880 : 'KW' '2880';\n"); - grammarBuilder.append("KW2881 : 'KW' '2881';\n"); - grammarBuilder.append("KW2882 : 'KW' '2882';\n"); - grammarBuilder.append("KW2883 : 'KW' '2883';\n"); - grammarBuilder.append("KW2884 : 'KW' '2884';\n"); - grammarBuilder.append("KW2885 : 'KW' '2885';\n"); - grammarBuilder.append("KW2886 : 'KW' '2886';\n"); - grammarBuilder.append("KW2887 : 'KW' '2887';\n"); - grammarBuilder.append("KW2888 : 'KW' '2888';\n"); - grammarBuilder.append("KW2889 : 'KW' '2889';\n"); - grammarBuilder.append("KW2890 : 'KW' '2890';\n"); - grammarBuilder.append("KW2891 : 'KW' '2891';\n"); - grammarBuilder.append("KW2892 : 'KW' '2892';\n"); - grammarBuilder.append("KW2893 : 'KW' '2893';\n"); - grammarBuilder.append("KW2894 : 'KW' '2894';\n"); - grammarBuilder.append("KW2895 : 'KW' '2895';\n"); - grammarBuilder.append("KW2896 : 'KW' '2896';\n"); - grammarBuilder.append("KW2897 : 'KW' '2897';\n"); - grammarBuilder.append("KW2898 : 'KW' '2898';\n"); - grammarBuilder.append("KW2899 : 'KW' '2899';\n"); - grammarBuilder.append("KW2900 : 'KW' '2900';\n"); - grammarBuilder.append("KW2901 : 'KW' '2901';\n"); - grammarBuilder.append("KW2902 : 'KW' '2902';\n"); - grammarBuilder.append("KW2903 : 'KW' '2903';\n"); - grammarBuilder.append("KW2904 : 'KW' '2904';\n"); - grammarBuilder.append("KW2905 : 'KW' '2905';\n"); - grammarBuilder.append("KW2906 : 'KW' '2906';\n"); - grammarBuilder.append("KW2907 : 'KW' '2907';\n"); - grammarBuilder.append("KW2908 : 'KW' '2908';\n"); - grammarBuilder.append("KW2909 : 'KW' '2909';\n"); - grammarBuilder.append("KW2910 : 'KW' '2910';\n"); - grammarBuilder.append("KW2911 : 'KW' '2911';\n"); - grammarBuilder.append("KW2912 : 'KW' '2912';\n"); - grammarBuilder.append("KW2913 : 'KW' '2913';\n"); - grammarBuilder.append("KW2914 : 'KW' '2914';\n"); - grammarBuilder.append("KW2915 : 'KW' '2915';\n"); - grammarBuilder.append("KW2916 : 'KW' '2916';\n"); - grammarBuilder.append("KW2917 : 'KW' '2917';\n"); - grammarBuilder.append("KW2918 : 'KW' '2918';\n"); - grammarBuilder.append("KW2919 : 'KW' '2919';\n"); - grammarBuilder.append("KW2920 : 'KW' '2920';\n"); - grammarBuilder.append("KW2921 : 'KW' '2921';\n"); - grammarBuilder.append("KW2922 : 'KW' '2922';\n"); - grammarBuilder.append("KW2923 : 'KW' '2923';\n"); - grammarBuilder.append("KW2924 : 'KW' '2924';\n"); - grammarBuilder.append("KW2925 : 'KW' '2925';\n"); - grammarBuilder.append("KW2926 : 'KW' '2926';\n"); - grammarBuilder.append("KW2927 : 'KW' '2927';\n"); - grammarBuilder.append("KW2928 : 'KW' '2928';\n"); - grammarBuilder.append("KW2929 : 'KW' '2929';\n"); - grammarBuilder.append("KW2930 : 'KW' '2930';\n"); - grammarBuilder.append("KW2931 : 'KW' '2931';\n"); - grammarBuilder.append("KW2932 : 'KW' '2932';\n"); - grammarBuilder.append("KW2933 : 'KW' '2933';\n"); - grammarBuilder.append("KW2934 : 'KW' '2934';\n"); - grammarBuilder.append("KW2935 : 'KW' '2935';\n"); - grammarBuilder.append("KW2936 : 'KW' '2936';\n"); - grammarBuilder.append("KW2937 : 'KW' '2937';\n"); - grammarBuilder.append("KW2938 : 'KW' '2938';\n"); - grammarBuilder.append("KW2939 : 'KW' '2939';\n"); - grammarBuilder.append("KW2940 : 'KW' '2940';\n"); - grammarBuilder.append("KW2941 : 'KW' '2941';\n"); - grammarBuilder.append("KW2942 : 'KW' '2942';\n"); - grammarBuilder.append("KW2943 : 'KW' '2943';\n"); - grammarBuilder.append("KW2944 : 'KW' '2944';\n"); - grammarBuilder.append("KW2945 : 'KW' '2945';\n"); - grammarBuilder.append("KW2946 : 'KW' '2946';\n"); - grammarBuilder.append("KW2947 : 'KW' '2947';\n"); - grammarBuilder.append("KW2948 : 'KW' '2948';\n"); - grammarBuilder.append("KW2949 : 'KW' '2949';\n"); - grammarBuilder.append("KW2950 : 'KW' '2950';\n"); - grammarBuilder.append("KW2951 : 'KW' '2951';\n"); - grammarBuilder.append("KW2952 : 'KW' '2952';\n"); - grammarBuilder.append("KW2953 : 'KW' '2953';\n"); - grammarBuilder.append("KW2954 : 'KW' '2954';\n"); - grammarBuilder.append("KW2955 : 'KW' '2955';\n"); - grammarBuilder.append("KW2956 : 'KW' '2956';\n"); - grammarBuilder.append("KW2957 : 'KW' '2957';\n"); - grammarBuilder.append("KW2958 : 'KW' '2958';\n"); - grammarBuilder.append("KW2959 : 'KW' '2959';\n"); - grammarBuilder.append("KW2960 : 'KW' '2960';\n"); - grammarBuilder.append("KW2961 : 'KW' '2961';\n"); - grammarBuilder.append("KW2962 : 'KW' '2962';\n"); - grammarBuilder.append("KW2963 : 'KW' '2963';\n"); - grammarBuilder.append("KW2964 : 'KW' '2964';\n"); - grammarBuilder.append("KW2965 : 'KW' '2965';\n"); - grammarBuilder.append("KW2966 : 'KW' '2966';\n"); - grammarBuilder.append("KW2967 : 'KW' '2967';\n"); - grammarBuilder.append("KW2968 : 'KW' '2968';\n"); - grammarBuilder.append("KW2969 : 'KW' '2969';\n"); - grammarBuilder.append("KW2970 : 'KW' '2970';\n"); - grammarBuilder.append("KW2971 : 'KW' '2971';\n"); - grammarBuilder.append("KW2972 : 'KW' '2972';\n"); - grammarBuilder.append("KW2973 : 'KW' '2973';\n"); - grammarBuilder.append("KW2974 : 'KW' '2974';\n"); - grammarBuilder.append("KW2975 : 'KW' '2975';\n"); - grammarBuilder.append("KW2976 : 'KW' '2976';\n"); - grammarBuilder.append("KW2977 : 'KW' '2977';\n"); - grammarBuilder.append("KW2978 : 'KW' '2978';\n"); - grammarBuilder.append("KW2979 : 'KW' '2979';\n"); - grammarBuilder.append("KW2980 : 'KW' '2980';\n"); - grammarBuilder.append("KW2981 : 'KW' '2981';\n"); - grammarBuilder.append("KW2982 : 'KW' '2982';\n"); - grammarBuilder.append("KW2983 : 'KW' '2983';\n"); - grammarBuilder.append("KW2984 : 'KW' '2984';\n"); - grammarBuilder.append("KW2985 : 'KW' '2985';\n"); - grammarBuilder.append("KW2986 : 'KW' '2986';\n"); - grammarBuilder.append("KW2987 : 'KW' '2987';\n"); - grammarBuilder.append("KW2988 : 'KW' '2988';\n"); - grammarBuilder.append("KW2989 : 'KW' '2989';\n"); - grammarBuilder.append("KW2990 : 'KW' '2990';\n"); - grammarBuilder.append("KW2991 : 'KW' '2991';\n"); - grammarBuilder.append("KW2992 : 'KW' '2992';\n"); - grammarBuilder.append("KW2993 : 'KW' '2993';\n"); - grammarBuilder.append("KW2994 : 'KW' '2994';\n"); - grammarBuilder.append("KW2995 : 'KW' '2995';\n"); - grammarBuilder.append("KW2996 : 'KW' '2996';\n"); - grammarBuilder.append("KW2997 : 'KW' '2997';\n"); - grammarBuilder.append("KW2998 : 'KW' '2998';\n"); - grammarBuilder.append("KW2999 : 'KW' '2999';\n"); - grammarBuilder.append("KW3000 : 'KW' '3000';\n"); - grammarBuilder.append("KW3001 : 'KW' '3001';\n"); - grammarBuilder.append("KW3002 : 'KW' '3002';\n"); - grammarBuilder.append("KW3003 : 'KW' '3003';\n"); - grammarBuilder.append("KW3004 : 'KW' '3004';\n"); - grammarBuilder.append("KW3005 : 'KW' '3005';\n"); - grammarBuilder.append("KW3006 : 'KW' '3006';\n"); - grammarBuilder.append("KW3007 : 'KW' '3007';\n"); - grammarBuilder.append("KW3008 : 'KW' '3008';\n"); - grammarBuilder.append("KW3009 : 'KW' '3009';\n"); - grammarBuilder.append("KW3010 : 'KW' '3010';\n"); - grammarBuilder.append("KW3011 : 'KW' '3011';\n"); - grammarBuilder.append("KW3012 : 'KW' '3012';\n"); - grammarBuilder.append("KW3013 : 'KW' '3013';\n"); - grammarBuilder.append("KW3014 : 'KW' '3014';\n"); - grammarBuilder.append("KW3015 : 'KW' '3015';\n"); - grammarBuilder.append("KW3016 : 'KW' '3016';\n"); - grammarBuilder.append("KW3017 : 'KW' '3017';\n"); - grammarBuilder.append("KW3018 : 'KW' '3018';\n"); - grammarBuilder.append("KW3019 : 'KW' '3019';\n"); - grammarBuilder.append("KW3020 : 'KW' '3020';\n"); - grammarBuilder.append("KW3021 : 'KW' '3021';\n"); - grammarBuilder.append("KW3022 : 'KW' '3022';\n"); - grammarBuilder.append("KW3023 : 'KW' '3023';\n"); - grammarBuilder.append("KW3024 : 'KW' '3024';\n"); - grammarBuilder.append("KW3025 : 'KW' '3025';\n"); - grammarBuilder.append("KW3026 : 'KW' '3026';\n"); - grammarBuilder.append("KW3027 : 'KW' '3027';\n"); - grammarBuilder.append("KW3028 : 'KW' '3028';\n"); - grammarBuilder.append("KW3029 : 'KW' '3029';\n"); - grammarBuilder.append("KW3030 : 'KW' '3030';\n"); - grammarBuilder.append("KW3031 : 'KW' '3031';\n"); - grammarBuilder.append("KW3032 : 'KW' '3032';\n"); - grammarBuilder.append("KW3033 : 'KW' '3033';\n"); - grammarBuilder.append("KW3034 : 'KW' '3034';\n"); - grammarBuilder.append("KW3035 : 'KW' '3035';\n"); - grammarBuilder.append("KW3036 : 'KW' '3036';\n"); - grammarBuilder.append("KW3037 : 'KW' '3037';\n"); - grammarBuilder.append("KW3038 : 'KW' '3038';\n"); - grammarBuilder.append("KW3039 : 'KW' '3039';\n"); - grammarBuilder.append("KW3040 : 'KW' '3040';\n"); - grammarBuilder.append("KW3041 : 'KW' '3041';\n"); - grammarBuilder.append("KW3042 : 'KW' '3042';\n"); - grammarBuilder.append("KW3043 : 'KW' '3043';\n"); - grammarBuilder.append("KW3044 : 'KW' '3044';\n"); - grammarBuilder.append("KW3045 : 'KW' '3045';\n"); - grammarBuilder.append("KW3046 : 'KW' '3046';\n"); - grammarBuilder.append("KW3047 : 'KW' '3047';\n"); - grammarBuilder.append("KW3048 : 'KW' '3048';\n"); - grammarBuilder.append("KW3049 : 'KW' '3049';\n"); - grammarBuilder.append("KW3050 : 'KW' '3050';\n"); - grammarBuilder.append("KW3051 : 'KW' '3051';\n"); - grammarBuilder.append("KW3052 : 'KW' '3052';\n"); - grammarBuilder.append("KW3053 : 'KW' '3053';\n"); - grammarBuilder.append("KW3054 : 'KW' '3054';\n"); - grammarBuilder.append("KW3055 : 'KW' '3055';\n"); - grammarBuilder.append("KW3056 : 'KW' '3056';\n"); - grammarBuilder.append("KW3057 : 'KW' '3057';\n"); - grammarBuilder.append("KW3058 : 'KW' '3058';\n"); - grammarBuilder.append("KW3059 : 'KW' '3059';\n"); - grammarBuilder.append("KW3060 : 'KW' '3060';\n"); - grammarBuilder.append("KW3061 : 'KW' '3061';\n"); - grammarBuilder.append("KW3062 : 'KW' '3062';\n"); - grammarBuilder.append("KW3063 : 'KW' '3063';\n"); - grammarBuilder.append("KW3064 : 'KW' '3064';\n"); - grammarBuilder.append("KW3065 : 'KW' '3065';\n"); - grammarBuilder.append("KW3066 : 'KW' '3066';\n"); - grammarBuilder.append("KW3067 : 'KW' '3067';\n"); - grammarBuilder.append("KW3068 : 'KW' '3068';\n"); - grammarBuilder.append("KW3069 : 'KW' '3069';\n"); - grammarBuilder.append("KW3070 : 'KW' '3070';\n"); - grammarBuilder.append("KW3071 : 'KW' '3071';\n"); - grammarBuilder.append("KW3072 : 'KW' '3072';\n"); - grammarBuilder.append("KW3073 : 'KW' '3073';\n"); - grammarBuilder.append("KW3074 : 'KW' '3074';\n"); - grammarBuilder.append("KW3075 : 'KW' '3075';\n"); - grammarBuilder.append("KW3076 : 'KW' '3076';\n"); - grammarBuilder.append("KW3077 : 'KW' '3077';\n"); - grammarBuilder.append("KW3078 : 'KW' '3078';\n"); - grammarBuilder.append("KW3079 : 'KW' '3079';\n"); - grammarBuilder.append("KW3080 : 'KW' '3080';\n"); - grammarBuilder.append("KW3081 : 'KW' '3081';\n"); - grammarBuilder.append("KW3082 : 'KW' '3082';\n"); - grammarBuilder.append("KW3083 : 'KW' '3083';\n"); - grammarBuilder.append("KW3084 : 'KW' '3084';\n"); - grammarBuilder.append("KW3085 : 'KW' '3085';\n"); - grammarBuilder.append("KW3086 : 'KW' '3086';\n"); - grammarBuilder.append("KW3087 : 'KW' '3087';\n"); - grammarBuilder.append("KW3088 : 'KW' '3088';\n"); - grammarBuilder.append("KW3089 : 'KW' '3089';\n"); - grammarBuilder.append("KW3090 : 'KW' '3090';\n"); - grammarBuilder.append("KW3091 : 'KW' '3091';\n"); - grammarBuilder.append("KW3092 : 'KW' '3092';\n"); - grammarBuilder.append("KW3093 : 'KW' '3093';\n"); - grammarBuilder.append("KW3094 : 'KW' '3094';\n"); - grammarBuilder.append("KW3095 : 'KW' '3095';\n"); - grammarBuilder.append("KW3096 : 'KW' '3096';\n"); - grammarBuilder.append("KW3097 : 'KW' '3097';\n"); - grammarBuilder.append("KW3098 : 'KW' '3098';\n"); - grammarBuilder.append("KW3099 : 'KW' '3099';\n"); - grammarBuilder.append("KW3100 : 'KW' '3100';\n"); - grammarBuilder.append("KW3101 : 'KW' '3101';\n"); - grammarBuilder.append("KW3102 : 'KW' '3102';\n"); - grammarBuilder.append("KW3103 : 'KW' '3103';\n"); - grammarBuilder.append("KW3104 : 'KW' '3104';\n"); - grammarBuilder.append("KW3105 : 'KW' '3105';\n"); - grammarBuilder.append("KW3106 : 'KW' '3106';\n"); - grammarBuilder.append("KW3107 : 'KW' '3107';\n"); - grammarBuilder.append("KW3108 : 'KW' '3108';\n"); - grammarBuilder.append("KW3109 : 'KW' '3109';\n"); - grammarBuilder.append("KW3110 : 'KW' '3110';\n"); - grammarBuilder.append("KW3111 : 'KW' '3111';\n"); - grammarBuilder.append("KW3112 : 'KW' '3112';\n"); - grammarBuilder.append("KW3113 : 'KW' '3113';\n"); - grammarBuilder.append("KW3114 : 'KW' '3114';\n"); - grammarBuilder.append("KW3115 : 'KW' '3115';\n"); - grammarBuilder.append("KW3116 : 'KW' '3116';\n"); - grammarBuilder.append("KW3117 : 'KW' '3117';\n"); - grammarBuilder.append("KW3118 : 'KW' '3118';\n"); - grammarBuilder.append("KW3119 : 'KW' '3119';\n"); - grammarBuilder.append("KW3120 : 'KW' '3120';\n"); - grammarBuilder.append("KW3121 : 'KW' '3121';\n"); - grammarBuilder.append("KW3122 : 'KW' '3122';\n"); - grammarBuilder.append("KW3123 : 'KW' '3123';\n"); - grammarBuilder.append("KW3124 : 'KW' '3124';\n"); - grammarBuilder.append("KW3125 : 'KW' '3125';\n"); - grammarBuilder.append("KW3126 : 'KW' '3126';\n"); - grammarBuilder.append("KW3127 : 'KW' '3127';\n"); - grammarBuilder.append("KW3128 : 'KW' '3128';\n"); - grammarBuilder.append("KW3129 : 'KW' '3129';\n"); - grammarBuilder.append("KW3130 : 'KW' '3130';\n"); - grammarBuilder.append("KW3131 : 'KW' '3131';\n"); - grammarBuilder.append("KW3132 : 'KW' '3132';\n"); - grammarBuilder.append("KW3133 : 'KW' '3133';\n"); - grammarBuilder.append("KW3134 : 'KW' '3134';\n"); - grammarBuilder.append("KW3135 : 'KW' '3135';\n"); - grammarBuilder.append("KW3136 : 'KW' '3136';\n"); - grammarBuilder.append("KW3137 : 'KW' '3137';\n"); - grammarBuilder.append("KW3138 : 'KW' '3138';\n"); - grammarBuilder.append("KW3139 : 'KW' '3139';\n"); - grammarBuilder.append("KW3140 : 'KW' '3140';\n"); - grammarBuilder.append("KW3141 : 'KW' '3141';\n"); - grammarBuilder.append("KW3142 : 'KW' '3142';\n"); - grammarBuilder.append("KW3143 : 'KW' '3143';\n"); - grammarBuilder.append("KW3144 : 'KW' '3144';\n"); - grammarBuilder.append("KW3145 : 'KW' '3145';\n"); - grammarBuilder.append("KW3146 : 'KW' '3146';\n"); - grammarBuilder.append("KW3147 : 'KW' '3147';\n"); - grammarBuilder.append("KW3148 : 'KW' '3148';\n"); - grammarBuilder.append("KW3149 : 'KW' '3149';\n"); - grammarBuilder.append("KW3150 : 'KW' '3150';\n"); - grammarBuilder.append("KW3151 : 'KW' '3151';\n"); - grammarBuilder.append("KW3152 : 'KW' '3152';\n"); - grammarBuilder.append("KW3153 : 'KW' '3153';\n"); - grammarBuilder.append("KW3154 : 'KW' '3154';\n"); - grammarBuilder.append("KW3155 : 'KW' '3155';\n"); - grammarBuilder.append("KW3156 : 'KW' '3156';\n"); - grammarBuilder.append("KW3157 : 'KW' '3157';\n"); - grammarBuilder.append("KW3158 : 'KW' '3158';\n"); - grammarBuilder.append("KW3159 : 'KW' '3159';\n"); - grammarBuilder.append("KW3160 : 'KW' '3160';\n"); - grammarBuilder.append("KW3161 : 'KW' '3161';\n"); - grammarBuilder.append("KW3162 : 'KW' '3162';\n"); - grammarBuilder.append("KW3163 : 'KW' '3163';\n"); - grammarBuilder.append("KW3164 : 'KW' '3164';\n"); - grammarBuilder.append("KW3165 : 'KW' '3165';\n"); - grammarBuilder.append("KW3166 : 'KW' '3166';\n"); - grammarBuilder.append("KW3167 : 'KW' '3167';\n"); - grammarBuilder.append("KW3168 : 'KW' '3168';\n"); - grammarBuilder.append("KW3169 : 'KW' '3169';\n"); - grammarBuilder.append("KW3170 : 'KW' '3170';\n"); - grammarBuilder.append("KW3171 : 'KW' '3171';\n"); - grammarBuilder.append("KW3172 : 'KW' '3172';\n"); - grammarBuilder.append("KW3173 : 'KW' '3173';\n"); - grammarBuilder.append("KW3174 : 'KW' '3174';\n"); - grammarBuilder.append("KW3175 : 'KW' '3175';\n"); - grammarBuilder.append("KW3176 : 'KW' '3176';\n"); - grammarBuilder.append("KW3177 : 'KW' '3177';\n"); - grammarBuilder.append("KW3178 : 'KW' '3178';\n"); - grammarBuilder.append("KW3179 : 'KW' '3179';\n"); - grammarBuilder.append("KW3180 : 'KW' '3180';\n"); - grammarBuilder.append("KW3181 : 'KW' '3181';\n"); - grammarBuilder.append("KW3182 : 'KW' '3182';\n"); - grammarBuilder.append("KW3183 : 'KW' '3183';\n"); - grammarBuilder.append("KW3184 : 'KW' '3184';\n"); - grammarBuilder.append("KW3185 : 'KW' '3185';\n"); - grammarBuilder.append("KW3186 : 'KW' '3186';\n"); - grammarBuilder.append("KW3187 : 'KW' '3187';\n"); - grammarBuilder.append("KW3188 : 'KW' '3188';\n"); - grammarBuilder.append("KW3189 : 'KW' '3189';\n"); - grammarBuilder.append("KW3190 : 'KW' '3190';\n"); - grammarBuilder.append("KW3191 : 'KW' '3191';\n"); - grammarBuilder.append("KW3192 : 'KW' '3192';\n"); - grammarBuilder.append("KW3193 : 'KW' '3193';\n"); - grammarBuilder.append("KW3194 : 'KW' '3194';\n"); - grammarBuilder.append("KW3195 : 'KW' '3195';\n"); - grammarBuilder.append("KW3196 : 'KW' '3196';\n"); - grammarBuilder.append("KW3197 : 'KW' '3197';\n"); - grammarBuilder.append("KW3198 : 'KW' '3198';\n"); - grammarBuilder.append("KW3199 : 'KW' '3199';\n"); - grammarBuilder.append("KW3200 : 'KW' '3200';\n"); - grammarBuilder.append("KW3201 : 'KW' '3201';\n"); - grammarBuilder.append("KW3202 : 'KW' '3202';\n"); - grammarBuilder.append("KW3203 : 'KW' '3203';\n"); - grammarBuilder.append("KW3204 : 'KW' '3204';\n"); - grammarBuilder.append("KW3205 : 'KW' '3205';\n"); - grammarBuilder.append("KW3206 : 'KW' '3206';\n"); - grammarBuilder.append("KW3207 : 'KW' '3207';\n"); - grammarBuilder.append("KW3208 : 'KW' '3208';\n"); - grammarBuilder.append("KW3209 : 'KW' '3209';\n"); - grammarBuilder.append("KW3210 : 'KW' '3210';\n"); - grammarBuilder.append("KW3211 : 'KW' '3211';\n"); - grammarBuilder.append("KW3212 : 'KW' '3212';\n"); - grammarBuilder.append("KW3213 : 'KW' '3213';\n"); - grammarBuilder.append("KW3214 : 'KW' '3214';\n"); - grammarBuilder.append("KW3215 : 'KW' '3215';\n"); - grammarBuilder.append("KW3216 : 'KW' '3216';\n"); - grammarBuilder.append("KW3217 : 'KW' '3217';\n"); - grammarBuilder.append("KW3218 : 'KW' '3218';\n"); - grammarBuilder.append("KW3219 : 'KW' '3219';\n"); - grammarBuilder.append("KW3220 : 'KW' '3220';\n"); - grammarBuilder.append("KW3221 : 'KW' '3221';\n"); - grammarBuilder.append("KW3222 : 'KW' '3222';\n"); - grammarBuilder.append("KW3223 : 'KW' '3223';\n"); - grammarBuilder.append("KW3224 : 'KW' '3224';\n"); - grammarBuilder.append("KW3225 : 'KW' '3225';\n"); - grammarBuilder.append("KW3226 : 'KW' '3226';\n"); - grammarBuilder.append("KW3227 : 'KW' '3227';\n"); - grammarBuilder.append("KW3228 : 'KW' '3228';\n"); - grammarBuilder.append("KW3229 : 'KW' '3229';\n"); - grammarBuilder.append("KW3230 : 'KW' '3230';\n"); - grammarBuilder.append("KW3231 : 'KW' '3231';\n"); - grammarBuilder.append("KW3232 : 'KW' '3232';\n"); - grammarBuilder.append("KW3233 : 'KW' '3233';\n"); - grammarBuilder.append("KW3234 : 'KW' '3234';\n"); - grammarBuilder.append("KW3235 : 'KW' '3235';\n"); - grammarBuilder.append("KW3236 : 'KW' '3236';\n"); - grammarBuilder.append("KW3237 : 'KW' '3237';\n"); - grammarBuilder.append("KW3238 : 'KW' '3238';\n"); - grammarBuilder.append("KW3239 : 'KW' '3239';\n"); - grammarBuilder.append("KW3240 : 'KW' '3240';\n"); - grammarBuilder.append("KW3241 : 'KW' '3241';\n"); - grammarBuilder.append("KW3242 : 'KW' '3242';\n"); - grammarBuilder.append("KW3243 : 'KW' '3243';\n"); - grammarBuilder.append("KW3244 : 'KW' '3244';\n"); - grammarBuilder.append("KW3245 : 'KW' '3245';\n"); - grammarBuilder.append("KW3246 : 'KW' '3246';\n"); - grammarBuilder.append("KW3247 : 'KW' '3247';\n"); - grammarBuilder.append("KW3248 : 'KW' '3248';\n"); - grammarBuilder.append("KW3249 : 'KW' '3249';\n"); - grammarBuilder.append("KW3250 : 'KW' '3250';\n"); - grammarBuilder.append("KW3251 : 'KW' '3251';\n"); - grammarBuilder.append("KW3252 : 'KW' '3252';\n"); - grammarBuilder.append("KW3253 : 'KW' '3253';\n"); - grammarBuilder.append("KW3254 : 'KW' '3254';\n"); - grammarBuilder.append("KW3255 : 'KW' '3255';\n"); - grammarBuilder.append("KW3256 : 'KW' '3256';\n"); - grammarBuilder.append("KW3257 : 'KW' '3257';\n"); - grammarBuilder.append("KW3258 : 'KW' '3258';\n"); - grammarBuilder.append("KW3259 : 'KW' '3259';\n"); - grammarBuilder.append("KW3260 : 'KW' '3260';\n"); - grammarBuilder.append("KW3261 : 'KW' '3261';\n"); - grammarBuilder.append("KW3262 : 'KW' '3262';\n"); - grammarBuilder.append("KW3263 : 'KW' '3263';\n"); - grammarBuilder.append("KW3264 : 'KW' '3264';\n"); - grammarBuilder.append("KW3265 : 'KW' '3265';\n"); - grammarBuilder.append("KW3266 : 'KW' '3266';\n"); - grammarBuilder.append("KW3267 : 'KW' '3267';\n"); - grammarBuilder.append("KW3268 : 'KW' '3268';\n"); - grammarBuilder.append("KW3269 : 'KW' '3269';\n"); - grammarBuilder.append("KW3270 : 'KW' '3270';\n"); - grammarBuilder.append("KW3271 : 'KW' '3271';\n"); - grammarBuilder.append("KW3272 : 'KW' '3272';\n"); - grammarBuilder.append("KW3273 : 'KW' '3273';\n"); - grammarBuilder.append("KW3274 : 'KW' '3274';\n"); - grammarBuilder.append("KW3275 : 'KW' '3275';\n"); - grammarBuilder.append("KW3276 : 'KW' '3276';\n"); - grammarBuilder.append("KW3277 : 'KW' '3277';\n"); - grammarBuilder.append("KW3278 : 'KW' '3278';\n"); - grammarBuilder.append("KW3279 : 'KW' '3279';\n"); - grammarBuilder.append("KW3280 : 'KW' '3280';\n"); - grammarBuilder.append("KW3281 : 'KW' '3281';\n"); - grammarBuilder.append("KW3282 : 'KW' '3282';\n"); - grammarBuilder.append("KW3283 : 'KW' '3283';\n"); - grammarBuilder.append("KW3284 : 'KW' '3284';\n"); - grammarBuilder.append("KW3285 : 'KW' '3285';\n"); - grammarBuilder.append("KW3286 : 'KW' '3286';\n"); - grammarBuilder.append("KW3287 : 'KW' '3287';\n"); - grammarBuilder.append("KW3288 : 'KW' '3288';\n"); - grammarBuilder.append("KW3289 : 'KW' '3289';\n"); - grammarBuilder.append("KW3290 : 'KW' '3290';\n"); - grammarBuilder.append("KW3291 : 'KW' '3291';\n"); - grammarBuilder.append("KW3292 : 'KW' '3292';\n"); - grammarBuilder.append("KW3293 : 'KW' '3293';\n"); - grammarBuilder.append("KW3294 : 'KW' '3294';\n"); - grammarBuilder.append("KW3295 : 'KW' '3295';\n"); - grammarBuilder.append("KW3296 : 'KW' '3296';\n"); - grammarBuilder.append("KW3297 : 'KW' '3297';\n"); - grammarBuilder.append("KW3298 : 'KW' '3298';\n"); - grammarBuilder.append("KW3299 : 'KW' '3299';\n"); - grammarBuilder.append("KW3300 : 'KW' '3300';\n"); - grammarBuilder.append("KW3301 : 'KW' '3301';\n"); - grammarBuilder.append("KW3302 : 'KW' '3302';\n"); - grammarBuilder.append("KW3303 : 'KW' '3303';\n"); - grammarBuilder.append("KW3304 : 'KW' '3304';\n"); - grammarBuilder.append("KW3305 : 'KW' '3305';\n"); - grammarBuilder.append("KW3306 : 'KW' '3306';\n"); - grammarBuilder.append("KW3307 : 'KW' '3307';\n"); - grammarBuilder.append("KW3308 : 'KW' '3308';\n"); - grammarBuilder.append("KW3309 : 'KW' '3309';\n"); - grammarBuilder.append("KW3310 : 'KW' '3310';\n"); - grammarBuilder.append("KW3311 : 'KW' '3311';\n"); - grammarBuilder.append("KW3312 : 'KW' '3312';\n"); - grammarBuilder.append("KW3313 : 'KW' '3313';\n"); - grammarBuilder.append("KW3314 : 'KW' '3314';\n"); - grammarBuilder.append("KW3315 : 'KW' '3315';\n"); - grammarBuilder.append("KW3316 : 'KW' '3316';\n"); - grammarBuilder.append("KW3317 : 'KW' '3317';\n"); - grammarBuilder.append("KW3318 : 'KW' '3318';\n"); - grammarBuilder.append("KW3319 : 'KW' '3319';\n"); - grammarBuilder.append("KW3320 : 'KW' '3320';\n"); - grammarBuilder.append("KW3321 : 'KW' '3321';\n"); - grammarBuilder.append("KW3322 : 'KW' '3322';\n"); - grammarBuilder.append("KW3323 : 'KW' '3323';\n"); - grammarBuilder.append("KW3324 : 'KW' '3324';\n"); - grammarBuilder.append("KW3325 : 'KW' '3325';\n"); - grammarBuilder.append("KW3326 : 'KW' '3326';\n"); - grammarBuilder.append("KW3327 : 'KW' '3327';\n"); - grammarBuilder.append("KW3328 : 'KW' '3328';\n"); - grammarBuilder.append("KW3329 : 'KW' '3329';\n"); - grammarBuilder.append("KW3330 : 'KW' '3330';\n"); - grammarBuilder.append("KW3331 : 'KW' '3331';\n"); - grammarBuilder.append("KW3332 : 'KW' '3332';\n"); - grammarBuilder.append("KW3333 : 'KW' '3333';\n"); - grammarBuilder.append("KW3334 : 'KW' '3334';\n"); - grammarBuilder.append("KW3335 : 'KW' '3335';\n"); - grammarBuilder.append("KW3336 : 'KW' '3336';\n"); - grammarBuilder.append("KW3337 : 'KW' '3337';\n"); - grammarBuilder.append("KW3338 : 'KW' '3338';\n"); - grammarBuilder.append("KW3339 : 'KW' '3339';\n"); - grammarBuilder.append("KW3340 : 'KW' '3340';\n"); - grammarBuilder.append("KW3341 : 'KW' '3341';\n"); - grammarBuilder.append("KW3342 : 'KW' '3342';\n"); - grammarBuilder.append("KW3343 : 'KW' '3343';\n"); - grammarBuilder.append("KW3344 : 'KW' '3344';\n"); - grammarBuilder.append("KW3345 : 'KW' '3345';\n"); - grammarBuilder.append("KW3346 : 'KW' '3346';\n"); - grammarBuilder.append("KW3347 : 'KW' '3347';\n"); - grammarBuilder.append("KW3348 : 'KW' '3348';\n"); - grammarBuilder.append("KW3349 : 'KW' '3349';\n"); - grammarBuilder.append("KW3350 : 'KW' '3350';\n"); - grammarBuilder.append("KW3351 : 'KW' '3351';\n"); - grammarBuilder.append("KW3352 : 'KW' '3352';\n"); - grammarBuilder.append("KW3353 : 'KW' '3353';\n"); - grammarBuilder.append("KW3354 : 'KW' '3354';\n"); - grammarBuilder.append("KW3355 : 'KW' '3355';\n"); - grammarBuilder.append("KW3356 : 'KW' '3356';\n"); - grammarBuilder.append("KW3357 : 'KW' '3357';\n"); - grammarBuilder.append("KW3358 : 'KW' '3358';\n"); - grammarBuilder.append("KW3359 : 'KW' '3359';\n"); - grammarBuilder.append("KW3360 : 'KW' '3360';\n"); - grammarBuilder.append("KW3361 : 'KW' '3361';\n"); - grammarBuilder.append("KW3362 : 'KW' '3362';\n"); - grammarBuilder.append("KW3363 : 'KW' '3363';\n"); - grammarBuilder.append("KW3364 : 'KW' '3364';\n"); - grammarBuilder.append("KW3365 : 'KW' '3365';\n"); - grammarBuilder.append("KW3366 : 'KW' '3366';\n"); - grammarBuilder.append("KW3367 : 'KW' '3367';\n"); - grammarBuilder.append("KW3368 : 'KW' '3368';\n"); - grammarBuilder.append("KW3369 : 'KW' '3369';\n"); - grammarBuilder.append("KW3370 : 'KW' '3370';\n"); - grammarBuilder.append("KW3371 : 'KW' '3371';\n"); - grammarBuilder.append("KW3372 : 'KW' '3372';\n"); - grammarBuilder.append("KW3373 : 'KW' '3373';\n"); - grammarBuilder.append("KW3374 : 'KW' '3374';\n"); - grammarBuilder.append("KW3375 : 'KW' '3375';\n"); - grammarBuilder.append("KW3376 : 'KW' '3376';\n"); - grammarBuilder.append("KW3377 : 'KW' '3377';\n"); - grammarBuilder.append("KW3378 : 'KW' '3378';\n"); - grammarBuilder.append("KW3379 : 'KW' '3379';\n"); - grammarBuilder.append("KW3380 : 'KW' '3380';\n"); - grammarBuilder.append("KW3381 : 'KW' '3381';\n"); - grammarBuilder.append("KW3382 : 'KW' '3382';\n"); - grammarBuilder.append("KW3383 : 'KW' '3383';\n"); - grammarBuilder.append("KW3384 : 'KW' '3384';\n"); - grammarBuilder.append("KW3385 : 'KW' '3385';\n"); - grammarBuilder.append("KW3386 : 'KW' '3386';\n"); - grammarBuilder.append("KW3387 : 'KW' '3387';\n"); - grammarBuilder.append("KW3388 : 'KW' '3388';\n"); - grammarBuilder.append("KW3389 : 'KW' '3389';\n"); - grammarBuilder.append("KW3390 : 'KW' '3390';\n"); - grammarBuilder.append("KW3391 : 'KW' '3391';\n"); - grammarBuilder.append("KW3392 : 'KW' '3392';\n"); - grammarBuilder.append("KW3393 : 'KW' '3393';\n"); - grammarBuilder.append("KW3394 : 'KW' '3394';\n"); - grammarBuilder.append("KW3395 : 'KW' '3395';\n"); - grammarBuilder.append("KW3396 : 'KW' '3396';\n"); - grammarBuilder.append("KW3397 : 'KW' '3397';\n"); - grammarBuilder.append("KW3398 : 'KW' '3398';\n"); - grammarBuilder.append("KW3399 : 'KW' '3399';\n"); - grammarBuilder.append("KW3400 : 'KW' '3400';\n"); - grammarBuilder.append("KW3401 : 'KW' '3401';\n"); - grammarBuilder.append("KW3402 : 'KW' '3402';\n"); - grammarBuilder.append("KW3403 : 'KW' '3403';\n"); - grammarBuilder.append("KW3404 : 'KW' '3404';\n"); - grammarBuilder.append("KW3405 : 'KW' '3405';\n"); - grammarBuilder.append("KW3406 : 'KW' '3406';\n"); - grammarBuilder.append("KW3407 : 'KW' '3407';\n"); - grammarBuilder.append("KW3408 : 'KW' '3408';\n"); - grammarBuilder.append("KW3409 : 'KW' '3409';\n"); - grammarBuilder.append("KW3410 : 'KW' '3410';\n"); - grammarBuilder.append("KW3411 : 'KW' '3411';\n"); - grammarBuilder.append("KW3412 : 'KW' '3412';\n"); - grammarBuilder.append("KW3413 : 'KW' '3413';\n"); - grammarBuilder.append("KW3414 : 'KW' '3414';\n"); - grammarBuilder.append("KW3415 : 'KW' '3415';\n"); - grammarBuilder.append("KW3416 : 'KW' '3416';\n"); - grammarBuilder.append("KW3417 : 'KW' '3417';\n"); - grammarBuilder.append("KW3418 : 'KW' '3418';\n"); - grammarBuilder.append("KW3419 : 'KW' '3419';\n"); - grammarBuilder.append("KW3420 : 'KW' '3420';\n"); - grammarBuilder.append("KW3421 : 'KW' '3421';\n"); - grammarBuilder.append("KW3422 : 'KW' '3422';\n"); - grammarBuilder.append("KW3423 : 'KW' '3423';\n"); - grammarBuilder.append("KW3424 : 'KW' '3424';\n"); - grammarBuilder.append("KW3425 : 'KW' '3425';\n"); - grammarBuilder.append("KW3426 : 'KW' '3426';\n"); - grammarBuilder.append("KW3427 : 'KW' '3427';\n"); - grammarBuilder.append("KW3428 : 'KW' '3428';\n"); - grammarBuilder.append("KW3429 : 'KW' '3429';\n"); - grammarBuilder.append("KW3430 : 'KW' '3430';\n"); - grammarBuilder.append("KW3431 : 'KW' '3431';\n"); - grammarBuilder.append("KW3432 : 'KW' '3432';\n"); - grammarBuilder.append("KW3433 : 'KW' '3433';\n"); - grammarBuilder.append("KW3434 : 'KW' '3434';\n"); - grammarBuilder.append("KW3435 : 'KW' '3435';\n"); - grammarBuilder.append("KW3436 : 'KW' '3436';\n"); - grammarBuilder.append("KW3437 : 'KW' '3437';\n"); - grammarBuilder.append("KW3438 : 'KW' '3438';\n"); - grammarBuilder.append("KW3439 : 'KW' '3439';\n"); - grammarBuilder.append("KW3440 : 'KW' '3440';\n"); - grammarBuilder.append("KW3441 : 'KW' '3441';\n"); - grammarBuilder.append("KW3442 : 'KW' '3442';\n"); - grammarBuilder.append("KW3443 : 'KW' '3443';\n"); - grammarBuilder.append("KW3444 : 'KW' '3444';\n"); - grammarBuilder.append("KW3445 : 'KW' '3445';\n"); - grammarBuilder.append("KW3446 : 'KW' '3446';\n"); - grammarBuilder.append("KW3447 : 'KW' '3447';\n"); - grammarBuilder.append("KW3448 : 'KW' '3448';\n"); - grammarBuilder.append("KW3449 : 'KW' '3449';\n"); - grammarBuilder.append("KW3450 : 'KW' '3450';\n"); - grammarBuilder.append("KW3451 : 'KW' '3451';\n"); - grammarBuilder.append("KW3452 : 'KW' '3452';\n"); - grammarBuilder.append("KW3453 : 'KW' '3453';\n"); - grammarBuilder.append("KW3454 : 'KW' '3454';\n"); - grammarBuilder.append("KW3455 : 'KW' '3455';\n"); - grammarBuilder.append("KW3456 : 'KW' '3456';\n"); - grammarBuilder.append("KW3457 : 'KW' '3457';\n"); - grammarBuilder.append("KW3458 : 'KW' '3458';\n"); - grammarBuilder.append("KW3459 : 'KW' '3459';\n"); - grammarBuilder.append("KW3460 : 'KW' '3460';\n"); - grammarBuilder.append("KW3461 : 'KW' '3461';\n"); - grammarBuilder.append("KW3462 : 'KW' '3462';\n"); - grammarBuilder.append("KW3463 : 'KW' '3463';\n"); - grammarBuilder.append("KW3464 : 'KW' '3464';\n"); - grammarBuilder.append("KW3465 : 'KW' '3465';\n"); - grammarBuilder.append("KW3466 : 'KW' '3466';\n"); - grammarBuilder.append("KW3467 : 'KW' '3467';\n"); - grammarBuilder.append("KW3468 : 'KW' '3468';\n"); - grammarBuilder.append("KW3469 : 'KW' '3469';\n"); - grammarBuilder.append("KW3470 : 'KW' '3470';\n"); - grammarBuilder.append("KW3471 : 'KW' '3471';\n"); - grammarBuilder.append("KW3472 : 'KW' '3472';\n"); - grammarBuilder.append("KW3473 : 'KW' '3473';\n"); - grammarBuilder.append("KW3474 : 'KW' '3474';\n"); - grammarBuilder.append("KW3475 : 'KW' '3475';\n"); - grammarBuilder.append("KW3476 : 'KW' '3476';\n"); - grammarBuilder.append("KW3477 : 'KW' '3477';\n"); - grammarBuilder.append("KW3478 : 'KW' '3478';\n"); - grammarBuilder.append("KW3479 : 'KW' '3479';\n"); - grammarBuilder.append("KW3480 : 'KW' '3480';\n"); - grammarBuilder.append("KW3481 : 'KW' '3481';\n"); - grammarBuilder.append("KW3482 : 'KW' '3482';\n"); - grammarBuilder.append("KW3483 : 'KW' '3483';\n"); - grammarBuilder.append("KW3484 : 'KW' '3484';\n"); - grammarBuilder.append("KW3485 : 'KW' '3485';\n"); - grammarBuilder.append("KW3486 : 'KW' '3486';\n"); - grammarBuilder.append("KW3487 : 'KW' '3487';\n"); - grammarBuilder.append("KW3488 : 'KW' '3488';\n"); - grammarBuilder.append("KW3489 : 'KW' '3489';\n"); - grammarBuilder.append("KW3490 : 'KW' '3490';\n"); - grammarBuilder.append("KW3491 : 'KW' '3491';\n"); - grammarBuilder.append("KW3492 : 'KW' '3492';\n"); - grammarBuilder.append("KW3493 : 'KW' '3493';\n"); - grammarBuilder.append("KW3494 : 'KW' '3494';\n"); - grammarBuilder.append("KW3495 : 'KW' '3495';\n"); - grammarBuilder.append("KW3496 : 'KW' '3496';\n"); - grammarBuilder.append("KW3497 : 'KW' '3497';\n"); - grammarBuilder.append("KW3498 : 'KW' '3498';\n"); - grammarBuilder.append("KW3499 : 'KW' '3499';\n"); - grammarBuilder.append("KW3500 : 'KW' '3500';\n"); - grammarBuilder.append("KW3501 : 'KW' '3501';\n"); - grammarBuilder.append("KW3502 : 'KW' '3502';\n"); - grammarBuilder.append("KW3503 : 'KW' '3503';\n"); - grammarBuilder.append("KW3504 : 'KW' '3504';\n"); - grammarBuilder.append("KW3505 : 'KW' '3505';\n"); - grammarBuilder.append("KW3506 : 'KW' '3506';\n"); - grammarBuilder.append("KW3507 : 'KW' '3507';\n"); - grammarBuilder.append("KW3508 : 'KW' '3508';\n"); - grammarBuilder.append("KW3509 : 'KW' '3509';\n"); - grammarBuilder.append("KW3510 : 'KW' '3510';\n"); - grammarBuilder.append("KW3511 : 'KW' '3511';\n"); - grammarBuilder.append("KW3512 : 'KW' '3512';\n"); - grammarBuilder.append("KW3513 : 'KW' '3513';\n"); - grammarBuilder.append("KW3514 : 'KW' '3514';\n"); - grammarBuilder.append("KW3515 : 'KW' '3515';\n"); - grammarBuilder.append("KW3516 : 'KW' '3516';\n"); - grammarBuilder.append("KW3517 : 'KW' '3517';\n"); - grammarBuilder.append("KW3518 : 'KW' '3518';\n"); - grammarBuilder.append("KW3519 : 'KW' '3519';\n"); - grammarBuilder.append("KW3520 : 'KW' '3520';\n"); - grammarBuilder.append("KW3521 : 'KW' '3521';\n"); - grammarBuilder.append("KW3522 : 'KW' '3522';\n"); - grammarBuilder.append("KW3523 : 'KW' '3523';\n"); - grammarBuilder.append("KW3524 : 'KW' '3524';\n"); - grammarBuilder.append("KW3525 : 'KW' '3525';\n"); - grammarBuilder.append("KW3526 : 'KW' '3526';\n"); - grammarBuilder.append("KW3527 : 'KW' '3527';\n"); - grammarBuilder.append("KW3528 : 'KW' '3528';\n"); - grammarBuilder.append("KW3529 : 'KW' '3529';\n"); - grammarBuilder.append("KW3530 : 'KW' '3530';\n"); - grammarBuilder.append("KW3531 : 'KW' '3531';\n"); - grammarBuilder.append("KW3532 : 'KW' '3532';\n"); - grammarBuilder.append("KW3533 : 'KW' '3533';\n"); - grammarBuilder.append("KW3534 : 'KW' '3534';\n"); - grammarBuilder.append("KW3535 : 'KW' '3535';\n"); - grammarBuilder.append("KW3536 : 'KW' '3536';\n"); - grammarBuilder.append("KW3537 : 'KW' '3537';\n"); - grammarBuilder.append("KW3538 : 'KW' '3538';\n"); - grammarBuilder.append("KW3539 : 'KW' '3539';\n"); - grammarBuilder.append("KW3540 : 'KW' '3540';\n"); - grammarBuilder.append("KW3541 : 'KW' '3541';\n"); - grammarBuilder.append("KW3542 : 'KW' '3542';\n"); - grammarBuilder.append("KW3543 : 'KW' '3543';\n"); - grammarBuilder.append("KW3544 : 'KW' '3544';\n"); - grammarBuilder.append("KW3545 : 'KW' '3545';\n"); - grammarBuilder.append("KW3546 : 'KW' '3546';\n"); - grammarBuilder.append("KW3547 : 'KW' '3547';\n"); - grammarBuilder.append("KW3548 : 'KW' '3548';\n"); - grammarBuilder.append("KW3549 : 'KW' '3549';\n"); - grammarBuilder.append("KW3550 : 'KW' '3550';\n"); - grammarBuilder.append("KW3551 : 'KW' '3551';\n"); - grammarBuilder.append("KW3552 : 'KW' '3552';\n"); - grammarBuilder.append("KW3553 : 'KW' '3553';\n"); - grammarBuilder.append("KW3554 : 'KW' '3554';\n"); - grammarBuilder.append("KW3555 : 'KW' '3555';\n"); - grammarBuilder.append("KW3556 : 'KW' '3556';\n"); - grammarBuilder.append("KW3557 : 'KW' '3557';\n"); - grammarBuilder.append("KW3558 : 'KW' '3558';\n"); - grammarBuilder.append("KW3559 : 'KW' '3559';\n"); - grammarBuilder.append("KW3560 : 'KW' '3560';\n"); - grammarBuilder.append("KW3561 : 'KW' '3561';\n"); - grammarBuilder.append("KW3562 : 'KW' '3562';\n"); - grammarBuilder.append("KW3563 : 'KW' '3563';\n"); - grammarBuilder.append("KW3564 : 'KW' '3564';\n"); - grammarBuilder.append("KW3565 : 'KW' '3565';\n"); - grammarBuilder.append("KW3566 : 'KW' '3566';\n"); - grammarBuilder.append("KW3567 : 'KW' '3567';\n"); - grammarBuilder.append("KW3568 : 'KW' '3568';\n"); - grammarBuilder.append("KW3569 : 'KW' '3569';\n"); - grammarBuilder.append("KW3570 : 'KW' '3570';\n"); - grammarBuilder.append("KW3571 : 'KW' '3571';\n"); - grammarBuilder.append("KW3572 : 'KW' '3572';\n"); - grammarBuilder.append("KW3573 : 'KW' '3573';\n"); - grammarBuilder.append("KW3574 : 'KW' '3574';\n"); - grammarBuilder.append("KW3575 : 'KW' '3575';\n"); - grammarBuilder.append("KW3576 : 'KW' '3576';\n"); - grammarBuilder.append("KW3577 : 'KW' '3577';\n"); - grammarBuilder.append("KW3578 : 'KW' '3578';\n"); - grammarBuilder.append("KW3579 : 'KW' '3579';\n"); - grammarBuilder.append("KW3580 : 'KW' '3580';\n"); - grammarBuilder.append("KW3581 : 'KW' '3581';\n"); - grammarBuilder.append("KW3582 : 'KW' '3582';\n"); - grammarBuilder.append("KW3583 : 'KW' '3583';\n"); - grammarBuilder.append("KW3584 : 'KW' '3584';\n"); - grammarBuilder.append("KW3585 : 'KW' '3585';\n"); - grammarBuilder.append("KW3586 : 'KW' '3586';\n"); - grammarBuilder.append("KW3587 : 'KW' '3587';\n"); - grammarBuilder.append("KW3588 : 'KW' '3588';\n"); - grammarBuilder.append("KW3589 : 'KW' '3589';\n"); - grammarBuilder.append("KW3590 : 'KW' '3590';\n"); - grammarBuilder.append("KW3591 : 'KW' '3591';\n"); - grammarBuilder.append("KW3592 : 'KW' '3592';\n"); - grammarBuilder.append("KW3593 : 'KW' '3593';\n"); - grammarBuilder.append("KW3594 : 'KW' '3594';\n"); - grammarBuilder.append("KW3595 : 'KW' '3595';\n"); - grammarBuilder.append("KW3596 : 'KW' '3596';\n"); - grammarBuilder.append("KW3597 : 'KW' '3597';\n"); - grammarBuilder.append("KW3598 : 'KW' '3598';\n"); - grammarBuilder.append("KW3599 : 'KW' '3599';\n"); - grammarBuilder.append("KW3600 : 'KW' '3600';\n"); - grammarBuilder.append("KW3601 : 'KW' '3601';\n"); - grammarBuilder.append("KW3602 : 'KW' '3602';\n"); - grammarBuilder.append("KW3603 : 'KW' '3603';\n"); - grammarBuilder.append("KW3604 : 'KW' '3604';\n"); - grammarBuilder.append("KW3605 : 'KW' '3605';\n"); - grammarBuilder.append("KW3606 : 'KW' '3606';\n"); - grammarBuilder.append("KW3607 : 'KW' '3607';\n"); - grammarBuilder.append("KW3608 : 'KW' '3608';\n"); - grammarBuilder.append("KW3609 : 'KW' '3609';\n"); - grammarBuilder.append("KW3610 : 'KW' '3610';\n"); - grammarBuilder.append("KW3611 : 'KW' '3611';\n"); - grammarBuilder.append("KW3612 : 'KW' '3612';\n"); - grammarBuilder.append("KW3613 : 'KW' '3613';\n"); - grammarBuilder.append("KW3614 : 'KW' '3614';\n"); - grammarBuilder.append("KW3615 : 'KW' '3615';\n"); - grammarBuilder.append("KW3616 : 'KW' '3616';\n"); - grammarBuilder.append("KW3617 : 'KW' '3617';\n"); - grammarBuilder.append("KW3618 : 'KW' '3618';\n"); - grammarBuilder.append("KW3619 : 'KW' '3619';\n"); - grammarBuilder.append("KW3620 : 'KW' '3620';\n"); - grammarBuilder.append("KW3621 : 'KW' '3621';\n"); - grammarBuilder.append("KW3622 : 'KW' '3622';\n"); - grammarBuilder.append("KW3623 : 'KW' '3623';\n"); - grammarBuilder.append("KW3624 : 'KW' '3624';\n"); - grammarBuilder.append("KW3625 : 'KW' '3625';\n"); - grammarBuilder.append("KW3626 : 'KW' '3626';\n"); - grammarBuilder.append("KW3627 : 'KW' '3627';\n"); - grammarBuilder.append("KW3628 : 'KW' '3628';\n"); - grammarBuilder.append("KW3629 : 'KW' '3629';\n"); - grammarBuilder.append("KW3630 : 'KW' '3630';\n"); - grammarBuilder.append("KW3631 : 'KW' '3631';\n"); - grammarBuilder.append("KW3632 : 'KW' '3632';\n"); - grammarBuilder.append("KW3633 : 'KW' '3633';\n"); - grammarBuilder.append("KW3634 : 'KW' '3634';\n"); - grammarBuilder.append("KW3635 : 'KW' '3635';\n"); - grammarBuilder.append("KW3636 : 'KW' '3636';\n"); - grammarBuilder.append("KW3637 : 'KW' '3637';\n"); - grammarBuilder.append("KW3638 : 'KW' '3638';\n"); - grammarBuilder.append("KW3639 : 'KW' '3639';\n"); - grammarBuilder.append("KW3640 : 'KW' '3640';\n"); - grammarBuilder.append("KW3641 : 'KW' '3641';\n"); - grammarBuilder.append("KW3642 : 'KW' '3642';\n"); - grammarBuilder.append("KW3643 : 'KW' '3643';\n"); - grammarBuilder.append("KW3644 : 'KW' '3644';\n"); - grammarBuilder.append("KW3645 : 'KW' '3645';\n"); - grammarBuilder.append("KW3646 : 'KW' '3646';\n"); - grammarBuilder.append("KW3647 : 'KW' '3647';\n"); - grammarBuilder.append("KW3648 : 'KW' '3648';\n"); - grammarBuilder.append("KW3649 : 'KW' '3649';\n"); - grammarBuilder.append("KW3650 : 'KW' '3650';\n"); - grammarBuilder.append("KW3651 : 'KW' '3651';\n"); - grammarBuilder.append("KW3652 : 'KW' '3652';\n"); - grammarBuilder.append("KW3653 : 'KW' '3653';\n"); - grammarBuilder.append("KW3654 : 'KW' '3654';\n"); - grammarBuilder.append("KW3655 : 'KW' '3655';\n"); - grammarBuilder.append("KW3656 : 'KW' '3656';\n"); - grammarBuilder.append("KW3657 : 'KW' '3657';\n"); - grammarBuilder.append("KW3658 : 'KW' '3658';\n"); - grammarBuilder.append("KW3659 : 'KW' '3659';\n"); - grammarBuilder.append("KW3660 : 'KW' '3660';\n"); - grammarBuilder.append("KW3661 : 'KW' '3661';\n"); - grammarBuilder.append("KW3662 : 'KW' '3662';\n"); - grammarBuilder.append("KW3663 : 'KW' '3663';\n"); - grammarBuilder.append("KW3664 : 'KW' '3664';\n"); - grammarBuilder.append("KW3665 : 'KW' '3665';\n"); - grammarBuilder.append("KW3666 : 'KW' '3666';\n"); - grammarBuilder.append("KW3667 : 'KW' '3667';\n"); - grammarBuilder.append("KW3668 : 'KW' '3668';\n"); - grammarBuilder.append("KW3669 : 'KW' '3669';\n"); - grammarBuilder.append("KW3670 : 'KW' '3670';\n"); - grammarBuilder.append("KW3671 : 'KW' '3671';\n"); - grammarBuilder.append("KW3672 : 'KW' '3672';\n"); - grammarBuilder.append("KW3673 : 'KW' '3673';\n"); - grammarBuilder.append("KW3674 : 'KW' '3674';\n"); - grammarBuilder.append("KW3675 : 'KW' '3675';\n"); - grammarBuilder.append("KW3676 : 'KW' '3676';\n"); - grammarBuilder.append("KW3677 : 'KW' '3677';\n"); - grammarBuilder.append("KW3678 : 'KW' '3678';\n"); - grammarBuilder.append("KW3679 : 'KW' '3679';\n"); - grammarBuilder.append("KW3680 : 'KW' '3680';\n"); - grammarBuilder.append("KW3681 : 'KW' '3681';\n"); - grammarBuilder.append("KW3682 : 'KW' '3682';\n"); - grammarBuilder.append("KW3683 : 'KW' '3683';\n"); - grammarBuilder.append("KW3684 : 'KW' '3684';\n"); - grammarBuilder.append("KW3685 : 'KW' '3685';\n"); - grammarBuilder.append("KW3686 : 'KW' '3686';\n"); - grammarBuilder.append("KW3687 : 'KW' '3687';\n"); - grammarBuilder.append("KW3688 : 'KW' '3688';\n"); - grammarBuilder.append("KW3689 : 'KW' '3689';\n"); - grammarBuilder.append("KW3690 : 'KW' '3690';\n"); - grammarBuilder.append("KW3691 : 'KW' '3691';\n"); - grammarBuilder.append("KW3692 : 'KW' '3692';\n"); - grammarBuilder.append("KW3693 : 'KW' '3693';\n"); - grammarBuilder.append("KW3694 : 'KW' '3694';\n"); - grammarBuilder.append("KW3695 : 'KW' '3695';\n"); - grammarBuilder.append("KW3696 : 'KW' '3696';\n"); - grammarBuilder.append("KW3697 : 'KW' '3697';\n"); - grammarBuilder.append("KW3698 : 'KW' '3698';\n"); - grammarBuilder.append("KW3699 : 'KW' '3699';\n"); - grammarBuilder.append("KW3700 : 'KW' '3700';\n"); - grammarBuilder.append("KW3701 : 'KW' '3701';\n"); - grammarBuilder.append("KW3702 : 'KW' '3702';\n"); - grammarBuilder.append("KW3703 : 'KW' '3703';\n"); - grammarBuilder.append("KW3704 : 'KW' '3704';\n"); - grammarBuilder.append("KW3705 : 'KW' '3705';\n"); - grammarBuilder.append("KW3706 : 'KW' '3706';\n"); - grammarBuilder.append("KW3707 : 'KW' '3707';\n"); - grammarBuilder.append("KW3708 : 'KW' '3708';\n"); - grammarBuilder.append("KW3709 : 'KW' '3709';\n"); - grammarBuilder.append("KW3710 : 'KW' '3710';\n"); - grammarBuilder.append("KW3711 : 'KW' '3711';\n"); - grammarBuilder.append("KW3712 : 'KW' '3712';\n"); - grammarBuilder.append("KW3713 : 'KW' '3713';\n"); - grammarBuilder.append("KW3714 : 'KW' '3714';\n"); - grammarBuilder.append("KW3715 : 'KW' '3715';\n"); - grammarBuilder.append("KW3716 : 'KW' '3716';\n"); - grammarBuilder.append("KW3717 : 'KW' '3717';\n"); - grammarBuilder.append("KW3718 : 'KW' '3718';\n"); - grammarBuilder.append("KW3719 : 'KW' '3719';\n"); - grammarBuilder.append("KW3720 : 'KW' '3720';\n"); - grammarBuilder.append("KW3721 : 'KW' '3721';\n"); - grammarBuilder.append("KW3722 : 'KW' '3722';\n"); - grammarBuilder.append("KW3723 : 'KW' '3723';\n"); - grammarBuilder.append("KW3724 : 'KW' '3724';\n"); - grammarBuilder.append("KW3725 : 'KW' '3725';\n"); - grammarBuilder.append("KW3726 : 'KW' '3726';\n"); - grammarBuilder.append("KW3727 : 'KW' '3727';\n"); - grammarBuilder.append("KW3728 : 'KW' '3728';\n"); - grammarBuilder.append("KW3729 : 'KW' '3729';\n"); - grammarBuilder.append("KW3730 : 'KW' '3730';\n"); - grammarBuilder.append("KW3731 : 'KW' '3731';\n"); - grammarBuilder.append("KW3732 : 'KW' '3732';\n"); - grammarBuilder.append("KW3733 : 'KW' '3733';\n"); - grammarBuilder.append("KW3734 : 'KW' '3734';\n"); - grammarBuilder.append("KW3735 : 'KW' '3735';\n"); - grammarBuilder.append("KW3736 : 'KW' '3736';\n"); - grammarBuilder.append("KW3737 : 'KW' '3737';\n"); - grammarBuilder.append("KW3738 : 'KW' '3738';\n"); - grammarBuilder.append("KW3739 : 'KW' '3739';\n"); - grammarBuilder.append("KW3740 : 'KW' '3740';\n"); - grammarBuilder.append("KW3741 : 'KW' '3741';\n"); - grammarBuilder.append("KW3742 : 'KW' '3742';\n"); - grammarBuilder.append("KW3743 : 'KW' '3743';\n"); - grammarBuilder.append("KW3744 : 'KW' '3744';\n"); - grammarBuilder.append("KW3745 : 'KW' '3745';\n"); - grammarBuilder.append("KW3746 : 'KW' '3746';\n"); - grammarBuilder.append("KW3747 : 'KW' '3747';\n"); - grammarBuilder.append("KW3748 : 'KW' '3748';\n"); - grammarBuilder.append("KW3749 : 'KW' '3749';\n"); - grammarBuilder.append("KW3750 : 'KW' '3750';\n"); - grammarBuilder.append("KW3751 : 'KW' '3751';\n"); - grammarBuilder.append("KW3752 : 'KW' '3752';\n"); - grammarBuilder.append("KW3753 : 'KW' '3753';\n"); - grammarBuilder.append("KW3754 : 'KW' '3754';\n"); - grammarBuilder.append("KW3755 : 'KW' '3755';\n"); - grammarBuilder.append("KW3756 : 'KW' '3756';\n"); - grammarBuilder.append("KW3757 : 'KW' '3757';\n"); - grammarBuilder.append("KW3758 : 'KW' '3758';\n"); - grammarBuilder.append("KW3759 : 'KW' '3759';\n"); - grammarBuilder.append("KW3760 : 'KW' '3760';\n"); - grammarBuilder.append("KW3761 : 'KW' '3761';\n"); - grammarBuilder.append("KW3762 : 'KW' '3762';\n"); - grammarBuilder.append("KW3763 : 'KW' '3763';\n"); - grammarBuilder.append("KW3764 : 'KW' '3764';\n"); - grammarBuilder.append("KW3765 : 'KW' '3765';\n"); - grammarBuilder.append("KW3766 : 'KW' '3766';\n"); - grammarBuilder.append("KW3767 : 'KW' '3767';\n"); - grammarBuilder.append("KW3768 : 'KW' '3768';\n"); - grammarBuilder.append("KW3769 : 'KW' '3769';\n"); - grammarBuilder.append("KW3770 : 'KW' '3770';\n"); - grammarBuilder.append("KW3771 : 'KW' '3771';\n"); - grammarBuilder.append("KW3772 : 'KW' '3772';\n"); - grammarBuilder.append("KW3773 : 'KW' '3773';\n"); - grammarBuilder.append("KW3774 : 'KW' '3774';\n"); - grammarBuilder.append("KW3775 : 'KW' '3775';\n"); - grammarBuilder.append("KW3776 : 'KW' '3776';\n"); - grammarBuilder.append("KW3777 : 'KW' '3777';\n"); - grammarBuilder.append("KW3778 : 'KW' '3778';\n"); - grammarBuilder.append("KW3779 : 'KW' '3779';\n"); - grammarBuilder.append("KW3780 : 'KW' '3780';\n"); - grammarBuilder.append("KW3781 : 'KW' '3781';\n"); - grammarBuilder.append("KW3782 : 'KW' '3782';\n"); - grammarBuilder.append("KW3783 : 'KW' '3783';\n"); - grammarBuilder.append("KW3784 : 'KW' '3784';\n"); - grammarBuilder.append("KW3785 : 'KW' '3785';\n"); - grammarBuilder.append("KW3786 : 'KW' '3786';\n"); - grammarBuilder.append("KW3787 : 'KW' '3787';\n"); - grammarBuilder.append("KW3788 : 'KW' '3788';\n"); - grammarBuilder.append("KW3789 : 'KW' '3789';\n"); - grammarBuilder.append("KW3790 : 'KW' '3790';\n"); - grammarBuilder.append("KW3791 : 'KW' '3791';\n"); - grammarBuilder.append("KW3792 : 'KW' '3792';\n"); - grammarBuilder.append("KW3793 : 'KW' '3793';\n"); - grammarBuilder.append("KW3794 : 'KW' '3794';\n"); - grammarBuilder.append("KW3795 : 'KW' '3795';\n"); - grammarBuilder.append("KW3796 : 'KW' '3796';\n"); - grammarBuilder.append("KW3797 : 'KW' '3797';\n"); - grammarBuilder.append("KW3798 : 'KW' '3798';\n"); - grammarBuilder.append("KW3799 : 'KW' '3799';\n"); - grammarBuilder.append("KW3800 : 'KW' '3800';\n"); - grammarBuilder.append("KW3801 : 'KW' '3801';\n"); - grammarBuilder.append("KW3802 : 'KW' '3802';\n"); - grammarBuilder.append("KW3803 : 'KW' '3803';\n"); - grammarBuilder.append("KW3804 : 'KW' '3804';\n"); - grammarBuilder.append("KW3805 : 'KW' '3805';\n"); - grammarBuilder.append("KW3806 : 'KW' '3806';\n"); - grammarBuilder.append("KW3807 : 'KW' '3807';\n"); - grammarBuilder.append("KW3808 : 'KW' '3808';\n"); - grammarBuilder.append("KW3809 : 'KW' '3809';\n"); - grammarBuilder.append("KW3810 : 'KW' '3810';\n"); - grammarBuilder.append("KW3811 : 'KW' '3811';\n"); - grammarBuilder.append("KW3812 : 'KW' '3812';\n"); - grammarBuilder.append("KW3813 : 'KW' '3813';\n"); - grammarBuilder.append("KW3814 : 'KW' '3814';\n"); - grammarBuilder.append("KW3815 : 'KW' '3815';\n"); - grammarBuilder.append("KW3816 : 'KW' '3816';\n"); - grammarBuilder.append("KW3817 : 'KW' '3817';\n"); - grammarBuilder.append("KW3818 : 'KW' '3818';\n"); - grammarBuilder.append("KW3819 : 'KW' '3819';\n"); - grammarBuilder.append("KW3820 : 'KW' '3820';\n"); - grammarBuilder.append("KW3821 : 'KW' '3821';\n"); - grammarBuilder.append("KW3822 : 'KW' '3822';\n"); - grammarBuilder.append("KW3823 : 'KW' '3823';\n"); - grammarBuilder.append("KW3824 : 'KW' '3824';\n"); - grammarBuilder.append("KW3825 : 'KW' '3825';\n"); - grammarBuilder.append("KW3826 : 'KW' '3826';\n"); - grammarBuilder.append("KW3827 : 'KW' '3827';\n"); - grammarBuilder.append("KW3828 : 'KW' '3828';\n"); - grammarBuilder.append("KW3829 : 'KW' '3829';\n"); - grammarBuilder.append("KW3830 : 'KW' '3830';\n"); - grammarBuilder.append("KW3831 : 'KW' '3831';\n"); - grammarBuilder.append("KW3832 : 'KW' '3832';\n"); - grammarBuilder.append("KW3833 : 'KW' '3833';\n"); - grammarBuilder.append("KW3834 : 'KW' '3834';\n"); - grammarBuilder.append("KW3835 : 'KW' '3835';\n"); - grammarBuilder.append("KW3836 : 'KW' '3836';\n"); - grammarBuilder.append("KW3837 : 'KW' '3837';\n"); - grammarBuilder.append("KW3838 : 'KW' '3838';\n"); - grammarBuilder.append("KW3839 : 'KW' '3839';\n"); - grammarBuilder.append("KW3840 : 'KW' '3840';\n"); - grammarBuilder.append("KW3841 : 'KW' '3841';\n"); - grammarBuilder.append("KW3842 : 'KW' '3842';\n"); - grammarBuilder.append("KW3843 : 'KW' '3843';\n"); - grammarBuilder.append("KW3844 : 'KW' '3844';\n"); - grammarBuilder.append("KW3845 : 'KW' '3845';\n"); - grammarBuilder.append("KW3846 : 'KW' '3846';\n"); - grammarBuilder.append("KW3847 : 'KW' '3847';\n"); - grammarBuilder.append("KW3848 : 'KW' '3848';\n"); - grammarBuilder.append("KW3849 : 'KW' '3849';\n"); - grammarBuilder.append("KW3850 : 'KW' '3850';\n"); - grammarBuilder.append("KW3851 : 'KW' '3851';\n"); - grammarBuilder.append("KW3852 : 'KW' '3852';\n"); - grammarBuilder.append("KW3853 : 'KW' '3853';\n"); - grammarBuilder.append("KW3854 : 'KW' '3854';\n"); - grammarBuilder.append("KW3855 : 'KW' '3855';\n"); - grammarBuilder.append("KW3856 : 'KW' '3856';\n"); - grammarBuilder.append("KW3857 : 'KW' '3857';\n"); - grammarBuilder.append("KW3858 : 'KW' '3858';\n"); - grammarBuilder.append("KW3859 : 'KW' '3859';\n"); - grammarBuilder.append("KW3860 : 'KW' '3860';\n"); - grammarBuilder.append("KW3861 : 'KW' '3861';\n"); - grammarBuilder.append("KW3862 : 'KW' '3862';\n"); - grammarBuilder.append("KW3863 : 'KW' '3863';\n"); - grammarBuilder.append("KW3864 : 'KW' '3864';\n"); - grammarBuilder.append("KW3865 : 'KW' '3865';\n"); - grammarBuilder.append("KW3866 : 'KW' '3866';\n"); - grammarBuilder.append("KW3867 : 'KW' '3867';\n"); - grammarBuilder.append("KW3868 : 'KW' '3868';\n"); - grammarBuilder.append("KW3869 : 'KW' '3869';\n"); - grammarBuilder.append("KW3870 : 'KW' '3870';\n"); - grammarBuilder.append("KW3871 : 'KW' '3871';\n"); - grammarBuilder.append("KW3872 : 'KW' '3872';\n"); - grammarBuilder.append("KW3873 : 'KW' '3873';\n"); - grammarBuilder.append("KW3874 : 'KW' '3874';\n"); - grammarBuilder.append("KW3875 : 'KW' '3875';\n"); - grammarBuilder.append("KW3876 : 'KW' '3876';\n"); - grammarBuilder.append("KW3877 : 'KW' '3877';\n"); - grammarBuilder.append("KW3878 : 'KW' '3878';\n"); - grammarBuilder.append("KW3879 : 'KW' '3879';\n"); - grammarBuilder.append("KW3880 : 'KW' '3880';\n"); - grammarBuilder.append("KW3881 : 'KW' '3881';\n"); - grammarBuilder.append("KW3882 : 'KW' '3882';\n"); - grammarBuilder.append("KW3883 : 'KW' '3883';\n"); - grammarBuilder.append("KW3884 : 'KW' '3884';\n"); - grammarBuilder.append("KW3885 : 'KW' '3885';\n"); - grammarBuilder.append("KW3886 : 'KW' '3886';\n"); - grammarBuilder.append("KW3887 : 'KW' '3887';\n"); - grammarBuilder.append("KW3888 : 'KW' '3888';\n"); - grammarBuilder.append("KW3889 : 'KW' '3889';\n"); - grammarBuilder.append("KW3890 : 'KW' '3890';\n"); - grammarBuilder.append("KW3891 : 'KW' '3891';\n"); - grammarBuilder.append("KW3892 : 'KW' '3892';\n"); - grammarBuilder.append("KW3893 : 'KW' '3893';\n"); - grammarBuilder.append("KW3894 : 'KW' '3894';\n"); - grammarBuilder.append("KW3895 : 'KW' '3895';\n"); - grammarBuilder.append("KW3896 : 'KW' '3896';\n"); - grammarBuilder.append("KW3897 : 'KW' '3897';\n"); - grammarBuilder.append("KW3898 : 'KW' '3898';\n"); - grammarBuilder.append("KW3899 : 'KW' '3899';\n"); - grammarBuilder.append("KW3900 : 'KW' '3900';\n"); - grammarBuilder.append("KW3901 : 'KW' '3901';\n"); - grammarBuilder.append("KW3902 : 'KW' '3902';\n"); - grammarBuilder.append("KW3903 : 'KW' '3903';\n"); - grammarBuilder.append("KW3904 : 'KW' '3904';\n"); - grammarBuilder.append("KW3905 : 'KW' '3905';\n"); - grammarBuilder.append("KW3906 : 'KW' '3906';\n"); - grammarBuilder.append("KW3907 : 'KW' '3907';\n"); - grammarBuilder.append("KW3908 : 'KW' '3908';\n"); - grammarBuilder.append("KW3909 : 'KW' '3909';\n"); - grammarBuilder.append("KW3910 : 'KW' '3910';\n"); - grammarBuilder.append("KW3911 : 'KW' '3911';\n"); - grammarBuilder.append("KW3912 : 'KW' '3912';\n"); - grammarBuilder.append("KW3913 : 'KW' '3913';\n"); - grammarBuilder.append("KW3914 : 'KW' '3914';\n"); - grammarBuilder.append("KW3915 : 'KW' '3915';\n"); - grammarBuilder.append("KW3916 : 'KW' '3916';\n"); - grammarBuilder.append("KW3917 : 'KW' '3917';\n"); - grammarBuilder.append("KW3918 : 'KW' '3918';\n"); - grammarBuilder.append("KW3919 : 'KW' '3919';\n"); - grammarBuilder.append("KW3920 : 'KW' '3920';\n"); - grammarBuilder.append("KW3921 : 'KW' '3921';\n"); - grammarBuilder.append("KW3922 : 'KW' '3922';\n"); - grammarBuilder.append("KW3923 : 'KW' '3923';\n"); - grammarBuilder.append("KW3924 : 'KW' '3924';\n"); - grammarBuilder.append("KW3925 : 'KW' '3925';\n"); - grammarBuilder.append("KW3926 : 'KW' '3926';\n"); - grammarBuilder.append("KW3927 : 'KW' '3927';\n"); - grammarBuilder.append("KW3928 : 'KW' '3928';\n"); - grammarBuilder.append("KW3929 : 'KW' '3929';\n"); - grammarBuilder.append("KW3930 : 'KW' '3930';\n"); - grammarBuilder.append("KW3931 : 'KW' '3931';\n"); - grammarBuilder.append("KW3932 : 'KW' '3932';\n"); - grammarBuilder.append("KW3933 : 'KW' '3933';\n"); - grammarBuilder.append("KW3934 : 'KW' '3934';\n"); - grammarBuilder.append("KW3935 : 'KW' '3935';\n"); - grammarBuilder.append("KW3936 : 'KW' '3936';\n"); - grammarBuilder.append("KW3937 : 'KW' '3937';\n"); - grammarBuilder.append("KW3938 : 'KW' '3938';\n"); - grammarBuilder.append("KW3939 : 'KW' '3939';\n"); - grammarBuilder.append("KW3940 : 'KW' '3940';\n"); - grammarBuilder.append("KW3941 : 'KW' '3941';\n"); - grammarBuilder.append("KW3942 : 'KW' '3942';\n"); - grammarBuilder.append("KW3943 : 'KW' '3943';\n"); - grammarBuilder.append("KW3944 : 'KW' '3944';\n"); - grammarBuilder.append("KW3945 : 'KW' '3945';\n"); - grammarBuilder.append("KW3946 : 'KW' '3946';\n"); - grammarBuilder.append("KW3947 : 'KW' '3947';\n"); - grammarBuilder.append("KW3948 : 'KW' '3948';\n"); - grammarBuilder.append("KW3949 : 'KW' '3949';\n"); - grammarBuilder.append("KW3950 : 'KW' '3950';\n"); - grammarBuilder.append("KW3951 : 'KW' '3951';\n"); - grammarBuilder.append("KW3952 : 'KW' '3952';\n"); - grammarBuilder.append("KW3953 : 'KW' '3953';\n"); - grammarBuilder.append("KW3954 : 'KW' '3954';\n"); - grammarBuilder.append("KW3955 : 'KW' '3955';\n"); - grammarBuilder.append("KW3956 : 'KW' '3956';\n"); - grammarBuilder.append("KW3957 : 'KW' '3957';\n"); - grammarBuilder.append("KW3958 : 'KW' '3958';\n"); - grammarBuilder.append("KW3959 : 'KW' '3959';\n"); - grammarBuilder.append("KW3960 : 'KW' '3960';\n"); - grammarBuilder.append("KW3961 : 'KW' '3961';\n"); - grammarBuilder.append("KW3962 : 'KW' '3962';\n"); - grammarBuilder.append("KW3963 : 'KW' '3963';\n"); - grammarBuilder.append("KW3964 : 'KW' '3964';\n"); - grammarBuilder.append("KW3965 : 'KW' '3965';\n"); - grammarBuilder.append("KW3966 : 'KW' '3966';\n"); - grammarBuilder.append("KW3967 : 'KW' '3967';\n"); - grammarBuilder.append("KW3968 : 'KW' '3968';\n"); - grammarBuilder.append("KW3969 : 'KW' '3969';\n"); - grammarBuilder.append("KW3970 : 'KW' '3970';\n"); - grammarBuilder.append("KW3971 : 'KW' '3971';\n"); - grammarBuilder.append("KW3972 : 'KW' '3972';\n"); - grammarBuilder.append("KW3973 : 'KW' '3973';\n"); - grammarBuilder.append("KW3974 : 'KW' '3974';\n"); - grammarBuilder.append("KW3975 : 'KW' '3975';\n"); - grammarBuilder.append("KW3976 : 'KW' '3976';\n"); - grammarBuilder.append("KW3977 : 'KW' '3977';\n"); - grammarBuilder.append("KW3978 : 'KW' '3978';\n"); - grammarBuilder.append("KW3979 : 'KW' '3979';\n"); - grammarBuilder.append("KW3980 : 'KW' '3980';\n"); - grammarBuilder.append("KW3981 : 'KW' '3981';\n"); - grammarBuilder.append("KW3982 : 'KW' '3982';\n"); - grammarBuilder.append("KW3983 : 'KW' '3983';\n"); - grammarBuilder.append("KW3984 : 'KW' '3984';\n"); - grammarBuilder.append("KW3985 : 'KW' '3985';\n"); - grammarBuilder.append("KW3986 : 'KW' '3986';\n"); - grammarBuilder.append("KW3987 : 'KW' '3987';\n"); - grammarBuilder.append("KW3988 : 'KW' '3988';\n"); - grammarBuilder.append("KW3989 : 'KW' '3989';\n"); - grammarBuilder.append("KW3990 : 'KW' '3990';\n"); - grammarBuilder.append("KW3991 : 'KW' '3991';\n"); - grammarBuilder.append("KW3992 : 'KW' '3992';\n"); - grammarBuilder.append("KW3993 : 'KW' '3993';\n"); - grammarBuilder.append("KW3994 : 'KW' '3994';\n"); - grammarBuilder.append("KW3995 : 'KW' '3995';\n"); - grammarBuilder.append("KW3996 : 'KW' '3996';\n"); - grammarBuilder.append("KW3997 : 'KW' '3997';\n"); - grammarBuilder.append("KW3998 : 'KW' '3998';\n"); - grammarBuilder.append("KW3999 : 'KW' '3999';"); - String grammar = grammarBuilder.toString(); - - String input ="KW400"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='KW400',<402>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT*?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyConfigs() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(110); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("I : .*? ('a' | 'ab') {print(self.text)} ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - grammarBuilder.append("J : . {print(self.text)};"); - String grammar = grammarBuilder.toString(); - - String input ="ab"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "a\n" + - "b\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,1:1='b',<3>,1:1]\n" + - "[@2,2:1='',<-1>,1:2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyOptional() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '//' .*? '\\n' CMT??;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyPositiveClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(59); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : ('//' .*? '\\n')+?;\n"); - grammarBuilder.append("WS : (' '|'\\t')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "//blah\n" + - "//blah\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='//blah\\n',<1>,1:0]\n" + - "[@1,7:13='//blah\\n',<1>,2:0]\n" + - "[@2,14:13='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)*? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"hi\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:3='\"hi\"',<1>,1:0]\n" + - "[@1,4:8='\"mom\"',<1>,1:4]\n" + - "[@2,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNonGreedyTermination2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(47); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("STRING : '\"' ('\"\"' | .)+? '\"';"); - String grammar = grammarBuilder.toString(); - - String input ="\"\"\"mom\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:6='\"\"\"mom\"',<1>,1:0]\n" + - "[@1,7:6='',<-1>,1:7]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParentheses() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(166); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("START_BLOCK: '-.-.-';\n"); - grammarBuilder.append("ID : (LETTER SEPARATOR) (LETTER SEPARATOR)+;\n"); - grammarBuilder.append("fragment LETTER: L_A|L_K;\n"); - grammarBuilder.append("fragment L_A: '.-';\n"); - grammarBuilder.append("fragment L_K: '-.-';\n"); - grammarBuilder.append("SEPARATOR: '!';"); - String grammar = grammarBuilder.toString(); - - String input ="-.-.-!"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4='-.-.-',<1>,1:0]\n" + - "[@1,5:5='!',<3>,1:5]\n" + - "[@2,6:5='',<-1>,1:6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPositionAdjustingLexer() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(1839); - grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("def resetAcceptPosition(self, index, line, column):\n"); - grammarBuilder.append(" self._input.seek(index)\n"); - grammarBuilder.append(" self.line = line\n"); - grammarBuilder.append(" self.column = column\n"); - grammarBuilder.append(" self._interp.consume(self._input)\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def nextToken(self):\n"); - grammarBuilder.append(" if self._interp.__dict__.get(\"resetAcceptPosition\", None) is None:\n"); - grammarBuilder.append(" self._interp.__dict__[\"resetAcceptPosition\"] = self.resetAcceptPosition\n"); - grammarBuilder.append(" return super(type(self),self).nextToken()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def emit(self):\n"); - grammarBuilder.append(" if self._type==PositionAdjustingLexer.TOKENS:\n"); - grammarBuilder.append(" self.handleAcceptPositionForKeyword(\"tokens\")\n"); - grammarBuilder.append(" elif self._type==PositionAdjustingLexer.LABEL:\n"); - grammarBuilder.append(" self.handleAcceptPositionForIdentifier()\n"); - grammarBuilder.append(" return super(type(self),self).emit()\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def handleAcceptPositionForIdentifier(self):\n"); - grammarBuilder.append(" tokenText = self.text\n"); - grammarBuilder.append(" identifierLength = 0\n"); - grammarBuilder.append(" while identifierLength < len(tokenText) and self.isIdentifierChar(tokenText[identifierLength]):\n"); - grammarBuilder.append(" identifierLength += 1\n"); - grammarBuilder.append("\n"); - grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + identifierLength:\n"); - grammarBuilder.append(" offset = identifierLength - 1\n"); - grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); - grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); - grammarBuilder.append(" return True\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" return False\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("def handleAcceptPositionForKeyword(self, keyword):\n"); - grammarBuilder.append(" if self._input.index > self._tokenStartCharIndex + len(keyword):\n"); - grammarBuilder.append(" offset = len(keyword) - 1\n"); - grammarBuilder.append(" self._interp.resetAcceptPosition(self._tokenStartCharIndex + offset,\n"); - grammarBuilder.append(" self._tokenStartLine, self._tokenStartColumn + offset)\n"); - grammarBuilder.append(" return True\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" return False\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@staticmethod\n"); - grammarBuilder.append("def isIdentifierChar(c):\n"); - grammarBuilder.append(" return c.isalnum() or c == '_'\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ASSIGN : '=' ;\n"); - grammarBuilder.append("PLUS_ASSIGN : '+=' ;\n"); - grammarBuilder.append("LCURLY: '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// 'tokens' followed by '{'\n"); - grammarBuilder.append("TOKENS : 'tokens' IGNORED '{';\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("// IDENTIFIER followed by '+=' or '='\n"); - grammarBuilder.append("LABEL\n"); - grammarBuilder.append(" : IDENTIFIER IGNORED '+'? '='\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("IDENTIFIER\n"); - grammarBuilder.append(" : [a-zA-Z_] [a-zA-Z0-9_]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("IGNORED\n"); - grammarBuilder.append(" : [ \\t\\r\\n]*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("NEWLINE\n"); - grammarBuilder.append(" : [\\r\\n]+ -> skip\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("WS\n"); - grammarBuilder.append(" : [ \\t]+ -> skip\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - String input = - "tokens\n" + - "tokens {\n" + - "notLabel\n" + - "label1 =\n" + - "label2 +=\n" + - "notLabel\n"; - String found = execLexer("PositionAdjustingLexer.g4", grammar, "PositionAdjustingLexer", input, false); - assertEquals( - "[@0,0:5='tokens',<6>,1:0]\n" + - "[@1,7:12='tokens',<4>,2:0]\n" + - "[@2,14:14='{',<3>,2:7]\n" + - "[@3,16:23='notLabel',<6>,3:0]\n" + - "[@4,25:30='label1',<5>,4:0]\n" + - "[@5,32:32='=',<1>,4:7]\n" + - "[@6,34:39='label2',<5>,5:0]\n" + - "[@7,41:42='+=',<2>,5:7]\n" + - "[@8,44:51='notLabel',<6>,6:0]\n" + - "[@9,53:52='',<-1>,7:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testQuoteTranslation() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(57); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("QUOTE : '\"' ; // make sure this compiles"); - String grammar = grammarBuilder.toString(); - - String input ="\""; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\"',<1>,1:0]\n" + - "[@1,1:0='',<-1>,1:1]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardPlus_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)+? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */\n" + - "/* /* */\n" + - "/* /*nested*/ */\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,9:9='\\n',<2>,1:9]\n" + - "[@2,10:34='/* /* */\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,35:35='\\n',<2>,3:16]\n" + - "[@4,36:35='',<-1>,4:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRecursiveLexerRuleRefWithWildcardStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("CMT : '/*' (CMT | .)*? '*/' ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+;"); - String grammar = grammarBuilder.toString(); - - String input = - "/* ick */x\n" + - "/* /* */x\n" + - "/* /*nested*/ */x\n"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:8='/* ick */',<1>,1:0]\n" + - "[@1,10:10='\\n',<2>,1:10]\n" + - "[@2,11:36='/* /* */x\\n/* /*nested*/ */',<1>,2:0]\n" + - "[@3,38:38='\\n',<2>,3:17]\n" + - "[@4,39:38='',<-1>,4:0]\n", found); - - assertEquals( - "line 1:9 token recognition error at: 'x'\n" + - "line 3:16 token recognition error at: 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRefToRuleDoesNotSetTokenNorEmitAnother() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("A : '-' I ;\n"); - grammarBuilder.append("I : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="34 -21 3"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:1='34',<2>,1:0]\n" + - "[@1,3:5='-21',<1>,1:3]\n" + - "[@2,7:7='3',<2>,1:7]\n" + - "[@3,8:7='',<-1>,1:8]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSlashes() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(95); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("Backslash : '\\\\';\n"); - grammarBuilder.append("Slash : '/';\n"); - grammarBuilder.append("Vee : '\\\\/';\n"); - grammarBuilder.append("Wedge : '/\\\\';\n"); - grammarBuilder.append("WS : [ \\t] -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="\\ / \\/ /\\"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:0='\\',<1>,1:0]\n" + - "[@1,2:2='/',<2>,1:2]\n" + - "[@2,4:5='\\/',<3>,1:4]\n" + - "[@3,7:8='/\\',<4>,1:7]\n" + - "[@4,9:8='',<-1>,1:9]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testZeroLengthToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(215); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("BeginString\n"); - grammarBuilder.append(" : '\\'' -> more, pushMode(StringMode)\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("mode StringMode;\n"); - grammarBuilder.append(" StringMode_X : 'x' -> more;\n"); - grammarBuilder.append(" StringMode_Done : -> more, mode(EndStringMode);\n"); - grammarBuilder.append("mode EndStringMode; \n"); - grammarBuilder.append(" EndString : '\\'' -> popMode;"); - String grammar = grammarBuilder.toString(); - - String input ="'xxx'"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "[@0,0:4=''xxx'',<1>,1:0]\n" + - "[@1,5:4='',<-1>,1:5]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestListeners.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestListeners.java index 497e6d8cc..cf63cd75d 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestListeners.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestListeners.java @@ -1,399 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestListeners extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(587); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("class MockListener:\n"); - grammarBuilder.append(" pass\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class LeafListener(MockListener):\n"); - grammarBuilder.append(" def visitTerminal(self, node):\n"); - grammarBuilder.append(" print(node.symbol.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "1\n" + - "2\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ListenersDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestListeners extends BaseRuntimeTest { + public TestListeners(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(748); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("class MockListener:\n"); - grammarBuilder.append(" pass\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class LeafListener(MockListener):\n"); - grammarBuilder.append(" def exitE(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==3:\n"); - grammarBuilder.append(" print(ctx.e(0).start.text + ' ' + ctx.e(1).start.text + ' ' + ctx.e()[0].start.text)\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1\n" + - "2\n" + - "3\n" + - "2 3 2\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ListenersDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(728); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("class MockListener:\n"); - grammarBuilder.append(" pass\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class LeafListener(MockListener):\n"); - grammarBuilder.append(" def exitCall(self, ctx):\n"); - grammarBuilder.append(" print(ctx.e().start.text + ' ' + str(ctx.eList()))\n"); - grammarBuilder.append(" def exitInt(self, ctx):\n"); - grammarBuilder.append(" print(ctx.INT().symbol.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1\n" + - "2\n" + - "3\n" + - "1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(773); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("class MockListener:\n"); - grammarBuilder.append(" pass\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class LeafListener(MockListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b 1) (b 2))\n" + - "1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(773); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("class MockListener:\n"); - grammarBuilder.append(" pass\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class LeafListener(MockListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text + ' ' + ctx.b(1).start.text + ' ' + ctx.b()[0].start.text)\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(ctx.b(0).start.text)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(736); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("class MockListener:\n"); - grammarBuilder.append(" pass\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class LeafListener(MockListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(736); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("class MockListener:\n"); - grammarBuilder.append(" pass\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class LeafListener(MockListener):\n"); - grammarBuilder.append(" def exitA(self, ctx):\n"); - grammarBuilder.append(" if ctx.getChildCount()==2:\n"); - grammarBuilder.append(" print(ctx.INT(0).symbol.text + ' ' + ctx.INT(1).symbol.text + ' ' + str_list(ctx.INT()))\n"); - grammarBuilder.append(" else:\n"); - grammarBuilder.append(" print(str(ctx.ID().symbol))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n"); - grammarBuilder.append(" from .TListener import TListener\n"); - grammarBuilder.append("else:\n"); - grammarBuilder.append(" from TListener import TListener\n"); - grammarBuilder.append("TParser.LeafListener.__bases__ = (TListener,)\n"); - grammarBuilder.append("walker = ParseTreeWalker()\n"); - grammarBuilder.append("walker.walk(TParser.LeafListener(), $ctx.r)\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParseTrees.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParseTrees.java index c14c9fcef..957426eb5 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParseTrees.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParseTrees.java @@ -1,301 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParseTrees extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2AltLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(136); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : ('x' | 'y')* 'z'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyyxyxz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x y y x y x z)\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParseTreesDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParseTrees extends BaseRuntimeTest { + public TestParseTrees(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2Alts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(129); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a y)\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParseTreesDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAltNum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(584); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("options { contextSuperClass=MyRuleNode; }\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("class MyRuleNode(ParserRuleContext):\n"); - grammarBuilder.append(" def __init__(self, parent:ParserRuleContext = None, invokingStateNumber:int = None ):\n"); - grammarBuilder.append(" super(TParser.MyRuleNode, self).__init__(parent, invokingStateNumber)\n"); - grammarBuilder.append(" self.altNum = 0;\n"); - grammarBuilder.append(" def getAltNumber(self):\n"); - grammarBuilder.append(" return self.altNum\n"); - grammarBuilder.append(" def setAltNumber(self, altNum):\n"); - grammarBuilder.append(" self.altNum = altNum\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("a : 'f'\n"); - grammarBuilder.append(" | 'g'\n"); - grammarBuilder.append(" | 'x' b 'z'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'e' {} | 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xyz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a:3 x (b:2 y) z)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExtraToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="xzy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x z y)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(144); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' | 'y'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append(" "); - String grammar = grammarBuilder.toString(); - - - String input ="z"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a z)\n", found); - - assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleRef() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(138); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b 'x'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : 'y' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="yx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a (b y) x)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSync() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(145); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'* '!'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("Z : 'z' \n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xzyy!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x z y y !)\n", found); - - assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToken2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(127); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' 'y'\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("(a x y)\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenAndRuleContextString() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(173); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@init {\n"); - grammarBuilder.append("self._buildParseTrees = True\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($r.ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : 'x' { \n"); - grammarBuilder.append("print(str_list(self.getRuleInvocationStack()))\n"); - grammarBuilder.append("} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "[a, s]\n" + - "(a x)\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserErrors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserErrors.java index 2d41f6b5e..c1af120ba 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserErrors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserErrors.java @@ -1,719 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserErrors extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(61); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x='b' {print(\"conjured=\" + str($x))} 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserErrorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserErrors extends BaseRuntimeTest { + public TestParserErrors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testConjuringUpTokenFromSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(67); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' x=('b'|'c') {print(\"conjured=\" + str($x))} 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("conjured=[@-1,-1:-1='',<2>,1:1]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserErrorsDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testContextListGetters() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(160); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members{\n"); - grammarBuilder.append("def foo():\n"); - grammarBuilder.append(" s = SContext()\n"); - grammarBuilder.append(" a = s.a()\n"); - grammarBuilder.append(" b = s.b()\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : (a | b)+;\n"); - grammarBuilder.append("a : 'a' {print(\"a\",end='')};\n"); - grammarBuilder.append("b : 'b' {print(\"b\",end='')};"); - String grammar = grammarBuilder.toString(); - - - String input ="abab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("abab\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDuplicatedLeftRecursiveCall_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(63); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : expr EOF;\n"); - grammarBuilder.append("expr : 'x'\n"); - grammarBuilder.append(" | expr expr\n"); - grammarBuilder.append(" ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xxxx"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidATNStateRemoval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(102); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID ':' expr;\n"); - grammarBuilder.append("expr : primary expr? {pass} | expr '->' ID;\n"); - grammarBuilder.append("primary : ID;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input ="x:x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testInvalidEmptyInput() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : ID+;\n"); - grammarBuilder.append("ID : [a-z]+;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, true); - - assertEquals("", found); - - assertEquals("line 1:0 missing ID at ''\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1ErrorInfo() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(314); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : animal (AND acClass)? service EOF;\n"); - grammarBuilder.append("animal : (DOG | CAT );\n"); - grammarBuilder.append("service : (HARDWARE | SOFTWARE) ;\n"); - grammarBuilder.append("AND : 'and';\n"); - grammarBuilder.append("DOG : 'dog';\n"); - grammarBuilder.append("CAT : 'cat';\n"); - grammarBuilder.append("HARDWARE: 'hardware';\n"); - grammarBuilder.append("SOFTWARE: 'software';\n"); - grammarBuilder.append("WS : ' ' -> skip ;\n"); - grammarBuilder.append("acClass\n"); - grammarBuilder.append("@init\n"); - grammarBuilder.append("{print(self.getExpectedTokens().toString(self.literalNames, self.symbolicNames))}\n"); - grammarBuilder.append(" : ;"); - String grammar = grammarBuilder.toString(); - - - String input ="dog and software"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("{'hardware', 'software'}\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'\n"); - grammarBuilder.append(" | 'a' 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 no viable alternative at input 'ae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(55); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c'\n"); - grammarBuilder.append(" | 'a' 'b' 'd'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abe"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 no viable alternative at input 'abe'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLLStar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aaae"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:3 no viable alternative at input 'aaae'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(40); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c';"); - String grammar = grammarBuilder.toString(); - - - String input ="aacabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultiTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(41); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaaababc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n" + - "line 1:6 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoViableAltAvoidance() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(83); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : e '!' ;\n"); - grammarBuilder.append("e : 'a' 'b'\n"); - grammarBuilder.append(" | 'a'\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("DOT : '.' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a."; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 mismatched input '.' expecting '!'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(34); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') 'd' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleSetInsertionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="ad"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("[@0,0:0='a',<3>,1:0]\n", found); - - assertEquals("line 1:1 missing {'b', 'c'} at 'd'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(38); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('b' | 'c')\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'a'\n"); - grammarBuilder.append(";"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(25); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforeLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(36); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})*;"); - String grammar = grammarBuilder.toString(); - - - String input ="aabc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:1 extraneous input 'a' expecting {, 'b', 'z'}\n" + - "line 1:3 token recognition error at: 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionBeforePredict() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(48); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a'+ 'b'\n"); - grammarBuilder.append(" | 'a'+ 'c'\n"); - grammarBuilder.append(";\n"); - grammarBuilder.append("q : 'e' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="caaab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 extraneous input 'c' expecting 'a'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionConsumption() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(80); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("myset: ('b'|'c') ;\n"); - grammarBuilder.append("a: 'a' myset 'd' {print(\"\" + str($myset.stop))} ; "); - String grammar = grammarBuilder.toString(); - - - String input ="aabd"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("[@2,2:2='b',<1>,1:2]\n", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(29); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionDuringLoop2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(41); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'z'{pass})* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ababbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 extraneous input 'a' expecting {'b', 'z', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenDeletionExpectingSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(30); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' ('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aab"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 extraneous input 'a' expecting {'b', 'c'}\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSingleTokenInsertion() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(28); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 missing 'b' at 'c'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(24); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : 'a' 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="aa"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - - assertEquals("line 1:1 mismatched input 'a' expecting 'b'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testTokenMismatch2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(165); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("stat: ( '(' expr? ')' )? EOF ;\n"); - grammarBuilder.append("expr: ID '=' STR ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ERR : '~FORCE_ERROR~' ;\n"); - grammarBuilder.append("ID : [a-zA-Z]+ ;\n"); - grammarBuilder.append("STR : '\"' ~[\"]* '\"' ;\n"); - grammarBuilder.append("WS : [ \\t\\r\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="( ~FORCE_ERROR~ "; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - - assertEquals("line 1:2 mismatched input '~FORCE_ERROR~' expecting {')', ID}\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserExec.java index e3208de1f..45a5aa53c 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestParserExec.java @@ -1,791 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestParserExec extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID+ {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.ParserExecDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestParserExec extends BaseRuntimeTest { + public TestParserExec(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(ParserExecDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(77); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)+ {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorAStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(82); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ID)* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorB() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(122); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID {\n"); - grammarBuilder.append("print(\"alt 1\")\n"); - grammarBuilder.append("} | INT {\n"); - grammarBuilder.append("print(\"alt 2\")\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBPlus() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(105); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})+ {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(105); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAorBStar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(105); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|INT{\n"); - grammarBuilder.append("})* {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(98); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ID INT {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abc34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEOFInClosure() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(53); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : stat EOF;\n"); - grammarBuilder.append("stat : 'x' ('y' | EOF)*?;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(186); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(186); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement|) {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x else x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(187); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement ('else' statement)?? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIfIfElseNonGreedyBinding2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(186); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : statement+ ;\n"); - grammarBuilder.append("statement : 'x' | ifStatement;\n"); - grammarBuilder.append("ifStatement : 'if' 'y' statement (|'else' statement) {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> channel(HIDDEN);"); - String grammar = grammarBuilder.toString(); - - - String input ="if y if y x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "if y x\n" + - "if y if y x else x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(103); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLL1OptionalBlock_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(103); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|{}INT)? {\n"); - grammarBuilder.append("print($text)\n"); - grammarBuilder.append("};\n"); - grammarBuilder.append("ID : 'a'..'z'+;\n"); - grammarBuilder.append("INT : '0'..'9'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabelAliasingAcrossLabeledAlternatives() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : a* EOF;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : label=subrule {print($label.text)} #One\n"); - grammarBuilder.append(" | label='y' {print($label.text)} #Two\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("subrule : 'x';\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="xy"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals( - "x\n" + - "y\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b1=b b2+=b* b3+=';' ;\n"); - grammarBuilder.append("b : id_=ID val+=INT*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelForClosureContext() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(456); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("ifStatement\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("assert isinstance(v, (list, tuple))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : 'if' expression\n"); - grammarBuilder.append(" ( ( 'then'\n"); - grammarBuilder.append(" executableStatement*\n"); - grammarBuilder.append(" elseIfStatement* // <--- problem is here; should yield a list not node\n"); - grammarBuilder.append(" elseStatement?\n"); - grammarBuilder.append(" 'end' 'if'\n"); - grammarBuilder.append(" ) | executableStatement )\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("elseIfStatement\n"); - grammarBuilder.append(" : 'else' 'if' expression 'then' executableStatement*\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("expression : 'a' ;\n"); - grammarBuilder.append("executableStatement : 'a' ;\n"); - grammarBuilder.append("elseStatement : 'a' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "expression", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testListLabelsOnSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(140); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : b b* ';' ;\n"); - grammarBuilder.append("b : ID val+=(INT | FLOAT)*;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("FLOAT : [0-9]+ '.' [0-9]+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc 34;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testMultipleEOFHandling() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(42); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("prog : ('x' | 'x' 'y') EOF EOF;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "prog", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptional_4() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(90); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("stat : ifstat | 'x';\n"); - grammarBuilder.append("ifstat : 'if' stat ('else' stat)?;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="if if x else x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "stat", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserProperty() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(153); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {\n"); - grammarBuilder.append("def Property(self):\n"); - grammarBuilder.append(" return True\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("a : {$parser.Property()}? ID {print(\"valid\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("valid\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedIfIfElse() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(175); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : stmt EOF ;\n"); - grammarBuilder.append("stmt : ifStmt | ID;\n"); - grammarBuilder.append("ifStmt : 'if' ID stmt ('else' stmt | { self._input.LA(1)!=TParser.ELSE }?);\n"); - grammarBuilder.append("ELSE : 'else';\n"); - grammarBuilder.append("ID : [a-zA-Z]+;\n"); - grammarBuilder.append("WS : [ \\n\\t]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="if x if x a else b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredictionIssue334() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(244); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_ @init{\n"); - grammarBuilder.append("self._errHandler = BailErrorStrategy()\n"); - grammarBuilder.append("} \n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : item (SEMICOLON item)* SEMICOLON? EOF ;\n"); - grammarBuilder.append("item : A B?;\n"); - grammarBuilder.append("SEMICOLON: ';';\n"); - grammarBuilder.append("A : 'a'|'A';\n"); - grammarBuilder.append("B : 'b'|'B';\n"); - grammarBuilder.append("WS : [ \\r\\t\\n]+ -> skip;"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, false); - - assertEquals("(file_ (item a) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input =""; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testReferenceToATN_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (ID|ATN)* ATN? {print($text)} ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("ATN : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a 34 c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("a34c\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestPerformance.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestPerformance.java index 10372b2c3..69e637cf2 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestPerformance.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestPerformance.java @@ -1,218 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestPerformance extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.PerformanceDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestPerformance extends BaseRuntimeTest { + public TestPerformance(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testExpressionGrammar_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(164); - grammarBuilder.append("grammar Expr;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("program: expr EOF;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("expr\n"); - grammarBuilder.append(" : ID\n"); - grammarBuilder.append(" | 'not' expr\n"); - grammarBuilder.append(" | expr 'and' expr\n"); - grammarBuilder.append(" | expr 'or' expr\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("ID: [a-zA-Z_][a-zA-Z_0-9]*;\n"); - grammarBuilder.append("WS: [ \\t\\n\\r\\f]+ -> skip;\n"); - grammarBuilder.append("ERROR: .;"); - String grammar = grammarBuilder.toString(); - - - String input = - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - " X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and X6 and not X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and X7 and not X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and X8 and not X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and X9 and not X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and X10 and not X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and X11 and not X12 or\n" + - "not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 and not X10 and not X11 and X12"; - String found = execParser("Expr.g4", grammar, "ExprParser", "ExprLexer", "ExprListener", "ExprVisitor", "program", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(PerformanceDescriptors.class, "Python3"); } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalLexer.java index 2973005ee..f0401bff0 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalLexer.java @@ -1,218 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalLexer extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisableRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(131); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("E1 : 'enum' { False }? ;\n"); - grammarBuilder.append("E2 : 'enum' { True }? ; // winner not E1 or ID\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<3>,1:5]\n" + - "[@2,8:7='',<-1>,1:8]\n" + - "s0-' '->:s5=>4\n" + - "s0-'a'->:s6=>3\n" + - "s0-'e'->:s1=>3\n" + - ":s1=>3-'n'->:s2=>3\n" + - ":s2=>3-'u'->:s3=>3\n" + - ":s6=>3-'b'->:s6=>3\n" + - ":s6=>3-'c'->:s6=>3\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalLexerDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalLexer extends BaseRuntimeTest { + public TestSemPredEvalLexer(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testEnumNotID() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(96); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<1>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s3=>3\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalLexerDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDnotEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(84); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { False }? ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s2=>3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIDvsEnum() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(85); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : 'enum' { False }? ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input ="enum abc enum"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "[@0,0:3='enum',<2>,1:0]\n" + - "[@1,5:7='abc',<2>,1:5]\n" + - "[@2,9:12='enum',<2>,1:9]\n" + - "[@3,13:12='',<-1>,1:13]\n" + - "s0-' '->:s5=>3\n" + - "s0-'a'->:s4=>2\n" + - "s0-'e'->:s1=>2\n" + - ":s1=>2-'n'->:s2=>2\n" + - ":s2=>2-'u'->:s3=>2\n" + - ":s4=>2-'b'->:s4=>2\n" + - ":s4=>2-'c'->:s4=>2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndent() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(135); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { self._tokenStartColumn==0 }?\n"); - grammarBuilder.append(" { print(\"INDENT\") } ;\n"); - grammarBuilder.append("NL : '\\n';\n"); - grammarBuilder.append("WS : [ \\t]+ ;"); - String grammar = grammarBuilder.toString(); - - String input = - "abc\n" + - " def \n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "INDENT\n" + - "[@0,0:2='abc',<1>,1:0]\n" + - "[@1,3:3='\\n',<3>,1:3]\n" + - "[@2,4:5=' ',<2>,2:0]\n" + - "[@3,6:8='def',<1>,2:2]\n" + - "[@4,9:10=' ',<4>,2:5]\n" + - "[@5,11:11='\\n',<3>,2:7]\n" + - "[@6,12:11='',<-1>,3:0]\n" + - "s0-'\n" + - "'->:s2=>3\n" + - "s0-'a'->:s1=>1\n" + - "s0-'d'->:s1=>1\n" + - ":s1=>1-'b'->:s1=>1\n" + - ":s1=>1-'c'->:s1=>1\n" + - ":s1=>1-'e'->:s1=>1\n" + - ":s1=>1-'f'->:s1=>1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerInputPositionSensitivePredicates() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(206); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("WORD1 : ID1+ { print(self.text) } ;\n"); - grammarBuilder.append("WORD2 : ID2+ { print(self.text) } ;\n"); - grammarBuilder.append("fragment ID1 : { self.column < 2 }? [a-zA-Z];\n"); - grammarBuilder.append("fragment ID2 : { self.column >= 2 }? [a-zA-Z];\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip;"); - String grammar = grammarBuilder.toString(); - - String input = - "a cde\n" + - "abcde\n"; - String found = execLexer("L.g4", grammar, "L", input, true); - assertEquals( - "a\n" + - "cde\n" + - "ab\n" + - "cde\n" + - "[@0,0:0='a',<1>,1:0]\n" + - "[@1,2:4='cde',<2>,1:2]\n" + - "[@2,6:7='ab',<1>,2:0]\n" + - "[@3,8:10='cde',<2>,2:2]\n" + - "[@4,12:11='',<-1>,3:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicatedKeywords() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(142); - grammarBuilder.append("lexer grammar L;\n"); - grammarBuilder.append("ENUM : [a-z]+ { self.text==\"enum\" }? { print(\"enum!\") } ;\n"); - grammarBuilder.append("ID : [a-z]+ { print(\"ID \" + self.text) } ;\n"); - grammarBuilder.append("WS : [ \\n] -> skip ;"); - String grammar = grammarBuilder.toString(); - - String input ="enum enu a"; - String found = execLexer("L.g4", grammar, "L", input, false); - assertEquals( - "enum!\n" + - "ID enu\n" + - "ID a\n" + - "[@0,0:3='enum',<1>,1:0]\n" + - "[@1,5:7='enu',<2>,1:5]\n" + - "[@2,9:9='a',<2>,1:9]\n" + - "[@3,10:9='',<-1>,1:10]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalParser.java index f70340618..f2d1cd51e 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSemPredEvalParser.java @@ -1,763 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSemPredEvalParser extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAlts() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(276); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a; // do 2x: once in ATN, next in DFA\n"); - grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" | {False}? ID {print(\"alt 3\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "alt 1\n" + - "alt 1\n", found); - - assertEquals( - "line 1:0 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:0 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='x'\n" + - "line 1:3 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:3 reportAmbiguity d=0 (a): ambigAlts={1, 2}, input='y'\n", this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SemPredEvalParserDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSemPredEvalParser extends BaseRuntimeTest { + public TestSemPredEvalParser(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void test2UnpredicatedAltsAndOneOrthogonalAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(321); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : {self._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION} a ';' a ';' a;\n"); - grammarBuilder.append("a : INT {print(\"alt 1\")}\n"); - grammarBuilder.append(" | ID {print(\"alt 2\")} // must pick this one for ID since pred is false\n"); - grammarBuilder.append(" | ID {print(\"alt 3\")}\n"); - grammarBuilder.append(" | {False}? ID {print(\"alt 4\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="34; x; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, true); - - assertEquals( - "alt 1\n" + - "alt 2\n" + - "alt 2\n", found); - - assertEquals( - "line 1:4 reportAttemptingFullContext d=0 (a), input='x'\n" + - "line 1:4 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='x'\n" + - "line 1:7 reportAttemptingFullContext d=0 (a), input='y'\n" + - "line 1:7 reportAmbiguity d=0 (a): ambigAlts={2, 3}, input='y'\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SemPredEvalParserDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionHidesPreds() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(212); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : a+ ;\n"); - grammarBuilder.append("a : {self.i = 1} ID {self.i == 1}? {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {self.i = 2} ID {self.i == 2}? {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 1\n" + - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testActionsHidePredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(277); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("def pred(self, v):\n"); - grammarBuilder.append(" print('eval=' + str(v).lower())\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {} {self.pred(True)}? {print(\"parse\")} '!' ;\n"); - grammarBuilder.append("t : e {} {self.pred(False)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testAtomWithClosureInTranslatedLRRule() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(94); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("start : e[0] EOF;\n"); - grammarBuilder.append("e[int _p]\n"); - grammarBuilder.append(" : ( 'a' | 'b'+ ) ( {3 >= $_p}? '+' e[4] )*\n"); - grammarBuilder.append(" ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a+b+a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "start", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDepedentPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(300); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("def pred(self, v):\n"); - grammarBuilder.append(" print('eval=' + str(v).lower())\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : a[99] ;\n"); - grammarBuilder.append("a[int i] : e {self.pred($i==99)}? {print(\"parse\")} '!' ;\n"); - grammarBuilder.append("b[int i] : e {self.pred($i==99)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDependentPredNotInOuterCtxShouldBeIgnored() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(256); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b[2] ';' | b[2] '.' ; // decision in s drills down to ctx-dependent pred in a;\n"); - grammarBuilder.append("b[int i] : a[i] ;\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;\n"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testDisabledAlternative() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(121); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("cppCompilationUnit : content+ EOF;\n"); - grammarBuilder.append("content: anything | {False}? .;\n"); - grammarBuilder.append("anything: ANY_CHAR;\n"); - grammarBuilder.append("ANY_CHAR: [_a-zA-Z0-9];"); - String grammar = grammarBuilder.toString(); - - - String input ="hello"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "cppCompilationUnit", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testIndependentPredNotPassedOuterCtxToAvoidCastException() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(169); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : b ';' | b '.' ;\n"); - grammarBuilder.append("b : a ;\n"); - grammarBuilder.append("a\n"); - grammarBuilder.append(" : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a;"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNoTruePredsThrowsNoViableAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {False}? ID INT {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {False}? ID INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOrder() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(283); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {} a; // do 2x: once in ATN, next in DFA;\n"); - grammarBuilder.append("// action blocks lookahead from falling off of 'a'\n"); - grammarBuilder.append("// and looking into 2nd 'a' ref. !ctx dependent pred\n"); - grammarBuilder.append("a : ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 1\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(203); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); - - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x \\n)) )\n", found); - - assertEquals( - "line 5:0 mismatched input '' expecting '\n" + - "'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredFromAltTestedInLoopBack_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(203); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("file_\n"); - grammarBuilder.append("@after {print($ctx.toStringTree(recog=self))}\n"); - grammarBuilder.append(" : para para EOF ;\n"); - grammarBuilder.append("para: paraContent NL NL ;\n"); - grammarBuilder.append("paraContent : ('s'|'x'|{self._input.LA(2)!=TParser.NL}? NL)+ ;\n"); - grammarBuilder.append("NL : '\\n' ;\n"); - grammarBuilder.append("s : 's' ;\n"); - grammarBuilder.append("X : 'x' ;"); - String grammar = grammarBuilder.toString(); - - - String input = - "s\n" + - "\n" + - "\n" + - "x\n" + - "\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "file_", input, true); - - assertEquals("(file_ (para (paraContent s) \\n \\n) (para (paraContent \\n x) \\n \\n) )\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {enumKeyword = True}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); - grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); - - assertEquals("ID abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredTestedEvenWhenUnAmbig_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(192); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {enumKeyword = True}\n"); - grammarBuilder.append("primary\n"); - grammarBuilder.append(" : ID {print(\"ID \"+$ID.text)}\n"); - grammarBuilder.append(" | {not self.enumKeyword}? 'enum' {print(\"enum\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n\\r]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="enum"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "primary", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'enum'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(189); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {$i==2}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredicateDependentOnArg2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(157); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : a[2] a[1];\n"); - grammarBuilder.append("a[int i]\n"); - grammarBuilder.append(" : {$i==1}? ID \n"); - grammarBuilder.append(" | {$i==2}? ID \n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPredsInGlobalFOLLOW() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(271); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("def pred(self, v):\n"); - grammarBuilder.append(" print('eval=' + str(v).lower())\n"); - grammarBuilder.append(" return v\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("s : e {self.pred(True)}? {print(\"parse\")} '!' ;\n"); - grammarBuilder.append("t : e {self.pred(False)}? ID ;\n"); - grammarBuilder.append("e : ID | ; // non-LL(1) so we use ATN\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="a!"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "eval=true\n" + - "parse\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRewindBeforePredEval() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(201); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a;\n"); - grammarBuilder.append("a : {self._input.LT(1).text==\"x\"}? ID INT {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {self._input.LT(1).text==\"y\"}? ID INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="y 3 x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimple() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(235); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a; // do 3x: once in ATN, next in DFA then INT in ATN\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" | INT {print(\"alt 3\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x y 3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 3\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ;\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals("line 1:0 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSimpleValidate2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(153); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a a a;\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="3 4 x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n", found); - - assertEquals("line 1:4 no viable alternative at input 'x'\n", this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeft() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(150); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append(" s : a+ ;\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "alt 2\n" + - "alt 2\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testToLeftWithVaryingPredicate() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(243); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::members {i = 0}\n"); - grammarBuilder.append("s : ({self.i += 1\n"); - grammarBuilder.append("print(\"i=\",end='')\n"); - grammarBuilder.append("print(self.i)} a)+ ;\n"); - grammarBuilder.append("a : {self.i % 2 == 0}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {self.i % 2 != 0}? ID {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x x y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "i=1\n" + - "alt 2\n" + - "i=2\n" + - "alt 1\n" + - "i=3\n" + - "alt 2\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testUnpredicatedPathsInAlt() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(169); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a {print(\"alt 1\")}\n"); - grammarBuilder.append(" | b {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("a : {False}? ID INT\n"); - grammarBuilder.append(" | ID INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x 4"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("alt 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testValidateInDFA() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(318); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("s : a ';' a;\n"); - grammarBuilder.append("// ';' helps us to resynchronize without consuming\n"); - grammarBuilder.append("// 2nd 'a' reference. We our testing that the DFA also\n"); - grammarBuilder.append("// throws an exception if the validating predicate fails\n"); - grammarBuilder.append("a : {False}? ID {print(\"alt 1\")}\n"); - grammarBuilder.append(" | {True}? INT {print(\"alt 2\")}\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("ID : 'a'..'z'+ ;\n"); - grammarBuilder.append("INT : '0'..'9'+;\n"); - grammarBuilder.append("WS : (' '|'\\n') -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x ; y"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:0 no viable alternative at input 'x'\n" + - "line 1:4 no viable alternative at input 'y'\n", this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSets.java index 065ab2337..dbccf6fde 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestSets.java @@ -1,477 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestSets extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testCharSetLiteral() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(78); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : (A {print($A.text)})+ ;\n"); - grammarBuilder.append("A : [AaBb] ;\n"); - grammarBuilder.append("WS : (' '|'\\n')+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="A a B b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals( - "A\n" + - "a\n" + - "B\n" + - "b\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.SetsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestSets extends BaseRuntimeTest { + public TestSets(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testComplementSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(51); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("parse : ~NEW_LINE;\n"); - grammarBuilder.append("NEW_LINE: '\\r'? '\\n';"); - String grammar = grammarBuilder.toString(); - - - String input ="a"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "parse", input, false); - - assertEquals("", found); - - assertEquals( - "line 1:0 token recognition error at: 'a'\n" + - "line 1:1 missing {} at ''\n", this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(SetsDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testLexerStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(70); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : ('a'|'b')* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotChar() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(46); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : ~'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(52); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : ~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(54); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : h=~('b'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testNotCharSetWithRuleRef3() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(118); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print($A.text)} ;\n"); - grammarBuilder.append("A : ('a'|B) ; // this doesn't collapse to set but works\n"); - grammarBuilder.append("fragment\n"); - grammarBuilder.append("B : ~('a'|'c') ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'? 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="ac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("ac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testOptionalSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(50); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~('x'|'y') 'z' {print($t.text)} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotToken() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(56); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("zz\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserNotTokenWithLabel() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(44); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=~'x' 'z' {print($t.text)} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="zz"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("z\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testParserSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(45); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : t=('x'|'y') {print($t.text)} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="x"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("x\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusLexerSingleElement() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'+ 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testPlusSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testRuleAsSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(69); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {print(self._input.getText())} : 'a' | 'b' |'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="b"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("b\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testSeqDoesNotBecomeSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(106); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {print(self._input.getText())} ;\n"); - grammarBuilder.append("fragment A : '1' | '2';\n"); - grammarBuilder.append("fragment B : '3' '4';\n"); - grammarBuilder.append("C : A | B;"); - String grammar = grammarBuilder.toString(); - - - String input ="34"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("34\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="bbbbc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("bbbbc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarLexerSingleElement_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(64); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {print(self._input.getText())} ;\n"); - grammarBuilder.append("A : 'b'* 'c' ;"); - String grammar = grammarBuilder.toString(); - - - String input ="c"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("c\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - public void testStarSet() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(62); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {print(self._input.getText())} ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abaac"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "a", input, false); - - assertEquals("abaac\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestVisitors.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestVisitors.java index d8cb927c9..cf0d3cf83 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestVisitors.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/python3/TestVisitors.java @@ -1,298 +1,19 @@ -/* This file is generated by TestGenerator, any edits will be overwritten by the next generation. */ package org.antlr.v4.test.runtime.python3; -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@SuppressWarnings("unused") -public class TestVisitors extends BasePython3Test { - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testBasic() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - "[ '1', '2' ]\n", found); - assertNull(this.stderrDuringParse); +import org.antlr.v4.test.runtime.BaseRuntimeTest; +import org.antlr.v4.test.runtime.RuntimeTestDescriptor; +import org.antlr.v4.test.runtime.descriptors.VisitorsDescriptors; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) +public class TestVisitors extends BaseRuntimeTest { + public TestVisitors(RuntimeTestDescriptor descriptor) { + super(descriptor,new BasePython3Test()); } - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLR() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(231); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e op='*' e\n"); - grammarBuilder.append(" | e op='+' e\n"); - grammarBuilder.append(" | INT\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1+2*3"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) + (e (e 2) * (e 3)))\n" + - "1,,2,,32 3 21 2 1\n", found); - assertNull(this.stderrDuringParse); - + @Parameterized.Parameters(name="{0}") + public static RuntimeTestDescriptor[] getAllTestDescriptors() { + return BaseRuntimeTest.getRuntimeTestDescriptors(VisitorsDescriptors.class, "Python3"); } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testLRWithLabels() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(271); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=e ;\n"); - grammarBuilder.append("e : e '(' eList ')' # Call\n"); - grammarBuilder.append(" | INT # Int\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("eList : e (',' e)* ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1(2,3)"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(e (e 1) ( (eList (e 2) , (e 3)) ))\n" + - "1,,2,,3,1 [13 6]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b 1) (b 2))\n" + - ",1 2 1\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testRuleGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(258); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : b b // forces list\n"); - grammarBuilder.append(" | b // a list still\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("b : ID | INT;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a (b abc))\n" + - "abc\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_1() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="1 2"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a 1 2)\n" + - ",1 2 [1, 2]\n", found); - assertNull(this.stderrDuringParse); - - } - - /* This file and method are generated by TestGenerator, any edits will be overwritten by the next generation. */ - @Test - @Ignore("true") - public void testTokenGetters_2() throws Exception { - mkdir(tmpdir); - - StringBuilder grammarBuilder = new StringBuilder(216); - grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@parser::header {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("@parser::members {\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append("\n"); - grammarBuilder.append("s\n"); - grammarBuilder.append("@after {\n"); - grammarBuilder.append("print($ctx.r.toStringTree(recog=self))\n"); - grammarBuilder.append("}\n"); - grammarBuilder.append(" : r=a ;\n"); - grammarBuilder.append("a : INT INT\n"); - grammarBuilder.append(" | ID\n"); - grammarBuilder.append(" ;\n"); - grammarBuilder.append("MULT: '*' ;\n"); - grammarBuilder.append("ADD : '+' ;\n"); - grammarBuilder.append("INT : [0-9]+ ;\n"); - grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("WS : [ \\t\\n]+ -> skip ;"); - String grammar = grammarBuilder.toString(); - - - String input ="abc"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "TListener", "TVisitor", "s", input, false); - - assertEquals( - "(a abc)\n" + - "[@0,0:2='abc',<4>,1:0]\n", found); - assertNull(this.stderrDuringParse); - - } - - } diff --git a/runtime/Cpp/runtime/src/antlr4-common.h b/runtime/Cpp/runtime/src/antlr4-common.h index 34e055fb2..79a35d7b5 100644 --- a/runtime/Cpp/runtime/src/antlr4-common.h +++ b/runtime/Cpp/runtime/src/antlr4-common.h @@ -108,7 +108,7 @@ #define EXPIMP_TEMPLATE #else #define GUID_LIBUUID - #if __GNUC__ >= 4 + #if __GNUC__ >= 6 #define ANTLR4CPP_PUBLIC __attribute__ ((visibility ("default"))) #else #define ANTLR4CPP_PUBLIC diff --git a/runtime/Java/src/org/antlr/v4/runtime/misc/Utils.java b/runtime/Java/src/org/antlr/v4/runtime/misc/Utils.java index 991ee2b35..77a6adde9 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/misc/Utils.java +++ b/runtime/Java/src/org/antlr/v4/runtime/misc/Utils.java @@ -177,4 +177,58 @@ public class Utils { } return s; } + + /** @since 4.6 */ + public static String expandTabs(String s, int tabSize) { + if ( s==null ) return null; + StringBuilder buf = new StringBuilder(); + int col = 0; + for (int i = 0; iorg.antlr antlr4-runtime-testsuite ${project.version} - - - org.antlr - antlr4 - ${project.version} - - - org.antlr - antlr4 - ${project.version} test-jar org.antlr - antlr4-runtime-testsuite + antlr4 + ${project.version} + + + org.antlr + antlr4 ${project.version} test-jar diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNConstruction.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNConstruction.java index 08648f5c4..7cba55db1 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNConstruction.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNConstruction.java @@ -36,14 +36,15 @@ import org.antlr.v4.automata.ParserATNFactory; import org.antlr.v4.parse.ANTLRParser; import org.antlr.v4.runtime.atn.ATN; import org.antlr.v4.runtime.atn.ATNState; -import org.antlr.v4.test.runtime.java.BaseTest; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ErrorType; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LexerGrammar; import org.antlr.v4.tool.ast.GrammarAST; import org.antlr.v4.tool.ast.GrammarRootAST; import org.antlr.v4.tool.ast.RuleAST; +import org.junit.Before; import org.junit.Test; import java.util.Arrays; @@ -54,7 +55,13 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -public class TestATNConstruction extends BaseTest { +public class TestATNConstruction extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testA() throws Exception { Grammar g = new Grammar( diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNDeserialization.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNDeserialization.java index a8ef3affc..2968f5588 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNDeserialization.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNDeserialization.java @@ -34,16 +34,23 @@ import org.antlr.v4.runtime.atn.ATN; import org.antlr.v4.runtime.atn.ATNDeserializer; import org.antlr.v4.runtime.atn.ATNSerializer; import org.antlr.v4.runtime.misc.Utils; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import java.util.Arrays; import static org.junit.Assert.assertEquals; -public class TestATNDeserialization extends BaseTest { +public class TestATNDeserialization extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testSimpleNoBlock() throws Exception { Grammar g = new Grammar( "parser grammar T;\n"+ diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNInterpreter.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNInterpreter.java index 2309a1cf2..c2ea853d7 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNInterpreter.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNInterpreter.java @@ -39,11 +39,12 @@ import org.antlr.v4.runtime.atn.BlockStartState; import org.antlr.v4.runtime.atn.LexerATNSimulator; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntegerList; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LexerGrammar; import org.antlr.v4.tool.Rule; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -52,7 +53,13 @@ import static org.junit.Assert.assertEquals; // NOTICE: TOKENS IN LEXER, PARSER MUST BE SAME OR TOKEN TYPE MISMATCH // NOTICE: TOKENS IN LEXER, PARSER MUST BE SAME OR TOKEN TYPE MISMATCH -public class TestATNInterpreter extends BaseTest { +public class TestATNInterpreter extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testSimpleNoBlock() throws Exception { LexerGrammar lg = new LexerGrammar( "lexer grammar L;\n" + @@ -384,7 +391,7 @@ public class TestATNInterpreter extends BaseTest { ATN lexatn = createATN(lg, true); LexerATNSimulator lexInterp = new LexerATNSimulator(lexatn,new DFA[] { new DFA(lexatn.modeToStartState.get(Lexer.DEFAULT_MODE)) },null); IntegerList types = getTokenTypesViaATN(inputString, lexInterp); - System.out.println(types); +// System.out.println(types); g.importVocab(lg); @@ -392,7 +399,7 @@ public class TestATNInterpreter extends BaseTest { ATN atn = f.createATN(); IntTokenStream input = new IntTokenStream(types); - System.out.println("input="+input.types); +// System.out.println("input="+input.types); ParserInterpreterForTesting interp = new ParserInterpreterForTesting(g, input); ATNState startState = atn.ruleToStartState[g.getRule("a").index]; if ( startState.transition(0).target instanceof BlockStartState ) { @@ -400,9 +407,9 @@ public class TestATNInterpreter extends BaseTest { } DOTGenerator dot = new DOTGenerator(g); - System.out.println(dot.getDOT(atn.ruleToStartState[g.getRule("a").index])); +// System.out.println(dot.getDOT(atn.ruleToStartState[g.getRule("a").index])); Rule r = g.getRule("e"); - if ( r!=null ) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); +// if ( r!=null ) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); int result = interp.matchATN(input, startState); assertEquals(expected, result); diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNLexerInterpreter.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNLexerInterpreter.java index aaf28c3b0..b423f2cfb 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNLexerInterpreter.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNLexerInterpreter.java @@ -35,9 +35,10 @@ import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.atn.ATN; import org.antlr.v4.runtime.atn.ATNState; import org.antlr.v4.runtime.misc.Utils; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import java.util.List; @@ -57,7 +58,13 @@ import static org.junit.Assert.assertEquals; * want, but occasionally there are some quirks as you'll see from * the tests below. */ -public class TestATNLexerInterpreter extends BaseTest { +public class TestATNLexerInterpreter extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testLexerTwoRules() throws Exception { LexerGrammar lg = new LexerGrammar( "lexer grammar L;\n"+ @@ -314,12 +321,12 @@ public class TestATNLexerInterpreter extends BaseTest { CharStream input = new ANTLRInputStream(inputString); ATNState startState = atn.modeNameToStartState.get("DEFAULT_MODE"); DOTGenerator dot = new DOTGenerator(lg); - System.out.println(dot.getDOT(startState, true)); +// System.out.println(dot.getDOT(startState, true)); List tokenTypes = getTokenTypes(lg, atn, input); String result = Utils.join(tokenTypes.iterator(), ", "); - System.out.println(tokenTypes); +// System.out.println(tokenTypes); assertEquals(expecting, result); } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNParserPrediction.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNParserPrediction.java index 5e5731cff..49dd59b63 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestATNParserPrediction.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestATNParserPrediction.java @@ -41,12 +41,13 @@ import org.antlr.v4.runtime.atn.LexerATNSimulator; import org.antlr.v4.runtime.atn.PredictionContextCache; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntegerList; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.DOTGenerator; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LeftRecursiveRule; import org.antlr.v4.tool.LexerGrammar; import org.antlr.v4.tool.Rule; +import org.junit.Before; import org.junit.Test; import java.util.Arrays; @@ -58,7 +59,13 @@ import static org.junit.Assert.assertTrue; // NOTICE: TOKENS IN LEXER, PARSER MUST BE SAME OR TOKEN TYPE MISMATCH // NOTICE: TOKENS IN LEXER, PARSER MUST BE SAME OR TOKEN TYPE MISMATCH -public class TestATNParserPrediction extends BaseTest { +public class TestATNParserPrediction extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testAorB() throws Exception { LexerGrammar lg = new LexerGrammar( "lexer grammar L;\n" + @@ -520,7 +527,7 @@ public class TestATNParserPrediction extends BaseTest { LexerATNSimulator lexInterp = new LexerATNSimulator(lexatn,new DFA[] { new DFA(lexatn.modeToStartState.get(Lexer.DEFAULT_MODE)) },new PredictionContextCache()); IntegerList types = getTokenTypesViaATN(inputString, lexInterp); - System.out.println(types); +// System.out.println(types); semanticProcess(lg); g.importVocab(lg); @@ -532,15 +539,15 @@ public class TestATNParserPrediction extends BaseTest { DOTGenerator dot = new DOTGenerator(g); Rule r = g.getRule("a"); - if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); +// if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); r = g.getRule("b"); - if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); +// if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); r = g.getRule("e"); - if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); +// if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); r = g.getRule("ifstat"); - if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); +// if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); r = g.getRule("block"); - if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); +// if ( r!=null) System.out.println(dot.getDOT(atn.ruleToStartState[r.index])); // Check ATN prediction // ParserATNSimulator interp = new ParserATNSimulator(atn); @@ -576,7 +583,7 @@ public class TestATNParserPrediction extends BaseTest { for (int i=0; i1 EPSILON 0,0,0\n"; ATN atn = createATN(g, true); DOTGenerator gen = new DOTGenerator(g); - System.out.println(gen.getDOT(atn.ruleToStartState[0])); String result = ATNSerializer.getDecoded(atn, Arrays.asList(g.getTokenNames())); assertEquals(expecting, result); } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestActionSplitter.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestActionSplitter.java index d8ad87c3f..f6d751135 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestActionSplitter.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestActionSplitter.java @@ -34,7 +34,8 @@ import org.antlr.runtime.ANTLRStringStream; import org.antlr.runtime.Token; import org.antlr.v4.parse.ActionSplitter; import org.antlr.v4.semantics.BlankActionSplitterListener; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Test; import java.util.ArrayList; @@ -42,7 +43,13 @@ import java.util.List; import static org.junit.Assert.assertEquals; -public class TestActionSplitter extends BaseTest { +public class TestActionSplitter extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + static String[] exprs = { "foo", "['foo'<" + ActionSplitter.TEXT + ">]", "$x", "['$x'<" + ActionSplitter.ATTR + ">]", diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestActionTranslation.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestActionTranslation.java index dfe170418..58dcce144 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestActionTranslation.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestActionTranslation.java @@ -30,13 +30,20 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; +import org.junit.Before; import org.junit.Test; /** */ @SuppressWarnings("unused") -public class TestActionTranslation extends BaseTest { +public class TestActionTranslation extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + String attributeTemplate = "attributeTemplate(members,init,inline,finally,inline2) ::= <<\n" + "parser grammar A;\n"+ diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java index 992b11679..d5c31bfff 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java @@ -1,5 +1,6 @@ package org.antlr.v4.test.tool; +import org.antlr.v4.gui.Trees; import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.LexerInterpreter; @@ -14,7 +15,6 @@ import org.antlr.v4.runtime.atn.PredictionMode; import org.antlr.v4.runtime.atn.RuleStartState; import org.antlr.v4.runtime.atn.Transition; import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.gui.Trees; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.GrammarParserInterpreter; import org.antlr.v4.tool.LexerGrammar; diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestAttributeChecks.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestAttributeChecks.java index cef7abdca..64724339e 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestAttributeChecks.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestAttributeChecks.java @@ -31,13 +31,22 @@ package org.antlr.v4.test.tool; import org.antlr.runtime.RecognitionException; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ErrorType; +import org.junit.Before; import org.junit.Test; import org.stringtemplate.v4.ST; +import org.stringtemplate.v4.STGroup; +import org.stringtemplate.v4.misc.ErrorBuffer; /** */ -public class TestAttributeChecks extends BaseTest { +public class TestAttributeChecks extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + String attributeTemplate = "parser grammar A;\n"+ "@members {}\n" + @@ -265,7 +274,9 @@ public class TestAttributeChecks extends BaseTest { for (int i = 0; i < pairs.length; i+=2) { String action = pairs[i]; String expected = pairs[i+1]; - ST st = new ST(template); + STGroup g = new STGroup('<','>'); + g.setListener(new ErrorBuffer()); // hush warnings + ST st = new ST(g, template); st.add(location, action); String grammar = st.render(); testErrors(new String[] {grammar, expected}, false); diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestBasicSemanticErrors.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestBasicSemanticErrors.java index 807172f5a..30dbae40a 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestBasicSemanticErrors.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestBasicSemanticErrors.java @@ -30,12 +30,19 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ErrorType; +import org.junit.Before; import org.junit.Test; import org.stringtemplate.v4.ST; -public class TestBasicSemanticErrors extends BaseTest { +public class TestBasicSemanticErrors extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + static String[] U = { // INPUT "parser grammar U;\n" + diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestBufferedTokenStream.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestBufferedTokenStream.java index fd85b4399..8d0c6687a 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestBufferedTokenStream.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestBufferedTokenStream.java @@ -37,13 +37,19 @@ import org.antlr.v4.runtime.LexerInterpreter; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.TokenSource; import org.antlr.v4.runtime.TokenStream; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; -public class TestBufferedTokenStream extends BaseTest { +public class TestBufferedTokenStream extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } protected TokenStream createTokenStream(TokenSource src) { return new BufferedTokenStream(src); diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestCodeGeneration.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestCodeGeneration.java index 766c7756d..a9007e6e2 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestCodeGeneration.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestCodeGeneration.java @@ -35,10 +35,11 @@ import org.antlr.v4.automata.LexerATNFactory; import org.antlr.v4.automata.ParserATNFactory; import org.antlr.v4.codegen.CodeGenerator; import org.antlr.v4.semantics.SemanticPipeline; -import org.antlr.v4.test.runtime.java.BaseTest; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import org.stringtemplate.v4.AutoIndentWriter; import org.stringtemplate.v4.InstanceScope; @@ -56,7 +57,13 @@ import java.util.List; import static org.junit.Assert.assertFalse; -public class TestCodeGeneration extends BaseTest { +public class TestCodeGeneration extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testArgDecl() throws Exception { // should use template not string /*ErrorQueue equeue = */new ErrorQueue(); String g = diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestCommonTokenStream.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestCommonTokenStream.java index 825782449..7a83c87e3 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestCommonTokenStream.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestCommonTokenStream.java @@ -40,11 +40,17 @@ import org.antlr.v4.runtime.TokenFactory; import org.antlr.v4.runtime.TokenSource; import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.WritableToken; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class TestCommonTokenStream extends TestBufferedTokenStream { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } @Override protected TokenStream createTokenStream(TokenSource src) { diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestCompositeGrammars.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestCompositeGrammars.java index 02947abb5..c44ce7b14 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestCompositeGrammars.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestCompositeGrammars.java @@ -30,12 +30,13 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ANTLRMessage; import org.antlr.v4.tool.ErrorType; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.GrammarSemanticsMessage; +import org.junit.Before; import org.junit.Test; import java.io.File; @@ -43,9 +44,15 @@ import java.io.File; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -public class TestCompositeGrammars extends BaseTest { +public class TestCompositeGrammars extends BaseJavaTest { protected boolean debug = false; + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testImportFileLocationInSubdir() throws Exception { String slave = "parser grammar S;\n" + @@ -418,11 +425,11 @@ public class TestCompositeGrammars extends BaseTest { "grammar NewJava;\n" + "import Java;\n"; - System.out.println("dir "+tmpdir); mkdir(tmpdir); writeFile(tmpdir, "Java.g4", slave); - String found = execParser("NewJava.g4", master, "NewJavaParser", "NewJavaLexer", "compilationUnit", "package Foo;", debug); - assertEquals("", found); + String found = execParser("NewJava.g4", master, "NewJavaParser", "NewJavaLexer", + null, null, "compilationUnit", "package Foo;", debug); + assertEquals(null, found); assertNull(stderrDuringParse); } @@ -446,11 +453,11 @@ public class TestCompositeGrammars extends BaseTest { "import Java;\n" + "s : e ;\n"; - System.out.println("dir "+tmpdir); mkdir(tmpdir); writeFile(tmpdir, "Java.g4", slave); - String found = execParser("T.g4", master, "TParser", "TLexer", "s", "a=b", debug); - assertEquals("", found); + String found = execParser("T.g4", master, "TParser", "TLexer", + null, null, "s", "a=b", debug); + assertEquals(null, found); assertNull(stderrDuringParse); } } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestDollarParser.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestDollarParser.java index 9519f9dcd..7537fee61 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestDollarParser.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestDollarParser.java @@ -1,12 +1,18 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -public class TestDollarParser extends BaseTest { +public class TestDollarParser extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } @Test public void testSimpleCall() throws Exception { @@ -14,7 +20,8 @@ public class TestDollarParser extends BaseTest { "a : ID { System.out.println( $parser.getSourceName() ); }\n" + " ;\n" + "ID : 'a'..'z'+ ;\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "a", "x", true); + String found = execParser("T.g4", grammar, "TParser", "TLexer", + null, null, "a", "x", true); assertTrue(found.indexOf(this.getClass().getSimpleName())>=0); assertNull(this.stderrDuringParse); } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestErrorSets.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestErrorSets.java index 7afa2b7a2..2569e6403 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestErrorSets.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestErrorSets.java @@ -29,14 +29,21 @@ */ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ErrorType; +import org.junit.Before; import org.junit.Test; /** Test errors with the set stuff in lexer and parser */ -public class TestErrorSets extends BaseTest { +public class TestErrorSets extends BaseJavaTest { protected boolean debug = false; + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + /** Public default constructor used by TestRig */ public TestErrorSets() { } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java index d2afde633..4994a3eb9 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java @@ -29,12 +29,12 @@ */ package org.antlr.v4.test.tool; +import org.antlr.v4.gui.Trees; import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.InterpreterRuleContext; import org.antlr.v4.runtime.LexerInterpreter; import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.gui.Trees; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.GrammarParserInterpreter; import org.antlr.v4.tool.LexerGrammar; @@ -135,7 +135,7 @@ public class TestGrammarParserInterpreter { ParseTree t = parser.parse(g.rules.get(startRule).index); InterpreterTreeTextProvider nodeTextProvider = new InterpreterTreeTextProvider(g.getRuleNames()); String treeStr = Trees.toStringTree(t, nodeTextProvider); - System.out.println("parse tree: "+treeStr); +// System.out.println("parse tree: "+treeStr); assertEquals(expectedParseTree, treeStr); return (InterpreterRuleContext)t; } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestGraphNodes.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestGraphNodes.java index 8081afc54..4a43b3711 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestGraphNodes.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestGraphNodes.java @@ -61,7 +61,7 @@ public class TestGraphNodes { PredictionContext r = PredictionContext.merge(PredictionContext.EMPTY, PredictionContext.EMPTY, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -74,7 +74,7 @@ public class TestGraphNodes { PredictionContext r = PredictionContext.merge(PredictionContext.EMPTY, PredictionContext.EMPTY, fullCtx(), null); - System.out.println(toDOTString(r, fullCtx())); +// System.out.println(toDOTString(r, fullCtx())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -85,7 +85,7 @@ public class TestGraphNodes { @Test public void test_x_$() { PredictionContext r = PredictionContext.merge(x(), PredictionContext.EMPTY, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -96,7 +96,7 @@ public class TestGraphNodes { @Test public void test_x_$_fullctx() { PredictionContext r = PredictionContext.merge(x(), PredictionContext.EMPTY, fullCtx(), null); - System.out.println(toDOTString(r, fullCtx())); +// System.out.println(toDOTString(r, fullCtx())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -109,7 +109,7 @@ public class TestGraphNodes { @Test public void test_$_x() { PredictionContext r = PredictionContext.merge(PredictionContext.EMPTY, x(), rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -120,7 +120,7 @@ public class TestGraphNodes { @Test public void test_$_x_fullctx() { PredictionContext r = PredictionContext.merge(PredictionContext.EMPTY, x(), fullCtx(), null); - System.out.println(toDOTString(r, fullCtx())); +// System.out.println(toDOTString(r, fullCtx())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -133,7 +133,7 @@ public class TestGraphNodes { @Test public void test_a_a() { PredictionContext r = PredictionContext.merge(a(), a(), rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -149,7 +149,7 @@ public class TestGraphNodes { PredictionContext x = x(); PredictionContext a2 = createSingleton(x, 1); PredictionContext r = PredictionContext.merge(a1, a2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -165,7 +165,7 @@ public class TestGraphNodes { PredictionContext x = x(); PredictionContext a2 = createSingleton(x, 1); PredictionContext r = PredictionContext.merge(a1, a2, fullCtx(), null); - System.out.println(toDOTString(r, fullCtx())); +// System.out.println(toDOTString(r, fullCtx())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -183,7 +183,7 @@ public class TestGraphNodes { PredictionContext a1 = createSingleton(x, 1); PredictionContext a2 = a(); PredictionContext r = PredictionContext.merge(a1, a2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -201,7 +201,7 @@ public class TestGraphNodes { PredictionContext left = createSingleton(right, 8); PredictionContext merged = PredictionContext.merge(left, right, false, null); String actual = toDOTString(merged, false); - System.out.println(actual); +// System.out.println(actual); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -219,7 +219,7 @@ public class TestGraphNodes { PredictionContext a1 = createSingleton(x, 1); PredictionContext a2 = a(); PredictionContext r = PredictionContext.merge(a1, a2, fullCtx(), null); - System.out.println(toDOTString(r, fullCtx())); +// System.out.println(toDOTString(r, fullCtx())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -234,7 +234,7 @@ public class TestGraphNodes { @Test public void test_a_b() { PredictionContext r = PredictionContext.merge(a(), b(), rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -251,7 +251,7 @@ public class TestGraphNodes { PredictionContext a1 = createSingleton(x, 1); PredictionContext a2 = createSingleton(x, 1); PredictionContext r = PredictionContext.merge(a1, a2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -270,7 +270,7 @@ public class TestGraphNodes { PredictionContext a1 = createSingleton(x1, 1); PredictionContext a2 = createSingleton(x2, 1); PredictionContext r = PredictionContext.merge(a1, a2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -291,7 +291,7 @@ public class TestGraphNodes { PredictionContext a1 = createSingleton(b1, 1); PredictionContext a2 = createSingleton(b2, 1); PredictionContext r = PredictionContext.merge(a1, a2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -314,7 +314,7 @@ public class TestGraphNodes { PredictionContext a1 = createSingleton(b, 1); PredictionContext a2 = createSingleton(c, 1); PredictionContext r = PredictionContext.merge(a1, a2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -335,7 +335,7 @@ public class TestGraphNodes { PredictionContext a = createSingleton(x, 1); PredictionContext b = createSingleton(x, 2); PredictionContext r = PredictionContext.merge(a, b, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -355,7 +355,7 @@ public class TestGraphNodes { PredictionContext a = createSingleton(x1, 1); PredictionContext b = createSingleton(x2, 2); PredictionContext r = PredictionContext.merge(a, b, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -373,7 +373,7 @@ public class TestGraphNodes { PredictionContext a = createSingleton(x(), 1); PredictionContext b = createSingleton(y(), 2); PredictionContext r = PredictionContext.merge(a, b, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -394,7 +394,7 @@ public class TestGraphNodes { PredictionContext a = a(); PredictionContext b = createSingleton(x2, 2); PredictionContext r = PredictionContext.merge(a, b, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -413,7 +413,7 @@ public class TestGraphNodes { PredictionContext a = a(); PredictionContext b = createSingleton(x2, 2); PredictionContext r = PredictionContext.merge(a, b, fullCtx(), null); - System.out.println(toDOTString(r, fullCtx())); +// System.out.println(toDOTString(r, fullCtx())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -437,7 +437,7 @@ public class TestGraphNodes { PredictionContext a = createSingleton(e, 1); PredictionContext b = createSingleton(f, 2); PredictionContext r = PredictionContext.merge(a, b, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -461,7 +461,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(PredictionContext.EMPTY); ArrayPredictionContext A2 = array(PredictionContext.EMPTY); PredictionContext r = PredictionContext.merge(A1, A2, fullCtx(), null); - System.out.println(toDOTString(r, fullCtx())); +// System.out.println(toDOTString(r, fullCtx())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -477,7 +477,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a, b); ArrayPredictionContext A2 = array(c); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -496,7 +496,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a1); ArrayPredictionContext A2 = array(a2); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -514,7 +514,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a); ArrayPredictionContext A2 = array(b, c); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -534,7 +534,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a, c); ArrayPredictionContext A2 = array(b); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -551,7 +551,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a(), b()); ArrayPredictionContext A2 = array(a()); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -567,7 +567,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a(), b()); ArrayPredictionContext A2 = array(b()); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -585,7 +585,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a); ArrayPredictionContext A2 = array(b); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -607,7 +607,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a1); ArrayPredictionContext A2 = array(a2); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -627,7 +627,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a1, c()); ArrayPredictionContext A2 = array(a2, d()); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -651,7 +651,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a, b); ArrayPredictionContext A2 = array(c, d); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -681,7 +681,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a, b1); ArrayPredictionContext A2 = array(b2, d); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -708,7 +708,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a, b1); ArrayPredictionContext A2 = array(b2, d); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -736,7 +736,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a, b1); ArrayPredictionContext A2 = array(b2, d); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + @@ -761,7 +761,7 @@ public class TestGraphNodes { ArrayPredictionContext A1 = array(a, b); ArrayPredictionContext A2 = array(c, d); PredictionContext r = PredictionContext.merge(A1, A2, rootIsWildcard(), null); - System.out.println(toDOTString(r, rootIsWildcard())); +// System.out.println(toDOTString(r, rootIsWildcard())); String expecting = "digraph G {\n" + "rankdir=LR;\n" + diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestIntervalSet.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestIntervalSet.java index c06362ee9..a78455a0d 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestIntervalSet.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestIntervalSet.java @@ -33,19 +33,26 @@ package org.antlr.v4.test.tool; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.misc.IntervalSet; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -public class TestIntervalSet extends BaseTest { +public class TestIntervalSet extends BaseJavaTest { /** Public default constructor used by TestRig */ public TestIntervalSet() { } + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testSingleElement() throws Exception { IntervalSet s = IntervalSet.of(99); String expecting = "99"; diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestLeftRecursionToolIssues.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestLeftRecursionToolIssues.java index 713dab804..c36b0b361 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestLeftRecursionToolIssues.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestLeftRecursionToolIssues.java @@ -30,14 +30,21 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ErrorType; +import org.junit.Before; import org.junit.Test; /** */ -public class TestLeftRecursionToolIssues extends BaseTest { +public class TestLeftRecursionToolIssues extends BaseJavaTest { protected boolean debug = false; + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testCheckForNonLeftRecursiveRule() throws Exception { String grammar = "grammar T;\n" + diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestLexerActions.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestLexerActions.java index 1e8740ddd..f3add17d8 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestLexerActions.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestLexerActions.java @@ -1,11 +1,19 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; -public class TestLexerActions extends BaseTest { +public class TestLexerActions extends BaseJavaTest { + + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + // ----- ACTIONS -------------------------------------------------------- @Test public void testActionExecutedInDFA() throws Exception { diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestParseTreeMatcher.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestParseTreeMatcher.java index 8f79005c8..5acec7f15 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestParseTreeMatcher.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestParseTreeMatcher.java @@ -12,7 +12,8 @@ import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.pattern.ParseTreeMatch; import org.antlr.v4.runtime.tree.pattern.ParseTreePattern; import org.antlr.v4.runtime.tree.pattern.ParseTreePatternMatcher; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Test; import java.lang.reflect.Constructor; @@ -24,7 +25,13 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -public class TestParseTreeMatcher extends BaseTest { +public class TestParseTreeMatcher extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testChunking() throws Exception { ParseTreePatternMatcher m = new ParseTreePatternMatcher(null, null); assertEquals("[ID, ' = ', expr, ' ;']", m.split(" = ;").toString()); diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestParserExec.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestParserExec.java index 3066d4c6b..4913994e3 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestParserExec.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestParserExec.java @@ -30,7 +30,8 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -69,8 +70,12 @@ import static org.junit.Assert.assertTrue; * Nongreedy loops match as much input as possible while still allowing * the remaining input to match. */ -public class TestParserExec extends BaseTest { - +public class TestParserExec extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } /** * This is a regression test for antlr/antlr4#118. @@ -86,7 +91,8 @@ public class TestParserExec extends BaseTest { "ID : 'a'..'z'+ ;\n"+ "INT : '0'..'9'+ ;\n"+ "WS : (' '|'\\t'|'\\n')+ -> skip ;\n"; - String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", + String result = execParser("T.g4", grammar, "TParser", "TLexer", + null, null, "s", "abc 34", true); String expecting = "Decision 0:\n" + @@ -105,8 +111,8 @@ public class TestParserExec extends BaseTest { // TODO: port to test framework (can we simplify the Psl grammar?) @Test public void testFailedPredicateExceptionState() throws Exception { String grammar = load("Psl.g4", "UTF-8"); - String found = execParser("Psl.g4", grammar, "PslParser", "PslLexer", "floating_constant", " . 234", false); - assertEquals("", found); + String found = execParser("Psl.g4", grammar, "PslParser", "PslLexer", null, null, "floating_constant", " . 234", false); + assertEquals(null, found); assertEquals("line 1:6 rule floating_constant DEC:A floating-point constant cannot have internal white space\n", stderrDuringParse); } @@ -145,8 +151,9 @@ public class TestParserExec extends BaseTest { "ModeTagsLexer"); assertTrue(success); - String found = execParser("ModeTagsParser.g4", parserGrammar, "ModeTagsParser", "ModeTagsLexer", "file", "", false); - assertEquals("", found); + String found = execParser("ModeTagsParser.g4", parserGrammar, "ModeTagsParser", "ModeTagsLexer", + null, null, "file", "", false); + assertEquals(null, found); assertNull(stderrDuringParse); } @@ -173,7 +180,8 @@ public class TestParserExec extends BaseTest { "WS : [ \\t\\n\\r]+ -> skip ; // toss out all whitespace\n"; String input = "2 9 10 3 1 2 3"; - String found = execParser("Data.g4", grammar, "DataParser", "DataLexer", "file", input, false); + String found = execParser("Data.g4", grammar, "DataParser", "DataLexer", + null, null, "file", input, false); assertEquals("6\n", found); assertNull(stderrDuringParse); } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestParserInterpreter.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestParserInterpreter.java index 04abbccef..0857459fe 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestParserInterpreter.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestParserInterpreter.java @@ -35,15 +35,22 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.LexerInterpreter; import org.antlr.v4.runtime.ParserInterpreter; import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; -public class TestParserInterpreter extends BaseTest { +public class TestParserInterpreter extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testEmptyStartRule() throws Exception { LexerGrammar lg = new LexerGrammar( "lexer grammar L;\n" + @@ -356,7 +363,6 @@ public class TestParserInterpreter extends BaseTest { CommonTokenStream tokens = new CommonTokenStream(lexEngine); ParserInterpreter parser = g.createParserInterpreter(tokens); ParseTree t = parser.parse(g.rules.get(startRule).index); - System.out.println("parse tree: "+t.toStringTree(parser)); assertEquals(expectedParseTree, t.toStringTree(parser)); return t; } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestParserProfiler.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestParserProfiler.java index f1b01600e..ae1136bd0 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestParserProfiler.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestParserProfiler.java @@ -36,10 +36,11 @@ import org.antlr.v4.runtime.LexerInterpreter; import org.antlr.v4.runtime.ParserInterpreter; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.atn.DecisionInfo; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LexerGrammar; import org.antlr.v4.tool.Rule; +import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -48,12 +49,13 @@ import java.util.Arrays; import static org.junit.Assert.assertEquals; @SuppressWarnings("unused") -public class TestParserProfiler extends BaseTest { +public class TestParserProfiler extends BaseJavaTest { LexerGrammar lg; + @Before @Override - public void setUp() throws Exception { - super.setUp(); + public void testSetUp() throws Exception { + super.testSetUp(); lg = new LexerGrammar( "lexer grammar L;\n" + "WS : [ \\r\\t\\n]+ -> channel(HIDDEN) ;\n" + @@ -238,7 +240,7 @@ public class TestParserProfiler extends BaseTest { "PLUS : '+' ;\n" + "MULT : '*' ;\n"; - String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", + String found = execParser("T.g4", grammar, "TParser", "TLexer", null, null, "s", "xyz;abc;z.q", false, true); String expecting = "[{decision=0, contextSensitivities=0, errors=0, ambiguities=0, SLL_lookahead=6, SLL_ATNTransitions=4, " + diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java index 990cac617..2c730e7c8 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestPerformance.java @@ -63,9 +63,10 @@ import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeListener; import org.antlr.v4.runtime.tree.ParseTreeWalker; import org.antlr.v4.runtime.tree.TerminalNode; -import org.antlr.v4.test.runtime.java.BaseTest; -import org.antlr.v4.test.runtime.java.ErrorQueue; +import org.antlr.v4.test.runtime.ErrorQueue; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import java.io.File; @@ -107,7 +108,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @SuppressWarnings("unused") -public class TestPerformance extends BaseTest { +public class TestPerformance extends BaseJavaTest { /** * Parse all java files under this package within the JDK_SOURCE_ROOT * (environment variable or property defined on the Java command line). @@ -408,6 +409,12 @@ public class TestPerformance extends BaseTest { private final AtomicIntegerArray tokenCount = new AtomicIntegerArray(PASSES); + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test @org.junit.Ignore public void compileJdk() throws IOException, InterruptedException, ExecutionException { @@ -699,7 +706,7 @@ public class TestPerformance extends BaseTest { } @Override - protected void eraseTempDir() { + public void eraseTempDir() { if (DELETE_TEMP_FILES) { super.eraseTempDir(); } @@ -1954,7 +1961,6 @@ public class TestPerformance extends BaseTest { "\n" + "rule_%d_%d : EOF;\n"; - System.out.println("dir "+tmpdir); mkdir(tmpdir); long startTime = System.nanoTime(); diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestScopeParsing.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestScopeParsing.java index 3bcfa0682..1dc39467c 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestScopeParsing.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestScopeParsing.java @@ -31,13 +31,14 @@ package org.antlr.v4.test.tool; import org.antlr.v4.parse.ScopeParser; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; -public class TestScopeParsing extends BaseTest { +public class TestScopeParsing extends BaseJavaTest { String[] argPairs = { "", "{}", " ", "{}", @@ -56,6 +57,12 @@ public class TestScopeParsing extends BaseTest { "i,j, k", "{i=null i, j=null j, k=null k}", }; + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testArgs() throws Exception { for (int i = 0; i < argPairs.length; i+=2) { String input = argPairs[i]; diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java index 1c68ba30a..bb6cd9a1c 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestSymbolIssues.java @@ -30,15 +30,16 @@ package org.antlr.v4.test.tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ErrorType; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; /** */ -public class TestSymbolIssues extends BaseTest { +public class TestSymbolIssues extends BaseJavaTest { static String[] A = { // INPUT "grammar A;\n" + @@ -130,6 +131,12 @@ public class TestSymbolIssues extends BaseTest { "error(" + ErrorType.MODE_CONFLICTS_WITH_TOKEN.code + "): F.g4:3:0: mode M1 conflicts with token with same name\n" }; + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testA() { super.testErrors(A, false); } @Test public void testB() { super.testErrors(B, false); } @Test public void testD() { super.testErrors(D, false); } diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenPositionOptions.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenPositionOptions.java index 8a6881d49..6aff6c707 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenPositionOptions.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenPositionOptions.java @@ -33,9 +33,10 @@ import org.antlr.runtime.Token; import org.antlr.v4.misc.Utils; import org.antlr.v4.parse.ANTLRParser; import org.antlr.v4.runtime.misc.IntervalSet; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.ast.GrammarAST; +import org.junit.Before; import org.junit.Test; import java.util.ArrayList; @@ -43,7 +44,13 @@ import java.util.List; import static org.junit.Assert.assertEquals; -public class TestTokenPositionOptions extends BaseTest { +public class TestTokenPositionOptions extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testLeftRecursionRewrite() throws Exception { Grammar g = new Grammar( "grammar T;\n" + diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenStreamRewriter.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenStreamRewriter.java index e2d8061ca..fbc3713db 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenStreamRewriter.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenStreamRewriter.java @@ -34,20 +34,27 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.LexerInterpreter; import org.antlr.v4.runtime.TokenStreamRewriter; import org.antlr.v4.runtime.misc.Interval; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -public class TestTokenStreamRewriter extends BaseTest { +public class TestTokenStreamRewriter extends BaseJavaTest { /** Public default constructor used by TestRig */ public TestTokenStreamRewriter() { } + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testInsertBeforeIndex0() throws Exception { LexerGrammar g = new LexerGrammar( "lexer grammar T;\n"+ diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenTypeAssignment.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenTypeAssignment.java index 635f15c53..fe1756352 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenTypeAssignment.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestTokenTypeAssignment.java @@ -31,7 +31,7 @@ package org.antlr.v4.test.tool; import org.antlr.v4.runtime.Token; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.LexerGrammar; import org.junit.Test; @@ -45,7 +45,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public class TestTokenTypeAssignment extends BaseTest { +public class TestTokenTypeAssignment extends BaseJavaTest { @Test public void testParserSimpleTokens() throws Exception { diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java index c41143422..b407bc2a4 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestToolSyntaxErrors.java @@ -31,11 +31,12 @@ package org.antlr.v4.test.tool; import org.antlr.v4.Tool; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.ErrorType; +import org.junit.Before; import org.junit.Test; -public class TestToolSyntaxErrors extends BaseTest { +public class TestToolSyntaxErrors extends BaseJavaTest { static String[] A = { // INPUT "grammar A;\n" + @@ -74,6 +75,12 @@ public class TestToolSyntaxErrors extends BaseTest { "error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:15: syntax error: mismatched input ';' expecting COLON while matching a lexer rule\n", }; + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testA() { super.testErrors(A, true); } @Test public void testExtraColon() { diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestTopologicalSort.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestTopologicalSort.java index 38a2e603d..6764543b6 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestTopologicalSort.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestTopologicalSort.java @@ -30,7 +30,8 @@ package org.antlr.v4.test.tool; import org.antlr.v4.misc.Graph; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Test; import java.util.List; @@ -38,7 +39,13 @@ import java.util.List; import static org.junit.Assert.assertEquals; /** Test topo sort in GraphNode. */ -public class TestTopologicalSort extends BaseTest { +public class TestTopologicalSort extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testFairlyLargeGraph() throws Exception { Graph g = new Graph(); diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedCharStream.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedCharStream.java index 52a8a1b04..c43d9804a 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedCharStream.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedCharStream.java @@ -37,8 +37,9 @@ import org.antlr.v4.runtime.IntStream; import org.antlr.v4.runtime.LexerInterpreter; import org.antlr.v4.runtime.UnbufferedCharStream; import org.antlr.v4.runtime.misc.Interval; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import java.io.Reader; @@ -47,7 +48,13 @@ import java.io.StringReader; import static org.junit.Assert.assertEquals; @SuppressWarnings("unused") -public class TestUnbufferedCharStream extends BaseTest { +public class TestUnbufferedCharStream extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testNoChar() throws Exception { CharStream input = createStream(""); assertEquals(IntStream.EOF, input.LA(1)); diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedTokenStream.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedTokenStream.java index 9ab81b35a..adb136e1c 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedTokenStream.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestUnbufferedTokenStream.java @@ -37,8 +37,9 @@ import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.TokenSource; import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.UnbufferedTokenStream; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.antlr.v4.tool.LexerGrammar; +import org.junit.Before; import org.junit.Test; import java.io.StringReader; @@ -49,7 +50,13 @@ import java.util.List; import static org.junit.Assert.assertEquals; @SuppressWarnings("unused") -public class TestUnbufferedTokenStream extends BaseTest { +public class TestUnbufferedTokenStream extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testLookahead() throws Exception { LexerGrammar g = new LexerGrammar( "lexer grammar t;\n"+ diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestVocabulary.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestVocabulary.java index b786e003c..4470c2369 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestVocabulary.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestVocabulary.java @@ -32,15 +32,21 @@ package org.antlr.v4.test.tool; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.Vocabulary; import org.antlr.v4.runtime.VocabularyImpl; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; /** * * @author Sam Harwell */ -public class TestVocabulary extends BaseTest { +public class TestVocabulary extends BaseJavaTest { + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } @Test public void testEmptyVocabulary() { diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestXPath.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestXPath.java index 7a374ee18..2cb848dff 100644 --- a/tool-testsuite/test/org/antlr/v4/test/tool/TestXPath.java +++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestXPath.java @@ -7,7 +7,8 @@ import org.antlr.v4.runtime.misc.Pair; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import org.antlr.v4.runtime.tree.xpath.XPath; -import org.antlr.v4.test.runtime.java.BaseTest; +import org.antlr.v4.test.runtime.java.BaseJavaTest; +import org.junit.Before; import org.junit.Test; import java.util.ArrayList; @@ -17,7 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -public class TestXPath extends BaseTest { +public class TestXPath extends BaseJavaTest { public static final String grammar = "grammar Expr;\n" + "prog: func+ ;\n" + @@ -52,6 +53,12 @@ public class TestXPath extends BaseTest { "def f(x,y) { x = 3+4; y; ; }\n" + "def g(x) { return 1+2*x; }\n"; + @Before + @Override + public void testSetUp() throws Exception { + super.testSetUp(); + } + @Test public void testValidPaths() throws Exception { boolean ok = rawGenerateAndBuildRecognizer("Expr.g4", grammar, "ExprParser", diff --git a/tool/pom.xml b/tool/pom.xml index f06ffc767..333b2da9f 100644 --- a/tool/pom.xml +++ b/tool/pom.xml @@ -54,7 +54,6 @@ src - test test diff --git a/tool/src/org/antlr/v4/tool/Grammar.java b/tool/src/org/antlr/v4/tool/Grammar.java index 89e2a2627..4aec8ad05 100644 --- a/tool/src/org/antlr/v4/tool/Grammar.java +++ b/tool/src/org/antlr/v4/tool/Grammar.java @@ -338,6 +338,15 @@ public class Grammar implements AttributeResolver { this.text = grammarText; this.fileName = fileName; this.tool = new Tool(); + ANTLRToolListener hush = new ANTLRToolListener() { + @Override + public void info(String msg) { } + @Override + public void error(ANTLRMessage msg) { } + @Override + public void warning(ANTLRMessage msg) { } + }; + tool.addListener(hush); // we want to hush errors/warnings this.tool.addListener(listener); org.antlr.runtime.ANTLRStringStream in = new org.antlr.runtime.ANTLRStringStream(grammarText); in.name = fileName;